diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/amc/AddPropertyTypeDialog.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/amc/AddPropertyTypeDialog.java index 9e7ac0b959cd96a7ed7ce4b243ccf6c0921b7c39..79a87947bf36cc5081b0d26f11aef61fe45d4c01 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/amc/AddPropertyTypeDialog.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/amc/AddPropertyTypeDialog.java @@ -195,8 +195,7 @@ public class AddPropertyTypeDialog extends AbstractRegistrationDialog private RadioGroup scriptTypeRadioGroup; - private boolean userDidChangeShownInEditViewCheckBox = false; // Track if the user has set a - // value + private boolean userDidChangeShownInEditViewCheckBox = false; // Track if the user has set a value private boolean userDidChangeShowRawValueCheckBox = false; // Track if the user has set a value @@ -212,10 +211,9 @@ public class AddPropertyTypeDialog extends AbstractRegistrationDialog // public AddPropertyTypeDialog(final IViewContext<ICommonClientServiceAsync> viewContext, final IDelegatedAction postRegistrationCallback, EntityKind entityKind, - String entityCode, InMemoryGridAddCallback inMemoryGridCallback) + String entityCode, InMemoryGridAddCallback inMemoryGridCallback, EntityType inMemoryEntityType) { - super(viewContext, viewContext.getMessage(Dict.PROPERTY_TYPE_REGISTRATION), - postRegistrationCallback); + super(viewContext, viewContext.getMessage(Dict.PROPERTY_TYPE_REGISTRATION), postRegistrationCallback); this.viewContext = viewContext; this.inMemoryGridCallback = inMemoryGridCallback; this.entityKind = entityKind; @@ -225,6 +223,9 @@ public class AddPropertyTypeDialog extends AbstractRegistrationDialog getFormPanel().setLabelWidth(LABEL_WIDTH); loading = new Label(viewContext.getMessage(Dict.LOAD_IN_PROGRESS)); addField(loading); + + + this.entity = inMemoryEntityType; loadEntityDialog(entityKind, entityCode); } @@ -256,7 +257,7 @@ public class AddPropertyTypeDialog extends AbstractRegistrationDialog { private String code; - + AsyncCallbackEntityTypeForDialog(String code) { this.code = code; @@ -285,7 +286,10 @@ public class AddPropertyTypeDialog extends AbstractRegistrationDialog private void entityLoaded(EntityType entity) { - this.entity = entity; + if(inMemoryGridCallback == null) { //If is not an in memory grid + this.entity = entity; + } + removeField(loading); // Enable Layout Changes getFormPanel().setLayoutOnChange(true); @@ -858,27 +862,23 @@ public class AddPropertyTypeDialog extends AbstractRegistrationDialog propertyType = this.createPropertyType(); } + EntityType entityType = null; + if(inMemoryGridCallback == null) { - final EntityType entityType = (EntityType) getEntityTypeSelectionWidget().tryGetSelected(); - if (propertyType != null && entityType != null && propertyType.getDataType() != null) - { - final List<EntityTypePropertyType<?>> etpts = new ArrayList<EntityTypePropertyType<?>>(entityType.getAssignedPropertyTypes()); - sectionSelectionWidget = SectionSelectionWidget.create(viewContext, etpts); - this.addField(sectionSelectionWidget); - etptSelectionWidget = createETPTSelectionWidget(etpts); - this.addField(etptSelectionWidget); - } + entityType = (EntityType) getEntityTypeSelectionWidget().tryGetSelected(); } else { - if (propertyType != null && propertyType.getDataType() != null) - { - final List<EntityTypePropertyType<?>> etpts = new ArrayList<EntityTypePropertyType<?>>(); - sectionSelectionWidget = SectionSelectionWidget.create(viewContext, etpts); - this.addField(sectionSelectionWidget); - etptSelectionWidget = createETPTSelectionWidget(etpts); - this.addField(etptSelectionWidget); - } + entityType = entity; } + if (propertyType != null && entityType != null && propertyType.getDataType() != null) + { + final List<EntityTypePropertyType<?>> etpts = new ArrayList<EntityTypePropertyType<?>>(entityType.getAssignedPropertyTypes()); + sectionSelectionWidget = SectionSelectionWidget.create(viewContext, etpts); + this.addField(sectionSelectionWidget); + etptSelectionWidget = createETPTSelectionWidget(etpts); + this.addField(etptSelectionWidget); + } + fixLayout(); } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/entity_type/NewEntityTypeForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/entity_type/NewEntityTypeForm.java index 9d1de048dda294a35691437be679bbd8e53ec3d9..7f3d0cf39754a41bf46b87a4cba442a5bc70732d 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/entity_type/NewEntityTypeForm.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/entity_type/NewEntityTypeForm.java @@ -17,13 +17,17 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.sample. import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.GWTUtils; import ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetType; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetTypePropertyType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentType; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentTypePropertyType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.MaterialType; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.MaterialTypePropertyType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewETNewPTAssigments; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewPTNewAssigment; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleTypePropertyType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Script; import com.extjs.gxt.ui.client.Style.HorizontalAlignment; @@ -119,22 +123,30 @@ public class NewEntityTypeForm extends ContentPanel switch (kind) { case SAMPLE: - newTypeWithAssigments.setEntity(new SampleType()); + SampleType sampleType = new SampleType(); + sampleType.setSampleTypePropertyTypes(new ArrayList<SampleTypePropertyType>()); + newTypeWithAssigments.setEntity(sampleType); typeGrid = (SampleTypeGrid) SampleTypeGrid.create(viewContext).getComponent(); dialog = ((SampleTypeGrid) typeGrid).getNewDialog((SampleType) newTypeWithAssigments.getEntity()); break; case DATA_SET: - newTypeWithAssigments.setEntity(new DataSetType()); + DataSetType dataSetType = new DataSetType(); + dataSetType.setDataSetTypePropertyTypes(new ArrayList<DataSetTypePropertyType>()); + newTypeWithAssigments.setEntity(dataSetType); typeGrid = (DataSetTypeGrid) DataSetTypeGrid.create(viewContext).getComponent(); dialog = ((DataSetTypeGrid) typeGrid).getNewDialog((DataSetType) newTypeWithAssigments.getEntity()); break; case EXPERIMENT: - newTypeWithAssigments.setEntity(new ExperimentType()); + ExperimentType experimentType = new ExperimentType(); + experimentType.setExperimentTypePropertyTypes(new ArrayList<ExperimentTypePropertyType>()); + newTypeWithAssigments.setEntity(experimentType); typeGrid = (ExperimentTypeGrid) ExperimentTypeGrid.create(viewContext).getComponent(); dialog = ((ExperimentTypeGrid) typeGrid).getNewDialog((ExperimentType) newTypeWithAssigments.getEntity()); break; case MATERIAL: - newTypeWithAssigments.setEntity(new MaterialType()); + MaterialType materialType = new MaterialType(); + materialType.setMaterialTypePropertyTypes(new ArrayList<MaterialTypePropertyType>()); + newTypeWithAssigments.setEntity(materialType); typeGrid = (MaterialTypeGrid) MaterialTypeGrid.create(viewContext).getComponent(); dialog = (AddEntityTypeDialog<MaterialType>) ((MaterialTypeGrid) typeGrid).getNewDialog((MaterialType) newTypeWithAssigments.getEntity()); break; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeAssignmentGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeAssignmentGrid.java index 5bcedb4c01792a54613bb5e9643df6f332621efb..88c0675d1fad6fbf7f86b64f20c07c88f271e48d 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeAssignmentGrid.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeAssignmentGrid.java @@ -230,8 +230,9 @@ public class PropertyTypeAssignmentGrid extends TypedTableGrid<EntityTypePropert viewContext, createRefreshGridAction(), newTypeWithAssigments.getEntity().getEntityKind(), - newTypeWithAssigments.getEntity().getCode(), - new InMemoryGridAddCallback() + null, + new InMemoryGridAddCallback(), + newTypeWithAssigments.getEntity() ); dialog.show(); } @@ -268,7 +269,7 @@ public class PropertyTypeAssignmentGrid extends TypedTableGrid<EntityTypePropert { AddPropertyTypeDialog dialog = new AddPropertyTypeDialog(viewContext, createRefreshGridAction(), addEntity.getEntityKind(), - addEntity.getCode(), null); + addEntity.getCode(), null, null); dialog.show(); } }); @@ -331,13 +332,8 @@ public class PropertyTypeAssignmentGrid extends TypedTableGrid<EntityTypePropert public class InMemoryGridRemoveCallback { public void callback(final EntityTypePropertyType<?> etpt) { - for(int i = 0; i < newTypeWithAssigments.getAssigments().size(); i++) { - if(newTypeWithAssigments.getAssigments().get(i).getPropertyType().getCode().equals(etpt.getPropertyType().getCode())) { - newTypeWithAssigments.getAssigments().remove(i); - break; - } - } - newTypeWithAssigments.refreshOrder(); + String codeToDelete = etpt.getPropertyType().getCode(); + newTypeWithAssigments.refreshOrderDelete(codeToDelete); refresh(); } } @@ -348,8 +344,7 @@ public class PropertyTypeAssignmentGrid extends TypedTableGrid<EntityTypePropert newPTNewAssigment.setExistingPropertyType(isExixtingPropertyType); newPTNewAssigment.setPropertyType(propertyType); newPTNewAssigment.setAssignment(assignment); - newTypeWithAssigments.getAssigments().add(newPTNewAssigment); - newTypeWithAssigments.refreshOrder(); + newTypeWithAssigments.refreshOrderAdd(newPTNewAssigment); refresh(); } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/NewETNewPTAssigments.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/NewETNewPTAssigments.java index 1648549787d97428781bff8b8c9d2261436648a8..cfd1eb07f95be8fb2806d2c6e4f70ff3ae52007f 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/NewETNewPTAssigments.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/NewETNewPTAssigments.java @@ -1,6 +1,8 @@ package ch.systemsx.cisd.openbis.generic.shared.basic.dto; import java.io.Serializable; +import java.util.Collections; +import java.util.Comparator; import java.util.List; public class NewETNewPTAssigments implements Serializable @@ -30,79 +32,102 @@ public class NewETNewPTAssigments implements Serializable } - public void refreshOrder() { -// // -// // Get List -// // -// List<? extends EntityTypePropertyType<?>> list = entity.getAssignedPropertyTypes(); -// -// switch (entity.getEntityKind()) -// { -// case SAMPLE: -// SampleType sampleType = (SampleType) entity; -// if(entity.getAssignedPropertyTypes() == null) { -// sampleType.setSampleTypePropertyTypes(new ArrayList<SampleTypePropertyType>()); -// } -// entity.getAssignedPropertyTypes().clear(); -// break; -// case EXPERIMENT: -// ExperimentType experimentType = (ExperimentType) entity; -// if(entity.getAssignedPropertyTypes() == null) { -// experimentType.setExperimentTypePropertyTypes(new ArrayList<ExperimentTypePropertyType>()); -// } -// entity.getAssignedPropertyTypes().clear(); -// break; -// case DATA_SET: -// DataSetType datasetType = (DataSetType) entity; -// if(entity.getAssignedPropertyTypes() == null) { -// datasetType.setDataSetTypePropertyTypes(new ArrayList<DataSetTypePropertyType>()); -// } -// entity.getAssignedPropertyTypes().clear(); -// break; -// case MATERIAL: -// MaterialType materialType = (MaterialType) entity; -// if(entity.getAssignedPropertyTypes() == null) { -// materialType.setMaterialTypePropertyTypes(new ArrayList<MaterialTypePropertyType>()); -// } -// entity.getAssignedPropertyTypes().clear(); -// break; -// } -// -// // -// // Update List -// // -// for(int i = 0; i < assigments.size(); i++) { -// NewPTNewAssigment assigment = assigments.get(i); -// int insertPos = -1; -// EntityTypePropertyType<?> etpt = getEntityTypePropertyType(entity.getEntityKind(), assigment); -// -// if(assigment.getAssignment().getOrdinal() == 0) { -// insertPos = 0; -// } else if (assigment.getAssignment().getOrdinal() != 0) { -// insertPos = i; -// } -// etpt.setOrdinal(insertPos+1L); -// -// switch (entity.getEntityKind()) -// { -// case SAMPLE: -// SampleType sampleType = (SampleType) entity; -// sampleType.getAssignedPropertyTypes().add(insertPos, (SampleTypePropertyType) etpt); -// break; -// case EXPERIMENT: -// ExperimentType experimentType = (ExperimentType) entity; -// experimentType.getAssignedPropertyTypes().add(insertPos, (ExperimentTypePropertyType) etpt); -// break; -// case DATA_SET: -// DataSetType datasetType = (DataSetType) entity; -// datasetType.getAssignedPropertyTypes().add(insertPos, (DataSetTypePropertyType) etpt); -// break; -// case MATERIAL: -// MaterialType materialType = (MaterialType) entity; -// materialType.getAssignedPropertyTypes().add(insertPos, (MaterialTypePropertyType) etpt); -// break; -// } -// } + public void refreshOrderDelete(String code) { + // + // Delete Code - Internal/External List + // + for(int i = 0; i < entity.getAssignedPropertyTypes().size(); i++) { + if(entity.getAssignedPropertyTypes().get(i).getPropertyType().getCode().equals(code)) { + entity.getAssignedPropertyTypes().remove(i); + assigments.remove(i); + } + } + + // + // Update Ordinal - Internal/External List + // + for(int i = 0; i < entity.getAssignedPropertyTypes().size(); i++) { + entity.getAssignedPropertyTypes().get(i).setOrdinal((long) i + 1); + assigments.get(i).getAssignment().setOrdinal((long) i + 1); + } + } + + public void refreshOrderAdd(NewPTNewAssigment newAssigment) { + int insertPos = 0; + + if(assigments.isEmpty()) { + insertPos = 0; + } else { + insertPos = newAssigment.getAssignment().getOrdinal().intValue(); + } + + // + // Update Internal List - Reorder the items due to an insert + // + EntityTypePropertyType<?> newEtpt = getEntityTypePropertyType(entity.getEntityKind(), newAssigment); + + switch (entity.getEntityKind()) + { + case SAMPLE: + SampleType sampleType = (SampleType) entity; + sampleType.getAssignedPropertyTypes().add(insertPos, (SampleTypePropertyType) newEtpt); + break; + case EXPERIMENT: + ExperimentType experimentType = (ExperimentType) entity; + experimentType.getAssignedPropertyTypes().add(insertPos, (ExperimentTypePropertyType) newEtpt); + break; + case DATA_SET: + DataSetType datasetType = (DataSetType) entity; + datasetType.getAssignedPropertyTypes().add(insertPos, (DataSetTypePropertyType) newEtpt); + break; + case MATERIAL: + MaterialType materialType = (MaterialType) entity; + materialType.getAssignedPropertyTypes().add(insertPos, (MaterialTypePropertyType) newEtpt); + break; + } + + // + // Update Internal List - Second pass set proper positions after reordering + // + for(int i = 0; i < entity.getAssignedPropertyTypes().size(); i++) { + entity.getAssignedPropertyTypes().get(i).setOrdinal((long) i + 1); + } + + // + // Update Visible List with internal list order + // + assigments.add(newAssigment); + for(int i = 0; i < entity.getAssignedPropertyTypes().size(); i++) { + EntityTypePropertyType<?> etpt = entity.getAssignedPropertyTypes().get(i); + String code = etpt.getPropertyType().getCode(); + + for(NewPTNewAssigment assigment:assigments) { + if(assigment.getPropertyType().getCode().equals(code)) { + assigment.getAssignment().setOrdinal((long) (i + 1)); + } + } + } + + // + // Update Visible List order + // + Collections.sort(assigments, new NewPTNewAssigmentComparator()); + } + + private class NewPTNewAssigmentComparator implements Comparator<NewPTNewAssigment>{ + + @Override + public int compare(NewPTNewAssigment arg0, NewPTNewAssigment arg1) + { + int isEqualIfZero = 0; + if(arg0.getAssignment().getOrdinal() > arg1.getAssignment().getOrdinal()) { + isEqualIfZero = 1; + } else if(arg0.getAssignment().getOrdinal() < arg1.getAssignment().getOrdinal()) { + isEqualIfZero = -1; + } + return isEqualIfZero; + } + } public static EntityTypePropertyType<?> getEntityTypePropertyType(EntityKind kind, NewPTNewAssigment propertyTypeAsg) {