import com.google.common.collect.ImmutableSet.Builder;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
+import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
final var fragmentEntity =
toFragmentEntity(parentFragment.getDataspace(), parentFragment.getAnchor(), dataNode);
parentFragment.getChildFragments().add(fragmentEntity);
- fragmentRepository.save(parentFragment);
+ try {
+ fragmentRepository.save(parentFragment);
+ } catch (final DataIntegrityViolationException exception) {
+ throw AlreadyDefinedException.forDataNode(dataNode.getXpath(), anchorName, exception);
+ }
+ }
+
+ @Override
+ public void addListDataNodes(final String dataspaceName, final String anchorName, final String parentNodeXpath,
+ final Collection<DataNode> dataNodes) {
+ final FragmentEntity parentFragment = getFragmentByXpath(dataspaceName, anchorName, parentNodeXpath);
+ final List<FragmentEntity> newFragmentEntities =
+ dataNodes.stream().map(
+ dataNode -> toFragmentEntity(parentFragment.getDataspace(), parentFragment.getAnchor(), dataNode)
+ ).collect(Collectors.toUnmodifiableList());
+ parentFragment.getChildFragments().addAll(newFragmentEntities);
+ try {
+ fragmentRepository.save(parentFragment);
+ } catch (final DataIntegrityViolationException exception) {
+ final List<String> conflictXpaths = dataNodes.stream()
+ .map(DataNode::getXpath)
+ .collect(Collectors.toList());
+ throw AlreadyDefinedException.forDataNodes(conflictXpaths, anchorName, exception);
+ }
}
@Override