source: java/main/src/main/java/com/framsticks/experiment/NetLoadSaveLogic.java @ 193

Last change on this file since 193 was 193, checked in by Maciej Komosinski, 10 years ago

Set svn:eol-style native for all textual files

  • Property svn:eol-style set to native
File size: 3.2 KB
RevLine 
[102]1package com.framsticks.experiment;
2
3
4import org.apache.logging.log4j.Logger;
5import org.apache.logging.log4j.LogManager;
6
7import com.framsticks.params.EventListener;
[103]8import com.framsticks.params.MessageLogger;
[102]9import com.framsticks.params.annotations.FramsClassAnnotation;
10import com.framsticks.params.annotations.ParamAnnotation;
[105]11import com.framsticks.structure.messages.ListChange;
12import com.framsticks.structure.messages.Message;
13import com.framsticks.util.dispatching.FutureHandler;
[102]14import com.framsticks.util.dispatching.Future;
15
16@FramsClassAnnotation
[103]17public abstract class NetLoadSaveLogic<NF extends NetFile> extends AbstractExperimentLogic {
[102]18        private static final Logger log = LogManager.getLogger(NetLoadSaveLogic.class);
19
20
[103]21        protected final Class<NF> netJavaClass;
22
23        protected final MessageLogger messages = new MessageLogger(NetLoadSaveLogic.class);
24
[102]25        /**
26         * @param experiment
27         */
[103]28        public NetLoadSaveLogic(Experiment parentExperiment, Class<NF> netJavaClassArg) {
[102]29                super(parentExperiment);
[103]30                this.netJavaClass = netJavaClassArg;
[102]31
32                experiment.addSimulatorsListener(new EventListener<ListChange>() {
33
34                        @Override
[103]35                        public void action(final ListChange change) {
[102]36                                assert experiment.isActive();
[103]37                                final Simulator simulator = experiment.getSimulators().get(change.getIdentifier());
38                                log.debug("processing list change: {}", change);
[102]39
[103]40                                if (change.getAction() == ListChange.Action.Add) {
41                                        log.debug("registering in {}", simulator);
42                                        simulator.getRemoteTree().getRegistry().registerAndBuild(netJavaClass);
43                                }
[102]44
[103]45                                if (!change.hasHint("stoped")) {
46                                        issueNetloadIfReady(change, simulator);
47                                        return;
48                                }
[102]49
[103]50                                log.debug("issuing netsave to: {}", simulator);
[105]51                                simulator.netsave(netJavaClass, new Future<NF>(simulator) {
[102]52
[103]53                                        @Override
54                                        protected void result(NF net) {
55                                                log.debug("netsave of {} done: {}", simulator, net.getShortDescription());
56                                                netsave(simulator, net);
57                                                issueNetloadIfReady(change, simulator);
58                                        }
59                                });
60                        }
61                });
62        }
63
64        protected void issueNetloadIfReady(ListChange change, final Simulator simulator) {
65                if (!change.hasHint("ready")) {
66                        return;
67                }
68                log.debug("issuing netload to: {}", simulator);
[105]69                netload(simulator, new Future<NF>(simulator) {
[103]70
71                        @Override
72                        protected void result(final NF net) {
73                                if (net == null) {
74                                        log.debug("no file for upload provided - leaving simulator idle");
75                                        return;
[102]76                                }
[103]77
[105]78                                simulator.netload(net, new Future<Object>(this) {
[103]79
80                                        @Override
81                                        protected void result(Object result) {
82                                                NetLoadSaveLogic.this.messages.info("netload", "done " + net.getShortDescription());
83                                                log.debug("netload of {} done", net.getShortDescription());
84                                                simulator.start();
85                                        }
86                                });
[102]87                        }
88                });
89        }
90
[105]91        public abstract void netload(Simulator simulator, FutureHandler<NF> net);
[102]92
[103]93        public abstract void netsave(Simulator simulator, NF net);
[102]94
95        /**
[103]96         * @return the netJavaClass
97         */
98        @ParamAnnotation(name = "Java class representing netfile")
99        public String getNetJavaClassName() {
100                return netJavaClass.getCanonicalName();
101        }
102
103        @ParamAnnotation(id = "messages")
104        public void addMessageListener(EventListener<Message> listener) {
105                messages.add(listener);
106        }
107
108        @ParamAnnotation(id = "messages")
109        public void removeMessageListener(EventListener<Message> listener) {
110                messages.remove(listener);
111        }
112
[102]113}
Note: See TracBrowser for help on using the repository browser.