OSDN Git Service

プラットフォームごとのStigmataのホームディレクトリの場所を返す一連のクラスをリファクタリングした.
authorHaruaki Tamada <tamada@cc.kyoto-su.ac.jp>
Tue, 5 Apr 2011 05:50:01 +0000 (14:50 +0900)
committerHaruaki Tamada <tamada@cc.kyoto-su.ac.jp>
Tue, 5 Apr 2011 05:50:01 +0000 (14:50 +0900)
具体的には,不要なクラスを削除し,クラスの絶対参照を取りやめた.
各プラットフォームごとの実装をSPIの実装クラスとして用意するようにした.

src/main/java/jp/sourceforge/stigmata/resolvers/DefaultStigmataHomeResolver.java [deleted file]
src/main/java/jp/sourceforge/stigmata/resolvers/MacOSXStigmataHomeResolver.java
src/main/java/jp/sourceforge/stigmata/resolvers/PropertyStigmataHomeResolver.java [deleted file]
src/main/java/jp/sourceforge/stigmata/resolvers/StigmataHomeManager.java
src/main/java/jp/sourceforge/stigmata/resolvers/StigmataHomeResolver.java
src/main/java/jp/sourceforge/stigmata/resolvers/WindowsStigmataHomeResolver.java
src/main/resources/META-INF/services/jp.sourceforge.stigmata.resolvers.StigmataHomeResolver [new file with mode: 0644]

diff --git a/src/main/java/jp/sourceforge/stigmata/resolvers/DefaultStigmataHomeResolver.java b/src/main/java/jp/sourceforge/stigmata/resolvers/DefaultStigmataHomeResolver.java
deleted file mode 100644 (file)
index 37bf02f..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-package jp.sourceforge.stigmata.resolvers;
-
-import java.io.File;
-import java.io.IOException;
-
-class DefaultStigmataHomeResolver implements StigmataHomeResolver{
-    @Override
-    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;
-    }
-
-    @Override
-    public boolean isTarget(String osName){
-        return true;
-    }
-}
index aed93e1..e31b442 100644 (file)
@@ -1,12 +1,11 @@
 package jp.sourceforge.stigmata.resolvers;
 
 import java.io.File;
-import java.io.IOException;
 
-class MacOSXStigmataHomeResolver extends DefaultStigmataHomeResolver{
+public class MacOSXStigmataHomeResolver implements StigmataHomeResolver{
     @Override
-    public String getStigmataHome() throws IOException{
-        String home = getUserHome();
+    public String getStigmataHome(){
+        String home = StigmataHomeManager.getUserHome();
 
         if(home.startsWith("/Users/")){
             home = home + File.separator + "Library/Application Support" + File.separator + "Stigmata";
diff --git a/src/main/java/jp/sourceforge/stigmata/resolvers/PropertyStigmataHomeResolver.java b/src/main/java/jp/sourceforge/stigmata/resolvers/PropertyStigmataHomeResolver.java
deleted file mode 100644 (file)
index cf53d42..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-package jp.sourceforge.stigmata.resolvers;
-
-import java.io.IOException;
-
-class PropertyStigmataHomeResolver implements StigmataHomeResolver{
-    @Override
-    public String getStigmataHome() throws IOException{
-        String stigmataHome = System.getProperty("stigmata.home");
-        if(stigmataHome == null){
-            stigmataHome = System.getenv("STIGMATA_HOME");
-        }
-        return stigmataHome;
-    }
-
-    @Override
-    public boolean isTarget(String osName){
-        return true;
-    }
-}
index af995c3..7c85b82 100644 (file)
@@ -1,46 +1,55 @@
 package jp.sourceforge.stigmata.resolvers;
 
-/*
- * $Id$
- */
+import java.io.File;
+import java.util.ServiceLoader;
 
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * 
- * @author Haruaki Tamada
- * @version $Revision$
- */
-public class StigmataHomeManager{
+public class StigmataHomeManager implements StigmataHomeResolver{
     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());
+    @Override
+    public String getStigmataHome(){
+        if(home == null){
+            home = resolveHome();
+        }
+        return home;
     }
 
-    public String getStigmataHome(){
+    private String resolveHome(){
+        ServiceLoader<StigmataHomeResolver> loader = ServiceLoader.load(StigmataHomeResolver.class);
+        String home = null;
+        String name = System.getProperty("os.name");
+
+        for(StigmataHomeResolver resolver: loader){
+            if(resolver.isTarget(name)){
+                home = resolver.getStigmataHome();
+                break;
+            }
+        }
         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;
-                }
+            home = System.getProperty("stigmata.home");
+            if(home == null){
+                home = System.getenv("STIGMATA_HOME");
+            }
+            if(home == null){
+                home = getUserHome() + File.separator + ".stigmata";
             }
         }
         return home;
     }
+
+    static final String getUserHome(){
+        String userHome = System.getProperty("user.home");
+        if(userHome == null){
+            userHome = System.getenv("HOME");
+        }
+        if(userHome == null){
+            userHome = ".";
+        }
+        return userHome;
+    }
+
+    @Override
+    public boolean isTarget(String osName){
+        return true;
+    }
 }
index ba78bc8..20f7ee7 100644 (file)
@@ -1,9 +1,8 @@
 package jp.sourceforge.stigmata.resolvers;
 
-import java.io.IOException;
 
 interface StigmataHomeResolver{
     public boolean isTarget(String osName);
 
-    public String getStigmataHome() throws IOException;
+    public String getStigmataHome();
 }
index 3105f5f..ffba0df 100644 (file)
@@ -1,16 +1,18 @@
 package jp.sourceforge.stigmata.resolvers;
 
 import java.io.File;
-import java.io.IOException;
 
-class WindowsStigmataHomeResolver extends DefaultStigmataHomeResolver{
+public class WindowsStigmataHomeResolver implements StigmataHomeResolver{
     @Override
-    public String getStigmataHome() throws IOException{
-        String home = getUserHome();
+    public String getStigmataHome(){
+        String home = StigmataHomeManager.getUserHome();
 
         if(home.startsWith("C:\\Documents and Settings\\")){
             home = home + File.separator + "Application Data" + File.separator + "Stigmata";
         }
+        else if(home.startsWith("C:\\Users\\")){ // for windows 7
+            home = home + File.separator + "AppData" + File.separator + "Roaming" + File.separator + "Stigmata";
+        }
         return home;
     }
 
diff --git a/src/main/resources/META-INF/services/jp.sourceforge.stigmata.resolvers.StigmataHomeResolver b/src/main/resources/META-INF/services/jp.sourceforge.stigmata.resolvers.StigmataHomeResolver
new file mode 100644 (file)
index 0000000..ff137a8
--- /dev/null
@@ -0,0 +1,2 @@
+jp.sourceforge.stigmata.resolvers.MacOSXStigmataHomeResolver
+jp.sourceforge.stigmata.resolvers.WindowsStigmataHomeResolver