- Timestamp:
- 07/12/13 23:41:06 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
java/main/src/main/java/com/framsticks/remote/RemoteTree.java
r99 r100 15 15 import com.framsticks.params.types.EventParam; 16 16 import com.framsticks.params.types.ProcedureParam; 17 import com.framsticks.parsers.Loaders; 17 18 import com.framsticks.parsers.MultiParamLoader; 18 19 import com.framsticks.core.Tree; 19 20 import com.framsticks.util.*; 21 import com.framsticks.util.dispatching.AtOnceDispatcher; 20 22 import com.framsticks.util.dispatching.Dispatching; 21 23 import com.framsticks.util.dispatching.Dispatching.DispatcherWaiter; 24 import com.framsticks.util.dispatching.DispatchingFuture; 25 import com.framsticks.util.dispatching.ExceptionResultHandler; 22 26 import com.framsticks.util.dispatching.Future; 23 27 import com.framsticks.util.dispatching.FutureHandler; … … 34 38 import javax.annotation.Nonnull; 35 39 36 import org.apache.log4j.Logger; 40 import org.apache.logging.log4j.Logger; 41 import org.apache.logging.log4j.LogManager; 37 42 38 43 /** … … 42 47 public final class RemoteTree extends AbstractTree implements JoinableParent { 43 48 44 private final static Logger log = Log ger.getLogger(RemoteTree.class);49 private final static Logger log = LogManager.getLogger(RemoteTree.class); 45 50 46 51 protected ClientSideManagedConnection connection; … … 62 67 public void setConnection(final ClientSideManagedConnection connection) { 63 68 this.connection = connection; 69 this.connection.setExceptionHandler(this); 64 70 } 65 71 … … 74 80 } 75 81 76 @Override 77 public void get(final Path path, final ValueParam param, final Future<Object> future) { 78 assert isActive(); 79 assert param != null; 80 // assert path.isResolved(); 81 //TODO only do that if needed 82 connection.send(new GetRequest().field(param.getId()).path(path.getTextual()), this, new ClientSideResponseFuture(future) { 83 @Override 84 protected void processOk(Response response) { 85 assert isActive(); 86 processFetchedValues(path, response.getFiles()); 87 future.pass(bindAccess(path.tryResolveIfNeeded()).get(param, Object.class)); 88 } 89 }); 90 } 82 protected ExceptionResultHandler pathRemoveHandler(final Path path, final ExceptionResultHandler handler) { 83 return new ExceptionResultHandler() { 84 85 @Override 86 public void handle(final FramsticksException exception) { 87 Dispatching.dispatchIfNotActive(RemoteTree.this, new RunAt<RemoteTree>(RemoteTree.this) { 88 89 @Override 90 protected void runAt() { 91 assert path.getTree().isActive(); 92 log.info("path is invalid (removing): {}", path); 93 bindAccess(path.getUnder()).set(path.getTop().getParam(), null); 94 handler.handle(exception); 95 } 96 }); 97 } 98 }; 99 } 100 101 // @Override 102 // public void get(final Path path, final ValueParam param, final Future<Object> future) { 103 // assert isActive(); 104 // assert param != null; 105 // // assert path.isResolved(); 106 // //TODO only do that if needed 107 // connection.send(new GetRequest().field(param.getId()).path(path.getTextual()), this, new ClientSideResponseFuture(pathRemoveHandler(path, future)) { 108 // @Override 109 // protected void processOk(Response response) { 110 // assert isActive(); 111 // processFetchedValues(path, response.getFiles()); 112 // future.pass(bindAccess(path.tryResolveIfNeeded()).get(param, Object.class)); 113 // } 114 // }); 115 // } 91 116 92 117 protected final Map<String, Set<Future<FramsClass>>> infoRequests = new HashMap<String, Set<Future<FramsClass>>>(); … … 103 128 } 104 129 105 log.debug("issuing info request for " +name);130 log.debug("issuing info request for {}", name); 106 131 final Set<Future<FramsClass>> futures = new HashSet<Future<FramsClass>>(); 107 132 futures.add(future); 108 133 infoRequests.put(name, futures); 109 134 110 final Future<FramsClass> compositeFuture = new Future<FramsClass>() {135 final Future<FramsClass> compositeFuture = DispatchingFuture.create(this, new Future<FramsClass>() { 111 136 112 137 @Override … … 122 147 protected void result(FramsClass framsClass) { 123 148 assert isActive(); 149 putInfoIntoCache(framsClass); 124 150 infoRequests.remove(name); 125 151 for (Future<FramsClass> f : futures) { … … 127 153 } 128 154 } 129 } ;155 }); 130 156 131 157 //TODO: if the info is in the cache, then don't communicate 132 connection.send(new InfoRequest().path(path.getTextual()), this, new ClientSideResponseFuture(compositeFuture) {158 connection.send(new InfoRequest().path(path.getTextual()), AtOnceDispatcher.getInstance(), new ClientSideResponseFuture(compositeFuture) { 133 159 @Override 134 160 protected void processOk(Response response) { 135 assert isActive();161 assert connection.getReceiverDispatcher().isActive(); 136 162 137 163 if (response.getFiles().size() != 1) { … … 141 167 throw new FramsticksException().msg("path mismatch").arg("returned path", response.getFiles().get(0).getPath()); 142 168 } 143 FramsClass framsClass = processFetchedInfo(RemoteTree.this, response.getFiles().get(0));169 FramsClass framsClass = Loaders.loadFramsClass(response.getFiles().get(0).getContent()); 144 170 145 171 CompositeParam thisParam = path.getTop().getParam(); … … 155 181 public void get(final Path path, final Future<Path> future) { 156 182 assert isActive(); 157 158 log.trace("fetching values for " + path); 159 findInfo(path, new FutureHandler<FramsClass>(future) { 183 final ExceptionResultHandler remover = pathRemoveHandler(path, future); 184 185 log.trace("fetching values for {}", path); 186 findInfo(path, new FutureHandler<FramsClass>(remover) { 160 187 @Override 161 188 protected void result(FramsClass result) { 162 189 163 connection.send(new GetRequest().path(path.getTextual()), RemoteTree.this, new ClientSideResponseFuture(future) { 190 final Access access = registry.prepareAccess(path.getTop().getParam()); 191 connection.send(new GetRequest().path(path.getTextual()), AtOnceDispatcher.getInstance(), new ClientSideResponseFuture(remover) { 164 192 @Override 165 193 protected void processOk(Response response) { 166 assert isActive(); 167 Path p = path.tryResolveIfNeeded(); 168 processFetchedValues(p, response.getFiles()); 169 future.pass(p.tryResolveIfNeeded().assureResolved()); 194 processFetchedValues(path, response.getFiles(), access, future); 170 195 } 171 196 }); … … 179 204 final Integer flag = bindAccess(path).set(param, value); 180 205 181 log.trace("storing value " + param + " for " +path);206 log.trace("storing value {} for {}", param, path); 182 207 //TODO break in passing exception handler is here 183 208 connection.send(new SetRequest().value(value.toString()).field(param.getId()).path(path.getTextual()), this, new ClientSideResponseFuture(future) { … … 274 299 return; 275 300 } 276 Access Interfaceaccess = registry.createAccess(argumentType);301 Access access = registry.createAccess(argumentType); 277 302 Object argument = access.createAccessee(); 278 303 access.select(argument); … … 282 307 A typedArgument = argumentType.cast(argument); 283 308 284 // log.info("executing event with argument " +argumentType);309 // log.info("executing event with argument {}", argumentType); 285 310 MultiParamLoader loader = new MultiParamLoader(); 286 311 loader.setNewSource(file.getContent()); 287 312 loader.addBreakCondition(MultiParamLoader.Status.AfterObject); 288 loader.addAccess Interface(access);313 loader.addAccess(access); 289 314 loader.go(); 290 315
Note: See TracChangeset
for help on using the changeset viewer.