diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/CodeField.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/CodeField.java index 7f1b3baad78700e04a577d2ef065faf9cb1e9788..0ba19c604dc6eb3f48069e9af4ac6e50b4469ca1 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/CodeField.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/CodeField.java @@ -35,10 +35,17 @@ public final class CodeField extends VarcharField public final static String CODE_PATTERN = "^[a-zA-Z0-9_\\-]+$"; public CodeField(final IMessageProvider messageProvider, final String label) + { + this(messageProvider, label, CODE_PATTERN); + } + + public CodeField(final IMessageProvider messageProvider, final String label, + final String pattern) { super(label, true); setMaxLength(40); - setRegex(CODE_PATTERN); + setRegex(pattern); getMessages().setRegexText(messageProvider.getMessage(Dict.INVALID_CODE_MESSAGE, "Code")); } + } \ No newline at end of file diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeRegistration.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeRegistration.java index cb50d34706957d9da6b762d645bedb8b860ff152..6276b58689ff0013391b49ff7f8be6a7701b8b03 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeRegistration.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeRegistration.java @@ -39,6 +39,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.Abstrac import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.CodeField; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.VarcharField; import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.StringUtils; +import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DataType; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DataTypeCode; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.PropertyType; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.Vocabulary; @@ -49,8 +50,11 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.dto.VocabularyTerm; * * @author Christian Ribeaud */ +// TODO 2008-12-16, Christian Ribeaud: Reset info box when starting to input something. public final class PropertyTypeRegistration extends AbstractRegistrationForm { + private final static String DOT_EXTENDED_CODE_PATTERN = "^[a-zA-Z0-9_\\-\\.]+$"; + private static final String PREFIX = "property-type-registration"; public static final String ID_PREFIX = GenericConstants.ID_PREFIX + PREFIX; @@ -125,16 +129,21 @@ public final class PropertyTypeRegistration extends AbstractRegistrationForm return formLayout; } + private final CodeField createCodeField() + { + return new CodeField(viewContext, viewContext.getMessage(Dict.CODE), + DOT_EXTENDED_CODE_PATTERN); + } + private final void addFields() { - formPanel.add(codeField = new CodeField(viewContext, viewContext.getMessage(Dict.CODE))); + formPanel.add(codeField = createCodeField()); formPanel.add(labelField = createLabelField()); formPanel.add(descriptionField = createDescriptionField(viewContext.getMessage(Dict.DESCRIPTION), true)); formPanel.add(dataTypeSelectionWidget = new DataTypeSelectionWidget(viewContext)); formPanel.add(vocabularyFieldSet = createFieldSet()); - vocabularyFieldSet.add(vocabularyField = - new CodeField(viewContext, viewContext.getMessage(Dict.CODE))); + vocabularyFieldSet.add(vocabularyField = createCodeField()); vocabularyFieldSet.add(vocabularyDescription = createDescriptionField(viewContext.getMessage(Dict.DESCRIPTION), false)); vocabularyFieldSet.add(vocabularyTermsField = createVocabularyTermsTextArea()); @@ -228,8 +237,9 @@ public final class PropertyTypeRegistration extends AbstractRegistrationForm propertyType.setCode(codeField.getValue()); propertyType.setLabel(labelField.getValue()); propertyType.setDescription(descriptionField.getValue()); - if (DataTypeCode.CONTROLLEDVOCABULARY.equals(dataTypeSelectionWidget - .tryGetSelectedDataType().getCode())) + final DataType selectedDataType = dataTypeSelectionWidget.tryGetSelectedDataType(); + propertyType.setDataType(selectedDataType); + if (DataTypeCode.CONTROLLEDVOCABULARY.equals(selectedDataType.getCode())) { final Vocabulary vocabulary = new Vocabulary(); vocabulary.setCode(vocabularyField.getValue()); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServerLogger.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServerLogger.java index 7bebefd88b5563efda65632970c2c51865a78003..ebb9b0aeb067adf4a01275c3833de3ddf6a06c38 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServerLogger.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServerLogger.java @@ -23,7 +23,6 @@ import ch.systemsx.cisd.authentication.ISessionManager; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.NewSample; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.PropertyType; import ch.systemsx.cisd.openbis.generic.shared.ICommonServer; -import ch.systemsx.cisd.openbis.generic.shared.dto.CodeConverter; import ch.systemsx.cisd.openbis.generic.shared.dto.DataTypePE; import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE; import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentTypePE; @@ -227,12 +226,11 @@ final class CommonServerLogger extends AbstractServerLogger implements ICommonSe + " MANDATORY(%S) DEFAULT(%S)", propertyTypeCode, entityTypeCode, isMandatory, defaultValue); } - - + public final void registerPropertyType(final String sessionToken, final PropertyType propertyType) { - logTracking(sessionToken, "register_property_type", "PROPERTY_TYPE(%s)", CodeConverter - .tryToBusinessLayer(propertyType.getCode(), true)); + logTracking(sessionToken, "register_property_type", "PROPERTY_TYPE(%s)", propertyType + .getCode()); } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/PropertyTypeBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/PropertyTypeBO.java index 9612ace9b56edf289859bfe78bf90de3e0980378..07a06b2cdd19ff88571e1177af5f402fda10adcf 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/PropertyTypeBO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/PropertyTypeBO.java @@ -20,10 +20,14 @@ import org.springframework.dao.DataAccessException; import ch.systemsx.cisd.common.exceptions.UserFailureException; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.PropertyType; +import ch.systemsx.cisd.openbis.generic.client.web.client.dto.Vocabulary; +import ch.systemsx.cisd.openbis.generic.client.web.client.dto.VocabularyTerm; import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory; import ch.systemsx.cisd.openbis.generic.shared.dto.DataTypePE; import ch.systemsx.cisd.openbis.generic.shared.dto.PropertyTypePE; import ch.systemsx.cisd.openbis.generic.shared.dto.Session; +import ch.systemsx.cisd.openbis.generic.shared.dto.VocabularyPE; +import ch.systemsx.cisd.openbis.generic.shared.dto.VocabularyTermPE; import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityDataType; /** @@ -41,6 +45,21 @@ public final class PropertyTypeBO extends AbstractBusinessObject implements IPro super(daoFactory, session); } + private final VocabularyPE createVocabulary(final Vocabulary vocabulary) + { + final VocabularyPE vocabularyPE = new VocabularyPE(); + vocabularyPE.setCode(vocabulary.getCode()); + vocabularyPE.setDescription(vocabulary.getDescription()); + vocabularyPE.setDatabaseInstance(getHomeDatabaseInstance()); + for (final VocabularyTerm term : vocabulary.getTerms()) + { + final VocabularyTermPE vocabularyTermPE = new VocabularyTermPE(); + vocabularyTermPE.setCode(term.getCode()); + vocabularyPE.addTerm(vocabularyTermPE); + } + return null; + } + // // IPropertyTypeBO // @@ -68,7 +87,14 @@ public final class PropertyTypeBO extends AbstractBusinessObject implements IPro propertyTypePE.setRegistrator(findRegistrator()); if (EntityDataType.CONTROLLEDVOCABULARY.equals(dataTypePE.getCode())) { - // propertyTypePE.setVocabulary(vocabulary); + VocabularyPE vocabularyPE = + getVocabularyDAO().tryFindVocabularyByCode( + propertyType.getVocabulary().getCode()); + if (vocabularyPE == null) + { + vocabularyPE = createVocabulary(propertyType.getVocabulary()); + } + propertyTypePE.setVocabulary(vocabularyPE); } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/VocabularyTermPE.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/VocabularyTermPE.java index 4d354ef5432f182cd8c1773f8e7c2703b9d3c74d..28bec7c5d0b5fc1979cbca6681c4d1f5522d5e00 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/VocabularyTermPE.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/VocabularyTermPE.java @@ -115,7 +115,7 @@ public class VocabularyTermPE extends HibernateAbstractRegistrationHolder implem } @Transient - public VocabularyPE getVocabulary() + VocabularyPE getVocabulary() { return getVocabularyInternal(); }