import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
-import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
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;
/**
* home directory path.
*/
- private static String HOME_DIRECTORY_PATH;
+ private static StigmataHomeManager stigmataHome;
/**
* parent of this environment.
}
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(){
--- /dev/null
+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;
+ }
+}
--- /dev/null
+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");
+ }
+}
--- /dev/null
+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;
+ }
+}
--- /dev/null
+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;
+ }
+}
--- /dev/null
+package jp.sourceforge.stigmata.resolvers;
+
+import java.io.IOException;
+
+interface StigmataHomeResolver{
+ public boolean isTarget(String osName);
+
+ public String getStigmataHome() throws IOException;
+}
--- /dev/null
+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");
+ }
+}