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