Changeset 107 for java/main/src/main/java/com/framsticks/experiment
- Timestamp:
- 09/23/13 18:54:07 (11 years ago)
- Location:
- java/main/src/main/java/com/framsticks/experiment
- Files:
-
- 6 added
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
java/main/src/main/java/com/framsticks/experiment/AbstractExperimentLogic.java
r102 r107 15 15 * @return the experiment 16 16 */ 17 @Override 17 18 public Experiment getExperiment() { 18 19 return experiment; -
java/main/src/main/java/com/framsticks/experiment/Experiment.java
r105 r107 1 1 package com.framsticks.experiment; 2 2 3 import java.util.LinkedList; 4 import java.util.List; 3 5 import java.util.Map; 4 6 … … 8 10 9 11 import com.framsticks.params.EventListener; 12 import com.framsticks.params.MessageLogger; 10 13 import com.framsticks.params.ParamFlags; 11 14 import com.framsticks.params.SimpleUniqueList; … … 13 16 import com.framsticks.params.annotations.FramsClassAnnotation; 14 17 import com.framsticks.params.annotations.ParamAnnotation; 15 import com.framsticks.params.types.ProcedureParam;16 18 import com.framsticks.remote.RemoteTree; 19 import com.framsticks.structure.Path; 17 20 import com.framsticks.structure.messages.ListChange; 21 import com.framsticks.structure.messages.Message; 18 22 import com.framsticks.util.ExceptionHandler; 19 23 import com.framsticks.util.FramsticksException; … … 23 27 import com.framsticks.util.dispatching.DispatcherSetable; 24 28 import com.framsticks.util.dispatching.Dispatching; 29 import com.framsticks.util.dispatching.Future; 30 import com.framsticks.util.dispatching.FutureHandler; 25 31 import com.framsticks.util.dispatching.Joinable; 26 32 import com.framsticks.util.dispatching.JoinableCollection; … … 43 49 protected final BufferedDispatcher<Experiment> bufferedDispatcher = new BufferedDispatcher<>(this); 44 50 51 protected SimulatorProvider simulatorProvider; 52 45 53 protected String expdef; 46 54 55 protected final MessageLogger messages = new MessageLogger(NetLoadSaveLogic.class); 47 56 48 57 /** … … 90 99 91 100 /** 101 * @return the simulatorProvider 102 */ 103 @ParamAnnotation(flags = ParamFlags.USERREADONLY) 104 public SimulatorProvider getSimulatorProvider() { 105 return simulatorProvider; 106 } 107 108 /** 109 * @param simulatorProvider the simulatorProvider to set 110 */ 111 @AutoAppendAnnotation 112 @ParamAnnotation 113 public void setSimulatorProvider(SimulatorProvider simulatorProvider) { 114 this.simulatorProvider = simulatorProvider; 115 } 116 117 /** 92 118 * @return the expdef 93 119 */ … … 118 144 @AutoAppendAnnotation 119 145 public void addSimulator(Simulator simulator) { 146 log.debug("add simulator {}", simulator); 120 147 simulators.add(simulator); 121 148 simulatorAsJoinables.add(simulator); 122 149 simulators.fireChildrenChange(simulator, ListChange.Action.Modify, "ready"); 123 150 151 simulatorCandidates.remove(simulator.getRemoteTree()); 124 152 } 125 153 … … 156 184 157 185 Dispatching.use(simulatorAsJoinables, this); 186 Dispatching.use(simulatorProvider, this); 158 187 Dispatching.use(simulatorCandidates, this); 188 189 tryProvideAllSimulators(Future.<List<Simulator>>doNothing(this)); 159 190 } 160 191 … … 163 194 164 195 Dispatching.drop(simulatorAsJoinables, this); 196 Dispatching.drop(simulatorProvider, this); 165 197 Dispatching.drop(simulatorCandidates, this); 198 199 Dispatching.drop(bufferedDispatcher, this); 166 200 167 201 finishJoinable(); … … 175 209 @Override 176 210 protected void joinableJoin() throws InterruptedException { 177 Dispatching.drop(bufferedDispatcher, this);178 211 179 212 Dispatching.join(simulatorAsJoinables); 213 Dispatching.join(simulatorProvider); 180 214 Dispatching.join(simulatorCandidates); 181 Dispatching.join(bufferedDispatcher.getTargetDispatcher());215 // Dispatching.join(bufferedDispatcher.getTargetDispatcher()); 182 216 } 183 217 … … 197 231 } 198 232 199 @ParamAnnotation(paramType = ProcedureParam.class) 200 public void connectToSimulator(String address) { 201 SimulatorConnector connector = new SimulatorConnector(); 202 connector.setAddress(address); 203 connector.attachTo(this); 233 // @ParamAnnotation(paramType = ProcedureParam.class) 234 // public void connectToSimulator(String address) { 235 // SimulatorConnector connector = new SimulatorConnector(); 236 // connector.setAddress(address); 237 // connector.attachTo(this); 238 // } 239 // 240 241 public Simulator createSimulator(RemoteTree tree, Path path) { 242 return new Simulator(this, tree, path); 243 } 244 245 public void tryProvideNextSimulator(final FutureHandler<Simulator> future) { 246 log.debug("trying to provide next simulator"); 247 simulatorProvider.provideSimulator(new SimulatorSpecification(this, expdef), new Future<Simulator>(future) { 248 249 @Override 250 protected void result(Simulator result) { 251 assert isActive(); 252 if (result != null) { 253 addSimulator(result); 254 } else { 255 log.debug("no more simulators remaining"); 256 } 257 future.pass(result); 258 259 } 260 }); 261 262 } 263 264 public void tryProvideAllSimulators(final FutureHandler<List<Simulator>> future) { 265 log.debug("trying to provide all simulators"); 266 final List<Simulator> list = new LinkedList<>(); 267 268 tryProvideNextSimulator(new Future<Simulator>(future) { 269 270 @Override 271 protected void result(Simulator result) { 272 if (result == null) { 273 future.pass(list); 274 return; 275 } 276 list.add(result); 277 tryProvideNextSimulator(this); 278 } 279 }); 280 281 } 282 283 @ParamAnnotation(id = "messages") 284 public void addMessageListener(EventListener<Message> listener) { 285 messages.add(listener); 286 } 287 288 @ParamAnnotation(id = "messages") 289 public void removeMessageListener(EventListener<Message> listener) { 290 messages.remove(listener); 204 291 } 205 292 -
java/main/src/main/java/com/framsticks/experiment/ExperimentLogic.java
r102 r107 3 3 public interface ExperimentLogic { 4 4 5 public Experiment getExperiment(); 6 5 7 } -
java/main/src/main/java/com/framsticks/experiment/NetLoadSaveLogic.java
r105 r107 18 18 private static final Logger log = LogManager.getLogger(NetLoadSaveLogic.class); 19 19 20 protected String option = "an option";21 20 22 21 protected final Class<NF> netJavaClass; … … 95 94 96 95 /** 97 * @return the option98 */99 @ParamAnnotation100 public String getOption() {101 return option;102 }103 104 /**105 * @param option the option to set106 */107 @ParamAnnotation108 public void setOption(String option) {109 this.option = option;110 }111 112 /**113 96 * @return the netJavaClass 114 97 */ -
java/main/src/main/java/com/framsticks/experiment/Simulator.java
r105 r107 157 157 @ParamAnnotation(paramType = ProcedureParam.class) 158 158 public void init() { 159 log.debug("initializing simulator {}", this); 160 call(simulatorPath, "init", arguments(), Object.class, Future.doNothing(Object.class, this)); 159 161 } 160 162 … … 168 170 public void stop() { 169 171 log.debug("stoping simulator {}", this); 172 call(simulatorPath, "stop", arguments(), Object.class, Future.doNothing(Object.class, this)); 170 173 } 171 174 … … 202 205 203 206 public <N> void netload(final N net, final FutureHandler<Object> future) { 204 final String netloadId = " NetLoadSaveLogic" + netloadIdCounter.getAndIncrement();207 final String netloadId = "netload" + netloadIdCounter.getAndIncrement(); 205 208 206 209 final File file = AccessOperations.convert(File.class, net, getRemoteTree().getRegistry()); -
java/main/src/main/java/com/framsticks/experiment/SimulatorConnector.java
r105 r107 7 7 import com.framsticks.communication.Address; 8 8 import com.framsticks.params.annotations.FramsClassAnnotation; 9 import com.framsticks.params.annotations.ParamAnnotation;10 9 import com.framsticks.remote.RemoteTree; 11 10 import com.framsticks.structure.Path; 12 import com.framsticks.util.AutoAttacher;13 11 import com.framsticks.util.Misc; 14 12 import com.framsticks.util.dispatching.Dispatcher; 15 13 import com.framsticks.util.dispatching.Dispatching; 16 14 import com.framsticks.util.dispatching.Future; 17 import com.framsticks.util.lang.Casting; 18 import com.framsticks.util.lang.Strings; 15 import com.framsticks.util.dispatching.FutureHandler; 16 import com.framsticks.util.dispatching.Joinable; 17 import com.framsticks.util.dispatching.JoinableParent; 18 import com.framsticks.util.dispatching.JoinableState; 19 19 20 20 import static com.framsticks.structure.TreeOperations.*; 21 21 22 22 @FramsClassAnnotation 23 public class SimulatorConnector implements AutoAttacher{23 public class SimulatorConnector extends SingleSimulatorProvider implements JoinableParent { 24 24 private static final Logger log = LogManager.getLogger(SimulatorConnector.class); 25 25 26 protected Experiment experiment; 27 protected RemoteTree remoteTree; 28 protected Simulator simulator; 29 protected Address address; 30 protected boolean provided = false; 26 31 27 protected Experiment experiment; 28 protected Address address; 29 protected RemoteTree remoteTree; 32 public boolean hasProvided() { 33 return provided; 34 } 35 36 public void setAddress(Address address) { 37 this.address = address; 38 } 39 40 public Address getAddress() { 41 return address; 42 } 43 44 45 @Override 46 public String getName() { 47 return "simulator connector"; 48 } 49 50 @Override 51 protected void joinableStart() { 52 53 } 54 55 @Override 56 protected void joinableInterrupt() { 57 Dispatching.drop(remoteTree, this); 58 finishJoinable(); 59 } 60 61 @Override 62 protected void joinableFinish() { 63 64 } 65 66 @Override 67 protected void joinableJoin() throws InterruptedException { 68 Dispatching.join(remoteTree); 69 } 30 70 31 71 @SuppressWarnings({ "rawtypes", "unchecked" }) 32 72 @Override 33 public void attachTo(Object parent) { 34 experiment = Casting.throwCast(Experiment.class, parent); 73 public void provideSimulator(final SimulatorSpecification specification, final FutureHandler<Simulator> future) { 74 if (hasProvided()) { 75 future.pass(null); 76 return; 77 } 78 provided = true; 79 experiment = specification.getExperiment(); 35 80 36 81 Misc.throwIfNull(address); … … 41 86 remoteTree.setDispatcher((Dispatcher) experiment.getDispatcher()); 42 87 43 44 88 experiment.getSimulatorCandidates().add(remoteTree); 89 Dispatching.use(remoteTree, this); 45 90 46 91 Dispatching.dispatchLog(remoteTree, log, Level.DEBUG, "first task in remote tree"); … … 51 96 protected void result(Path result) { 52 97 log.debug("resolved simulator path: {}", result); 53 Misc.checkEquals( experiment.getExpdef(), bindAccess(result).get("expdef", String.class), "expdef mismatch in connected simulator",this);98 Misc.checkEquals(specification.getDefinition(), bindAccess(result).get("expdef", String.class), "expdef mismatch in connected simulator", SimulatorConnector.this); 54 99 55 Simulator simulator = new Simulator(experiment,remoteTree, result);56 experiment.addSimulator(simulator); 57 experiment.getSimulatorCandidates().remove(remoteTree);100 simulator = experiment.createSimulator(remoteTree, result); 101 102 future.pass(simulator); 58 103 } 59 104 }); 60 105 } 61 106 62 @ ParamAnnotation63 public void setAddress(String address) {64 this.address = new Address(address);107 @Override 108 public void childChangedState(Joinable joinable, JoinableState state) { 109 log.debug("child {} changed state to {}", joinable, state); 65 110 } 66 67 @ParamAnnotation68 public String getAddress() {69 return Strings.toStringNullProof(address, "");70 }71 72 @Override73 public String toString() {74 return "simulator connector to: " + Strings.toStringNullProof(address, "<null>");75 }76 77 111 } -
java/main/src/main/java/com/framsticks/experiment/WorkPackageLogic.java
r105 r107 76 76 assert experiment.isActive(); 77 77 78 log. debug("received package from {}: {}", simulator, netResult);78 log.info("received package from {}: {}", simulator, netResult); 79 79 WorkPackageLogic.this.messages.info("netsave", netResult.toString()); 80 80
Note: See TracChangeset
for help on using the changeset viewer.