]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/impl/RangeUpdateRequest.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.objmap2 / src / org / simantics / objmap / graph / impl / RangeUpdateRequest.java
1 /*******************************************************************************\r
2  * Copyright (c) 2007, 2013 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
8  *\r
9  * Contributors:\r
10  *     VTT Technical Research Centre of Finland - initial API and implementation\r
11  *******************************************************************************/\r
12 package org.simantics.objmap.graph.impl;\r
13 \r
14 import org.simantics.db.ReadGraph;\r
15 import org.simantics.db.exception.DatabaseException;\r
16 import org.simantics.db.procedure.SyncListener;\r
17 import org.simantics.db.request.Read;\r
18 \r
19 import org.simantics.objmap.exceptions.MappingException;\r
20 import org.simantics.objmap.forward.IForwardMapping;\r
21 import org.simantics.objmap.graph.impl.Link;\r
22 \r
23 \r
24 public class RangeUpdateRequest<Domain,Range> implements Read<Boolean>, SyncListener<Boolean> {\r
25 \r
26     Link<Domain,Range> link;\r
27     /*\r
28      * Note that this map uses a read request that it has got from caller and \r
29      * not the one that is used in updateRange. This is intentional.\r
30      */\r
31     IForwardMapping<Domain, Range> map; // map==null is used to flag that request is performed once\r
32     Mapping<Domain, Range> mapping; // mapping==null is used as a flag the request disposed\r
33     \r
34     public RangeUpdateRequest(Link<Domain,Range> link, IForwardMapping<Domain,Range> map, Mapping<Domain,Range> mapping) {\r
35         this.link = link;\r
36         this.map = map;\r
37         this.mapping = mapping;\r
38     }\r
39 \r
40     @Override\r
41     public Boolean perform(ReadGraph g) throws DatabaseException {\r
42         if(map != null) {\r
43             link.type.updateRange(g, map, link.domainElement, link.rangeElement);\r
44             map = null;\r
45             return Boolean.TRUE;\r
46         }\r
47         else if(mapping != null) {\r
48             mapping.domainModified(link);\r
49             mapping = null;\r
50             return Boolean.FALSE;\r
51         }\r
52         else\r
53             return null;\r
54     }\r
55     \r
56     @Override\r
57     public void exception(ReadGraph graph, Throwable throwable)\r
58             throws DatabaseException {\r
59         if(throwable instanceof DatabaseException)\r
60             throw (DatabaseException)throwable;\r
61         else\r
62             throw new MappingException(throwable);\r
63     }\r
64 \r
65     @Override\r
66     public void execute(ReadGraph graph, Boolean result)\r
67             throws DatabaseException {       \r
68     }\r
69 \r
70     @Override\r
71     public boolean isDisposed() {\r
72         return mapping == null || link.removed || mapping.isDisposed();\r
73     }\r
74     \r
75     \r
76     \r
77 }\r