Skip to content
Snippets Groups Projects
Commit b2589113 authored by pkupczyk's avatar pkupczyk
Browse files

SP-219 / BIS-135: Data set parents are cleared when saving an unchanged data set edit form

SVN: 26168
parent 05d90953
No related branches found
No related tags found
No related merge requests found
...@@ -190,33 +190,50 @@ public abstract class AbstractDataSetBusinessObject extends AbstractSampleIdenti ...@@ -190,33 +190,50 @@ public abstract class AbstractDataSetBusinessObject extends AbstractSampleIdenti
{ {
checkParentDeletion(parent, child.getCode()); checkParentDeletion(parent, child.getCode());
} }
List<DataSetRelationshipPE> oldParents = new ArrayList<DataSetRelationshipPE>();
for (DataSetRelationshipPE r : child.getParentRelationships()) // get old parents
List<DataPE> oldParents = new ArrayList<DataPE>();
for (DataSetRelationshipPE oldParentRelation : child.getParentRelationships())
{ {
oldParents.add(r); oldParents.add(oldParentRelation.getParentDataSet());
}
Set<DataPE> parentsToRemove = new HashSet<DataPE>();
Set<DataPE> parentsToAdd = new HashSet<DataPE>();
// find parents to be added (exist in newParents but do not exist in old parents)
for (DataPE newParent : newParents)
{
if (oldParents.contains(newParent) == false)
{
parentsToAdd.add(newParent);
}
} }
for (DataSetRelationshipPE r : oldParents) // find parents to be removed (exist in oldParents but do not exist in new parents)
for (DataPE oldParent : oldParents)
{ {
if (newParents.contains(r.getParentDataSet())) if (newParents.contains(oldParent) == false)
{ {
newParents.remove(r.getParentDataSet()); parentsToRemove.add(oldParent);
} }
} }
// check cycles
if (validate) if (validate)
{ {
validateParentsRelationshipGraph(child, newParents); validateParentsRelationshipGraph(child, parentsToAdd);
} }
for (DataSetRelationshipPE r : oldParents)
// remove parents
for (DataPE parentToRemove : parentsToRemove)
{ {
if (false == newParents.contains(r.getParentDataSet())) relationshipService.removeParentFromDataSet(session, child, parentToRemove);
{
relationshipService.removeParentFromDataSet(session, child, r.getParentDataSet());
}
} }
for (DataPE newParent : newParents) // add parents
for (DataPE parentToAdd : parentsToAdd)
{ {
relationshipService.addParentToDataSet(session, child, newParent); relationshipService.addParentToDataSet(session, child, parentToAdd);
} }
} }
......
...@@ -19,7 +19,6 @@ package ch.systemsx.cisd.openbis.generic.server.business.bo; ...@@ -19,7 +19,6 @@ package ch.systemsx.cisd.openbis.generic.server.business.bo;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.Collections;
import java.util.Date; import java.util.Date;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
...@@ -569,7 +568,7 @@ public class DataBO extends AbstractDataSetBusinessObject implements IDataBO ...@@ -569,7 +568,7 @@ public class DataBO extends AbstractDataSetBusinessObject implements IDataBO
checkSameSpace(data.getContainer(), data); checkSameSpace(data.getContainer(), data);
} }
setParents(data, asList(updates.getModifiedParentDatasetCodesOrNull())); setParents(data, asListOrNull(updates.getModifiedParentDatasetCodesOrNull()));
updateComponents(updates.getModifiedContainedDatasetCodesOrNull()); updateComponents(updates.getModifiedContainedDatasetCodesOrNull());
checkSameSpace(data, data.getContainedDataSets()); // even if components were not changed checkSameSpace(data, data.getContainedDataSets()); // even if components were not changed
updateFileFormatType(data, updates.getFileFormatTypeCode()); updateFileFormatType(data, updates.getFileFormatTypeCode());
...@@ -579,11 +578,11 @@ public class DataBO extends AbstractDataSetBusinessObject implements IDataBO ...@@ -579,11 +578,11 @@ public class DataBO extends AbstractDataSetBusinessObject implements IDataBO
validateAndSave(); validateAndSave();
} }
private List<String> asList(String[] arrayOrNull) private List<String> asListOrNull(String[] arrayOrNull)
{ {
if (arrayOrNull == null) if (arrayOrNull == null)
{ {
return Collections.emptyList(); return null;
} else } else
{ {
return Arrays.asList(arrayOrNull); return Arrays.asList(arrayOrNull);
...@@ -614,7 +613,7 @@ public class DataBO extends AbstractDataSetBusinessObject implements IDataBO ...@@ -614,7 +613,7 @@ public class DataBO extends AbstractDataSetBusinessObject implements IDataBO
removeComponents(currentComponents); removeComponents(currentComponents);
final Set<String> currentCodes = extractCodes(currentComponents); final Set<String> currentCodes = extractCodes(currentComponents);
final Set<String> newCodes = asSet(asList(modifiedContainedDatasetCodesOrNull)); final Set<String> newCodes = asSet(asListOrNull(modifiedContainedDatasetCodesOrNull));
// quick check for direct cycle // quick check for direct cycle
final Set<String> brandNewCodes = new HashSet<String>(newCodes); final Set<String> brandNewCodes = new HashSet<String>(newCodes);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment