Author: fmeschbe
Date: Wed Mar  2 16:51:14 2011
New Revision: 1076290

URL: http://svn.apache.org/viewvc?rev=1076290&view=rev
Log:
SLING-2013 Support relative home property. To be resolved against sling.home if 
present or against current user directory if sling.home is not set. Also 
support default assumption (repository.xml is configuration inside home 
directory) if config property is missing or empty.

Modified:
    
sling/trunk/bundles/jcr/jackrabbit-server/src/main/java/org/apache/sling/jcr/jackrabbit/server/impl/SlingServerRepository.java

Modified: 
sling/trunk/bundles/jcr/jackrabbit-server/src/main/java/org/apache/sling/jcr/jackrabbit/server/impl/SlingServerRepository.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/jackrabbit-server/src/main/java/org/apache/sling/jcr/jackrabbit/server/impl/SlingServerRepository.java?rev=1076290&r1=1076289&r2=1076290&view=diff
==============================================================================
--- 
sling/trunk/bundles/jcr/jackrabbit-server/src/main/java/org/apache/sling/jcr/jackrabbit/server/impl/SlingServerRepository.java
 (original)
+++ 
sling/trunk/bundles/jcr/jackrabbit-server/src/main/java/org/apache/sling/jcr/jackrabbit/server/impl/SlingServerRepository.java
 Wed Mar  2 16:51:14 2011
@@ -38,6 +38,7 @@ import org.apache.sling.jcr.base.Abstrac
 import 
org.apache.sling.jcr.jackrabbit.server.impl.security.AdministrativeCredentials;
 import org.apache.sling.jcr.jackrabbit.server.impl.security.AnonCredentials;
 import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
 import org.osgi.service.log.LogService;
 
 /**
@@ -98,6 +99,19 @@ public class SlingServerRepository exten
         String configURLObj = (String) environment.get(REPOSITORY_CONFIG_URL);
         String home = (String) environment.get(REPOSITORY_HOME_DIR);
 
+        // ensure absolute home (path)
+        File homeFile = new File(home);
+        if (!homeFile.isAbsolute()) {
+            BundleContext context = getComponentContext().getBundleContext();
+            String slingHomePath = context.getProperty("sling.home");
+            if (slingHomePath != null) {
+                homeFile = new File(slingHomePath, home);
+            } else {
+                homeFile = homeFile.getAbsoluteFile();
+            }
+            home = homeFile.getAbsolutePath();
+        }
+
         // somewhat dirty hack to have the derby.log file in a sensible
         // location, but don't overwrite anything already set
         if (System.getProperty("derby.stream.error.file") == null) {
@@ -108,36 +122,41 @@ public class SlingServerRepository exten
         InputStream ins = null;
         try {
 
-            // check whether the URL is a file path
-            File configFile = new File(configURLObj);
-            if (configFile.canRead()) {
+            RepositoryConfig crc;
+            if (configURLObj != null && configURLObj.length() > 0) {
+                // check whether the URL is a file path
+                File configFile = new File(configURLObj);
+                if (configFile.canRead()) {
 
-                ins = new FileInputStream(configFile);
-                log(LogService.LOG_INFO, "Using configuration file " + 
configFile.getAbsolutePath());
+                    ins = new FileInputStream(configFile);
+                    log(LogService.LOG_INFO, "Using configuration file " + 
configFile.getAbsolutePath());
 
-            } else {
+                } else {
 
-                try {
+                    try {
 
-                    URL configURL = new URL(configURLObj);
-                    ins = configURL.openStream();
-                    log(LogService.LOG_INFO, "Using configuration URL " + 
configURL);
-
-                } catch (MalformedURLException mue) {
-
-                    log(LogService.LOG_INFO, "Configuration File "
-                        + configFile.getAbsolutePath()
-                        + " has been lost, trying to recreate");
+                        URL configURL = new URL(configURLObj);
+                        ins = configURL.openStream();
+                        log(LogService.LOG_INFO, "Using configuration URL " + 
configURL);
 
-                    final Bundle bundle = 
getComponentContext().getBundleContext().getBundle();
-                    SlingServerRepository.copyFile(bundle, "repository.xml", 
configFile);
+                    } catch (MalformedURLException mue) {
 
-                    ins = new FileInputStream(configFile);
-                    log(LogService.LOG_INFO, "Using configuration file " + 
configFile.getAbsolutePath());
+                        log(LogService.LOG_INFO, "Configuration File "
+                            + configFile.getAbsolutePath()
+                            + " has been lost, trying to recreate");
+
+                        final Bundle bundle = 
getComponentContext().getBundleContext().getBundle();
+                        SlingServerRepository.copyFile(bundle, 
"repository.xml", configFile);
+
+                        ins = new FileInputStream(configFile);
+                        log(LogService.LOG_INFO, "Using configuration file " + 
configFile.getAbsolutePath());
+                    }
                 }
+                crc = RepositoryConfig.create(ins, home);
+            } else {
+                crc = RepositoryConfig.create(homeFile);
             }
 
-            RepositoryConfig crc = RepositoryConfig.create(ins, home);
             return RepositoryImpl.create(crc);
 
         } catch (IOException ioe) {


Reply via email to