]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.diagram/src/org/simantics/diagram/synchronization/graph/GraphCopyAdvisor.java
Fixed multiple issues causing dangling references to discarded queries
[simantics/platform.git] / bundles / org.simantics.diagram / src / org / simantics / diagram / synchronization / graph / GraphCopyAdvisor.java
1 /*******************************************************************************
2  * Copyright (c) 2007, 2010 Association for Decentralized Information Management
3  * in Industry THTH ry.
4  * All rights reserved. This program and the accompanying materials
5  * are made available under the terms of the Eclipse Public License v1.0
6  * which accompanies this distribution, and is available at
7  * http://www.eclipse.org/legal/epl-v10.html
8  *
9  * Contributors:
10  *     VTT Technical Research Centre of Finland - initial API and implementation
11  *******************************************************************************/
12 package org.simantics.diagram.synchronization.graph;
13
14 import java.util.Map;
15
16 import org.simantics.db.Resource;
17 import org.simantics.db.WriteGraph;
18 import org.simantics.db.common.utils.Logger;
19 import org.simantics.db.exception.DatabaseException;
20 import org.simantics.diagram.synchronization.CopyAdvisor;
21 import org.simantics.diagram.synchronization.ISynchronizationContext;
22 import org.simantics.diagram.synchronization.SynchronizationException;
23
24 /**
25  * @author Tuukka Lehtonen
26  */
27 public abstract class GraphCopyAdvisor implements CopyAdvisor {
28
29     @Override
30     public final Evaluation canCopy(ISynchronizationContext context, Object source, Object sourceContainer, Object targetContainer) {
31         if (!(source instanceof Resource))
32             return Evaluation.NOT_SUPPORTED;
33         
34 //        if (!(sourceContainer instanceof Resource))
35 //            return Evaluation.NOT_SUPPORTED;
36 //        if (!(targetContainer instanceof Resource))
37 //            return Evaluation.NOT_SUPPORTED;
38
39         Resource resource = (Resource) source;
40         Resource sourceCont = (Resource) sourceContainer;
41         Resource targetCont = (Resource) targetContainer;
42
43         WriteGraph graph = context.get(GraphSynchronizationHints.WRITE_TRANSACTION);
44         if (graph == null)
45             return Evaluation.NOT_SUPPORTED;
46
47         try {
48             return canCopy(context, graph, resource, sourceCont, targetCont);
49         } catch (DatabaseException e) {
50             Logger.defaultLogError(e);
51             return Evaluation.NOT_SUPPORTED;
52         }
53     }
54
55     @Override
56     public final Object copy(ISynchronizationContext context, Object source, Object sourceContainer, Object targetContainer) {
57         
58         if (!(source instanceof Resource))
59             return null;
60         
61 //        if (!(sourceContainer instanceof Resource))
62 //            return null;
63 //        if (!(targetContainer instanceof Resource))
64 //            return null;
65
66         Resource resource = (Resource) source;
67         Resource sourceCont = (Resource) sourceContainer;
68         Resource targetCont = (Resource) targetContainer;
69
70         WriteGraph graph = context.get(GraphSynchronizationHints.WRITE_TRANSACTION);
71         if (graph == null)
72             throw new SynchronizationException("no write transaction");
73         try {
74             return copy(context, graph, resource, sourceCont, targetCont);
75         } catch (DatabaseException e) {
76             throw new SynchronizationException(e);
77         }
78     }
79
80     @Override
81     public final Object copy(ISynchronizationContext context, Object source, Object sourceContainer, Object targetContainer, Map<Object, Object> map) {
82
83         if (!(source instanceof Resource))
84             return null;
85         
86 //        if (!(sourceContainer instanceof Resource))
87 //            return null;
88 //        if (!(targetContainer instanceof Resource))
89 //            return null;
90
91         Resource resource = (Resource) source;
92         Resource sourceCont = (Resource) sourceContainer;
93         Resource targetCont = (Resource) targetContainer;
94
95         WriteGraph graph = context.get(GraphSynchronizationHints.WRITE_TRANSACTION);
96         if (graph == null)
97             throw new SynchronizationException("no write transaction");
98         try {
99             return copy(context, graph, resource, sourceCont, targetCont, map);
100         } catch (DatabaseException e) {
101             throw new SynchronizationException(e);
102         }
103     }
104
105     @Override
106     public final Object cut(ISynchronizationContext context, Object source, Object sourceContainer, Object targetContainer) {
107         
108         if (!(source instanceof Resource))
109             return null;
110         
111 //        if (!(sourceContainer instanceof Resource))
112 //            return null;
113 //        if (!(targetContainer instanceof Resource))
114 //            return null;
115
116         Resource resource = (Resource) source;
117         Resource sourceCont = (Resource) sourceContainer;
118         Resource targetCont = (Resource) targetContainer;
119
120         WriteGraph graph = context.get(GraphSynchronizationHints.WRITE_TRANSACTION);
121         if (graph == null)
122             throw new SynchronizationException("no write transaction");
123
124         try {
125             return cut(context, graph, resource, sourceCont, targetCont);
126         } catch (DatabaseException e) {
127             throw new SynchronizationException(e);
128         }
129     }
130
131     @Override
132     public void onFinish(ISynchronizationContext context) {
133
134         WriteGraph graph = context.get(GraphSynchronizationHints.WRITE_TRANSACTION);
135         if (graph == null)
136             throw new SynchronizationException("no write transaction");
137         
138         try {
139                         onFinish(context, graph);
140         } catch (DatabaseException e) {
141             throw new SynchronizationException(e);
142         }
143         
144     }
145     
146     public void onFinish(ISynchronizationContext context, WriteGraph graph) throws DatabaseException {
147         
148     }
149
150     public abstract Evaluation canCopy(ISynchronizationContext context, WriteGraph graph, Resource source,
151             Resource sourceContainer, Resource targetContainer) throws DatabaseException;
152
153     public abstract Object copy(ISynchronizationContext context, WriteGraph graph, Resource source,
154             Resource sourceContainer, Resource targetContainer) throws DatabaseException;
155
156     public abstract Object copy(ISynchronizationContext context, WriteGraph graph, Resource source,
157             Resource sourceContainer, Resource targetContainer, Map<Object, Object> map) throws DatabaseException;
158
159     public abstract Object cut(ISynchronizationContext context, WriteGraph graph, Resource source,
160             Resource sourceContainer, Resource targetContainer) throws DatabaseException;
161     
162 }