From 5f6f6dea6b7cf77c5bc846d89a970b08237e1345 Mon Sep 17 00:00:00 2001
From: kaloyane <kaloyane>
Date: Tue, 1 Mar 2011 09:42:23 +0000
Subject: [PATCH] minor: [LMS-2070] added default configuration to
 dist/service.properties

SVN: 20166
---
 datastore_server/dist/etc/service.properties  |  7 +++
 .../plugins/HierarchicalStorageUpdater.java   |  2 +-
 .../TemplateBasedLinkNamingStrategy.java      | 43 ++++++++++---------
 .../TemplateBasedLinkNamingStrategyTest.java  |  3 +-
 4 files changed, 32 insertions(+), 23 deletions(-)

diff --git a/datastore_server/dist/etc/service.properties b/datastore_server/dist/etc/service.properties
index 09b1441b9fb..4002482f02c 100644
--- a/datastore_server/dist/etc/service.properties
+++ b/datastore_server/dist/etc/service.properties
@@ -240,6 +240,13 @@ main-thread.incoming-data-completeness-condition = marker-file
 #hierarchy-builder.interval = 86400
 # The root directory of the hierarchical data store
 #hierarchy-builder.hierarchy-root-dir = data/hierarchical-store
+# The naming strategy for the symbolic links
+#hierarchy-builder.link-naming-strategy.class = ch.systemsx.cisd.etlserver.plugins.TemplateBasedLinkNamingStrategy
+# The exact form of link names produced by TemplateBasedLinkNamingStrategy is configurable
+# via the following template. The variables
+#   dataSet, dataSetType, experiment, instance, project, sample, space
+# will be recognized and replaced in the final link name.
+#hierarchy-builder.link-naming-strategy.template = ${space}/${project}/${experiment}/${datasettype}+${sample}+${dataset}
 
 # ---------------- Plugin properties
 # The extractor class to use for code extraction
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/HierarchicalStorageUpdater.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/HierarchicalStorageUpdater.java
index 89b963c2785..6415935c378 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/HierarchicalStorageUpdater.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/HierarchicalStorageUpdater.java
@@ -53,7 +53,7 @@ public class HierarchicalStorageUpdater implements IResourceContendingMaintenanc
 
     public static final String HIERARCHY_ROOT_DIR_KEY = "hierarchy-root-dir";
 
-    public static final String HIERARCHY_LINK_NAMING_STRATEGY = "link-naming-strategy";
+    public static final String HIERARCHY_LINK_NAMING_STRATEGY = "link-naming-strategy.class";
 
     private static final String REBUILDING_HIERARCHICAL_STORAGE = "Rebuilding hierarchical storage";
 
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/TemplateBasedLinkNamingStrategy.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/TemplateBasedLinkNamingStrategy.java
index 1bfeb1e1338..0684963d0fe 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/TemplateBasedLinkNamingStrategy.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/TemplateBasedLinkNamingStrategy.java
@@ -29,7 +29,7 @@ import ch.systemsx.cisd.common.utilities.ExtendedProperties;
 import ch.systemsx.cisd.openbis.generic.shared.dto.SimpleDataSetInformationDTO;
 
 /**
- * TODO
+ * A naming strategy based on a configurable string template.
  * 
  * @author Kaloyan Enimanev
  */
