diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/console/RegisterPropertyType.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/console/RegisterPropertyType.java index ef1fac7d4265381fbea340f126a1dd4f7281e977..4ba5569dbfcc1a4cd69dbba220afc5e6397ee8f1 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/console/RegisterPropertyType.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/console/RegisterPropertyType.java @@ -23,6 +23,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataTypeCode; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.MaterialType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PropertyType; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Vocabulary; /** * @author Franz-Josef Elmer @@ -36,7 +37,7 @@ public class RegisterPropertyType implements ICommand private final static String TYPE = "type"; private static final String LABEL = "label"; - + private static boolean validated(List<String> tokens) { return tokens.size() > 4 && tokens.get(1).equals(WITH) && tokens.get(2).equals(DATA) @@ -60,19 +61,35 @@ public class RegisterPropertyType implements ICommand propertyType.setLabel(tokens.get(0)); propertyType.setDescription(" "); - if (tokens.get(4).startsWith(DataTypeCode.MATERIAL.name())) + String dataType = tokens.get(4); + if (dataType.startsWith(DataTypeCode.MATERIAL.name())) { propertyType.setDataType(new DataType(DataTypeCode.MATERIAL)); - if (DataTypeCode.MATERIAL.name().length() < tokens.get(4).length()) + + if (DataTypeCode.MATERIAL.name().length() < dataType.length()) { String materialCode = - tokens.get(4).replaceAll(DataTypeCode.MATERIAL.name() + "\\((.*)\\)", "$1"); + dataType.replaceAll(DataTypeCode.MATERIAL.name() + "\\((.*)\\)", "$1"); MaterialType materialType = server.getMaterialType(sessionToken, materialCode); propertyType.setMaterialType(materialType); + + } + } else if (dataType.startsWith(DataTypeCode.CONTROLLEDVOCABULARY.name())) + { + propertyType.setDataType(new DataType(DataTypeCode.CONTROLLEDVOCABULARY)); + + if (DataTypeCode.CONTROLLEDVOCABULARY.name().length() < dataType.length()) + { + String vocabularyCode = + dataType.replaceAll( + DataTypeCode.CONTROLLEDVOCABULARY.name() + "\\((.*)\\)", "$1"); + List<Vocabulary> vocabularies = server.listVocabularies(sessionToken, false, true); + Vocabulary vocabulary = findVocabulary(vocabularies, vocabularyCode); + propertyType.setVocabulary(vocabulary); } } else { - DataTypeCode dataTypeCode = DataTypeCode.valueOf(tokens.get(4)); + DataTypeCode dataTypeCode = DataTypeCode.valueOf(dataType); propertyType.setDataType(new DataType(dataTypeCode)); } @@ -95,4 +112,16 @@ public class RegisterPropertyType implements ICommand server.registerPropertyType(sessionToken, propertyType); } + + private Vocabulary findVocabulary(List<Vocabulary> vocabularies, String vocabularyCode) + { + for (Vocabulary vocabulary : vocabularies) + { + if (vocabulary.getCode().equalsIgnoreCase(vocabularyCode)) + { + return vocabulary; + } + } + throw new IllegalArgumentException("There is no vocabulary " + vocabularyCode); + } }