aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--modules/complete/pom.xml5
-rw-r--r--modules/java-utils/pom.xml16
-rw-r--r--modules/java-utils/src/main/clojure/clojure/contrib/java_utils.clj108
-rw-r--r--modules/standalone/pom.xml5
-rw-r--r--pom.xml1
5 files changed, 135 insertions, 0 deletions
diff --git a/modules/complete/pom.xml b/modules/complete/pom.xml
index ca9b97c0..478cdfef 100644
--- a/modules/complete/pom.xml
+++ b/modules/complete/pom.xml
@@ -132,6 +132,11 @@
</dependency>
<dependency>
<groupId>org.clojure.contrib</groupId>
+ <artifactId>java-utils</artifactId>
+ <version>1.3.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.clojure.contrib</groupId>
<artifactId>jmx</artifactId>
<version>1.3.0-SNAPSHOT</version>
</dependency>
diff --git a/modules/java-utils/pom.xml b/modules/java-utils/pom.xml
new file mode 100644
index 00000000..7c276109
--- /dev/null
+++ b/modules/java-utils/pom.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http//www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
+ http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.clojure.contrib</groupId>
+ <artifactId>parent</artifactId>
+ <version>1.3.0-SNAPSHOT</version>
+ <relativePath>../parent</relativePath>
+ </parent>
+ <artifactId>java-utils</artifactId>
+ <dependencies>
+ </dependencies>
+</project> \ No newline at end of file
diff --git a/modules/java-utils/src/main/clojure/clojure/contrib/java_utils.clj b/modules/java-utils/src/main/clojure/clojure/contrib/java_utils.clj
new file mode 100644
index 00000000..397a4a7b
--- /dev/null
+++ b/modules/java-utils/src/main/clojure/clojure/contrib/java_utils.clj
@@ -0,0 +1,108 @@
+; Copyright (c) Stuart Halloway & Contributors, April 2009. All rights reserved.
+; The use and distribution terms for this software are covered by the
+; Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php)
+; which can be found in the file epl-v10.html at the root of this distribution.
+; By using this software in any fashion, you are agreeing to be bound by
+; the terms of this license.
+; You must not remove this notice, or any other, from this software.
+
+;;
+;; CHANGELOG
+;;
+;; Functions deprecated in 1.2, have been removed.
+;; Some have migrated to clojure.java.io and others to c.c.reflections.
+
+(ns
+ ^{:author "Stuart Halloway, Stephen C. Gilardi, Shawn Hoover, Perry Trolard, Stuart Sierra",
+ :doc "A set of utilties for dealing with Java stuff like files and properties.
+
+ Design goals:
+
+ (1) Ease-of-use. These APIs should be convenient. Performance is secondary.
+
+ (2) Duck typing. I hate having to think about the difference between
+ a string that names a file, and a File. Ditto for a ton of other
+ wrapper classes in the Java world (URL, InternetAddress). With these
+ APIs you should be able to think about domain equivalence, not type
+ equivalence.
+
+ (3) No bossiness. I am not marking any of these functions as private
+ the docstrings will tell you the intended usage but do what works for you.
+
+ Feedback welcome!
+
+ If something in this module violates the principle of least surprise, please
+ let me (Stu) and the Clojure community know via the mailing list.
+ Contributors:
+
+ Stuart Halloway
+ Stephen C. Gilardi
+ Shawn Hoover
+ Perry Trolard
+ Stuart Sierra
+"}
+ clojure.contrib.java-utils
+ (:import [java.io File FileOutputStream]
+ [java.util Properties]
+ [java.net URI URL]))
+
+(defn get-system-property
+ "Get a system property."
+ ([stringable]
+ (System/getProperty (as-str stringable)))
+ ([stringable default]
+ (System/getProperty (as-str stringable) default)))
+
+(defn set-system-properties
+ "Set some system properties. Nil clears a property."
+ [settings]
+ (doseq [[name val] settings]
+ (if val
+ (System/setProperty (as-str name) (as-str val))
+ (System/clearProperty (as-str name)))))
+
+(defmacro with-system-properties
+ "setting => property-name value
+
+ Sets the system properties to the supplied values, executes the body, and
+ sets the properties back to their original values. Values of nil are
+ translated to a clearing of the property."
+ [settings & body]
+ `(let [settings# ~settings
+ current# (reduce (fn [coll# k#]
+ (assoc coll# k# (get-system-property k#)))
+ {}
+ (keys settings#))]
+ (set-system-properties settings#)
+ (try
+ ~@body
+ (finally
+ (set-system-properties current#)))))
+
+
+; Not there is no corresponding props->map. Just destructure!
+(defn ^Properties as-properties
+ "Convert any seq of pairs to a java.utils.Properties instance.
+ Uses as-str to convert both keys and values into strings."
+ {:tag Properties}
+ [m]
+ (let [p (Properties.)]
+ (doseq [[k v] m]
+ (.setProperty p (as-str k) (as-str v)))
+ p))
+
+(defn read-properties
+ "Read properties from file-able."
+ [file-able]
+ (with-open [f (java.io.FileInputStream. (file file-able))]
+ (doto (Properties.)
+ (.load f))))
+
+(defn write-properties
+ "Write properties to file-able."
+ {:tag Properties}
+ ([m file-able] (write-properties m file-able nil))
+ ([m file-able comments]
+ (with-open [^FileOutputStream f (FileOutputStream. (file file-able))]
+ (doto (as-properties m)
+ (.store f ^String comments)))))
diff --git a/modules/standalone/pom.xml b/modules/standalone/pom.xml
index bfddc333..c31ed618 100644
--- a/modules/standalone/pom.xml
+++ b/modules/standalone/pom.xml
@@ -138,6 +138,11 @@
</artifactItem>
<artifactItem>
<groupId>org.clojure.contrib</groupId>
+ <artifactId>java-utils</artifactId>
+ <version>1.3.0-SNAPSHOT</version>
+ </artifactItem>
+ <artifactItem>
+ <groupId>org.clojure.contrib</groupId>
<artifactId>jmx</artifactId>
<version>1.3.0-SNAPSHOT</version>
</artifactItem>
diff --git a/pom.xml b/pom.xml
index 4ca26545..2dbbb374 100644
--- a/pom.xml
+++ b/pom.xml
@@ -46,6 +46,7 @@
<module>modules/greatest-least</module>
<module>modules/import-static</module>
<module>modules/jar</module>
+ <module>modules/java-utils</module>
<module>modules/jmx</module>
<module>modules/json</module>
<module>modules/lazy-seqs</module>