diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/AbstractDataSetRegistrationDetailsFactory.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/AbstractDataSetRegistrationDetailsFactory.java index 5bb10d89d619db507766ffcbaf56317215136c1f..c3d0ed6af6b144ced12bda20de56eaa938061eb6 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/AbstractDataSetRegistrationDetailsFactory.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/AbstractDataSetRegistrationDetailsFactory.java @@ -21,6 +21,7 @@ import java.util.List; import ch.systemsx.cisd.etlserver.registrator.AbstractOmniscientTopLevelDataSetRegistrator.OmniscientTopLevelDataSetRegistratorState; import ch.systemsx.cisd.etlserver.registrator.api.v1.impl.DataSet; +import ch.systemsx.cisd.openbis.dss.generic.shared.IEncapsulatedOpenBISService; import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetType; import ch.systemsx.cisd.openbis.generic.shared.dto.NewProperty; @@ -71,7 +72,8 @@ public abstract class AbstractDataSetRegistrationDetailsFactory<T extends DataSe public DataSet<T> createDataSet(DataSetRegistrationDetails<T> registrationDetails, File stagingFile) { - return new DataSet<T>(registrationDetails, stagingFile); + IEncapsulatedOpenBISService service = registratorState.getGlobalState().getOpenBisService(); + return new DataSet<T>(registrationDetails, stagingFile, service); } /** diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/AbstractDataSetImmutable.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/AbstractDataSetImmutable.java new file mode 100644 index 0000000000000000000000000000000000000000..2f25492cee10c7a45fcc06881694fc24afecaa94 --- /dev/null +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/AbstractDataSetImmutable.java @@ -0,0 +1,66 @@ +/* + * Copyright 2011 ETH Zuerich, CISD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.systemsx.cisd.etlserver.registrator.api.v1.impl; + +import java.util.Collection; +import java.util.HashMap; +import java.util.List; + +import ch.systemsx.cisd.openbis.dss.generic.shared.IEncapsulatedOpenBISService; +import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v1.IDataSetImmutable; +import ch.systemsx.cisd.openbis.generic.server.api.v1.Translator; +import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.ControlledVocabularyPropertyType; +import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSetType; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetTypePropertyType; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetTypeWithVocabularyTerms; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Vocabulary; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.VocabularyTerm; + +/** + * Abstract super class of all {@link IDataSetImmutable} implementations. + * + * @author Franz-Josef Elmer + */ +abstract class AbstractDataSetImmutable implements IDataSetImmutable +{ + protected final IEncapsulatedOpenBISService service; + + AbstractDataSetImmutable(IEncapsulatedOpenBISService service) + { + this.service = service; + } + + protected DataSetType getDataSetTypeWithPropertyTypes(String dataSetTypeCode) + { + DataSetTypeWithVocabularyTerms dataSetType = service.getDataSetType(dataSetTypeCode); + HashMap<Vocabulary, List<ControlledVocabularyPropertyType.VocabularyTerm>> termsMap = + new HashMap<Vocabulary, List<ControlledVocabularyPropertyType.VocabularyTerm>>(); + for (DataSetTypePropertyType dataSetTypePropertyType : dataSetType.getDataSetType() + .getAssignedPropertyTypes()) + { + Vocabulary vocabulary = dataSetTypePropertyType.getPropertyType().getVocabulary(); + if (vocabulary != null) + { + Collection<VocabularyTerm> vocabularyTerms = + service.listVocabularyTerms(vocabulary.getCode()); + termsMap.put(vocabulary, Translator.translatePropertyTypeTerms(vocabularyTerms)); + } + } + return Translator.translate(dataSetType.getDataSetType(), termsMap); + } + +} diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/AbstractTransactionState.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/AbstractTransactionState.java index d8c14cb60dcc395947cf1c4415416d14300b25f2..6de38830ec0394760ae7ed9d80384131c9342925 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/AbstractTransactionState.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/AbstractTransactionState.java @@ -370,7 +370,7 @@ abstract class AbstractTransactionState<T extends DataSetInformation> return null; } else { - return new DataSetImmutable(dataSet); + return new DataSetImmutable(dataSet, openBisService); } } @@ -389,7 +389,7 @@ abstract class AbstractTransactionState<T extends DataSetInformation> return null; } else { - result = new DataSetUpdatable(dataSet); + result = new DataSetUpdatable(dataSet, openBisService); dataSetsToBeUpdated.add(result); return result; } diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSet.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSet.java index 99e2d4a6ebc27ccef1bcbd077d1273ae87aba357..f83c3e7ccde505dff0c5eb355c690476a2b25415 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSet.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSet.java @@ -22,12 +22,15 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; +import ch.systemsx.cisd.common.exceptions.UserFailureException; import ch.systemsx.cisd.etlserver.registrator.DataSetRegistrationDetails; import ch.systemsx.cisd.etlserver.registrator.api.v1.IDataSet; +import ch.systemsx.cisd.openbis.dss.generic.shared.IEncapsulatedOpenBISService; import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v1.IDataSetImmutable; import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v1.IExperimentImmutable; import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v1.ISampleImmutable; import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation; +import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSetType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.FileFormatType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample; @@ -41,7 +44,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifi * * @author Chandrasekhar Ramakrishnan */ -public class DataSet<T extends DataSetInformation> implements IDataSet +public class DataSet<T extends DataSetInformation> extends AbstractDataSetImmutable implements IDataSet { private final DataSetRegistrationDetails<? extends T> registrationDetails; @@ -52,8 +55,10 @@ public class DataSet<T extends DataSetInformation> implements IDataSet private ISampleImmutable sampleOrNull; - public DataSet(DataSetRegistrationDetails<? extends T> registrationDetails, File dataSetFolder) + public DataSet(DataSetRegistrationDetails<? extends T> registrationDetails, File dataSetFolder, + IEncapsulatedOpenBISService service) { + super(service); this.registrationDetails = registrationDetails; this.dataSetFolder = dataSetFolder; } @@ -186,6 +191,18 @@ public class DataSet<T extends DataSetInformation> implements IDataSet return registrationDetails.getDataSetType().getCode(); } + public DataSetType getDataSetTypeWithPropertyTypes() + { + String dataSetTypeCode = getDataSetType(); + if (dataSetTypeCode == null) + { + throw new UserFailureException( + "Unkown data set type. Data set type code has to be set " + + "before invoking getDataSetTypeWithPropertyTypes()."); + } + return getDataSetTypeWithPropertyTypes(dataSetTypeCode); + } + public void setDataSetType(String dataSetTypeCode) { registrationDetails.setDataSetType(dataSetTypeCode); diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetImmutable.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetImmutable.java index 36969b95cf4a38797366d41b64ccde69a8df2cc6..bf92954dd7ad36fe2b93c4abc897b14820561aba 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetImmutable.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetImmutable.java @@ -20,9 +20,11 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import ch.systemsx.cisd.openbis.dss.generic.shared.IEncapsulatedOpenBISService; import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v1.IDataSetImmutable; import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v1.IExperimentImmutable; import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v1.ISampleImmutable; +import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSetType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Code; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty; @@ -33,12 +35,13 @@ import ch.systemsx.cisd.openbis.generic.shared.util.EntityHelper; * * @author Chandrasekhar Ramakrishnan */ -public class DataSetImmutable implements IDataSetImmutable +public class DataSetImmutable extends AbstractDataSetImmutable { protected final ExternalData dataSet; - public DataSetImmutable(ExternalData dataSet) + public DataSetImmutable(ExternalData dataSet, IEncapsulatedOpenBISService service) { + super(service); this.dataSet = dataSet; } @@ -96,6 +99,11 @@ public class DataSetImmutable implements IDataSetImmutable return dataSet.getDataSetType().getCode(); } + public DataSetType getDataSetTypeWithPropertyTypes() + { + return getDataSetTypeWithPropertyTypes(getDataSetType()); + } + public String getPropertyValue(String propertyCode) { return EntityHelper.tryFindPropertyValue(dataSet, propertyCode); @@ -141,7 +149,7 @@ public class DataSetImmutable implements IDataSetImmutable { for (ExternalData child : children) { - result.add(new DataSetImmutable(child)); + result.add(new DataSetImmutable(child, service)); } } return result; diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetUpdatable.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetUpdatable.java index 84a0cde25c8e63f395a91ea2d6164d5a413164a2..d926ed801dc2f914394b4683d9c001031ffbd161 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetUpdatable.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetUpdatable.java @@ -20,6 +20,7 @@ import java.util.ArrayList; import java.util.List; import ch.systemsx.cisd.etlserver.registrator.api.v1.IDataSetUpdatable; +import ch.systemsx.cisd.openbis.dss.generic.shared.IEncapsulatedOpenBISService; import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v1.IExperimentImmutable; import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v1.ISampleImmutable; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData; @@ -36,9 +37,9 @@ import ch.systemsx.cisd.openbis.generic.shared.util.EntityHelper; */ public class DataSetUpdatable extends DataSetImmutable implements IDataSetUpdatable { - public DataSetUpdatable(ExternalData dataSet) + public DataSetUpdatable(ExternalData dataSet, IEncapsulatedOpenBISService service) { - super(dataSet); + super(dataSet, service); if (dataSet.getProperties() == null) { dataSet.setDataSetProperties(new ArrayList<IEntityProperty>()); diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/SearchService.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/SearchService.java index 31886fa5b2a69c9aa30e435383eb5d6af54b4ea2..9f3f2b2f4abd5a513db7cfadd709c2f36c5d2143 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/SearchService.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/SearchService.java @@ -102,7 +102,7 @@ class SearchService implements ISearchService new ArrayList<IDataSetImmutable>(serverDataSets.size()); for (ExternalData dataSet : serverDataSets) { - dataSets.add(new DataSetImmutable(dataSet)); + dataSets.add(new DataSetImmutable(dataSet, openBisService)); } return dataSets; } diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/internal/v1/IDataSetImmutable.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/internal/v1/IDataSetImmutable.java index 639fd29b2620008f498f314dec943e15fbbb8a76..96df62cc75baeb3bb2f6a4f5aa233430be10203d 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/internal/v1/IDataSetImmutable.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/internal/v1/IDataSetImmutable.java @@ -18,6 +18,8 @@ package ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v1; import java.util.List; +import ch.systemsx.cisd.common.exceptions.UserFailureException; +import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSetType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.FileFormatType; /** @@ -71,6 +73,14 @@ public interface IDataSetImmutable * data set. */ public String getDataSetType(); + + /** + * Returns data set type with property types and vocabulary terms for all property types with + * vocabulary data type. + * + * @throws UserFailureException if data set type code hasn't been defined. + */ + public DataSetType getDataSetTypeWithPropertyTypes(); /** * Returns the speed hint. diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetRegistrationTransactionTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetRegistrationTransactionTest.java index b5f8a0e968cd1c9ef5bac777ab99acdfbc5c0d8d..206e5e7dd1ec6bced92a89f13d0e13ccc7d16d9c 100644 --- a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetRegistrationTransactionTest.java +++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetRegistrationTransactionTest.java @@ -701,7 +701,7 @@ public class DataSetRegistrationTransactionTest extends AbstractFileSystemTestCa public DataSet<DataSetInformation> createDataSet( DataSetRegistrationDetails<DataSetInformation> registrationDetails, File stagingFile) { - return new DataSet<DataSetInformation>(registrationDetails, stagingFile); + return new DataSet<DataSetInformation>(registrationDetails, stagingFile, openBisService); } } diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetTest.java index 11882db360b16fe43a8deab5cc34f8504046b2e3..152f0dfbd02968edd167568db25de17fc06c82db 100644 --- a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetTest.java +++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetTest.java @@ -40,7 +40,7 @@ public class DataSetTest extends AssertJUnit DataSetRegistrationDetails<DataSetInformation> registrationDetails = new DataSetRegistrationDetails<DataSetInformation>(); registrationDetails.setDataSetInformation(new DataSetInformation()); - IDataSet dataSet = new DataSet<DataSetInformation>(registrationDetails, new File(".")); + IDataSet dataSet = new DataSet<DataSetInformation>(registrationDetails, new File("."), null); assertEquals(Constants.DEFAULT_SPEED_HINT, dataSet.getSpeedHint()); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/Translator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/Translator.java index 25b049b7aeb5377d7b37532d509b6fcf25678a05..e2651e6347651013603654d90c2ceb29a83d4905 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/Translator.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/Translator.java @@ -161,7 +161,7 @@ public class Translator return new Experiment(initializer); } - static DataSetType translate( + public static DataSetType translate( ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetType privateDataSetType, HashMap<ch.systemsx.cisd.openbis.generic.shared.basic.dto.Vocabulary, List<ControlledVocabularyPropertyType.VocabularyTerm>> vocabTerms) {