Skip to content
Snippets Groups Projects
Commit 5f6f6dea authored by kaloyane's avatar kaloyane
Browse files

minor: [LMS-2070] added default configuration to dist/service.properties

SVN: 20166
parent ff36598c
No related branches found
No related tags found
No related merge requests found
...@@ -240,6 +240,13 @@ main-thread.incoming-data-completeness-condition = marker-file ...@@ -240,6 +240,13 @@ main-thread.incoming-data-completeness-condition = marker-file
#hierarchy-builder.interval = 86400 #hierarchy-builder.interval = 86400
# The root directory of the hierarchical data store # The root directory of the hierarchical data store
#hierarchy-builder.hierarchy-root-dir = data/hierarchical-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 # ---------------- Plugin properties
# The extractor class to use for code extraction # The extractor class to use for code extraction
......
...@@ -53,7 +53,7 @@ public class HierarchicalStorageUpdater implements IResourceContendingMaintenanc ...@@ -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_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"; private static final String REBUILDING_HIERARCHICAL_STORAGE = "Rebuilding hierarchical storage";
......
...@@ -29,7 +29,7 @@ import ch.systemsx.cisd.common.utilities.ExtendedProperties; ...@@ -29,7 +29,7 @@ import ch.systemsx.cisd.common.utilities.ExtendedProperties;
import ch.systemsx.cisd.openbis.generic.shared.dto.SimpleDataSetInformationDTO; import ch.systemsx.cisd.openbis.generic.shared.dto.SimpleDataSetInformationDTO;
/** /**
* TODO * A naming strategy based on a configurable string template.
* *
* @author Kaloyan Enimanev * @author Kaloyan Enimanev
*/ */
...@@ -37,13 +37,14 @@ public class TemplateBasedLinkNamingStrategy implements IHierarchicalStorageLink ...@@ -37,13 +37,14 @@ public class TemplateBasedLinkNamingStrategy implements IHierarchicalStorageLink
{ {
public static final String DEFAULT_LINK_TEMPLATE = 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 = private static final String LINKS_TEMPLATE_PROP_NAME = "link-naming-strategy.template";
HierarchicalStorageUpdater.HIERARCHY_LINK_NAMING_STRATEGY + ".template";
private static final String NOT_DIRECTLY_CONNECTED = "NOT_DIRECTLY_CONNECTED"; private static final String NOT_DIRECTLY_CONNECTED = "NOT_DIRECTLY_CONNECTED";
private static final String MATCH_ALL_FILE_NAMES = "([^" + File.separator + "]*)";
private final String linkTemplate; private final String linkTemplate;
...@@ -74,8 +75,8 @@ public class TemplateBasedLinkNamingStrategy implements IHierarchicalStorageLink ...@@ -74,8 +75,8 @@ public class TemplateBasedLinkNamingStrategy implements IHierarchicalStorageLink
ExtendedProperties props = new ExtendedProperties(); ExtendedProperties props = new ExtendedProperties();
for (PathVariable pathElement : PathVariable.values()) for (PathVariable pathElement : PathVariable.values())
{ {
String pathElementName = pathElement.name();
String pathElementValue = pathElement.extractValueFromData(data); String pathElementValue = pathElement.extractValueFromData(data);
String pathElementName = pathElement.name().toLowerCase();
if (pathElementValue == null) if (pathElementValue == null)
{ {
pathElementValue = StringUtils.EMPTY; pathElementValue = StringUtils.EMPTY;
...@@ -83,9 +84,7 @@ public class TemplateBasedLinkNamingStrategy implements IHierarchicalStorageLink ...@@ -83,9 +84,7 @@ public class TemplateBasedLinkNamingStrategy implements IHierarchicalStorageLink
props.put(pathElementName, pathElementValue); props.put(pathElementName, pathElementValue);
} }
props.put("template", linkTemplate); return evaluateTemplate(props);
// this will evaluate and replace all variables in the value of the property
return props.getProperty("template");
} }
...@@ -102,19 +101,23 @@ public class TemplateBasedLinkNamingStrategy implements IHierarchicalStorageLink ...@@ -102,19 +101,23 @@ public class TemplateBasedLinkNamingStrategy implements IHierarchicalStorageLink
private Pattern createMatchingFilesFilter(File root) private Pattern createMatchingFilesFilter(File root)
{ {
// TODO KE: refactor with constants
final String allMatcher = "([^" + File.separator + "]*)";
ExtendedProperties props = new ExtendedProperties(); ExtendedProperties props = new ExtendedProperties();
for (PathVariable var : PathVariable.values()) 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 = evaluateTemplate(props);
String subPathRegex = props.getProperty("template");
return Pattern.compile(root.getAbsolutePath() + File.separator + subPathRegex); 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() private int getNestedDirectoryLevels()
{ {
return StringUtils.countMatches(linkTemplate, File.separator); return StringUtils.countMatches(linkTemplate, File.separator);
...@@ -146,7 +149,7 @@ public class TemplateBasedLinkNamingStrategy implements IHierarchicalStorageLink ...@@ -146,7 +149,7 @@ public class TemplateBasedLinkNamingStrategy implements IHierarchicalStorageLink
enum PathVariable enum PathVariable
{ {
Dataset dataSet
{ {
@Override @Override
String extractValueFromData(SimpleDataSetInformationDTO data) String extractValueFromData(SimpleDataSetInformationDTO data)
...@@ -156,7 +159,7 @@ public class TemplateBasedLinkNamingStrategy implements IHierarchicalStorageLink ...@@ -156,7 +159,7 @@ public class TemplateBasedLinkNamingStrategy implements IHierarchicalStorageLink
}, },
DataSetType dataSetType
{ {
@Override @Override
...@@ -167,7 +170,7 @@ public class TemplateBasedLinkNamingStrategy implements IHierarchicalStorageLink ...@@ -167,7 +170,7 @@ public class TemplateBasedLinkNamingStrategy implements IHierarchicalStorageLink
}, },
Sample sample
{ {
@Override @Override
...@@ -183,7 +186,7 @@ public class TemplateBasedLinkNamingStrategy implements IHierarchicalStorageLink ...@@ -183,7 +186,7 @@ public class TemplateBasedLinkNamingStrategy implements IHierarchicalStorageLink
}, },
Experiment experiment
{ {
@Override @Override
...@@ -194,7 +197,7 @@ public class TemplateBasedLinkNamingStrategy implements IHierarchicalStorageLink ...@@ -194,7 +197,7 @@ public class TemplateBasedLinkNamingStrategy implements IHierarchicalStorageLink
}, },
Project project
{ {
@Override @Override
String extractValueFromData(SimpleDataSetInformationDTO data) String extractValueFromData(SimpleDataSetInformationDTO data)
...@@ -203,7 +206,7 @@ public class TemplateBasedLinkNamingStrategy implements IHierarchicalStorageLink ...@@ -203,7 +206,7 @@ public class TemplateBasedLinkNamingStrategy implements IHierarchicalStorageLink
} }
}, },
Space space
{ {
@Override @Override
...@@ -213,7 +216,7 @@ public class TemplateBasedLinkNamingStrategy implements IHierarchicalStorageLink ...@@ -213,7 +216,7 @@ public class TemplateBasedLinkNamingStrategy implements IHierarchicalStorageLink
} }
}, },
Instance instance
{ {
@Override @Override
......
...@@ -29,14 +29,13 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.SimpleDataSetInformationDTO; ...@@ -29,14 +29,13 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.SimpleDataSetInformationDTO;
/** /**
* Test cases for {@link TemplateBasedLinkNamingStrategy}. * Test cases for {@link TemplateBasedLinkNamingStrategy}.
* *
* @author Izabela Adamczyk
* @author Kaloyan Enimanev * @author Kaloyan Enimanev
*/ */
public class TemplateBasedLinkNamingStrategyTest extends AbstractFileSystemTestCase public class TemplateBasedLinkNamingStrategyTest extends AbstractFileSystemTestCase
{ {
public static final String LONG_LINK_TEMPLATE = 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 = 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"; "Instance_DB-I/Space_GROUP-G/Project_PROJECT-P/Experiment_EXP-E/DataSetType_TYPE-T/Sample_SAMPLE-S/Dataset_DATASET-D";
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment