import org.simantics.db.ReadGraph;
import org.simantics.db.Resource;
import org.simantics.db.WriteGraph;
+import org.simantics.db.common.utils.NameUtils;
import org.simantics.db.exception.DatabaseException;
import org.simantics.db.layer0.adapter.PasteHandlerAdapter;
import org.simantics.db.layer0.internal.SimanticsInternal;
Collection<Resource> result = new ArrayList<>();
+
+ // Check if root resource is allowed for pasting
+ checkIfRootAllowsPaste(graph);
+
Map<String,Object> hints = Collections.singletonMap(ClipboardUtils.HINT_TARGET_RESOURCE, resource);
onPasteBegin(graph);
}
+ protected void checkIfRootAllowsPaste(ReadGraph graph) throws DatabaseException {
+ Layer0 L0 = Layer0.getInstance(graph);
+ // check if root is published
+ Boolean published = graph.getPossibleRelatedValue(resource, L0.Entity_published);
+ if (published != null && published) {
+ throw new DatabaseException("Target resource " + NameUtils.getSafeName(graph, resource) + " is published and does not allow paste.");
+ }
+ }
+
@SuppressWarnings("rawtypes")
@Override
public Object getAdapter(Class adapter) {