1 /*******************************************************************************
\r
2 * Copyright (c) 2007, 2010 Association for Decentralized Information Management
\r
3 * in Industry THTH ry.
\r
4 * All rights reserved. This program and the accompanying materials
\r
5 * are made available under the terms of the Eclipse Public License v1.0
\r
6 * which accompanies this distribution, and is available at
\r
7 * http://www.eclipse.org/legal/epl-v10.html
\r
10 * VTT Technical Research Centre of Finland - initial API and implementation
\r
11 *******************************************************************************/
\r
12 package org.simantics.modeling.typicals;
\r
14 import java.util.ArrayList;
\r
16 import org.simantics.db.ReadGraph;
\r
17 import org.simantics.db.Resource;
\r
18 import org.simantics.db.common.NamedResource;
\r
19 import org.simantics.db.common.request.ObjectsWithType;
\r
20 import org.simantics.db.exception.DatabaseException;
\r
21 import org.simantics.db.layer0.util.TransferableGraphConfiguration2;
\r
22 import org.simantics.diagram.stubs.DiagramResource;
\r
23 import org.simantics.layer0.Layer0;
\r
24 import org.simantics.modeling.ModelingResources;
\r
25 import org.simantics.modeling.ModelingUtils.CompositeInfo;
\r
26 import org.simantics.modeling.ModelingUtils.DiagramComponentInfo;
\r
27 import org.simantics.modeling.adapters.CompositeCopyHandler;
\r
28 import org.simantics.structural.stubs.StructuralResource2;
\r
31 * @author Tuukka Lehtonen
\r
33 public class TypicalCompositeCopyHandler extends CompositeCopyHandler {
\r
35 public TypicalCompositeCopyHandler(Resource composite) {
\r
40 protected TransferableGraphConfiguration2 createConfiguration(ReadGraph graph, boolean cut) throws DatabaseException {
\r
42 Layer0 L0 = Layer0.getInstance(graph);
\r
43 StructuralResource2 SR = StructuralResource2.getInstance(graph);
\r
44 DiagramResource DIA = DiagramResource.getInstance(graph);
\r
45 ModelingResources MOD = ModelingResources.getInstance(graph);
\r
47 Resource resource = getResource();
\r
50 ArrayList<Resource> exclusions = new ArrayList<Resource>();
\r
51 for(Resource join : graph.getObjects(resource, SR.HasConnectionJoin)) {
\r
52 // Internals are included
\r
53 if(graph.getPossibleObject(join, SR.JoinsComposite) != null) continue;
\r
54 // Externals are omitted
\r
55 exclusions.add(join);
\r
57 // Exclude both composite and possible diagram types from copy
\r
58 for (Resource type : graph.getObjects(resource, L0.InstanceOf)) {
\r
59 if (graph.isInheritedFrom(type, MOD.TypicalComposite)) {
\r
60 exclusions.add(type);
\r
63 Resource diagram = graph.getPossibleObject(resource, MOD.CompositeToDiagram);
\r
64 if (diagram != null) {
\r
65 for (Resource type : graph.getObjects(diagram, L0.InstanceOf)) {
\r
66 if (graph.isInheritedFrom(type, DIA.Diagram)) {
\r
67 exclusions.add(type);
\r
72 ArrayList<NamedResource> roots = new ArrayList<NamedResource>();
\r
73 // Include resource as root
\r
74 CompositeInfo info = CompositeInfo.fromResource(graph, resource);
\r
75 //String rootName = graph.getRelatedValue(resource, L0.HasName, Bindings.STRING);
\r
76 roots.add(new NamedResource(info.getTGName(), resource));
\r
77 // Include components as roots
\r
78 for(Resource child : graph.sync(new ObjectsWithType(resource, L0.ConsistsOf, SR.Component))) {
\r
79 DiagramComponentInfo cinfo = DiagramComponentInfo.fromResource(graph, info, child);
\r
80 roots.add(new NamedResource(cinfo.getTGName(info), child));
\r
83 TransferableGraphConfiguration2 result = TransferableGraphConfiguration2.createWithNames(graph, roots, exclusions, true, false);
\r