Author: jm
Date: 2012-04-02 09:43:17 -0700 (Mon, 02 Apr 2012)
New Revision: 28711

Modified:
   
core3/api/trunk/application-api/src/main/java/org/cytoscape/application/CyApplicationConfiguration.java
   
core3/impl/trunk/application-impl/src/main/java/org/cytoscape/application/internal/CyApplicationConfigurationImpl.java
Log:
Fixes #664: Added API for fetching the configuration directory for an app

Modified: 
core3/api/trunk/application-api/src/main/java/org/cytoscape/application/CyApplicationConfiguration.java
===================================================================
--- 
core3/api/trunk/application-api/src/main/java/org/cytoscape/application/CyApplicationConfiguration.java
     2012-03-30 23:38:44 UTC (rev 28710)
+++ 
core3/api/trunk/application-api/src/main/java/org/cytoscape/application/CyApplicationConfiguration.java
     2012-04-02 16:43:17 UTC (rev 28711)
@@ -8,9 +8,6 @@
  */
 public interface CyApplicationConfiguration {
        
-       /** Default configuration directory used for all Cytoscape 
configuration files */
-       public static final String DEFAULT_CONFIG_DIR = ".cytoscape";
-
        /**
         * Returns absolute path to .cytoscape location.
         * By default, this is user's home directory.
@@ -21,4 +18,13 @@
         */
        File getConfigurationDirectoryLocation();
 
+       /**
+        * Returns the absolute path to the configuration directory of a
+        * particular app.  This path might not physically exist and may
+        * need to be created by the caller.
+        * @param appClass Any class defined by the app's bundle
+        * @return the absolute path to the configuration directory of a
+        *         particular app.
+        */
+       File getAppConfigurationDirectoryLocation(Class<?> appClass);
 }

Modified: 
core3/impl/trunk/application-impl/src/main/java/org/cytoscape/application/internal/CyApplicationConfigurationImpl.java
===================================================================
--- 
core3/impl/trunk/application-impl/src/main/java/org/cytoscape/application/internal/CyApplicationConfigurationImpl.java
      2012-03-30 23:38:44 UTC (rev 28710)
+++ 
core3/impl/trunk/application-impl/src/main/java/org/cytoscape/application/internal/CyApplicationConfigurationImpl.java
      2012-04-02 16:43:17 UTC (rev 28711)
@@ -1,17 +1,27 @@
 package org.cytoscape.application.internal;
 
 import java.io.File;
+import java.util.Dictionary;
 
 import org.cytoscape.application.CyApplicationConfiguration;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.FrameworkUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public class CyApplicationConfigurationImpl implements 
CyApplicationConfiguration {
        
+       /** Default configuration directory used for all Cytoscape 
configuration files */
+       public static final String DEFAULT_CONFIG_DIR = ".cytoscape";
+
        private static final Logger logger = 
LoggerFactory.getLogger(CyApplicationConfigurationImpl.class);
        
        private static final String DEF_USER_DIR = 
System.getProperty("user.home");
+
+       private static final String APP_CONFIGURATION_DIR = "app-data";
        
+       private static final String BUNDLE_SYMBOLIC_NAME = 
"Bundle-SymbolicName";
+
        private final File configFileLocation;
        
        public CyApplicationConfigurationImpl() {
@@ -31,4 +41,26 @@
                return configFileLocation;      
        }
 
+       @Override
+       public File getAppConfigurationDirectoryLocation(Class<?> appClass) {
+               File configurationDirectory = 
getConfigurationDirectoryLocation();
+               Bundle bundle = FrameworkUtil.getBundle(appClass);
+               Dictionary<String, String> headers = bundle.getHeaders();
+               String basePath = headers.get(BUNDLE_SYMBOLIC_NAME);
+               String path = join(File.separator, 
configurationDirectory.getPath(), APP_CONFIGURATION_DIR, basePath);
+               return new File(path);
+       }
+       
+       private static String join(String separator, String... items) {
+               StringBuilder builder = new StringBuilder();
+               boolean first = true;
+               for (String item : items) {
+                       if (!first) {
+                               builder.append(separator);
+                       }
+                       builder.append(item);
+                       first = false;
+               }
+               return builder.toString();
+       }
 }

-- 
You received this message because you are subscribed to the Google Groups 
"cytoscape-cvs" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/cytoscape-cvs?hl=en.

Reply via email to