]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.diagram/src/org/simantics/diagram/adapter/NodeClassRequest.java
Combination of Simantics-platform related changes and fixes for district
[simantics/platform.git] / bundles / org.simantics.diagram / src / org / simantics / diagram / adapter / NodeClassRequest.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.adapter;
13
14 import org.simantics.db.AsyncReadGraph;
15 import org.simantics.db.Resource;
16 import org.simantics.db.procedure.AsyncProcedure;
17 import org.simantics.g2d.canvas.ICanvasContext;
18 import org.simantics.g2d.diagram.IDiagram;
19 import org.simantics.g2d.element.ElementClass;
20
21 public class NodeClassRequest extends BaseRequest2<Resource, ElementClass> {
22
23     private final IDiagram diagram;
24     private final boolean exceptionOnAdaptionFailure;
25
26     public NodeClassRequest(ICanvasContext canvas, IDiagram diagram, Resource resource) {
27         this(canvas, diagram, resource, false);
28     }
29
30     public NodeClassRequest(ICanvasContext canvas, IDiagram diagram, Resource resource, boolean exceptionOnAdaptionFailure) {
31         super(canvas, resource);
32         this.diagram = diagram;
33         this.exceptionOnAdaptionFailure = exceptionOnAdaptionFailure;
34     }
35
36     @Override
37     public void perform(AsyncReadGraph graph, final AsyncProcedure<ElementClass> procedure) {
38
39 //        System.out.println("NodeClassRequest " + data.getResourceId());
40 //        graph.asyncRequest(new SafeName(data), new Procedure<String>() {
41 //            @Override
42 //            public void exception(Throwable t) {
43 //            }
44 //            @Override
45 //            public void execute(String result) {
46 //                System.out.println("NodeClassRequest "  + result);
47 //                debug = result;
48 //            }
49 //        });
50
51         graph.forAdapted(data, ElementFactory.class, new AsyncProcedure<ElementFactory>() {
52
53             @Override
54             public void exception(AsyncReadGraph graph, Throwable throwable) {
55                 if (exceptionOnAdaptionFailure)
56                     procedure.exception(graph, throwable);
57                 else
58                     procedure.execute(graph, null);
59             }
60
61             @Override
62             public void execute(AsyncReadGraph graph, final ElementFactory factory) {
63
64 //                System.out.println("NodeClassRequest factory " + data.getResourceId() + " = " + factory.getClass().getName());
65 //                graph.asyncRequest(new SafeName(data), new Procedure<String>() {
66 //                    @Override
67 //                    public void exception(Throwable t) {
68 //                    }
69 //                    @Override
70 //                    public void execute(String result) {
71 //                        System.out.println("NodeClassRequest "  + result + " " + factory.getClass().getName());
72 //                        debug = result;
73 //                    }
74 //                });
75
76                 if (factory == null) {
77                     // Should never happen since we are using forAdapted
78                     System.out.println("No factory in NodeClassRequest! " + this);
79                     procedure.execute(graph, null);
80                     return;
81                 }
82
83                 factory.create(graph, canvas, diagram, data, new AsyncProcedure<ElementClass>() {
84
85                     @Override
86                     public void exception(AsyncReadGraph graph, Throwable throwable) {
87                         procedure.exception(graph, throwable);
88                     }
89
90                     @Override
91                     public void execute(AsyncReadGraph graph, ElementClass ec) {
92 //                        System.out.println("Produced element class " + ec);
93                         procedure.execute(graph, ec);
94                     }
95
96                 });
97
98             }
99
100         });
101
102     }
103
104 }