1 package org.scilab.modules.xcos.block;
4 import java.io.IOException;
6 import org.scilab.modules.hdf5.scilabTypes.ScilabDouble;
7 import org.scilab.modules.hdf5.scilabTypes.ScilabList;
8 import org.scilab.modules.xcos.io.BlockReader;
9 import org.scilab.modules.xcos.utils.XcosInterpreterManagement;
10 import org.scilab.modules.xcos.utils.XcosInterpreterManagement.InterpreterException;
12 public abstract class ContextUpdate extends BasicBlock{
14 private static final long serialVersionUID = 6076826729067963560L;
17 * This enum represent all the subclasses of ContextUpdate .
19 * It is used to easily loop over a BasicBlock I/O blocks
21 public enum IOBlocks {
22 EventInBlock(EventInBlock.class),
23 EventOutBlock(EventOutBlock.class),
24 ExplicitInBlock(ExplicitInBlock.class),
25 ExplicitOutBlock(ExplicitOutBlock.class),
26 ImplicitInBlock(ImplicitInBlock.class),
27 ImplicitOutBlock(ImplicitOutBlock.class),
28 Unknow(ContextUpdate.class);
30 private Class<? extends ContextUpdate> klass;
32 private IOBlocks(Class<? extends ContextUpdate> klass) {
36 public Class<? extends ContextUpdate> getReferencedClass() {
41 public ContextUpdate() {
45 protected ContextUpdate(String label) {
52 * Initialize the block with the default values
55 protected void setDefaultValues() {
56 super.setDefaultValues();
57 setNbZerosCrossing(new ScilabDouble(0));
58 setNmode(new ScilabDouble(0));
59 setODState(new ScilabList());
63 public void onContextChange(String[] context) {
64 //prevent to open twice
69 final File tempOutput;
71 final File tempContext;
73 tempInput = File.createTempFile("xcos",".h5");
74 tempInput.deleteOnExit();
77 tempOutput = exportBlockStruct();
79 tempContext = exportContext(context);
83 cmd = "xcosBlockEval(\""+tempOutput.getAbsolutePath()+"\"";
84 cmd += ", \""+tempInput.getAbsolutePath()+"\"";
85 cmd += ", "+getInterfaceFunctionName();
86 cmd += ", \""+tempContext.getAbsolutePath()+"\");";
89 XcosInterpreterManagement.synchronousScilabExec(cmd);
90 } catch (InterpreterException e) {
93 BasicBlock modifiedBlock = BlockReader.readBlockFromFile(tempInput.getAbsolutePath());
94 updateBlockSettings(modifiedBlock);
96 } catch (IOException e) {