X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.databoard%2Fsrc%2Forg%2Fsimantics%2Fdataboard%2FFiles.java;fp=bundles%2Forg.simantics.databoard%2Fsrc%2Forg%2Fsimantics%2Fdataboard%2FFiles.java;h=35c8822d558974a8fdfad5662e002eb413106561;hp=cc41e8e9b021254899aa2e942c2f8fc69c81a603;hb=e5a7fd11c1a61fcfcbf481bf01ea8781feeb2b72;hpb=5ef2cc0bbaf6e69c23bd1f26ea2a5ff09b6473ce diff --git a/bundles/org.simantics.databoard/src/org/simantics/databoard/Files.java b/bundles/org.simantics.databoard/src/org/simantics/databoard/Files.java index cc41e8e9b..35c8822d5 100644 --- a/bundles/org.simantics.databoard/src/org/simantics/databoard/Files.java +++ b/bundles/org.simantics.databoard/src/org/simantics/databoard/Files.java @@ -188,8 +188,7 @@ public class Files { public static Datatype readFileType(File file) throws IOException { BinaryFile rf = new BinaryFile( file, "r" ); try { - Binding datatype_binding = Bindings.getBindingUnchecked( Datatype.class ); - return (Datatype) Bindings.getSerializerUnchecked( datatype_binding ).deserialize( rf ); + return (Datatype) Bindings.getSerializerUnchecked( Bindings.DATATYPE ).deserialize( rf ); } finally { rf.close(); } @@ -208,8 +207,7 @@ public class Files { public static Object readFile(File file, Binding binding) throws IOException { BinaryFile rf = new BinaryFile( file, "r" ); try { - Binding datatype_binding = Bindings.getBindingUnchecked( Datatype.class ); - Datatype type = (Datatype) Bindings.getSerializerUnchecked( datatype_binding ).deserialize( rf ); + Datatype type = (Datatype) Bindings.getSerializerUnchecked( Bindings.DATATYPE ).deserialize( rf ); if (type.equals(binding.type())) { return Bindings.getSerializerUnchecked( binding ).deserialize(rf); @@ -229,6 +227,30 @@ public class Files { rf.close(); } } + + public static Object readFileTypeAdapting(File file, Binding binding) throws IOException { + BinaryFile rf = new BinaryFile( file, "r" ); + try { + Datatype type = (Datatype) Bindings.getSerializerUnchecked( Bindings.DATATYPE ).deserialize( rf ); + + if (type.equals(binding.type())) { + return Bindings.getSerializerUnchecked( binding ).deserialize(rf); + } else { + try { + Binding fileContentBinding = Bindings.getMutableBinding(type); + Adapter adapter = Bindings.getTypeAdapter(fileContentBinding, binding); + Object value = Bindings.getSerializerUnchecked( fileContentBinding ).deserialize(rf); + return adapter.adapt( value ); + } catch (AdapterConstructionException e) { + throw new IOException(e); + } catch (AdaptException e) { + throw new IOException(e); + } + } + } finally { + rf.close(); + } + } /** * Read a file to an object. @@ -241,8 +263,7 @@ public class Files { public static void readFile(File file, RecordBinding binding, Object dst) throws IOException { BinaryFile rf = new BinaryFile( file, "r" ); try { - Binding datatype_binding = Bindings.getBindingUnchecked( Datatype.class ); - Datatype type = (Datatype) Bindings.getSerializerUnchecked( datatype_binding ).deserialize( rf ); + Datatype type = (Datatype) Bindings.getSerializerUnchecked( Bindings.DATATYPE ).deserialize( rf ); if (type.equals(binding.type())) { Serializer s = Bindings.getSerializerUnchecked( binding ); @@ -276,8 +297,7 @@ public class Files { */ public static Object readFile(InputStream is, Binding binding) throws IOException { BinaryReadable readable = InputStreamReadable.readFully( is ); - Binding datatype_binding = Bindings.getBindingUnchecked( Datatype.class ); - Datatype type = (Datatype) Bindings.getSerializerUnchecked( datatype_binding ).deserialize( readable ); + Datatype type = (Datatype) Bindings.getSerializerUnchecked( Bindings.DATATYPE ).deserialize( readable ); if (!type.equals(binding.type())) { try { @@ -308,8 +328,7 @@ public class Files { */ public static Object readFile(InputStream is, long streamLength, Binding binding) throws IOException { BinaryReadable readable = new InputStreamReadable( is, streamLength ); - Binding datatype_binding = Bindings.getBindingUnchecked( Datatype.class ); - Datatype type = (Datatype) Bindings.getSerializerUnchecked( datatype_binding ).deserialize( readable ); + Datatype type = (Datatype) Bindings.getSerializerUnchecked( Bindings.DATATYPE ).deserialize( readable ); if (!type.equals(binding.type())) { try {