package water.api; import water.DKV; import water.Key; import water.api.schemas3.KeyV3; import water.api.schemas99.AssemblyV99; import water.rapids.Assembly; import water.rapids.transforms.Transform; import water.fvec.Frame; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; public class AssemblyHandler extends Handler { public AssemblyV99 fit(int version, AssemblyV99 ass) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException { if( ass==null ) return null; if( ass.steps == null ) return ass; // process assembly: // of the form [name__class__ast__inplace__names, name__class__ast__inplace__names, ...] // s[0] : stepName // s[1] : transform class // s[2] : ast (can be noop) // s[3] : inplace // s[4] : names ArrayList<Transform> steps = new ArrayList<>(); for(String step: ass.steps) { String[] s = step.split("__"); Class transformClass = Class.forName("water.rapids.transforms."+s[1]); Class[] constructorTypes = new Class[]{String.class /*name*/, String.class /*ast*/, boolean.class /*inplace*/, String[].class /*newNames*/}; Object[] constructorArgs = new Object[]{s[0], s[2], Boolean.valueOf(s[3]), s[4].equals("|")?null:s[4].split("\\|")}; steps.add((Transform) transformClass.getConstructor(constructorTypes).newInstance(constructorArgs)); } Assembly assembly = new Assembly(Key.make("assembly_"+Key.make().toString()), steps.toArray(new Transform[steps.size()])); ass.result = new KeyV3.FrameKeyV3(assembly.fit((Frame)DKV.getGet(ass.frame.key()))._key); ass.assembly = new KeyV3.AssemblyKeyV3(assembly._key); DKV.put(assembly); return ass; } public AssemblyV99 toJava(int version, AssemblyV99 ass) { return ass; } }