diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java index 5dffb792c636f5028214fe02556a98e7c8872f70..1eaf9fd04e9b9d02c3e2bc62614ef98c75f0794a 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java @@ -421,28 +421,39 @@ public class ETLService extends AbstractCommonServer<IETLLIMSService> implements return services; } - private Set<DataSetTypePE> extractDatasetTypes(String[] datasetTypeCodes, + /** + * Find the data set type objects specified by the dataSetTypeCodes. + * + * @return A set of DataSetTypePE objects or null if all data set types are explicitly + * specified. + */ + private Set<DataSetTypePE> extractDatasetTypes(String[] dataSetTypeCodes, DatastoreServiceDescription serviceDescription) { - Set<DataSetTypePE> datasetTypes = new HashSet<DataSetTypePE>(); + // "*" means accept all data set types + if (dataSetTypeCodes.length == 1 && "*".equals(dataSetTypeCodes[0])) + { + return null; + } + Set<DataSetTypePE> dataSetTypes = new HashSet<DataSetTypePE>(); Set<String> missingCodes = new HashSet<String>(); IDataSetTypeDAO dataSetTypeDAO = daoFactory.getDataSetTypeDAO(); - for (String datasetTypeCode : datasetTypeCodes) + for (String dataSetTypeCode : dataSetTypeCodes) { - DataSetTypePE datasetType = dataSetTypeDAO.tryToFindDataSetTypeByCode(datasetTypeCode); + DataSetTypePE datasetType = dataSetTypeDAO.tryToFindDataSetTypeByCode(dataSetTypeCode); if (datasetType == null) { - missingCodes.add(datasetTypeCode); + missingCodes.add(dataSetTypeCode); } else { - datasetTypes.add(datasetType); + dataSetTypes.add(datasetType); } } if (missingCodes.size() > 0) { notifyDataStoreServerMisconfiguration(missingCodes, serviceDescription); } - return datasetTypes; + return dataSetTypes; } private void notifyDataStoreServerMisconfiguration(Set<String> missingCodes, diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DataStoreDAOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DataStoreDAOTest.java index 5d65e6db5167a3a2ad02e9fe5e470bca79b5988f..78d796fb65ae8128ecef2f40b9ea33ee4ebdf40c 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DataStoreDAOTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DataStoreDAOTest.java @@ -46,13 +46,9 @@ public final class DataStoreDAOTest extends AbstractDAOTest public void testCreate() { DataStorePE dataStore = new DataStorePE(); - dataStore.setDatabaseInstance(daoFactory.getHomeDatabaseInstance()); - String code = DATA_STORE_CODE; - dataStore.setCode(code); - dataStore.setDownloadUrl(code); - dataStore.setRemoteUrl(code); - dataStore.setSessionToken(code); - dataStore.setServices(createDataStoreServices(code)); + initializeDataStore(dataStore); + String code = dataStore.getCode(); + dataStore.setServices(createDataStoreServices(code, getDataSetTypes())); daoFactory.getDataStoreDAO().createOrUpdateDataStore(dataStore); assertNotNull(dataStore.getId()); @@ -60,25 +56,49 @@ public final class DataStoreDAOTest extends AbstractDAOTest AssertJUnit.assertEquals(dataStore, store); // check if changing the registered services does not fail when the result of this test // method will be commited - dataStore.setServices(createDataStoreServices("another")); + dataStore.setServices(createDataStoreServices("another", getDataSetTypes())); daoFactory.getDataStoreDAO().createOrUpdateDataStore(dataStore); dataStore.setServices(new HashSet<DataStoreServicePE>()); // delete all services daoFactory.getDataStoreDAO().createOrUpdateDataStore(dataStore); } - private Set<DataStoreServicePE> createDataStoreServices(String prefix) + protected void initializeDataStore(DataStorePE dataStore) + { + dataStore.setDatabaseInstance(daoFactory.getHomeDatabaseInstance()); + String code = DATA_STORE_CODE; + dataStore.setCode(code); + dataStore.setDownloadUrl(code); + dataStore.setRemoteUrl(code); + dataStore.setSessionToken(code); + } + + @Test + public void testCreateFotAllDataSetTypes() + { + DataStorePE dataStore = new DataStorePE(); + initializeDataStore(dataStore); + String code = dataStore.getCode(); + dataStore.setServices(createDataStoreServices(code, null)); + daoFactory.getDataStoreDAO().createOrUpdateDataStore(dataStore); + assertNotNull(dataStore.getId()); + + DataStorePE store = daoFactory.getDataStoreDAO().tryToFindDataStoreByCode(code); + AssertJUnit.assertEquals(dataStore, store); + } + + private Set<DataStoreServicePE> createDataStoreServices(String prefix, + Set<DataSetTypePE> dataSetTypes) { Set<DataStoreServicePE> services = new HashSet<DataStoreServicePE>(); DataStoreServicePE service; - for (int i = 0; i < 3; i++) { service = new DataStoreServicePE(); service.setKey(prefix + "_key_" + i); service.setLabel("label"); service.setKind(DataStoreServiceKind.PROCESSING); - service.setDatasetTypes(getDataSetTypes()); + service.setDatasetTypes(dataSetTypes); service.setReportingPluginTypeOrNull(null); services.add(service); } @@ -89,7 +109,7 @@ public final class DataStoreDAOTest extends AbstractDAOTest service.setKey(prefix + "_key_" + i++); service.setLabel("label"); service.setKind(DataStoreServiceKind.QUERIES); - service.setDatasetTypes(getDataSetTypes()); + service.setDatasetTypes(dataSetTypes); service.setReportingPluginTypeOrNull(ReportingPluginType.TABLE_MODEL); services.add(service); @@ -98,7 +118,7 @@ public final class DataStoreDAOTest extends AbstractDAOTest service.setKey(prefix + "_key_" + i++); service.setLabel("label"); service.setKind(DataStoreServiceKind.QUERIES); - service.setDatasetTypes(getDataSetTypes()); + service.setDatasetTypes(dataSetTypes); service.setReportingPluginTypeOrNull(ReportingPluginType.DSS_LINK); services.add(service);