@Override
    public void run() {
        System.out.println("Execute");

        try {
            OutputStragegy st;
            if (output == null) {
                st = new SimpleDirectoryOutput(new File(System.getProperty("user.dir")), getName());
            } else {
                st = output.getOutputStrategy(getName());
            }
            File outFolder = st.nextOutputFolder();

            // obtain the model
            Compound comp = (Compound) model.getComponent();

            comp.addListener(new Listener() {

                @Override
                public void notice(Type T, EventObject E) {
                    if (T == Type.OUT) {
                        DataflowEvent e = (DataflowEvent) E;
                        System.out.println(e.getAccess().getField().getName() + " in " + e.getAccess().getComponent());
                    }
                }
            });

            // get the initial parameter.
            // Generate GLUE
            GLUE glue = new GLUE(model.getParameter());

            // all runs
            for (int i = 0; i < count; i++) {
                System.out.println("Glue run #" + i);
                glue.newParamSet();

                Map<String, Object> p = model.getParameter();  // eliminate later
                ComponentAccess.setInputData(p, comp, log);
                // run the model
                comp.execute();
            }
            // setting the input data;
            comp.finalizeComponents();
        } catch (Exception E) {
            E.printStackTrace();
        }

    }