Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
O
openbis
Manage
Activity
Members
Labels
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
sispub
openbis
Commits
132c558c
Commit
132c558c
authored
13 years ago
by
kaloyane
Browse files
Options
Downloads
Patches
Plain Diff
[LMS-2197] add disambiguation support
SVN: 21054
parent
53bf5b53
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/resolver/TemplateBasedDataSetResourceResolver.java
+79
-40
79 additions, 40 deletions
...er/ftp/resolver/TemplateBasedDataSetResourceResolver.java
with
79 additions
and
40 deletions
datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/resolver/TemplateBasedDataSetResourceResolver.java
+
79
−
40
View file @
132c558c
...
@@ -18,11 +18,10 @@ package ch.systemsx.cisd.openbis.dss.generic.server.ftp.resolver;
...
@@ -18,11 +18,10 @@ package ch.systemsx.cisd.openbis.dss.generic.server.ftp.resolver;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.Collections
;
import
java.util.Comparator
;
import
java.util.Date
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Map
;
import
java.util.Map.Entry
;
import
org.apache.commons.lang.StringUtils
;
import
org.apache.commons.lang.StringUtils
;
import
org.apache.commons.lang.time.DateFormatUtils
;
import
org.apache.commons.lang.time.DateFormatUtils
;
...
@@ -50,8 +49,6 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifi
...
@@ -50,8 +49,6 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifi
* <p>
* <p>
* Subpaths are resolved as a relative paths starting from the root of a dataset.
* Subpaths are resolved as a relative paths starting from the root of a dataset.
* <p>
* <p>
* TODO KE: add disambiguation checks - append an uniqueness factor to (?another variable) to the
* path if no "dataSetCode" variable is used in the template
*
*
* @author Kaloyan Enimanev
* @author Kaloyan Enimanev
*/
*/
...
@@ -65,6 +62,8 @@ public class TemplateBasedDataSetResourceResolver implements IFtpPathResolver, I
...
@@ -65,6 +62,8 @@ public class TemplateBasedDataSetResourceResolver implements IFtpPathResolver, I
private
static
final
String
FILE_NAME_VARNAME
=
"fileName"
;
private
static
final
String
FILE_NAME_VARNAME
=
"fileName"
;
private
static
final
String
DISAMBIGUATION_VARNAME
=
"disambiguation"
;
private
static
final
String
DATA_SET_DATE_FORMAT
=
"yyyy-MM-dd-HH-mm"
;
private
static
final
String
DATA_SET_DATE_FORMAT
=
"yyyy-MM-dd-HH-mm"
;
/**
/**
...
@@ -77,13 +76,15 @@ public class TemplateBasedDataSetResourceResolver implements IFtpPathResolver, I
...
@@ -77,13 +76,15 @@ public class TemplateBasedDataSetResourceResolver implements IFtpPathResolver, I
private
final
Map
<
String
/* dataset type */
,
String
/* subpath */
>
fileListSubPaths
;
private
final
Map
<
String
/* dataset type */
,
String
/* subpath */
>
fileListSubPaths
;
private
static
class
DataSetAndFileName
private
static
class
EvaluatedDataSetPath
{
{
ExternalData
dataSet
;
ExternalData
dataSet
;
// will only be filled when the ${fileName} variable
// will only be filled when the ${fileName} variable
// is used in the template
// is used in the template
String
fileName
=
StringUtils
.
EMPTY
;
String
fileName
=
StringUtils
.
EMPTY
;
String
evaluatedTemplate
;
}
}
public
TemplateBasedDataSetResourceResolver
(
FtpServerConfig
ftpServerConfig
)
public
TemplateBasedDataSetResourceResolver
(
FtpServerConfig
ftpServerConfig
)
...
@@ -106,7 +107,7 @@ public class TemplateBasedDataSetResourceResolver implements IFtpPathResolver, I
...
@@ -106,7 +107,7 @@ public class TemplateBasedDataSetResourceResolver implements IFtpPathResolver, I
IETLLIMSService
service
=
resolverContext
.
getService
();
IETLLIMSService
service
=
resolverContext
.
getService
();
String
sessionToken
=
resolverContext
.
getSessionToken
();
String
sessionToken
=
resolverContext
.
getSessionToken
();
DataSetAndFileName
dataSetAndFileName
=
EvaluatedDataSetPath
dataSetAndFileName
=
extractDataSetAndFileName
(
path
,
service
,
sessionToken
);
extractDataSetAndFileName
(
path
,
service
,
sessionToken
);
if
(
dataSetAndFileName
==
null
)
if
(
dataSetAndFileName
==
null
)
{
{
...
@@ -124,7 +125,7 @@ public class TemplateBasedDataSetResourceResolver implements IFtpPathResolver, I
...
@@ -124,7 +125,7 @@ public class TemplateBasedDataSetResourceResolver implements IFtpPathResolver, I
return
new
HierarchicalContentToFtpFileAdapter
(
path
,
contentNode
);
return
new
HierarchicalContentToFtpFileAdapter
(
path
,
contentNode
);
}
}
private
DataSetAndFileName
extractDataSetAndFileName
(
String
path
,
IETLLIMSService
service
,
private
EvaluatedDataSetPath
extractDataSetAndFileName
(
String
path
,
IETLLIMSService
service
,
String
sessionToken
)
String
sessionToken
)
{
{
String
experimentId
=
extractExperimentIdentifier
(
path
);
String
experimentId
=
extractExperimentIdentifier
(
path
);
...
@@ -137,24 +138,19 @@ public class TemplateBasedDataSetResourceResolver implements IFtpPathResolver, I
...
@@ -137,24 +138,19 @@ public class TemplateBasedDataSetResourceResolver implements IFtpPathResolver, I
List
<
ExternalData
>
dataSets
=
List
<
ExternalData
>
dataSets
=
service
.
listDataSetsByExperimentID
(
sessionToken
,
new
TechId
(
experiment
));
service
.
listDataSetsByExperimentID
(
sessionToken
,
new
TechId
(
experiment
));
String
pathWithEndSlash
=
path
+
FtpConstants
.
FILE_SEPARATOR
;
String
pathWithEndSlash
=
path
+
FtpConstants
.
FILE_SEPARATOR
;
for
(
ExternalData
dataSet
:
dataSets
)
for
(
EvaluatedDataSetPath
evaluatedPath
:
evaluateDataSetPaths
(
dataSets
))
{
{
Map
<
String
/* fileName */
,
String
/* evaluated */
>
evaluatedPaths
=
String
fullEvaluatedPath
=
getEvaluatedDataSetPaths
(
dataSet
);
experimentId
+
FtpConstants
.
FILE_SEPARATOR
+
evaluatedPath
.
evaluatedTemplate
for
(
Entry
<
String
,
String
>
entry
:
evaluatedPaths
.
entrySet
())
+
FtpConstants
.
FILE_SEPARATOR
;
if
(
pathWithEndSlash
.
startsWith
(
fullEvaluatedPath
))
{
{
String
fullEvaluatedPath
=
EvaluatedDataSetPath
result
=
new
EvaluatedDataSetPath
();
experimentId
+
FtpConstants
.
FILE_SEPARATOR
+
entry
.
getValue
()
result
.
dataSet
=
evaluatedPath
.
dataSet
;
+
FtpConstants
.
FILE_SEPARATOR
;
result
.
fileName
=
evaluatedPath
.
fileName
;
if
(
pathWithEndSlash
.
startsWith
(
fullEvaluatedPath
))
return
result
;
{
DataSetAndFileName
result
=
new
DataSetAndFileName
();
result
.
dataSet
=
dataSet
;
result
.
fileName
=
entry
.
getKey
();
return
result
;
}
}
}
}
}
return
null
;
return
null
;
...
@@ -198,34 +194,78 @@ public class TemplateBasedDataSetResourceResolver implements IFtpPathResolver, I
...
@@ -198,34 +194,78 @@ public class TemplateBasedDataSetResourceResolver implements IFtpPathResolver, I
List
<
ExternalData
>
dataSets
=
service
.
listDataSetsByExperimentID
(
sessionToken
,
new
TechId
(
experiment
));
List
<
ExternalData
>
dataSets
=
service
.
listDataSetsByExperimentID
(
sessionToken
,
new
TechId
(
experiment
));
List
<
String
>
result
=
new
ArrayList
<
String
>();
List
<
String
>
result
=
new
ArrayList
<
String
>();
for
(
E
xtern
al
D
at
a
d
ataSet
:
dataSets
)
for
(
E
v
al
u
at
edD
ataSet
Path
evaluatedPath
:
evaluateDataSetPaths
(
dataSets
)
)
{
{
Map
<
String
,
String
>
pathsForDataSet
=
getEvaluatedDataSetPaths
(
dataSet
);
result
.
add
(
evaluatedPath
.
evaluatedTemplate
);
result
.
addAll
(
pathsForDataSet
.
values
());
}
}
return
result
;
return
result
;
}
}
private
Map
<
String
/* fileName */
,
String
/* evaluated template */
>
getEvaluatedDataSetPaths
(
private
List
<
EvaluatedDataSetPath
>
evaluateDataSetPaths
(
List
<
ExternalData
>
dataSets
)
ExternalData
dataSet
)
{
{
Map
<
String
,
String
>
result
=
new
HashMap
<
String
,
String
>();
List
<
EvaluatedDataSetPath
>
result
=
new
ArrayList
<
EvaluatedDataSetPath
>();
sortDataSetsById
(
dataSets
);
IHierarchicalContentProvider
provider
=
ServiceProvider
.
getHierarchicalContentProvider
();
for
(
int
disambiguation
=
0
;
disambiguation
<
dataSets
.
size
();
disambiguation
++)
IHierarchicalContent
content
=
provider
.
asContent
(
dataSet
.
getCode
());
String
dataSetType
=
dataSet
.
getDataSetType
().
getCode
();
String
fileListSubPathOrNull
=
fileListSubPaths
.
get
(
dataSetType
);
IHierarchicalContentNode
rootNode
=
content
.
getNode
(
fileListSubPathOrNull
);
for
(
IHierarchicalContentNode
fileNode
:
extractFileNames
(
rootNode
))
{
{
String
path
=
evaluateTemplate
(
dataSet
,
fileNode
.
getName
());
ExternalData
dataSet
=
dataSets
.
get
(
disambiguation
);
result
.
put
(
fileNode
.
getRelativePath
(),
path
);
IHierarchicalContentProvider
provider
=
ServiceProvider
.
getHierarchicalContentProvider
();
IHierarchicalContent
content
=
provider
.
asContent
(
dataSet
.
getCode
());
String
dataSetType
=
dataSet
.
getDataSetType
().
getCode
();
String
fileListSubPathOrNull
=
fileListSubPaths
.
get
(
dataSetType
);
IHierarchicalContentNode
rootNode
=
content
.
getNode
(
fileListSubPathOrNull
);
String
disambiguationVar
=
computeDisambiguation
(
disambiguation
);
for
(
IHierarchicalContentNode
fileNode
:
extractFileNames
(
rootNode
))
{
EvaluatedDataSetPath
evaluatedPath
=
new
EvaluatedDataSetPath
();
evaluatedPath
.
dataSet
=
dataSet
;
evaluatedPath
.
fileName
=
fileNode
.
getRelativePath
();
evaluatedPath
.
evaluatedTemplate
=
evaluateTemplate
(
dataSet
,
fileNode
.
getName
(),
disambiguationVar
);
result
.
add
(
evaluatedPath
);
}
}
}
return
result
;
return
result
;
}
}
private
void
sortDataSetsById
(
List
<
ExternalData
>
dataSets
)
{
Collections
.
sort
(
dataSets
,
new
Comparator
<
ExternalData
>()
{
public
int
compare
(
ExternalData
o1
,
ExternalData
o2
)
{
long
id1
=
o1
.
getId
();
long
id2
=
o2
.
getId
();
// do not return directly "id1 - id2" to avoid overflow
if
(
id1
>
id2
)
{
return
1
;
}
else
if
(
id1
<
id2
)
{
return
-
1
;
}
else
{
return
0
;
}
}
});
}
/**
* Given a zero-based disambiguation index, produces the values for
* {@value #DISAMBIGUATION_VARNAME}.
*/
private
String
computeDisambiguation
(
int
disambiguationIdx
)
{
int
number
=
10
+
disambiguationIdx
;
return
Integer
.
toString
(
number
,
36
).
toUpperCase
();
}
/**
/**
* @return all values to be used when evaluating the template "${fileName}" variable.
* @return all values to be used when evaluating the template "${fileName}" variable.
*/
*/
...
@@ -240,8 +280,7 @@ public class TemplateBasedDataSetResourceResolver implements IFtpPathResolver, I
...
@@ -240,8 +280,7 @@ public class TemplateBasedDataSetResourceResolver implements IFtpPathResolver, I
}
}
}
}
private
String
evaluateTemplate
(
ExternalData
dataSet
,
private
String
evaluateTemplate
(
ExternalData
dataSet
,
String
fileName
,
String
disambiguation
)
String
fileName
)
{
{
ExtendedProperties
properties
=
new
ExtendedProperties
();
ExtendedProperties
properties
=
new
ExtendedProperties
();
properties
.
put
(
DATA_SET_CODE_VARNAME
,
dataSet
.
getCode
());
properties
.
put
(
DATA_SET_CODE_VARNAME
,
dataSet
.
getCode
());
...
@@ -249,6 +288,7 @@ public class TemplateBasedDataSetResourceResolver implements IFtpPathResolver, I
...
@@ -249,6 +288,7 @@ public class TemplateBasedDataSetResourceResolver implements IFtpPathResolver, I
String
dataSetDate
=
extractDateValue
(
dataSet
.
getRegistrationDate
());
String
dataSetDate
=
extractDateValue
(
dataSet
.
getRegistrationDate
());
properties
.
put
(
DATA_SET_DATE_VARNAME
,
dataSetDate
);
properties
.
put
(
DATA_SET_DATE_VARNAME
,
dataSetDate
);
properties
.
put
(
FILE_NAME_VARNAME
,
fileName
);
properties
.
put
(
FILE_NAME_VARNAME
,
fileName
);
properties
.
put
(
DISAMBIGUATION_VARNAME
,
disambiguation
);
String
templatePropName
=
"template"
;
String
templatePropName
=
"template"
;
properties
.
put
(
templatePropName
,
template
);
properties
.
put
(
templatePropName
,
template
);
...
@@ -262,5 +302,4 @@ public class TemplateBasedDataSetResourceResolver implements IFtpPathResolver, I
...
@@ -262,5 +302,4 @@ public class TemplateBasedDataSetResourceResolver implements IFtpPathResolver, I
return
DateFormatUtils
.
format
(
dataSetDate
,
DATA_SET_DATE_FORMAT
);
return
DateFormatUtils
.
format
(
dataSetDate
,
DATA_SET_DATE_FORMAT
);
}
}
}
}
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment