OSDN Git Service

add package which resolving home directory of stigmata
authortama3 <tama3@acee48c3-7b26-0410-bdac-b3d0e5314bbc>
Fri, 9 Jan 2009 07:19:48 +0000 (07:19 +0000)
committertama3 <tama3@acee48c3-7b26-0410-bdac-b3d0e5314bbc>
Fri, 9 Jan 2009 07:19:48 +0000 (07:19 +0000)
git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/stigmata/trunk@365 acee48c3-7b26-0410-bdac-b3d0e5314bbc

src/main/java/jp/sourceforge/stigmata/BirthmarkEnvironment.java
src/main/java/jp/sourceforge/stigmata/resolvers/DefaultStigmataHomeResolver.java [new file with mode: 0644]
src/main/java/jp/sourceforge/stigmata/resolvers/MacOSXStigmataHomeResolver.java [new file with mode: 0644]
src/main/java/jp/sourceforge/stigmata/resolvers/PropertyStigmataHomeResolver.java [new file with mode: 0644]
src/main/java/jp/sourceforge/stigmata/resolvers/StigmataHomeManager.java [new file with mode: 0644]
src/main/java/jp/sourceforge/stigmata/resolvers/StigmataHomeResolver.java [new file with mode: 0644]
src/main/java/jp/sourceforge/stigmata/resolvers/WindowsStigmataHomeResolver.java [new file with mode: 0644]

index 41a81c4..5af3e78 100644 (file)
@@ -6,7 +6,6 @@ package jp.sourceforge.stigmata;
 
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
-import java.io.File;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
@@ -20,6 +19,7 @@ import javax.imageio.spi.ServiceRegistry;
 
 import jp.sourceforge.stigmata.digger.ClasspathContext;
 import jp.sourceforge.stigmata.filter.ComparisonPairFilterManager;
+import jp.sourceforge.stigmata.resolvers.StigmataHomeManager;
 import jp.sourceforge.stigmata.result.history.ExtractedBirthmarkServiceManager;
 import jp.sourceforge.stigmata.spi.BirthmarkSpi;
 import jp.sourceforge.stigmata.utils.WellknownClassManager;
@@ -39,7 +39,7 @@ public class BirthmarkEnvironment{
     /**
      * home directory path.
      */
-    private static String HOME_DIRECTORY_PATH;
+    private static StigmataHomeManager stigmataHome;
 
     /**
      * parent of this environment.
@@ -116,30 +116,7 @@ public class BirthmarkEnvironment{
     }
 
     public static synchronized final String getStigmataHome(){
-        if(HOME_DIRECTORY_PATH == null){
-            String stigmataHome = System.getProperty("stigmata.home");
-            if(stigmataHome == null){
-                stigmataHome = System.getenv("STIGMATA_HOME");
-            }
-            if(stigmataHome == null){
-                String parent = System.getProperty("user.home");
-                if(parent == null){
-                    parent = System.getenv("HOME");
-                }
-                if(parent == null){
-                    parent = ".";
-                }
-                // for windows
-                if(parent.startsWith("C:\\Documents and Settings\\")){
-                    stigmataHome = parent + File.separator + "Application Data" + File.separator + "stigmata";
-                }
-                else{
-                    stigmataHome = parent + File.separator + ".stigmata";
-                }
-            }
-            HOME_DIRECTORY_PATH = stigmataHome;
-        }
-        return HOME_DIRECTORY_PATH;
+        return stigmataHome.getStigmataHome();
     }
 
     static void resetSettings(){
diff --git a/src/main/java/jp/sourceforge/stigmata/resolvers/DefaultStigmataHomeResolver.java b/src/main/java/jp/sourceforge/stigmata/resolvers/DefaultStigmataHomeResolver.java
new file mode 100644 (file)
index 0000000..d32ee1b
--- /dev/null
@@ -0,0 +1,25 @@
+package jp.sourceforge.stigmata.resolvers;
+
+import java.io.File;
+import java.io.IOException;
+
+class DefaultStigmataHomeResolver implements StigmataHomeResolver{
+    public String getStigmataHome() throws IOException{
+        return getUserHome() + File.separator + ".stigmata";
+    }
+
+    public String getUserHome(){
+        String userHome = System.getProperty("user.home");
+        if(userHome == null){
+            userHome = System.getenv("HOME");
+        }
+        if(userHome == null){
+            userHome = ".";
+        }
+        return userHome;
+    }
+
+    public boolean isTarget(String osName){
+        return true;
+    }
+}
diff --git a/src/main/java/jp/sourceforge/stigmata/resolvers/MacOSXStigmataHomeResolver.java b/src/main/java/jp/sourceforge/stigmata/resolvers/MacOSXStigmataHomeResolver.java
new file mode 100644 (file)
index 0000000..aed93e1
--- /dev/null
@@ -0,0 +1,22 @@
+package jp.sourceforge.stigmata.resolvers;
+
+import java.io.File;
+import java.io.IOException;
+
+class MacOSXStigmataHomeResolver extends DefaultStigmataHomeResolver{
+    @Override
+    public String getStigmataHome() throws IOException{
+        String home = getUserHome();
+
+        if(home.startsWith("/Users/")){
+            home = home + File.separator + "Library/Application Support" + File.separator + "Stigmata";
+        }
+
+        return home;
+    }
+
+    @Override
+    public boolean isTarget(String osName){
+        return osName != null && osName.toLowerCase().contains("mac");
+    }
+}
diff --git a/src/main/java/jp/sourceforge/stigmata/resolvers/PropertyStigmataHomeResolver.java b/src/main/java/jp/sourceforge/stigmata/resolvers/PropertyStigmataHomeResolver.java
new file mode 100644 (file)
index 0000000..4b25899
--- /dev/null
@@ -0,0 +1,17 @@
+package jp.sourceforge.stigmata.resolvers;
+
+import java.io.IOException;
+
+class PropertyStigmataHomeResolver implements StigmataHomeResolver{
+    public String getStigmataHome() throws IOException{
+        String stigmataHome = System.getProperty("stigmata.home");
+        if(stigmataHome == null){
+            stigmataHome = System.getenv("STIGMATA_HOME");
+        }
+        return stigmataHome;
+    }
+
+    public boolean isTarget(String osName){
+        return true;
+    }
+}
diff --git a/src/main/java/jp/sourceforge/stigmata/resolvers/StigmataHomeManager.java b/src/main/java/jp/sourceforge/stigmata/resolvers/StigmataHomeManager.java
new file mode 100644 (file)
index 0000000..b1efed9
--- /dev/null
@@ -0,0 +1,37 @@
+package jp.sourceforge.stigmata.resolvers;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+public class StigmataHomeManager{
+    private String home;
+    private List<StigmataHomeResolver> resolvers = new ArrayList<StigmataHomeResolver>();
+
+    public StigmataHomeManager(){
+        resolvers.add(new DefaultStigmataHomeResolver());
+        resolvers.add(new MacOSXStigmataHomeResolver());
+        resolvers.add(new WindowsStigmataHomeResolver());
+        resolvers.add(new PropertyStigmataHomeResolver());
+    }
+
+    public String getStigmataHome(){
+        if(home == null){
+            String home = null;
+            String osName = System.getProperty("os.name");
+            for(StigmataHomeResolver resolver: resolvers){
+                if(resolver.isTarget(osName)){
+                    try{
+                        home = resolver.getStigmataHome();
+                    } catch(IOException e){
+                    }
+                }
+                if(home != null){
+                    this.home = home;
+                    break;
+                }
+            }
+        }
+        return home;
+    }
+}
diff --git a/src/main/java/jp/sourceforge/stigmata/resolvers/StigmataHomeResolver.java b/src/main/java/jp/sourceforge/stigmata/resolvers/StigmataHomeResolver.java
new file mode 100644 (file)
index 0000000..ba78bc8
--- /dev/null
@@ -0,0 +1,9 @@
+package jp.sourceforge.stigmata.resolvers;
+
+import java.io.IOException;
+
+interface StigmataHomeResolver{
+    public boolean isTarget(String osName);
+
+    public String getStigmataHome() throws IOException;
+}
diff --git a/src/main/java/jp/sourceforge/stigmata/resolvers/WindowsStigmataHomeResolver.java b/src/main/java/jp/sourceforge/stigmata/resolvers/WindowsStigmataHomeResolver.java
new file mode 100644 (file)
index 0000000..3105f5f
--- /dev/null
@@ -0,0 +1,21 @@
+package jp.sourceforge.stigmata.resolvers;
+
+import java.io.File;
+import java.io.IOException;
+
+class WindowsStigmataHomeResolver extends DefaultStigmataHomeResolver{
+    @Override
+    public String getStigmataHome() throws IOException{
+        String home = getUserHome();
+
+        if(home.startsWith("C:\\Documents and Settings\\")){
+            home = home + File.separator + "Application Data" + File.separator + "Stigmata";
+        }
+        return home;
+    }
+
+    @Override
+    public boolean isTarget(String osName){
+        return osName != null && osName.toLowerCase().contains("windows");
+    }
+}