Ignore:
Timestamp:
09/23/13 18:54:07 (11 years ago)
Author:
psniegowski
Message:

HIGHLIGHTS:

  • add SimultorProviders? hierarchy
  • start Framsticks server over SSH
  • FJF compatible with Framsticks 4.0rc3
  • reading and writing of standard.expt
  • a proof-of-concept implementation of StandardExperiment?

CHANGELOG:
Optionally return FreeAccess? from registry.

Add SimulatorRange?.

StandardExperiment? with genotypes circulation.

Automate registration around StandardState?.

More improvements to StandardExperiment?.

Skeleton version of StandardExperiment?.

Test saving of StandardState?.

Standard experiment state is being loaded.

More development towards StandardState? reading.

Work on reading standard experiment state.

Add classes for standard experiment.

Update example standard.expt

Add FreeAccess? and FreeObject?.

Made compatible with version 4.0rc3

Change deserialization policy.

Improve SSH support.

Working running simulator over SSH.

Fix joining bug in Experiment.

Working version of SimulatorRunner?.

Add more SimulatorProviders?.

Working PrimeExperimentTest? with 4.0rc3

Add references to deserialization.

Add OpaqueObject? and it's serialization.

Add deserialization of dictionaries.

Partial implementation of deserialization.

Add more tests for deserialization.

Prepare tests for deserialization.

Add proper result to prime experiment test.

Minor fixes to simulators providers.

Draft version of SimulatorProvider?.

