Commits

Sebastian Sdorra  committed c0c138a

improve base directory handling

  • Participants
  • Parent commits 51b1ab7

Comments (0)

Files changed (5)

File scm-plugin-backend/src/main/java/sonia/scm/plugin/BaseDirectory.java

+/**
+ * Copyright (c) 2010, Sebastian Sdorra All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer. 2. Redistributions in
+ * binary form must reproduce the above copyright notice, this list of
+ * conditions and the following disclaimer in the documentation and/or other
+ * materials provided with the distribution. 3. Neither the name of SCM-Manager;
+ * nor the names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * http://bitbucket.org/sdorra/scm-manager
+ *
+ */
+
+
+
+package sonia.scm.plugin;
+
+//~--- non-JDK imports --------------------------------------------------------
+
+import sonia.scm.util.IOUtil;
+import sonia.scm.util.Util;
+
+//~--- JDK imports ------------------------------------------------------------
+
+import java.io.File;
+
+/**
+ *
+ * @author Sebastian Sdorra
+ */
+public class BaseDirectory
+{
+
+  /** Field description */
+  private static final String DIRECTORY_DEFAULT = ".scm-backend";
+
+  /** Field description */
+  private static final String DIRECTORY_ENVIRONMENT = "SCMBACKEND_HOME";
+
+  /** Field description */
+  static final String DIRECTORY_PROPERTY = "scm-backend.home";
+
+  /** Field description */
+  private static BaseDirectory instance;
+
+  //~--- constructors ---------------------------------------------------------
+
+  /**
+   * Constructs ...
+   *
+   */
+  public BaseDirectory()
+  {
+    baseDirectory = findBaseDirectory();
+  }
+
+  //~--- get methods ----------------------------------------------------------
+
+  /**
+   * Method description
+   *
+   *
+   * @param name
+   *
+   * @return
+   */
+  public static File getDirectory(String name)
+  {
+    File directory = getFile(name);
+
+    IOUtil.mkdirs(directory);
+
+    return directory;
+  }
+
+  /**
+   * Method description
+   *
+   *
+   * @param name
+   *
+   * @return
+   */
+  public static File getFile(String name)
+  {
+    return new File(getInstance().baseDirectory, name);
+  }
+
+  /**
+   * Method description
+   *
+   *
+   * @return
+   */
+  private static BaseDirectory getInstance()
+  {
+    if (instance == null)
+    {
+      instance = new BaseDirectory();
+    }
+
+    return instance;
+  }
+
+  //~--- methods --------------------------------------------------------------
+
+  /**
+   * Method description
+   *
+   *
+   * @return
+   */
+  private File findBaseDirectory()
+  {
+    String path = System.getProperty(DIRECTORY_PROPERTY);
+
+    if (Util.isEmpty(path))
+    {
+      path = System.getenv(DIRECTORY_ENVIRONMENT);
+
+      if (Util.isEmpty(path))
+      {
+        path = System.getProperty("user.home").concat(File.separator).concat(
+          DIRECTORY_DEFAULT);
+      }
+    }
+
+    File directory = new File(path);
+
+    if (!directory.exists() &&!directory.mkdirs())
+    {
+      throw new IllegalStateException("could not create directory");
+    }
+
+    return directory;
+  }
+
+  //~--- fields ---------------------------------------------------------------
+
+  /** Field description */
+  private File baseDirectory;
+}

File scm-plugin-backend/src/main/java/sonia/scm/plugin/DefaultPluginBackend.java

    * @param configuration
    */
   @Inject