@@ -37,13 +37,14 @@ public class TemplateBasedLinkNamingStrategy implements IHierarchicalStorageLink
 {
 
     public static final String DEFAULT_LINK_TEMPLATE =
-            "${space}/${project}/${experiment}/${datasettype}+${sample}+${dataset}";
+            "${space}/${project}/${experiment}/${dataSetType}+${sample}+${dataSet}";
 
-    private static final String LINKS_TEMPLATE_PROP_NAME =
-            HierarchicalStorageUpdater.HIERARCHY_LINK_NAMING_STRATEGY + ".template";
+    private static final String LINKS_TEMPLATE_PROP_NAME = "link-naming-strategy.template";
 
     private static final String NOT_DIRECTLY_CONNECTED = "NOT_DIRECTLY_CONNECTED";
 
+    private static final String MATCH_ALL_FILE_NAMES = "([^" + File.separator + "]*)";
+
     private final String linkTemplate;
 
     
@@ -74,8 +75,8 @@ public class TemplateBasedLinkNamingStrategy implements IHierarchicalStorageLink
         ExtendedProperties props = new ExtendedProperties();
         for (PathVariable pathElement : PathVariable.values())
         {
+            String pathElementName = pathElement.name();
             String pathElementValue = pathElement.extractValueFromData(data);
-            String pathElementName = pathElement.name().toLowerCase();
             if (pathElementValue == null)
             {
                 pathElementValue = StringUtils.EMPTY;
@@ -83,9 +84,7 @@ public class TemplateBasedLinkNamingStrategy implements IHierarchicalStorageLink
             props.put(pathElementName, pathElementValue);
         }
 
-        props.put("template", linkTemplate);
-        // this will evaluate and replace all variables in the value of the property
-        return props.getProperty("template");
+        return evaluateTemplate(props);
 
     }
 
@@ -102,19 +101,23 @@ public class TemplateBasedLinkNamingStrategy implements IHierarchicalStorageLink
 
     private Pattern createMatchingFilesFilter(File root)
     {
-        // TODO KE: refactor with constants
-        final String allMatcher = "([^" + File.separator + "]*)";
         ExtendedProperties props = new ExtendedProperties();
         for (PathVariable var : PathVariable.values())
         {
-            props.put(var.name().toLowerCase(), allMatcher);
+            props.put(var.name(), MATCH_ALL_FILE_NAMES);
         }
 
-        props.put("template", linkTemplate);
-        String subPathRegex = props.getProperty("template");
+        String subPathRegex = evaluateTemplate(props);
         return Pattern.compile(root.getAbsolutePath() + File.separator + subPathRegex);
     }
 
+    private String evaluateTemplate(ExtendedProperties props)
+    {
+        props.put("template", linkTemplate);
+        // this will evaluate and replace all variables in the value of the property
+        return props.getProperty("template");
+    }
+
     private int getNestedDirectoryLevels()
     {
         return StringUtils.countMatches(linkTemplate, File.separator);
@@ -146,7 +149,7 @@ public class TemplateBasedLinkNamingStrategy implements IHierarchicalStorageLink
 
     enum PathVariable
     {
-        Dataset
+        dataSet
         {
             @Override
             String extractValueFromData(SimpleDataSetInformationDTO data)
@@ -156,7 +159,7 @@ public class TemplateBasedLinkNamingStrategy implements IHierarchicalStorageLink
 
         },
 
-        DataSetType
+        dataSetType
         {
 
             @Override
@@ -167,7 +170,7 @@ public class TemplateBasedLinkNamingStrategy implements IHierarchicalStorageLink
 
         },
 
-        Sample
+        sample
         {
 
             @Override
@@ -183,7 +186,7 @@ public class TemplateBasedLinkNamingStrategy implements IHierarchicalStorageLink
 
         },
 
-        Experiment
+        experiment
         {
 
             @Override
@@ -194,7 +197,7 @@ public class TemplateBasedLinkNamingStrategy implements IHierarchicalStorageLink
 
         },
 
-        Project
+        project
         {
             @Override
             String extractValueFromData(SimpleDataSetInformationDTO data)
@@ -203,7 +206,7 @@ public class TemplateBasedLinkNamingStrategy implements IHierarchicalStorageLink
             }
         },
 
-        Space
+        space
         {
 
             @Override
@@ -213,7 +216,7 @@ public class TemplateBasedLinkNamingStrategy implements IHierarchicalStorageLink
             }
         },
 
-        Instance
+        instance
         {
 
             @Override
diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/plugins/TemplateBasedLinkNamingStrategyTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/plugins/TemplateBasedLinkNamingStrategyTest.java
index 561330eb43d..33f26fac492 100644
--- a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/plugins/TemplateBasedLinkNamingStrategyTest.java
+++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/plugins/TemplateBasedLinkNamingStrategyTest.java
@@ -29,14 +29,13 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.SimpleDataSetInformationDTO;
 /**
  * Test cases for {@link TemplateBasedLinkNamingStrategy}.
  * 
- * @author Izabela Adamczyk
  * @author Kaloyan Enimanev
  */
 public class TemplateBasedLinkNamingStrategyTest extends AbstractFileSystemTestCase
 {
 
     public static final String LONG_LINK_TEMPLATE =
-            "Instance_${instance}/Space_${space}/Project_${project}/Experiment_${experiment}/DataSetType_${datasettype}/Sample_${sample}/Dataset_${dataset}";
+            "Instance_${instance}/Space_${space}/Project_${project}/Experiment_${experiment}/DataSetType_${dataSetType}/Sample_${sample}/Dataset_${dataSet}";
 
     private static final String DATASET_PATH_LONG =
             "Instance_DB-I/Space_GROUP-G/Project_PROJECT-P/Experiment_EXP-E/DataSetType_TYPE-T/Sample_SAMPLE-S/Dataset_DATASET-D";
-- 
GitLab