source: java/main/src/main/java/com/framsticks/gui/TreeAtFrame.java @ 105

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

HIGHLIGHTS:

  • import refactorization: move Tree, Path, etc.

from core to structure package

  • initial serialization implementation
  • improve PrimeExperiment? test
  • many organizational changes and convenience improvements

CHANGELOG:
Make registry in AbstractTree? final.

Move most classes from core to structure package.

Minor changes.

Switch names of Future and FutureHandler?.

Rename ExceptionResultHandler? to ExceptionHandler?.

Rename ExceptionHandler? to ExceptionDispatcherHandler?.

Fix bug in ParamCandidate? cache.

Add missing synchronization to the BufferedDispatcher?.

Develop @Serialized support.

Rework serialization further.

Add serialization/deserialization interface to ValueParam?.

Move getStorageType and isNumeric from Param down to params hierarchy.

Minor changes.

Improve param type induction.

Add TestSerializedClass? for testing new serialization.

Add info files gor GenePool? and Population.

Add standard.expt exemplary netfile.

Add type name field to PropertiesObject?.

Use PropertiesObject? for PropertiesAccess? instead of ordinary map.

Hide getFramsClass is several more places.

More unification accross FramsClass?, Access and Path.

Add ParamCollection?.

Simplify interface for getting params from FramsClass?, Access
or Path.

Make Access.call() interface variadic.

Add arguments(args) convenience wrapper around new Object[] {args}.

Upgrade to apache.commons.lang version 3.1

Minor improvement with Response constructors.

Develop proper result printing in ClientAtServer?.

Add experimentNetsave to PrimeExperiment?.

File size: 3.1 KB
Line 
1package com.framsticks.gui;
2
3import org.apache.logging.log4j.Logger;
4import org.apache.logging.log4j.LogManager;
5
6import com.framsticks.gui.controls.ValueControl;
7import com.framsticks.params.CompositeParam;
8import com.framsticks.params.FramsClass;
9import com.framsticks.params.PrimitiveParam;
10
11import java.util.*;
12import static com.framsticks.params.ParamsUtil.getParam;
13import static com.framsticks.structure.TreeOperations.*;
14
15import com.framsticks.structure.Node;
16import com.framsticks.structure.Path;
17import com.framsticks.structure.SideNoteKey;
18import com.framsticks.structure.Tree;
19import com.framsticks.util.dispatching.Future;
20
21/**
22 * @author Piotr Sniegowski
23 */
24public class TreeAtFrame {
25
26        private static final Logger log = LogManager.getLogger(TreeAtFrame.class);
27
28        protected final Frame frame;
29        protected final Tree tree;
30        protected final Map<String, TreePanel> knownPanels = new HashMap<>();
31        protected Node rootNode;
32
33        protected final SideNoteKey<UserChanges> userChangesKey = SideNoteKey.make(UserChanges.class);
34
35        public TreeAtFrame(Tree tree, Frame frame) {
36                this.frame = frame;
37                this.tree = tree;
38        }
39
40        public Frame getFrame() {
41                return frame;
42        }
43
44        /**
45         * @return the tree
46         */
47        public Tree getTree() {
48                return tree;
49        }
50
51        /**
52         * @return the userChangesKey
53         */
54        public SideNoteKey<UserChanges> getUserChangesKey() {
55                return userChangesKey;
56        }
57
58        public final String getName() {
59                return tree.getName();
60        }
61
62        public TreePanel preparePanel(final CompositeParam param) {
63                assert frame.isActive();
64
65                TreePanel panel = knownPanels.get(param.getFramsTypeName());
66                if (panel != null) {
67                        return panel;
68                }
69
70                final FramsClass framsClass = tree.getInfoFromCache(param.getContainedTypeName());
71                final List<TreePanel> panels = new ArrayList<TreePanel>();
72
73                final TreePanel.Parameters parameters = new TreePanel.Parameters(this, param, framsClass);
74                for (PanelProvider pp : frame.browser.panelProviders) {
75                        TreePanel p = pp.providePanel(parameters);
76                        if (p != null) {
77                                panels.add(p);
78                        }
79                }
80
81                if (panels.isEmpty()) {
82                        panel = new EmptyTreePanel(parameters);
83                } else  if (panels.size() == 1) {
84                        panel = panels.get(0);
85                } else {
86                        panel = new MultiPanel(parameters, panels);
87                }
88
89                knownPanels.put(param.getFramsTypeName(), panel);
90
91                log.debug("prepared panel for {}", panel);
92                return panel;
93        }
94
95        public boolean changeValue(Object object, ValueControl component, Object newValue) {
96                log.debug("changing value of {} to '{}'", component, newValue);
97
98                getOrCreateSideNote(tree, object, userChangesKey).changes.put(component.getParam().getId(), newValue);
99
100                return true;
101        }
102
103
104        public void pushUserChangesToTree(final Path path) {
105                assert frame.isActive();
106                path.assureResolved();
107
108                final UserChanges userChanges = getSideNote(path, userChangesKey);
109                if (userChanges == null) {
110                        return;
111                }
112                removeSideNote(path, userChangesKey);
113
114                for (final Map.Entry<String, Object> e : userChanges.changes.entrySet()) {
115                        set(path, getParam(path, e.getKey(), PrimitiveParam.class), e.getValue(), new Future<Integer>(frame) {
116                                @Override
117                                protected void result(Integer flag) {
118                                        assert frame.isActive();
119                                        userChanges.changes.remove(e.getKey());
120                                }
121                        });
122                }
123        }
124
125}
Note: See TracBrowser for help on using the repository browser.