-  public DefaultPluginBackend(
-          @Named(ScmBackendModule.DIRECTORY_PROPERTY) File baseDirectory,
-          BackendConfiguration configuration)
+  public DefaultPluginBackend(BackendConfiguration configuration)
   {
-    this.baseDirectory = baseDirectory;
     this.configuration = configuration;
-    this.storeFile = new File(baseDirectory, FILE_STORE);
+    this.storeFile = BaseDirectory.getFile(FILE_STORE);
 
     try
     {
    * @return
    */
   @Override
-  public File getBaseDirectory()
-  {
-    return baseDirectory;
-  }
-
-  /**
-   * Method description
-   *
-   *
-   * @return
-   */
-  @Override
   public Set<String> getExcludes()
   {
     return configuration.getExcludes();
    */
   private void readScannedFiles() throws IOException
   {
-    File file = new File(baseDirectory, FILE_SCANNED);
+    File file = BaseDirectory.getFile(FILE_SCANNED);
 
     if (file.exists())
     {
       logger.info("store scanned files");
     }
 
-    File file = new File(baseDirectory, FILE_SCANNED);
+    File file = BaseDirectory.getFile(FILE_SCANNED);
     PrintWriter writer = null;
 
     try
   //~--- fields ---------------------------------------------------------------
 
   /** Field description */
-  private File baseDirectory;
-
-  /** Field description */
   private BackendConfiguration configuration;
 
   /** Field description */

File scm-plugin-backend/src/main/java/sonia/scm/plugin/PluginBackend.java

    *
    * @return
    */
-  public File getBaseDirectory();
-
-  /**
-   * Method description
-   *
-   *
-   * @return
-   */
   public Set<String> getExcludes();
 
   /**

File scm-plugin-backend/src/main/java/sonia/scm/plugin/ScmBackendModule.java

   public static final String CACHE_CONFIG = "/config/ehcache.xml";
 
   /** Field description */
-  public static final String DIRECTORY_DEFAULT = ".scm-backend";
-
-  /** Field description */
-  public static final String DIRECTORY_ENVIRONMENT = "SCMBACKEND_HOME";
-
-  /** Field description */
-  public static final String DIRECTORY_PROPERTY = "scm-backend.home";
-
-  /** Field description */
   public static final String FILE_CONFIG = "config.xml";
 
   /** Field description */
   public static final String PATTERN_REST_API = "/*";
 
   /** Field description */
-  public static final String PATTERN_REST_EXCLUDE =
-    "/(template/|news).*";
+  public static final String PATTERN_REST_EXCLUDE = "/(template/|news).*";
 
   //~--- methods --------------------------------------------------------------
 
   @Override
   protected void configureServlets()
   {
-    File baseDirectory = findBaseDirectory();
-
-    if (baseDirectory == null)
-    {
-      throw new ConfigurationException("could not find base directory");
-    }
-
-    File configurationFile = getConfigurationFile(baseDirectory);
+    File configurationFile = BaseDirectory.getFile(FILE_CONFIG);
 
     if (!configurationFile.exists())
     {
     BackendConfiguration configuration = JAXB.unmarshal(configurationFile,
                                            BackendConfiguration.class);
 
-    bind(File.class).annotatedWith(Names.named(DIRECTORY_PROPERTY)).toInstance(
-      baseDirectory);
     bind(BackendConfiguration.class).toInstance(configuration);
     bind(PluginBackend.class).to(DefaultPluginBackend.class);
     bind(PluginScannerFactory.class).to(DefaultPluginScannerFactory.class);
       PATTERN_REST_EXCLUDE);
     filter(PATTERN_REST_API).through(GuiceContainer.class, params);
   }
-
-  /**
-   * Method description
-   *
-   *
-   * @return
-   */
-  private File findBaseDirectory()
-  {
-    String path = System.getProperty(DIRECTORY_PROPERTY);
-
-    if (Util.isEmpty(path))
-    {
-      path = System.getenv(DIRECTORY_ENVIRONMENT);
-
-      if (Util.isEmpty(path))
-      {
-        path = System.getProperty("user.home").concat(File.separator).concat(
-          DIRECTORY_DEFAULT);
-      }
-    }
-
-    File directory = new File(path);
-
-    if (!directory.exists() &&!directory.mkdirs())
-    {
-      throw new IllegalStateException("could not create directory");
-    }
-
-    return directory;
-  }
-
-  //~--- get methods ----------------------------------------------------------
-
-  /**
-   * Method description
-   *
-   *
-   * @param baseDirectory
-   *
-   * @return
-   */
-  private File getConfigurationFile(File baseDirectory)
-  {
-    return new File(baseDirectory, FILE_CONFIG);
-  }
 }

File scm-plugin-backend/src/main/java/sonia/scm/plugin/rest/ScreenshotResource.java

 import javax.ws.rs.WebApplicationException;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.Status;
+import sonia.scm.plugin.BaseDirectory;
 
 /**
  *
     path.append(size).append(File.separator).append(checksum);
     path.append(EXTENSION_IMAGE);
 
-    return new File(backend.getBaseDirectory(), path.toString());
+    return BaseDirectory.getFile(path.toString());
   }
 
   //~--- fields ---------------------------------------------------------------