source: java/main/src/main/java/com/framsticks/gui/controls/ProcedureControl.java @ 103

Last change on this file since 103 was 103, checked in by psniegowski, 11 years ago

HIGHLIGHTS:

  • add auto loading and saving algorithms between

frams files format and Java classes

  • respect ValueChange? events in GUI (do not reload object)
  • support results of procedures in Java server
  • make Experiment automatically convert between frams file and NetFile? object
  • add MessageLogger? (compatible with original frams server messages)
  • WorkPackageLogic? now validates results, is able to discard them, reschedule

whole package, or only uncomputed remainder

CHANGELOG:
Show just a short description in PrimeExperiment?.

Add primes_changed event to the PrimeExperiment?.

Make WorkPackageLogic? robust to frams server returning invalid results.

Add MessageLogger? to logics.

Add NetFile? interface. Support Messages from server.

Minor changes to connections.

Merge results in the PrimeExperiment?.

More netload class->file conversion to Simulator.

Move netsave parsing to Simulator.

Fix bug with inverted ordering of events firing in Experiment.

Minor changes.

Minor logging changes.

Use AccessOperations?.convert in NetLoadSaveLogic?

NetLoadSaveLogic? now encloses the conversion.

Use more generic AccessOperations? saveAll and loadAll in PrimePackage?.

Add Result class for enclosing of call invocations' results.

Improve feature request handling in Connections.

Use AccessOperations?.convert in RemoteTree? events parsing.

Minor change.

Add some information params to Java server root and CLI objects.

A draft implementation of loadAll algorithm.

That algorithm tries to load objects into a tree structure.

Add AccessOperationsTest? test.

Develop WorkPackageLogic?.

  • add state tracking fields
  • add work package generation

Add utility class SimplePrimitive?.

Meant for Java backend classes, enclose a single primitive value
and set of listeners.

Improve primitive value refresh in GUI.

When ValueChange? found in called event, do not reload whole
object, but only update GUI (no communication is performed).

Use ValueChange? in the TestClass? test.

Minor changes.

Sending all packages in PrimeExperiment? to the frams servers.

Develop AccessOperations?.loadComposites().

Remove addAccess from MultiParamLoader? interface.

There is now no default AccessProvider? in MultiParamLoader?.
User must explicitely set AccessStash? or Registry.

Improve saving algorithms in AccessOperations?.

File size: 2.8 KB
Line 
1package com.framsticks.gui.controls;
2
3import com.framsticks.core.Path;
4import com.framsticks.gui.Frame;
5import com.framsticks.gui.Gui;
6import com.framsticks.params.Param;
7import com.framsticks.params.types.ProcedureParam;
8import com.framsticks.util.dispatching.FutureHandler;
9
10import javax.swing.*;
11
12import org.apache.logging.log4j.Logger;
13import org.apache.logging.log4j.LogManager;
14
15import java.awt.event.ActionEvent;
16import java.awt.event.ActionListener;
17import java.util.HashMap;
18import java.util.LinkedList;
19import java.util.List;
20import java.util.Map;
21
22@SuppressWarnings("serial")
23public class ProcedureControl extends HistoryControl implements ControlOwner {
24
25        private static final Logger log = LogManager.getLogger(ProcedureControl.class);
26
27        protected final JPanel argumentsPanel;
28
29        final protected Map<String, ValueControl> components = new HashMap<>();
30
31        public ProcedureControl(ProcedureParam procedureParam) {
32                super(procedureParam);
33
34
35                mainButton.setText("Call");
36                mainButton.setName("call");
37
38
39                argumentsPanel = new JPanel();
40                argumentsPanel.setName("arguments");
41
42                Gui.fillWithControls(this, argumentsPanel, procedureParam.getArgumentsType(), components, ValueControl.class);
43
44                if (components.size() != procedureParam.getArgumentsType().size()) {
45                        mainButton.setEnabled(false);
46                }
47
48                mainButton.addActionListener(new ActionListener() {
49                        @Override
50                        public void actionPerformed(ActionEvent e) {
51
52                                final Path path = getCurrentPath();
53
54                                final List<Object> arguments = new LinkedList<Object>();
55                                for (Param arg : getParam().getArgumentsType()) {
56                                        Object value = components.get(arg.getId()).getCurrentValue();
57                                        arguments.add(value);
58                                        log.debug("argument {}: {}", arg, value);
59                                }
60                                callProcedure(path, getParam(), arguments.toArray(), getFrame());
61
62                        }
63                });
64
65                updateFoldState();
66                Gui.setupTitledControl(this, argumentsPanel, controlRow, resultsScrollPane);
67
68        }
69
70
71        public static void callProcedure(final Path path, final ProcedureParam param, Object[] arguments, Frame frame) {
72
73                assert path.getTree().isActive();
74
75                path.getTree().call(path, param, arguments, Object.class, new FutureHandler<Object>(frame) {
76
77                        @Override
78                        public void result(Object result) {
79
80                        }
81                });
82        }
83
84        @Override
85        public ProcedureParam getParam() {
86                return (ProcedureParam) param;
87        }
88
89        @Override
90        protected void updateEnabled(boolean enabled) {
91                mainButton.setEnabled(enabled);
92                for (ValueControl vc : components.values()) {
93                        vc.setUserEnabled(enabled);
94                }
95        }
96
97        @Override
98        public Frame getFrame() {
99                return owner.getFrame();
100        }
101
102        @Override
103        public Path getCurrentPath() {
104                return owner.getCurrentPath();
105        }
106
107        @Override
108        public boolean onValueChange(ValueControl control, Object newValue) {
109                return true;
110        }
111
112        @Override
113        protected void refreshTable() {
114
115        }
116
117        @Override
118        protected void clearTable() {
119
120        }
121
122}
Note: See TracBrowser for help on using the repository browser.