]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/util/ResourceTGValueModifier.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.db.layer0 / src / org / simantics / db / layer0 / util / ResourceTGValueModifier.java
1 package org.simantics.db.layer0.util;\r
2 \r
3 import org.simantics.databoard.accessor.error.AccessorException;\r
4 import org.simantics.databoard.binding.Binding;\r
5 import org.simantics.databoard.type.Datatype;\r
6 import org.simantics.db.exception.DatabaseException;\r
7 import org.simantics.db.service.SerialisationSupport;\r
8 import org.simantics.graph.utils.TGResourceUtil;\r
9 import org.simantics.graph.utils.TGResourceUtil.LongAdapter;\r
10 \r
11 public class ResourceTGValueModifier implements TGValueModifier {\r
12 \r
13         final private TGResourceUtil util = new TGResourceUtil();\r
14         final private SerialisationSupport ss;\r
15         \r
16         public ResourceTGValueModifier(SerialisationSupport ss) {\r
17                 this.ss = ss;\r
18         }\r
19         \r
20         @Override\r
21         public boolean mayNeedModification(Datatype type) {\r
22                 return util.mayHaveResource(type);\r
23         }\r
24 \r
25         @Override\r
26         public Object modify(final DomainProcessorState state, Binding binding, Object value) throws DatabaseException {\r
27                 \r
28                 try {\r
29                         \r
30                         util.adaptValue( binding, value, new LongAdapter() {\r
31                                 @Override\r
32                                 public long adapt(long in) {\r
33                                         try {\r
34                                                 int shortId = ss.getTransientId(in);\r
35                                                 return state.ids.get(shortId);\r
36                                         } catch (DatabaseException e) {\r
37                                                 e.printStackTrace();\r
38                                         }\r
39                                         return in;\r
40                                 }                       \r
41                         });\r
42                         \r
43                         return value;\r
44                         \r
45                 } catch (AccessorException e) {\r
46                         \r
47                         throw new DatabaseException(e);\r
48                         \r
49                 }\r
50                 \r
51         }\r
52 \r
53 }\r