Add SimulatorProvider? interface.

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  
    1515         * @return the experiment
    1616         */
     17        @Override
    1718        public Experiment getExperiment() {
    1819                return experiment;
  • java/main/src/main/java/com/framsticks/experiment/Experiment.java

    r105 r107  
    11package com.framsticks.experiment;
    22
     3import java.util.LinkedList;
     4import java.util.List;
    35import java.util.Map;
    46
     
    810
    911import com.framsticks.params.EventListener;
     12import com.framsticks.params.MessageLogger;
    1013import com.framsticks.params.ParamFlags;
    1114import com.framsticks.params.SimpleUniqueList;
     
    1316import com.framsticks.params.annotations.FramsClassAnnotation;
    1417import com.framsticks.params.annotations.ParamAnnotation;
    15 import com.framsticks.params.types.ProcedureParam;
    1618import com.framsticks.remote.RemoteTree;
     19import com.framsticks.structure.Path;
    1720import com.framsticks.structure.messages.ListChange;
     21import com.framsticks.structure.messages.Message;
    1822import com.framsticks.util.ExceptionHandler;
    1923import com.framsticks.util.FramsticksException;
     
    2327import com.framsticks.util.dispatching.DispatcherSetable;
    2428import com.framsticks.util.dispatching.Dispatching;
     29import com.framsticks.util.dispatching.Future;
     30import com.framsticks.util.dispatching.FutureHandler;
    2531import com.framsticks.util.dispatching.Joinable;
    2632import com.framsticks.util.dispatching.JoinableCollection;
     
    4349        protected final BufferedDispatcher<Experiment> bufferedDispatcher = new BufferedDispatcher<>(this);
    4450
     51        protected SimulatorProvider simulatorProvider;
     52
    4553        protected String expdef;
    4654
     55        protected final MessageLogger messages = new MessageLogger(NetLoadSaveLogic.class);
    4756
    4857        /**
     
    9099
    91100        /**
     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        /**
    92118         * @return the expdef
    93119         */
     
    118144        @AutoAppendAnnotation
    119145        public void addSimulator(Simulator simulator) {
     146                log.debug("add simulator {}", simulator);
    120147                simulators.add(simulator);
    121148                simulatorAsJoinables.add(simulator);
    122149                simulators.fireChildrenChange(simulator, ListChange.Action.Modify, "ready");
    123150
     151                simulatorCandidates.remove(simulator.getRemoteTree());
    124152        }
    125153
     
    156184
    157185                Dispatching.use(simulatorAsJoinables, this);
     186                Dispatching.use(simulatorProvider, this);
    158187                Dispatching.use(simulatorCandidates, this);
     188
     189                tryProvideAllSimulators(Future.<List<Simulator>>doNothing(this));
    159190        }
    160191
     
    163194
    164195                Dispatching.drop(simulatorAsJoinables, this);
     196                Dispatching.drop(simulatorProvider, this);
    165197                Dispatching.drop(simulatorCandidates, this);
     198
     199                Dispatching.drop(bufferedDispatcher, this);
    166200
    167201                finishJoinable();
     
    175209        @Override
    176210        protected void joinableJoin() throws InterruptedException {
    177                 Dispatching.drop(bufferedDispatcher, this);
    178211
    179212                Dispatching.join(simulatorAsJoinables);
     213                Dispatching.join(simulatorProvider);
    180214                Dispatching.join(simulatorCandidates);
    181                 Dispatching.join(bufferedDispatcher.getTargetDispatcher());
     215                // Dispatching.join(bufferedDispatcher.getTargetDispatcher());
    182216        }
    183217
     
    197231        }
    198232
    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);
    204291        }
    205292
  • java/main/src/main/java/com/framsticks/experiment/ExperimentLogic.java

    r102 r107  
    33public interface ExperimentLogic {
    44
     5        public Experiment getExperiment();
     6
    57}
  • java/main/src/main/java/com/framsticks/experiment/NetLoadSaveLogic.java

    r105 r107  
    1818        private static final Logger log = LogManager.getLogger(NetLoadSaveLogic.class);
    1919
    20         protected String option = "an option";
    2120
    2221        protected final Class<NF> netJavaClass;
     
    9594
    9695        /**
    97          * @return the option
    98          */
    99         @ParamAnnotation
    100         public String getOption() {
    101                 return option;
    102         }
    103 
    104         /**
    105          * @param option the option to set
    106          */
    107         @ParamAnnotation
    108         public void setOption(String option) {
    109                 this.option = option;
    110         }
    111 
    112         /**
    11396         * @return the netJavaClass
    11497         */
  • java/main/src/main/java/com/framsticks/experiment/Simulator.java

    r105 r107  
    157157        @ParamAnnotation(paramType = ProcedureParam.class)
    158158        public void init() {
     159                log.debug("initializing simulator {}", this);
     160                call(simulatorPath, "init", arguments(), Object.class, Future.doNothing(Object.class, this));
    159161        }
    160162
     
    168170        public void stop() {
    169171                log.debug("stoping simulator {}", this);
     172                call(simulatorPath, "stop", arguments(), Object.class, Future.doNothing(Object.class, this));
    170173        }
    171174
     
    202205
    203206        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();
    205208
    206209                final File file = AccessOperations.convert(File.class, net, getRemoteTree().getRegistry());
  • java/main/src/main/java/com/framsticks/experiment/SimulatorConnector.java

    r105 r107  
    77import com.framsticks.communication.Address;
    88import com.framsticks.params.annotations.FramsClassAnnotation;
    9 import com.framsticks.params.annotations.ParamAnnotation;
    109import com.framsticks.remote.RemoteTree;
    1110import com.framsticks.structure.Path;
    12 import com.framsticks.util.AutoAttacher;
    1311import com.framsticks.util.Misc;
    1412import com.framsticks.util.dispatching.Dispatcher;
    1513import com.framsticks.util.dispatching.Dispatching;
    1614import com.framsticks.util.dispatching.Future;
    17 import com.framsticks.util.lang.Casting;
    18 import com.framsticks.util.lang.Strings;
     15import com.framsticks.util.dispatching.FutureHandler;
     16import com.framsticks.util.dispatching.Joinable;
     17import com.framsticks.util.dispatching.JoinableParent;
     18import com.framsticks.util.dispatching.JoinableState;
    1919
    2020import static com.framsticks.structure.TreeOperations.*;
    2121
    2222@FramsClassAnnotation
    23 public class SimulatorConnector implements AutoAttacher {
     23public class SimulatorConnector extends SingleSimulatorProvider implements JoinableParent {
    2424        private static final Logger log = LogManager.getLogger(SimulatorConnector.class);
    2525
     26        protected Experiment experiment;
     27        protected RemoteTree remoteTree;
     28        protected Simulator simulator;
     29        protected Address address;
     30        protected boolean provided = false;
    2631
    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        }
    3070
    3171        @SuppressWarnings({ "rawtypes", "unchecked" })
    3272        @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();
    3580
    3681                Misc.throwIfNull(address);
     
    4186                remoteTree.setDispatcher((Dispatcher) experiment.getDispatcher());
    4287
    43 
    4488                experiment.getSimulatorCandidates().add(remoteTree);
     89                Dispatching.use(remoteTree, this);
    4590
    4691                Dispatching.dispatchLog(remoteTree, log, Level.DEBUG, "first task in remote tree");
     
    5196                        protected void result(Path result) {
    5297                                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);
    5499
    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);
    58103                        }
    59104                });
    60105        }
    61106
    62         @ParamAnnotation
    63         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);
    65110        }
    66 
    67         @ParamAnnotation
    68         public String getAddress() {
    69                 return Strings.toStringNullProof(address, "");
    70         }
    71 
    72         @Override
    73         public String toString() {
    74                 return "simulator connector to: " + Strings.toStringNullProof(address, "<null>");
    75         }
    76 
    77111}
  • java/main/src/main/java/com/framsticks/experiment/WorkPackageLogic.java

    r105 r107  
    7676                                assert experiment.isActive();
    7777
    78                                 log.debug("received package from {}: {}", simulator, netResult);
     78                                log.info("received package from {}: {}", simulator, netResult);
    7979                                WorkPackageLogic.this.messages.info("netsave", netResult.toString());
    8080
Note: See TracChangeset for help on using the changeset viewer.