--- /dev/null
+package org.simantics.db.layer0.util;\r
+\r
+import org.simantics.databoard.accessor.error.AccessorException;\r
+import org.simantics.databoard.binding.Binding;\r
+import org.simantics.databoard.type.Datatype;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.db.service.SerialisationSupport;\r
+import org.simantics.graph.utils.TGResourceUtil;\r
+import org.simantics.graph.utils.TGResourceUtil.LongAdapter;\r
+\r
+public class ResourceTGValueModifier implements TGValueModifier {\r
+\r
+ final private TGResourceUtil util = new TGResourceUtil();\r
+ final private SerialisationSupport ss;\r
+ \r
+ public ResourceTGValueModifier(SerialisationSupport ss) {\r
+ this.ss = ss;\r
+ }\r
+ \r
+ @Override\r
+ public boolean mayNeedModification(Datatype type) {\r
+ return util.mayHaveResource(type);\r
+ }\r
+\r
+ @Override\r
+ public Object modify(final DomainProcessorState state, Binding binding, Object value) throws DatabaseException {\r
+ \r
+ try {\r
+ \r
+ util.adaptValue( binding, value, new LongAdapter() {\r
+ @Override\r
+ public long adapt(long in) {\r
+ try {\r
+ int shortId = ss.getTransientId(in);\r
+ return state.ids.get(shortId);\r
+ } catch (DatabaseException e) {\r
+ e.printStackTrace();\r
+ }\r
+ return in;\r
+ } \r
+ });\r
+ \r
+ return value;\r
+ \r
+ } catch (AccessorException e) {\r
+ \r
+ throw new DatabaseException(e);\r
+ \r
+ }\r
+ \r
+ }\r
+\r
+}\r