diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ProjectSelectionWidget.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ProjectSelectionWidget.java index 7a24c8365d88b4cb02b2c6d7f0476bf5618fbf7b..e725f581f8bd45c45718e287af1763fd42c79d52 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ProjectSelectionWidget.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ProjectSelectionWidget.java @@ -52,7 +52,7 @@ public final class ProjectSelectionWidget extends // @Private static final String DISPLAY_COLUMN_ID = "id"; - static class ProjectComboModel extends SimplifiedBaseModelData + public static class ProjectComboModel extends SimplifiedBaseModelData { private static final long serialVersionUID = 1L; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/ApplicationInfo.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/ApplicationInfo.java index 59b4c957ec4f8a8ced11901e7f04ab1d6abf0634..c8a023707ee63aa396d4bc575307a0a4828cc816 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/ApplicationInfo.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/ApplicationInfo.java @@ -45,6 +45,8 @@ public final class ApplicationInfo implements IsSerializable private boolean archivingConfigured; + private boolean projectSamplesEnabled; + private WebClientConfiguration webClientConfiguration; private Set<String> enabledTechnologies; @@ -167,4 +169,14 @@ public final class ApplicationInfo implements IsSerializable } } + public boolean isProjectSamplesEnabled() + { + return projectSamplesEnabled; + } + + public void setProjectSamplesEnabled(boolean projectSamplesEnabled) + { + this.projectSamplesEnabled = projectSamplesEnabled; + } + } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/AbstractClientService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/AbstractClientService.java index 8a3d42ea6c1eb3eedc4e0428f67481e03ea54891..abc4dfb9a06c62ffed4ad66c458f01b7e8774dd5 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/AbstractClientService.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/AbstractClientService.java @@ -474,6 +474,7 @@ public abstract class AbstractClientService implements IClientService, applicationInfo.setCustomImports(extractCustomImportProperties()); applicationInfo.setWebapps(extractWebAppsProperties()); applicationInfo.setArchivingConfigured(isArchivingConfigured()); + applicationInfo.setProjectSamplesEnabled(isProjectSamplesEnabled()); applicationInfo.setVersion(getVersion()); return applicationInfo; } @@ -552,6 +553,18 @@ public abstract class AbstractClientService implements IClientService, return false; } + private boolean isProjectSamplesEnabled() + { + try + { + return getServer().isProjectSamplesEnabled(getSessionToken()); + } catch (InvalidSessionException e) + { + // ignored + } + return false; + } + @Override public final SessionContext tryToGetCurrentSessionContext(boolean anonymous, String sessionIdOrNull) { diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/AbstractServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/AbstractServer.java index 4c68ec20e177948b930a00089c64bb6c78124044..7a614918a5266f8a888a731c20a4c683d17b67dc 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/AbstractServer.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/AbstractServer.java @@ -82,6 +82,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.GridCustomColumnPE; import ch.systemsx.cisd.openbis.generic.shared.dto.IAuthSession; import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE; import ch.systemsx.cisd.openbis.generic.shared.dto.RoleAssignmentPE; +import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE; import ch.systemsx.cisd.openbis.generic.shared.dto.SampleTypePE; import ch.systemsx.cisd.openbis.generic.shared.dto.Session; import ch.systemsx.cisd.openbis.generic.shared.dto.SessionContextDTO; @@ -742,6 +743,12 @@ public abstract class AbstractServer<T> extends AbstractServiceWithLogger<T> imp return false; } + @Override + public boolean isProjectSamplesEnabled(String sessionToken) + { + return SamplePE.projectSamplesEnabled; + } + @SuppressWarnings("deprecation") @Override public void saveDisplaySettings(String sessionToken, final DisplaySettings displaySettings, diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractSampleBusinessObject.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractSampleBusinessObject.java index 5e747d691986528d5354f7b8ecaef1c3ff6a6df0..da9762509b7a264904137c82c8e4bf30f3dba6fe 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractSampleBusinessObject.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractSampleBusinessObject.java @@ -56,6 +56,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifi import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifierFactory; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.IdentifierHelper; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ProjectIdentifier; +import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ProjectIdentifierFactory; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifierFactory; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleOwnerIdentifier; @@ -146,6 +147,7 @@ abstract class AbstractSampleBusinessObject extends AbstractSampleIdentifierBusi tryFindExperiment(experimentCacheOrNull, experimentIdentifier, newSample.getDefaultSpaceIdentifier()); updateModifierAndModificationDate(experimentPE); + final SamplePE samplePE = new SamplePE(); samplePE.setExperiment(experimentPE); samplePE.setCode(sampleIdentifier.getSampleSubCode()); @@ -153,6 +155,14 @@ abstract class AbstractSampleBusinessObject extends AbstractSampleIdentifierBusi samplePE.setRegistrator(registrator); samplePE.setSampleType(sampleTypePE); samplePE.setSpace(sampleOwner.tryGetSpace()); + + String projectIdentifier = newSample.getProjectIdentifier(); + if (projectIdentifier != null) + { + ProjectPE project = findProject(new ProjectIdentifierFactory(projectIdentifier).createIdentifier()); + samplePE.setProject(project); + } + RelationshipUtils.updateModificationDateAndModifier(samplePE, registrator, getTransactionTimeStamp()); defineSampleProperties(samplePE, newSample.getProperties()); String containerIdentifier = newSample.getContainerIdentifierForNewSample(); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/AbstractServerLogger.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/AbstractServerLogger.java index b37bc9ba85a475bd7fe0ecc147252778c1bcc0ef..1cc8cdaada6237d59e79e577815bfc5f229041db 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/AbstractServerLogger.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/AbstractServerLogger.java @@ -349,6 +349,13 @@ public abstract class AbstractServerLogger implements IServer return false; } + @Override + public boolean isProjectSamplesEnabled(String sessionToken) + { + // Do not log that + return false; + } + @Override public void saveDisplaySettings(String sessionToken, DisplaySettings displaySettings, int maxEntityVisits) @@ -400,8 +407,7 @@ public abstract class AbstractServerLogger implements IServer @Override public void setSessionUser(String sessionToken, String userID) { - logMessage(authLog, Level.INFO, sessionToken, "set_session_user", "USER(%s)", new Object[] - { userID }); + logMessage(authLog, Level.INFO, sessionToken, "set_session_user", "USER(%s)", new Object[] { userID }); } public int unarchiveDatasets(String sessionToken, List<String> datasetCodes) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IServer.java index 2812360664af21b6a833ec63d0a97f643bdb0d4a..e692db741da646e2f6e91d01052312dfb2e7afac 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IServer.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IServer.java @@ -54,6 +54,12 @@ public interface IServer extends ISessionProvider @Transactional(readOnly = true) public boolean isArchivingConfigured(final String sessionToken); + /** + * @return 'true' if project samples are enabled. + */ + @Transactional(readOnly = true) + public boolean isProjectSamplesEnabled(final String sessionToken); + /** * Tries to authenticate the specified user with given password. * @@ -127,8 +133,7 @@ public interface IServer extends ISessionProvider * Deactivates specified persons. */ @Transactional - @DatabaseCreateOrDeleteModification(value = - { ObjectKind.PERSON, ObjectKind.AUTHORIZATION_GROUP, ObjectKind.ROLE_ASSIGNMENT }) + @DatabaseCreateOrDeleteModification(value = { ObjectKind.PERSON, ObjectKind.AUTHORIZATION_GROUP, ObjectKind.ROLE_ASSIGNMENT }) public void deactivatePersons(String sessionToken, List<String> personsCodes); /** diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/NewSample.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/NewSample.java index a982ec05d7bc42da0a349f3d76b4490e235e70b9..a25ee5cebf5569a92a98ad82141fc13cc950e8a0 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/NewSample.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/NewSample.java @@ -79,6 +79,11 @@ public class NewSample extends Identifier<NewSample> implements Comparable<NewSa */ private String experimentIdentifier; + /** + * The project identifier. + */ + private String projectIdentifier; + /*** * The space code for this row home space */ @@ -236,6 +241,16 @@ public class NewSample extends Identifier<NewSample> implements Comparable<NewSa this.experimentIdentifier = toUpperCase(experimentIdentifier); } + public String getProjectIdentifier() + { + return projectIdentifier; + } + + public void setProjectIdentifier(String projectIdentifier) + { + this.projectIdentifier = toUpperCase(projectIdentifier); + } + public String getDefaultSpaceIdentifier() { return defaultSpaceIdentifier; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/AbstractGenericSampleRegisterEditForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/AbstractGenericSampleRegisterEditForm.java index e027fa1ba6b8b6179dc89cfa7cd19f05d0ffdc1b..6f46dad6463a467cd2bcf5f3dc9283d736e8e0ee 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/AbstractGenericSampleRegisterEditForm.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/AbstractGenericSampleRegisterEditForm.java @@ -24,10 +24,14 @@ import java.util.Map; import com.extjs.gxt.ui.client.event.ButtonEvent; import com.extjs.gxt.ui.client.event.Events; +import com.extjs.gxt.ui.client.event.SelectionChangedEvent; +import com.extjs.gxt.ui.client.event.SelectionChangedListener; import com.extjs.gxt.ui.client.event.SelectionListener; import com.extjs.gxt.ui.client.widget.button.Button; import com.extjs.gxt.ui.client.widget.form.Field; import com.extjs.gxt.ui.client.widget.form.FormPanel; +import com.google.gwt.core.client.Scheduler; +import com.google.gwt.core.client.Scheduler.ScheduledCommand; import ch.systemsx.cisd.common.shared.basic.string.StringUtils; import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync; @@ -40,9 +44,11 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework. import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DatabaseModificationAwareField; import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DispatcherHelper; import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.SampleTypeDisplayID; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.ModelDataPropertyNames; import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.SpaceModel; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.AbstractRegistrationForm; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.SpaceSelectionWidget; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.experiment.ProjectSelectionWidget; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.ExperimentChooserField; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.ExperimentChooserField.ExperimentChooserFieldAdaptor; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.IChosenEntitiesListener; @@ -59,6 +65,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExperimentIdentifi import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Project; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleTypePropertyType; @@ -91,6 +98,10 @@ abstract public class AbstractGenericSampleRegisterEditForm extends protected String simpleId; + private String initialProjectIdentifierOrNull; + + protected ProjectSelectionWidget projectChooser; + protected ExperimentChooserFieldAdaptor experimentField; private ExperimentIdentifier initialExperimentIdentifierOrNull; @@ -111,6 +122,8 @@ abstract public class AbstractGenericSampleRegisterEditForm extends private Sample parentOrNull; + private boolean projectSamplesEnabled; + protected AbstractGenericSampleRegisterEditForm( IViewContext<IGenericClientServiceAsync> viewContext, Map<String, List<IManagedInputWidgetDescription>> inputWidgetDescriptions, @@ -127,9 +140,10 @@ abstract public class AbstractGenericSampleRegisterEditForm extends super(viewContext, inputWidgetDescriptions, identifiable, EntityKind.SAMPLE); this.simpleId = createSimpleId(identifiable, EntityKind.SAMPLE); this.attachmentsSessionKey = simpleId + "_attachments"; - List<String> sesionKeys = new ArrayList<String>(); - sesionKeys.add(attachmentsSessionKey); - addUploadFeatures(sesionKeys); + List<String> sessionKeys = new ArrayList<String>(); + sessionKeys.add(attachmentsSessionKey); + this.projectSamplesEnabled = viewContext.getModel().getApplicationInfo().isProjectSamplesEnabled(); + addUploadFeatures(sessionKeys); extractInitialValues(actionContext); saveUploadButton = createSaveAndUploadButton(); ApplicationInfo applicationInfo = viewContext.getModel().getApplicationInfo(); @@ -163,8 +177,30 @@ abstract public class AbstractGenericSampleRegisterEditForm extends private ExperimentChooserFieldAdaptor createExperimentField() { String label = viewContext.getMessage(Dict.EXPERIMENT); - return ExperimentChooserField.create(label, false, initialExperimentIdentifierOrNull, + ExperimentChooserFieldAdaptor experimentField = ExperimentChooserField.create(label, false, initialExperimentIdentifierOrNull, viewContext.getCommonViewContext()); + + experimentField.getChooserField().setId(getId() + ID_SUFFIX_EXPERIMENT); + experimentField.getChooserField().addChosenEntityListener( + new IChosenEntitiesListener<TableModelRowWithObject<Experiment>>() + { + @Override + public void entitiesChosen( + List<TableModelRowWithObject<Experiment>> entities) + { + if (entities.isEmpty() == false) + { + groupSelectionWidget.setValue(new SpaceModel(entities.get(0) + .getObjectOrNull().getProject().getSpace())); + if (projectChooser != null) + { + projectChooser.setValue(new ProjectSelectionWidget.ProjectComboModel(entities.get(0) + .getObjectOrNull().getProject(), true)); + } + } + } + }); + return experimentField; } @Override @@ -245,7 +281,7 @@ abstract public class AbstractGenericSampleRegisterEditForm extends { DispatcherHelper.dispatchNaviEvent(new ComponentProvider(viewContext .getCommonViewContext()) - .getDataSetUploadTab(sampleIdentifierForUploadOrNull)); + .getDataSetUploadTab(sampleIdentifierForUploadOrNull)); } sampleIdentifierForUploadOrNull = null; } @@ -276,6 +312,10 @@ abstract public class AbstractGenericSampleRegisterEditForm extends List<DatabaseModificationAwareField<?>> fields = new ArrayList<DatabaseModificationAwareField<?>>(); fields.add(wrapUnaware(experimentField.getField())); + if (projectSamplesEnabled) + { + fields.add(projectChooser.asDatabaseModificationAware()); + } fields.add(groupSelectionWidget.asDatabaseModificationAware()); fields.add(wrapUnaware(parentsArea)); fields.add(wrapUnaware(parentButton.getField())); @@ -327,13 +367,101 @@ abstract public class AbstractGenericSampleRegisterEditForm extends new SpaceSelectionWidget(viewContext, getId(), true, false, initialSpaceCodeOrNull); groupSelectionWidget.setId("register-sample-space-selection"); FieldUtil.markAsMandatory(groupSelectionWidget); + + if (projectSamplesEnabled) + { + projectChooser = + new ProjectSelectionWidget(viewContext, simpleId, initialProjectIdentifierOrNull); + projectChooser.setFieldLabel(viewContext.getMessage(Dict.PROJECT)); + projectChooser.addSelectionChangedListener(new SelectionChangedListener<ProjectSelectionWidget.ProjectComboModel>() + { + @Override + public void selectionChanged(SelectionChangedEvent<ProjectSelectionWidget.ProjectComboModel> se_) + { + final SelectionChangedEvent<ProjectSelectionWidget.ProjectComboModel> se = se_; + Scheduler.get().scheduleDeferred(new ScheduledCommand() + { + @Override + public void execute() + { + + if (se.getSelectedItem() == null) + { + return; + } + + Project project = se.getSelectedItem().get(ModelDataPropertyNames.OBJECT); + ExperimentIdentifier currentExperiment = experimentField.tryToGetValue(); + if (currentExperiment != null + && currentExperiment.getIdentifier().startsWith(project.getIdentifier() + "/") == false) + { + experimentField.getChooserField().setValue(null); + } + + SpaceModel currentSpace = groupSelectionWidget.getValue(); + String currentSpaceCode = null; + if (currentSpace != null) + { + currentSpaceCode = currentSpace.getBaseObject().getCode(); + } + + String newSpaceCode = project.getSpace().getCode(); + + if (currentSpace == null || currentSpaceCode.equals(newSpaceCode) == false) + { + groupSelectionWidget.setValue(new SpaceModel(project.getSpace())); + } + } + }); + } + }); + FieldUtil.setMandatoryFlag(projectChooser, false); + } + groupSelectionWidget.setFieldLabel(viewContext.getMessage(Dict.GROUP)); + groupSelectionWidget.addSelectionChangedListener(new SelectionChangedListener<SpaceModel>() + { + @Override + public void selectionChanged(SelectionChangedEvent<SpaceModel> se_) + { + final SelectionChangedEvent<SpaceModel> se = se_; + + Scheduler.get().scheduleDeferred(new ScheduledCommand() + { + @Override + public void execute() + { + ExperimentIdentifier currentExperiment = experimentField.tryToGetValue(); + if (currentExperiment != null + && currentExperiment.getIdentifier() + .startsWith("/" + se.getSelectedItem().getBaseObject().getCode() + "/") == false) + { + experimentField.getChooserField().setValue(null); + } + + if (projectChooser != null && projectChooser.getValue() != null && + ((Project) projectChooser.getValue().get(ModelDataPropertyNames.OBJECT)).getSpace().getCode() != se + .getSelectedItem().getBaseObject().getCode()) + { + String currentProjectSpace = + ((Project) projectChooser.getValue().get(ModelDataPropertyNames.OBJECT)).getSpace().getCode(); + String newSpace = se.getSelectedItem().getBaseObject().getCode(); + if (currentProjectSpace.equals(newSpace) == false) + { + projectChooser.setValue(null); + } + } + } + }); + } + }); parentButton = SampleChooserButton.create(null, viewContext.getMessage(Dict.ADD_PARENT), true, false, false, viewContext.getCommonViewContext(), getId() + ID_SUFFIX_PARENT, SampleTypeDisplayID.SAMPLE_REGISTRATION_PARENT_CHOOSER - .withSuffix(getSampleTypeCode()), true); + .withSuffix(getSampleTypeCode()), + true); parentsArea = new ParentSamplesArea(viewContext, getId()); SampleChooserButton parentChooserButton = parentButton.getChooserButton(); parentChooserButton @@ -353,23 +481,9 @@ abstract public class AbstractGenericSampleRegisterEditForm extends true, false, false, viewContext.getCommonViewContext(), getId() + ID_SUFFIX_CONTAINER, SampleTypeDisplayID.SAMPLE_REGISTRATION_CONTAINER_CHOOSER - .withSuffix(getSampleTypeCode()), false); + .withSuffix(getSampleTypeCode()), + false); experimentField = createExperimentField(); - experimentField.getChooserField().setId(getId() + ID_SUFFIX_EXPERIMENT); - experimentField.getChooserField().addChosenEntityListener( - new IChosenEntitiesListener<TableModelRowWithObject<Experiment>>() - { - @Override - public void entitiesChosen( - List<TableModelRowWithObject<Experiment>> entities) - { - if (entities.isEmpty() == false) - { - groupSelectionWidget.setValue(new SpaceModel(entities.get(0) - .getObjectOrNull().getProject().getSpace())); - } - } - }); attachmentsManager = new AttachmentsFileFieldManager(attachmentsSessionKey, viewContext); formPanel.addListener(Events.Submit, new FormPanelListener(infoBox) { diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleRegistrationForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleRegistrationForm.java index 8d656c83f1797817109816681041c1486d7e0616..68b1f96e5a7710410b5b029acd0b55b0619061a9 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleRegistrationForm.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleRegistrationForm.java @@ -24,6 +24,7 @@ import ch.systemsx.cisd.common.shared.basic.string.StringUtils; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ActionContext; import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict; import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.ModelDataPropertyNames; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.AbstractRegistrationForm; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.SpaceSelectionWidget; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.EntityLinkMessageElement; @@ -33,6 +34,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget. import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewSample; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Project; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Space; @@ -116,6 +118,16 @@ public final class GenericSampleRegistrationForm extends AbstractGenericSampleRe (experimentField != null && experimentField.tryToGetValue() != null) ? experimentField .tryToGetValue().getIdentifier() : null; + String projectIdentifier = null; + if (projectChooser != null && projectChooser.getValue() != null) + { + Project project = projectChooser.getValue().get(ModelDataPropertyNames.OBJECT); + if (project != null) + { + projectIdentifier = project.getIdentifier(); + } + } + final String containerOrNull = StringUtils.trimToNull(container.getValue()); final NewSample newSample = NewSample.createWithParents(createSampleIdentifier(), sampleType, containerOrNull, @@ -124,6 +136,7 @@ public final class GenericSampleRegistrationForm extends AbstractGenericSampleRe newSample.setProperties(properties.toArray(IEntityProperty.EMPTY_ARRAY)); newSample.setAttachments(attachmentsManager.extractAttachments()); newSample.setExperimentIdentifier(experimentIdentifier); + newSample.setProjectIdentifier(projectIdentifier); newSample.setMetaprojectsOrNull(metaprojectArea.tryGetModifiedMetaprojects()); viewContext.getService().registerSample(attachmentsSessionKey, newSample,