1 package org.simantics.scl.commands.internal.serialization;
\r
3 import org.simantics.db.Resource;
\r
4 import org.simantics.scl.commands.internal.StringConverterFactory;
\r
5 import org.simantics.scl.compiler.errors.CompilationErrorFormatter;
\r
6 import org.simantics.scl.compiler.module.repository.ImportFailureException;
\r
7 import org.simantics.scl.compiler.top.SCLExpressionCompilationException;
\r
8 import org.simantics.scl.compiler.types.Type;
\r
9 import org.simantics.scl.runtime.function.Function;
\r
10 import org.simantics.scl.runtime.function.Function2;
\r
12 public class CommandSerializerFactory {
\r
13 @SuppressWarnings("unchecked")
\r
14 public static CommandSerializer create(String name, Type[] parameterTypes) {
\r
15 Function2<Resource,Object,String>[] stringConverters = new Function[parameterTypes.length];
\r
16 for(int i=0;i<parameterTypes.length;++i) {
\r
18 stringConverters[i] = StringConverterFactory.stringConverterFor(parameterTypes[i]);
\r
19 } catch(SCLExpressionCompilationException e) {
\r
20 System.err.println("Failed to create a string converter for type " + parameterTypes[i] + ".");
\r
21 System.err.println(CompilationErrorFormatter.toString(e.getErrors()));
\r
22 return new ErrorSerializer(name);
\r
23 } catch (ImportFailureException e) {
\r
24 System.err.println("Failed to create a string converter for type " + parameterTypes[i] + ".");
\r
25 System.err.println("Didn't find Simantics/GShow/gshow.");
\r
26 return new ErrorSerializer(name);
\r
29 return new CommandSerializerImpl(name, stringConverters);
\r