From: <an...@us...> - 2009-12-19 10:09:38
|
Revision: 8105 http://smartfrog.svn.sourceforge.net/smartfrog/?rev=8105&view=rev Author: anfarr Date: 2009-12-19 10:09:29 +0000 (Sat, 19 Dec 2009) Log Message: ----------- SFOS-1277: General code tidy (start of) Modified Paths: -------------- trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/connector/AndConnector.java trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/connector/AndConnectorExists.java trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/connector/Connector.java trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/connector/NXorConnector.java trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/connector/NandConnector.java trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/connector/NorConnector.java trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/connector/OrConnector.java trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/connector/OrConnectorExists.java trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/connector/XorConnector.java trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/dependency/Dependency.java trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/state/StateComponentTransitionException.java Modified: trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/connector/AndConnector.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/connector/AndConnector.java 2009-12-18 15:09:32 UTC (rev 8104) +++ trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/connector/AndConnector.java 2009-12-19 10:09:29 UTC (rev 8105) @@ -32,8 +32,8 @@ public AndConnector() throws RemoteException {} public boolean isEnabled() { - for (Iterator d = dependencies.iterator(); d.hasNext();){ - if (!((DependencyValidation) d.next()).isEnabled()) return false; + for ( DependencyValidation dep : dependencies){ + if (!dep.isEnabled()) return false; } return true; } Modified: trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/connector/AndConnectorExists.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/connector/AndConnectorExists.java 2009-12-18 15:09:32 UTC (rev 8104) +++ trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/connector/AndConnectorExists.java 2009-12-19 10:09:29 UTC (rev 8105) @@ -33,14 +33,10 @@ public boolean isEnabled() { boolean exists=false; - System.out.println("InACE1"); - for (Iterator d = dependencies.iterator(); d.hasNext();){ - System.out.println("InACE2"); - if (!((DependencyValidation) d.next()).isEnabled()) return false; - System.out.println("InACE3"); - exists=true; + for (DependencyValidation dep : dependencies) { + if (!dep.isEnabled()) return false; + exists=true; } - System.out.println("InACE4"); return exists; } } Modified: trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/connector/Connector.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/connector/Connector.java 2009-12-18 15:09:32 UTC (rev 8104) +++ trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/connector/Connector.java 2009-12-19 10:09:29 UTC (rev 8105) @@ -22,6 +22,7 @@ import java.rmi.RemoteException; import java.util.HashSet; +import java.util.Vector; import org.smartfrog.services.dependencies.statemodel.dependency.DependencyValidation; import org.smartfrog.services.dependencies.statemodel.exceptions.SmartFrogStateLifecycleException; @@ -30,7 +31,7 @@ import org.smartfrog.sfcore.prim.PrimImpl; public class Connector extends PrimImpl implements Prim, DependencyValidation, StateDependencies { - protected HashSet dependencies = new HashSet(); + protected Vector<DependencyValidation> dependencies = new Vector<DependencyValidation>(); public Connector() throws RemoteException {} Modified: trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/connector/NXorConnector.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/connector/NXorConnector.java 2009-12-18 15:09:32 UTC (rev 8104) +++ trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/connector/NXorConnector.java 2009-12-19 10:09:29 UTC (rev 8105) @@ -29,13 +29,13 @@ public NXorConnector() throws RemoteException { } - public boolean isEnabled() { - boolean any_enabled = false; - for (Iterator d = dependencies.iterator(); d.hasNext();) { - boolean enabled = ((DependencyValidation) d.next()).isEnabled(); - if (any_enabled && enabled) return false; - if (enabled) any_enabled=true; - } - return any_enabled; - } + public boolean isEnabled() { + boolean any_enabled = false; + for (DependencyValidation dep : dependencies) { + boolean enabled = dep.isEnabled(); + if (any_enabled && enabled) return false; + if (enabled) any_enabled = true; + } + return any_enabled; + } } Modified: trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/connector/NandConnector.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/connector/NandConnector.java 2009-12-18 15:09:32 UTC (rev 8104) +++ trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/connector/NandConnector.java 2009-12-19 10:09:29 UTC (rev 8105) @@ -34,8 +34,8 @@ } public boolean isEnabled() { - for (Iterator d = dependencies.iterator(); d.hasNext();) { - if (!((DependencyValidation) d.next()).isEnabled()) return true; + for (DependencyValidation dep : dependencies) { + if (!dep.isEnabled()) return true; } return false; } Modified: trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/connector/NorConnector.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/connector/NorConnector.java 2009-12-18 15:09:32 UTC (rev 8104) +++ trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/connector/NorConnector.java 2009-12-19 10:09:29 UTC (rev 8105) @@ -35,8 +35,8 @@ public boolean isEnabled() { - for (Iterator d = dependencies.iterator(); d.hasNext();) { - if (((DependencyValidation) d.next()).isEnabled()) return false; + for (DependencyValidation dep : dependencies) { + if (dep.isEnabled()) return false; } return true; } Modified: trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/connector/OrConnector.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/connector/OrConnector.java 2009-12-18 15:09:32 UTC (rev 8104) +++ trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/connector/OrConnector.java 2009-12-19 10:09:29 UTC (rev 8105) @@ -34,11 +34,9 @@ } public boolean isEnabled() { - boolean exists=false; - for (Iterator d = dependencies.iterator(); d.hasNext();) { - if (((DependencyValidation) d.next()).isEnabled()) return true; - exists=true; - } - return !exists; + for (DependencyValidation dep : dependencies) { + if (dep.isEnabled()) return true; + } + return false; } } Modified: trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/connector/OrConnectorExists.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/connector/OrConnectorExists.java 2009-12-18 15:09:32 UTC (rev 8104) +++ trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/connector/OrConnectorExists.java 2009-12-19 10:09:29 UTC (rev 8105) @@ -34,9 +34,11 @@ } public boolean isEnabled() { - for (Iterator d = dependencies.iterator(); d.hasNext();) { - if (((DependencyValidation) d.next()).isEnabled()) return true; - } - return false; + boolean exists = false; + for (DependencyValidation dep : dependencies) { + if (dep.isEnabled()) return true; + exists = true; + } + return !exists; } } Modified: trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/connector/XorConnector.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/connector/XorConnector.java 2009-12-18 15:09:32 UTC (rev 8104) +++ trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/connector/XorConnector.java 2009-12-19 10:09:29 UTC (rev 8105) @@ -30,13 +30,13 @@ } - public boolean isEnabled() { - boolean any_enabled = false; - for (Iterator d = dependencies.iterator(); d.hasNext();) { - boolean enabled = ((DependencyValidation) d.next()).isEnabled(); - if (any_enabled && enabled) return false; - if (enabled) any_enabled=true; - } - return any_enabled; - } + public boolean isEnabled() { + boolean any_enabled = false; + for (DependencyValidation dep : dependencies) { + boolean enabled = dep.isEnabled(); + if (any_enabled && enabled) return false; + if (enabled) any_enabled = true; + } + return any_enabled; + } } Modified: trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/dependency/Dependency.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/dependency/Dependency.java 2009-12-18 15:09:32 UTC (rev 8104) +++ trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/dependency/Dependency.java 2009-12-19 10:09:29 UTC (rev 8105) @@ -31,17 +31,22 @@ import org.smartfrog.sfcore.reference.Reference; import org.smartfrog.sfcore.reference.ReferencePart; +import static org.smartfrog.services.dependencies.statemodel.state.Constants.TRANSITION; + /** * Class that implements the dependency between two StateDependencies-implementing objects. * <p/> * On creation will add the dependency, or termination will remove it. */ public class Dependency extends PrimImpl implements Prim, DependencyValidation, RunSynchronisation { + + String transition = null; StateDependencies by = null; DependencyValidation on = null; String name=""; + public Dependency() throws RemoteException { } @@ -51,13 +56,12 @@ //System.out.println("&&&&& IN DEP DEPLOY &&&&&"); - Object transition_obj = sfResolve("transition", false); + Object transition_obj = sfResolve(TRANSITION, false); if (transition_obj!=null && transition_obj instanceof String){ transition = (String) transition_obj; } name = this.sfParent().sfAttributeKeyFor(this).toString(); - } public synchronized void sfStart() throws SmartFrogException, RemoteException { @@ -70,7 +74,7 @@ try { running = (Boolean) sfResolve(new Reference(ReferencePart.attrib("running"))); } catch (Exception e){} - if (running!=null && running.booleanValue()) sfRun(); //pre-empt... + if (running!=null && running) sfRun(); //pre-empt... } public synchronized void sfRun() throws SmartFrogException{ Modified: trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/state/StateComponentTransitionException.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/state/StateComponentTransitionException.java 2009-12-18 15:09:32 UTC (rev 8104) +++ trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/state/StateComponentTransitionException.java 2009-12-19 10:09:29 UTC (rev 8105) @@ -43,17 +43,6 @@ } public static final int g_NOCODEAVAILABLE=0xFFFF; - public static final int g_NOTRANSITIONS=0x0; - public static final int g_NOSUCHAVAILABLETRANSITION=0x1; - public static final int g_NOTRANSITIONSELECTED=0x2; - public static final int g_INVALIDSTATEFUNCTION=0x3; - public static final int g_ALLOWEDVALUEUNRESOLVABLE=0x4; - public static final int g_INVALIDALLOWEDVALUE=0x5; - public static final int g_MUSTSUPPLYVALUETOSET=0x6; - public static final int g_INVALIDSUPPLIEDVALUE=0x7; - public static final int g_VALUESLEFTTOSET=0x8; - public static final int g_VALUEALREADYSET=0x9; - public static final int g_NOTPERMITTED=0xA; public static final int g_DEPENDENCYVALUEUNRESOLVABLE=0xB; public static final int g_UNABLETOAPPLYEFFECTS=0xC; public static final int g_COMPONENTNOTENABLED=0xD; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <an...@us...> - 2010-01-07 12:09:55
|
Revision: 8122 http://smartfrog.svn.sourceforge.net/smartfrog/?rev=8122&view=rev Author: anfarr Date: 2010-01-07 12:09:48 +0000 (Thu, 07 Jan 2010) Log Message: ----------- SFOS-1277: First phase (of two) of significant refactor of dependencies... Modified Paths: -------------- trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/dependency/Dependency.java trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/state/Constants.java Modified: trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/dependency/Dependency.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/dependency/Dependency.java 2010-01-05 17:09:44 UTC (rev 8121) +++ trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/dependency/Dependency.java 2010-01-07 12:09:48 UTC (rev 8122) @@ -105,14 +105,14 @@ try { relevant = sfResolve(RELEVANT, true, false); } catch (SmartFrogResolutionException ignored) { - sfLog().ignore(ignored); //ok + sfLog().debug(ignored); //ok } if (relevant){ try { enabled = sfResolve(ENABLED, false, false); } catch (SmartFrogResolutionException ignored) { - sfLog().ignore(ignored); //ok + sfLog().debug(ignored); //ok } isEnabled = (enabled && (on == null || on.isEnabled())); Modified: trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/state/Constants.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/state/Constants.java 2010-01-05 17:09:44 UTC (rev 8121) +++ trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/state/Constants.java 2010-01-07 12:09:48 UTC (rev 8122) @@ -37,14 +37,13 @@ public static final String NAME = "name"; public static final String NORMALTERMINATION = "sfNormalTermination"; public static final String NOT = "not"; - public static final String ON = "on"; + //public static final String ON = "on"; public static final String ORCHMODEL = "sfIsOrchModel"; public static final String PREPARE = "prepare"; public static final String RELEVANT = "relevant"; public static final String REQUIRES_THREAD = "requiresThread"; public static final String RUN = "run"; public static final String RUNNING = "running"; - public static final String SCRIPT = "script"; public static final String T_FINALIZE = "tFinalize"; public static final String T_ONTERMINATION = "tOnTermination"; public static final String T_PREPARE = "tPrepare"; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <an...@us...> - 2010-02-23 13:51:47
|
Revision: 8223 http://smartfrog.svn.sourceforge.net/smartfrog/?rev=8223&view=rev Author: anfarr Date: 2010-02-23 13:51:41 +0000 (Tue, 23 Feb 2010) Log Message: ----------- SFOS-1451: Dependencies tests... Modified Paths: -------------- trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/components.sf trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/dependency/Dependency.java trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/state/Constants.java trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/state/StateComponent.java trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/state/StateComponentTransitionException.java Modified: trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/components.sf =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/components.sf 2010-02-23 12:57:47 UTC (rev 8222) +++ trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/components.sf 2010-02-23 13:51:41 UTC (rev 8223) @@ -55,9 +55,15 @@ sfUniqueComponentID; [sfFinal] asAndConnector false; - threadpool LAZY PARENT:ATTRIB threadpool; + threadpool LAZY PARENT:ATTRIB threadpool; + sfOrchEventLog LAZY PARENT:ATTRIB sfOrchEventLog; } +OrchEventLog extends Prim { + sfClass "org.smartfrog.sfcore.prim.PrimImpl"; + count 0; +} + ThreadedCompositeBase extends { threadpool extends SimpleThreadPool; } Modified: trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/dependency/Dependency.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/dependency/Dependency.java 2010-02-23 12:57:47 UTC (rev 8222) +++ trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/dependency/Dependency.java 2010-02-23 13:51:41 UTC (rev 8223) @@ -54,7 +54,7 @@ public synchronized void sfDeploy() throws SmartFrogException, RemoteException { super.sfDeploy(); - transition = sfResolve(TRANSITION, (String) null, true); + transition = sfResolve(TRANSITION, (String) null, false); name = this.sfParent().sfAttributeKeyFor(this).toString(); } Modified: trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/state/Constants.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/state/Constants.java 2010-02-23 12:57:47 UTC (rev 8222) +++ trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/state/Constants.java 2010-02-23 13:51:41 UTC (rev 8223) @@ -26,10 +26,12 @@ public class Constants { public static final String ASANDCONNECTOR="asAndConnector"; public static final String BY = "by"; + public static final String COUNT = "count"; public static final String DO_SCRIPT = "doScript"; public static final String DPE="DynamicPolicyEvaluation"; public static final String ENABLED = "enabled"; public static final String EXISTS = "exists"; + public static final String EVENTLOG = "sfOrchEventLog"; public static final String FINALIZE = "finalize"; public static final String FUNCTIONCLASS = "sfFunctionClass"; public static final String ISSTATECOMPONENTTRANSITION = "sfIsStateComponentTransition"; Modified: trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/state/StateComponent.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/state/StateComponent.java 2010-02-23 12:57:47 UTC (rev 8222) +++ trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/state/StateComponent.java 2010-02-23 13:51:41 UTC (rev 8223) @@ -27,6 +27,7 @@ import java.util.HashMap; import java.util.Iterator; import java.util.Vector; +import java.util.concurrent.RejectedExecutionException; import java.util.concurrent.locks.ReentrantLock; import javax.swing.Timer; @@ -59,6 +60,8 @@ import static org.smartfrog.services.dependencies.statemodel.state.Constants.THREADPOOL; import static org.smartfrog.services.dependencies.statemodel.state.Constants.REQUIRES_THREAD; import static org.smartfrog.services.dependencies.statemodel.state.Constants.LAG; +import static org.smartfrog.services.dependencies.statemodel.state.Constants.EVENTLOG; +import static org.smartfrog.services.dependencies.statemodel.state.Constants.COUNT; /** */ @@ -78,6 +81,8 @@ protected boolean asyncResponse = false; private boolean amRunning=false; private ReentrantLock transitionLock = new ReentrantLock(); + + private Prim eventLog; public StateComponent() throws RemoteException {} @@ -106,6 +111,8 @@ threadpool = (ThreadPool) sfResolve(THREADPOOL, false); asAndConnector = sfResolve(ASANDCONNECTOR, asAndConnector, false); + eventLog = sfResolve(EVENTLOG, (Prim)null, false); + //transitions and dpes Enumeration keys = cxt.keys(); @@ -186,7 +193,8 @@ throw new StateComponentTransitionException(StateComponentTransitionException.StateComponentExceptionCode.COMPONENT_NOTRUNNING); } if (!checkIsEnabled()) { - throw new StateComponentTransitionException(StateComponentTransitionException.StateComponentExceptionCode.COMPONENT_NOTENABLED); + enabled =null; + return; } enabled = (HashMap<String,ComponentDescription>) transitions.clone(); @@ -314,6 +322,17 @@ } catch (SmartFrogResolutionException e) { throw new StateComponentTransitionException(StateComponentTransitionException.StateComponentExceptionCode.FAILEDTO_RESOLVETRANSITIONEFFECTS, e); } + + try { + if (eventLog!=null){ + int count = eventLog.sfResolve(COUNT, 0, true); + eventLog.sfAddAttribute("transition"+count, name+":"+transition); + eventLog.sfReplaceAttribute(COUNT, ++count); + } + } catch (Exception e){ + throw new StateComponentTransitionException(StateComponentTransitionException.StateComponentExceptionCode.FAILEDTO_WRITEEVENTLOGBUTISPRESENT); + } + sfLog().debug("OUT: State("+name+").go()"); } @@ -477,8 +496,10 @@ sfLog().debug("IN: StateComponent.setState()"); sfLog().debug("Adding to queue..."); - threadpool.addToQueue((StateUpdateThread)(currentAction=new StateUpdateThread())); - sfLog().debug("Added to Queue"); + try { + threadpool.addToQueue((StateUpdateThread)(currentAction=new StateUpdateThread())); + sfLog().debug("Added to Queue"); + } catch (RejectedExecutionException e){ /*Gracefully ignore*/ } cleanLock(); Modified: trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/state/StateComponentTransitionException.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/state/StateComponentTransitionException.java 2010-02-23 12:57:47 UTC (rev 8222) +++ trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/state/StateComponentTransitionException.java 2010-02-23 13:51:41 UTC (rev 8223) @@ -26,7 +26,6 @@ public enum StateComponentExceptionCode { GENERIC, - COMPONENT_NOTENABLED, COMPONENT_NOTRUNNING, CURRENTACTION_ONGOING, @@ -36,7 +35,7 @@ FAILEDTO_GETNAMEDENABLEDTRANSITION, FAILEDTO_HANDLEDPES, FAILEDTO_RESOLVETRANSITIONEFFECTS, - FAILEDTO_RESOLVETRANSITIONGUARD + FAILEDTO_WRITEEVENTLOGBUTISPRESENT } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <an...@us...> - 2010-05-27 13:59:53
|
Revision: 8308 http://smartfrog.svn.sourceforge.net/smartfrog/?rev=8308&view=rev Author: anfarr Date: 2010-05-27 13:59:47 +0000 (Thu, 27 May 2010) Log Message: ----------- SDEP-18 -> Mature orch work Modified Paths: -------------- trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/dependency/Dependency.java trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/state/StateComponent.java trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/state/StateComponentTransitionException.java Modified: trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/dependency/Dependency.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/dependency/Dependency.java 2010-05-27 13:33:05 UTC (rev 8307) +++ trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/dependency/Dependency.java 2010-05-27 13:59:47 UTC (rev 8308) @@ -33,9 +33,7 @@ import org.smartfrog.sfcore.reference.Reference; import org.smartfrog.sfcore.reference.ReferencePart; -import static org.smartfrog.services.dependencies.statemodel.state.Constants.RUNNING; -import static org.smartfrog.services.dependencies.statemodel.state.Constants.RELEVANT; -import static org.smartfrog.services.dependencies.statemodel.state.Constants.ENABLED; +import static org.smartfrog.services.dependencies.statemodel.state.Constants.*; /** * Class that implements the dependency between two StateDependencies-implementing objects. @@ -55,7 +53,7 @@ public synchronized void sfDeploy() throws SmartFrogException, RemoteException { if (sfLog().isDebugEnabled()) sfLog().debug(Thread.currentThread().getStackTrace()[1]); super.sfDeploy(); - //transition = sfResolve(TRANSITION, (String) null, false); + transition = sfResolve(TRANSITION, (String) null, false); name = this.sfParent().sfAttributeKeyFor(this).toString(); if (sfLog().isDebugEnabled()) sfLog().debug(Thread.currentThread().getStackTrace()[1] + ":LEAVING"); Modified: trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/state/StateComponent.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/state/StateComponent.java 2010-05-27 13:33:05 UTC (rev 8307) +++ trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/state/StateComponent.java 2010-05-27 13:59:47 UTC (rev 8308) @@ -384,16 +384,20 @@ //Save it as the next transition that should fire -- LOG ISSUE AND TIDY! //Inappropriate name - this is not to do with asyncResponse. Instead, it is external management change related...*/ public void invokeAsynchronousStateChange(InvokeAsynchronousStateChange iasc) throws StateComponentTransitionException, RemoteException { - /* + if (currentAction != null) { throw new StateComponentTransitionException(StateComponentTransitionException.StateComponentExceptionCode.CURRENTACTION_ONGOING); } acquireLock(); - resetPossibleTransitions(); + try { + resetPossibleTransitions(); + } catch (SmartFrogRuntimeException e) { + throw new StateComponentTransitionException(StateComponentTransitionException.StateComponentExceptionCode.FAILEDTO_GETTRANSITIONS); + } iasc.actOn(this); //handleDPEs(); - clean();*/ + clean(); } /*THESE WILL BE ACCOMMODATED AS EXPLICIT TRANSITION -- TO LOG ISSUE AND REMOVE Modified: trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/state/StateComponentTransitionException.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/state/StateComponentTransitionException.java 2010-05-27 13:33:05 UTC (rev 8307) +++ trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/state/StateComponentTransitionException.java 2010-05-27 13:59:47 UTC (rev 8308) @@ -27,12 +27,13 @@ public enum StateComponentExceptionCode { GENERIC, COMPONENT_NOTRUNNING, - //CURRENTACTION_ONGOING, + CURRENTACTION_ONGOING, FAILEDTO_ACQUIRELOCK, FAILEDTO_EXECUTETRANSITIONSCRIPT, FAILEDTO_FINDSINGLEDEPENDENCYENABLED, FAILEDTO_GETNAMEDENABLEDTRANSITION, + FAILEDTO_GETTRANSITIONS, //FAILEDTO_HANDLEDPES, FAILEDTO_RESOLVETRANSITIONEFFECTS, FAILEDTO_WRITEEVENTLOGBUTISPRESENT This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <an...@us...> - 2010-12-11 11:31:48
|
Revision: 8447 http://smartfrog.svn.sourceforge.net/smartfrog/?rev=8447&view=rev Author: anfarr Date: 2010-12-11 11:31:41 +0000 (Sat, 11 Dec 2010) Log Message: ----------- SFOS-1277 Modified Paths: -------------- trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/components.sf trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/state/Composite.java trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/state/Constants.java trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/state/StateComponent.java trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/state/StateComponentTransitionException.java Added Paths: ----------- trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/state/QueryMetaData.java Modified: trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/components.sf =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/components.sf 2010-12-10 20:55:33 UTC (rev 8446) +++ trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/components.sf 2010-12-11 11:31:41 UTC (rev 8447) @@ -70,7 +70,8 @@ threadpool LAZY PARENT:ATTRIB threadpool; sfOrchEventLog LAZY PARENT:ATTRIB sfOrchEventLog; sfInformMetaData extends DATA { show false; } - sfIgnoreMyMetaData false; + //sfIgnoreMyMetaData false; + sfQueryMetaData true; } OrchEventLog extends Prim { @@ -91,6 +92,7 @@ sfClass "org.smartfrog.services.dependencies.statemodel.state.Composite"; sfUpdatable true; sfSyncTerminate true; + sfQueryMetaData true; /*inputConnectors extends Compound { sfUpdatable true; @@ -163,3 +165,13 @@ ltl false; } +OrchStateMapping extends DATA { + path TBD; + attr TBD; + replaceAttr; + echo; + echoAttr "change"; + retry true; + scope; +} + Modified: trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/state/Composite.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/state/Composite.java 2010-12-10 20:55:33 UTC (rev 8446) +++ trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/state/Composite.java 2010-12-11 11:31:41 UTC (rev 8447) @@ -23,16 +23,10 @@ import java.io.IOException; import java.io.InterruptedIOException; import java.rmi.RemoteException; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Vector; +import java.util.*; -import org.smartfrog.sfcore.common.SmartFrogDeploymentException; -import org.smartfrog.sfcore.common.SmartFrogException; -import org.smartfrog.sfcore.common.SmartFrogResolutionException; +import org.smartfrog.sfcore.common.*; +import org.smartfrog.sfcore.common.Timer; import org.smartfrog.sfcore.componentdescription.ComponentDescription; import org.smartfrog.sfcore.compound.Compound; import org.smartfrog.sfcore.compound.CompoundImpl; @@ -42,11 +36,14 @@ import org.smartfrog.sfcore.prim.TerminationRecord; import static org.smartfrog.services.dependencies.statemodel.state.Constants.*; +import org.smartfrog.sfcore.reference.Reference; +import org.smartfrog.sfcore.reference.ReferencePart; /** * Composite pattern for orchestration components */ -public class Composite extends CompoundImpl implements Compound, StateChangeNotification, +public class + Composite extends CompoundImpl implements Compound, StateChangeNotification, RunSynchronisation, DeployingAgent { private String name = ""; @@ -57,8 +54,24 @@ private static final int WAIT_A_REASONABLE_PERIOD=5000; private static long notificationSleep; private boolean threaded=false; + private Vector<Mapping> sfMappings; private Prim eventLog; + private static final String E_BAD_PATH = "Bad path in Mapping, should be a Reference..."; + private static final String E_BAD_ATTR = "Bad attr in Mapping, should be a String..."; + private static final String E_BAD_ECHOATTR = "Bad echo attr in Mapping, should be a String (if present)..."; + private static final String E_BAD_REPATTR = "Bad replaceAttr in Mapping, should be a String (if present)..."; + private static final String E_BAD_ECHO = "Bad echo in Mapping, should be a Reference (if present)..."; + private static final String E_BAD_SCOPE = "Bad scope in Mapping, should be a Reference (if present)..."; + + private static final String ATTR = "attr"; + private static final String PATH = "path"; + private static final String REPLACE_ATTR = "replaceAttr"; + private static final String ECHO = "echo"; + private static final String ECHOATTR = "echoAttr"; + private static final String RETRY = "retry"; + private static final String SCOPE = "scope"; + private static class CompositeQueueListener { private volatile boolean cleared = false; void clear() { @@ -95,6 +108,83 @@ public void sfStart() throws RemoteException, SmartFrogException { if (sfLog().isDebugEnabled()) sfLog().debug(Thread.currentThread().getStackTrace()[1]); super.sfStart(); + + ComponentDescription sfMapping = sfResolve(MAPPING, (ComponentDescription) null, false); + + if (sfMapping != null) { + + sfMappings = new Vector<Mapping>(); + Enumeration els = sfMapping.sfContext().elements(); + while (els.hasMoreElements()) { + Object el = els.nextElement(); + if (el instanceof ComponentDescription) { + ComponentDescription mapping = (ComponentDescription) el; + Object attrObj = mapping.sfResolve(ATTR); + if (attrObj != null) { + Mapping newMapping = new Mapping(); + sfMappings.add(newMapping); + try { + newMapping.attr = (String) attrObj; + } catch (ClassCastException e) { + throw new SmartFrogException(E_BAD_ATTR, e); + } + + Object replaceObj = mapping.sfResolve(REPLACE_ATTR); + if (replaceObj instanceof SFNull) newMapping.replaceAttr = null; + else if (replaceObj instanceof String) newMapping.replaceAttr = replaceObj.toString(); + else { + //force the exception... + try { + newMapping.replaceAttr = (String) replaceObj; + } catch (ClassCastException e) { + throw new SmartFrogException(E_BAD_REPATTR, e); + } + } + + try { + newMapping.path = (Reference) mapping.sfContext().get(PATH); + } catch (ClassCastException e) { + throw new SmartFrogException(E_BAD_PATH, e); + } + + Object echoObj = mapping.sfContext().get(ECHO); + if (echoObj instanceof SFNull) newMapping.echo = null; + else if (echoObj instanceof Reference) newMapping.echo = (Reference) echoObj; + else { + //force the exception... + try { + newMapping.echo = (Reference) echoObj; + } catch (ClassCastException e) { + throw new SmartFrogException(E_BAD_ECHO, e); + } + } + + if (newMapping.echo!=null){ + try { + newMapping.echoAttr = (String) mapping.sfResolve(ECHOATTR); + } catch (ClassCastException e) { + throw new SmartFrogException(E_BAD_ECHOATTR, e); + } + } + + newMapping.retry = mapping.sfResolve(RETRY, false, true); + + Object scopeObj = mapping.sfContext().get(SCOPE); + if (scopeObj instanceof SFNull) newMapping.scope = null; + else if (scopeObj instanceof Reference) newMapping.scope = (Reference) scopeObj; + else { + //force the exception... + try { + newMapping.scope = (Reference) scopeObj; + } catch (ClassCastException e) { + throw new SmartFrogException(E_BAD_SCOPE, e); + } + } + } + } + } + } + try { sfResolve(THREADEDCOMP); threaded = true; @@ -102,6 +192,8 @@ eventLog = sfResolve(EVENTLOG, (Prim) null, false); + + } catch (SmartFrogResolutionException ignored) { sfLog().ignore(ignored); //intentionally ok } @@ -296,7 +388,7 @@ while (keys.hasNext()){ String key = keys.next(); Prim p = (Prim) sfResolve(key); - if (p instanceof Composite) p.sfReplaceAttribute(NORMALTERMINATION, true); + //if (p instanceof Composite) p.sfReplaceAttribute(NORMALTERMINATION, true); sfLog().debug(name +": Terminating "+key); p.sfDetachAndTerminate(TerminationRecord.normal(null)); } @@ -314,11 +406,129 @@ } + @Override + public Object sfReplaceAttribute(Object name, Object value) throws SmartFrogRuntimeException, RemoteException { + if (sfLog().isDebugEnabled()) sfLog().debug(Thread.currentThread().getStackTrace()[1]); + sfLog().debug("Key:"+name+" , Value:"+value+", "+sfMappings); - - /* ************************************************* + Object retval = super.sfReplaceAttribute(name, value); + + sfLog().debug("Ready to try mappings..."); + String modelRunning1 = null; + try { + modelRunning1 = (String) sfResolve("mapByDefault"); + sfLog().debug("Model Running Attribute:"+modelRunning1); + } catch (Exception e) { + //sfLog().debug(e); + } + + if (modelRunning1!=null){ + sfLog().debug("Key:" + name + " , Cf:" + modelRunning1 ); + + if (name.equals(modelRunning1)) { + doValueMapping(name); + return retval; + } + + } + boolean modelRunning2=false; + try { + modelRunning2 = sfResolve(new Reference(ReferencePart.attrib("modelRunning")), false, false); + } catch (Exception e) { + sfLog().debug(e); + } + + if (modelRunning2) { + doValueMapping(name); + } + + return retval; + } + + + private void doValueMapping(final Object name) { + if (sfLog().isDebugEnabled()) sfLog().debug(Thread.currentThread().getStackTrace()[1]); + if (sfMappings != null) { + boolean retryMapping = false; + try { + retryMapping= doValueMappingWkr(name); + } catch (SmartFrogRuntimeException e) { + sfLog().debug(e); + //should not break just because of mapping issue... + } catch (RemoteException e) { + sfLog().debug(e); + } + + + if (retryMapping) { + java.util.Timer timer = new java.util.Timer(); + timer.schedule(new TimerTask() { + public void run() { + doValueMapping(name); + cancel(); //Terminate the timer... + } + }, 2500); + } + } + } + + @SuppressWarnings("unchecked") + private boolean doValueMappingWkr(Object name) throws SmartFrogRuntimeException, RemoteException { + if (sfLog().isDebugEnabled()) sfLog().debug(Thread.currentThread().getStackTrace()[1]); + boolean retryMapping = false; + for (Mapping mapping : sfMappings){ + Prim target=this; + + + try { + if (mapping.replaceAttr==null){ + sfLog().debug("No replaceAttr"); + //If null, we assume all replacements are "game" and that the name is the vm name·.. + if (mapping.scope!=null) { + target = (Prim) sfResolve(mapping.scope); + target = (Prim) target.sfResolve(name.toString()); + } else { + target = (Prim) sfParent().sfResolve(new Reference(ReferencePart.attrib(name.toString()))); + } + sfLog().debug("No replaceAttr:"+target); + } else if (!(name.equals(mapping.replaceAttr))) continue; //round while... + sfLog().debug("Getting target..."); + target = (Prim) target.sfResolve(mapping.path); //get target from path... + sfLog().debug("Got target..."+target); + } catch (Exception e) { + sfLog().debug(e); + target=null; + } + + if (target==null){ + if (mapping.retry) { + retryMapping=true; + } + continue; //round while... + } + + //do replace... + Object value = sfResolve(name.toString()); + sfLog().debug("Doing the replace..."+target+":"+mapping.attr+":"+value); + target.sfReplaceAttribute(mapping.attr, value); + + //extra replace? + if (mapping.echo!=null){ + target = (Prim) target.sfResolve(mapping.echo); + + Vector echoValue = new Vector(); + echoValue.add(mapping.attr); + echoValue.add(value); + + target.sfReplaceAttribute(mapping.echoAttr, echoValue); + } + } + return retryMapping; + } + + /* ************************************************* * Update class */ class Notifier implements Runnable { @@ -338,5 +548,18 @@ } } } - + + /* ************************************************* + * Mapping class + */ + + class Mapping { + Reference path; + String attr; + String replaceAttr; + Reference echo; + String echoAttr; + boolean retry; + Reference scope; + } } Modified: trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/state/Constants.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/state/Constants.java 2010-12-10 20:55:33 UTC (rev 8446) +++ trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/state/Constants.java 2010-12-11 11:31:41 UTC (rev 8447) @@ -24,6 +24,8 @@ */ public class Constants { + public static final String QUERYMETADATA = "sfQueryMetaData"; + public static final String MAPPING = "sfMapping"; public static final String ASANDCONNECTOR="asAndConnector"; public static final String BY = "by"; public static final String COUNT = "count"; Added: trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/state/QueryMetaData.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/state/QueryMetaData.java (rev 0) +++ trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/state/QueryMetaData.java 2010-12-11 11:31:41 UTC (rev 8447) @@ -0,0 +1,562 @@ +/** (C) Copyright 1998-2004 Hewlett-Packard Development Company, LP + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + For more information: www.smartfrog.org + + */ +package org.smartfrog.services.dependencies.statemodel.state; + +import static org.smartfrog.services.dependencies.statemodel.state.Constants.*; +import org.smartfrog.sfcore.common.SmartFrogResolutionException; +import org.smartfrog.sfcore.componentdescription.ComponentDescription; +import org.smartfrog.sfcore.compound.Compound; +import org.smartfrog.sfcore.logging.LogSF; +import org.smartfrog.sfcore.prim.Liveness; +import org.smartfrog.sfcore.prim.Prim; +import org.smartfrog.sfcore.reference.Reference; + +import java.rmi.RemoteException; +import java.util.Enumeration; +import java.util.Vector; + +/** + * created 30-Jun-2010 11:31:06 + */ + +public class QueryMetaData { + public QueryMetaData(final LogSF sfLog){ + this.sfLog = sfLog; + } + + public QueryMetaData(final Prim me, final LogSF sfLog) { + this(sfLog); + setPrim(me); + } + + private Prim me; + private LogSF sfLog; + private Prim eventLog; + private String fullName; + private String fullNamePath; + + public void setPrim(final Prim me){ + this.me =me; + fullName=""; + try { + fullName = me.sfCompleteName().toString(); + int idx = fullName.indexOf("rootProcess:"); + if (idx != -1) fullName = fullName.substring("rootProcess:".length() + idx); + } catch (RemoteException e) { + sfLog.ignore(e); + } + fullNamePath = SERVICERESOURCE.substring(1).replaceAll(PATHDELIM, SFDELIM) + fullName; + } + + public void setEventLog(final Prim eventLog) { + this.eventLog = eventLog; + } + + //The following aren't really "StateComponent" methods and should be rehoused at some stage + public String getModelInfoAsString() throws RemoteException, SmartFrogResolutionException { + if (sfLog.isDebugEnabled()) sfLog.debug(Thread.currentThread().getStackTrace()[1]); + + /* EXAMPLE: + sfModelMetaData extends DATA { + description "This is the foobar service"; + links extends DATA { + -- extends DATA { + description "link to my friend"; + link "/friend"; + } + } + } + */ + + StringBuilder result = new StringBuilder(); + + ComponentDescription metaData = me.sfResolve(MODELMETADATA, (ComponentDescription) null, false); + + if (metaData != null) { + result.append(MAINHEADER).append(metaData.sfResolve(DESCRIPTION).toString()). + append(MAINHEADERCLOSE); + + ComponentDescription links = (ComponentDescription) metaData.sfContext().get(LINKS); + if (links != null) { + Enumeration keys = links.sfContext().keys(); + while (keys.hasMoreElements()) { + ComponentDescription link = (ComponentDescription) links.sfContext().get(keys.nextElement()); + result.append(SCRIPTHEADER). + append("<A HREF=\""). + append(link.sfContext().get(LINK)). + append("\">"). + append(link.sfContext().get(DESCRIPTION)). + append("</A>"). + append(SCRIPTHEADERCLOSE); + //append(LINEBREAK); + } + } + } + if (sfLog.isDebugEnabled()) + sfLog.debug(Thread.currentThread().getStackTrace()[1] + ":LEAVING"); + + return result.toString(); + } + + public String getTransitionLogAsString() throws RemoteException, SmartFrogResolutionException { + if (sfLog.isDebugEnabled()) + sfLog.debug(Thread.currentThread().getStackTrace()[1]); + + StringBuilder result = new StringBuilder(); + + if (eventLog != null) { + int count = eventLog.sfResolve(COUNT, 0, true); + for (int i = 0; i < count; i++) { + String transition = "transition" + i; + result.append(SCRIPTHEADER). + append(transition). + append(": "). + append((String) eventLog.sfContext().get(transition)). + append(SCRIPTHEADERCLOSE); + } + } + if (sfLog.isDebugEnabled()) + sfLog.debug(Thread.currentThread().getStackTrace()[1] + ":LEAVING"); + + return result.toString(); + } + + void observed(ComponentDescription entry, StringBuilder result, int indent) throws SmartFrogResolutionException, RemoteException { + if (sfLog.isDebugEnabled()) sfLog.debug(Thread.currentThread().getStackTrace()[1]); + ComponentDescription observed = (ComponentDescription) entry.sfContext().get(OBSERVED); + if (observed != null) { + boolean cont = true; + /*if (observed.sfContext().get(GUARD)!=null){ + Boolean guardEval = (Boolean) observed.sfResolve(GUARD); + if ((guardEval != null) && !(guardEval)) cont=false; + }*/ + if (cont) { + + boolean annotate = observed.sfResolve(ANNOTATE, false, false); + + String description = null; + try { + description = observed.sfResolve(DESCRIPTION).toString(); + } catch (SmartFrogResolutionException e) { + sfLog.debug(e); + } + + + sfLog.debug("ATTRIBUTE! "); + String attribute = null; + try { + attribute = observed.sfResolve(ATTRIBUTE).toString(); + } catch (SmartFrogResolutionException e) { + sfLog.debug(e); + return; //take no action... + } + + sfLog.debug("ATTRIBUTE! " + attribute); + String value = null; + try { + value = me.sfResolve(attribute).toString(); + } catch (SmartFrogResolutionException e) { + sfLog.debug(e); + return; //take no action... + } + + sfLog.debug("VALUE! " + value); + + if (description != null) { + result.append(SCRIPTHEADER1).append(indent).append(SCRIPTHEADER2).//append(SCRIPTHEADER). + append(ITAL). + append(description).append(ITALCLOSE);//.append(SCRIPTHEADERCLOSE); + } + + + sfLog.debug("ALIASES! "); + ComponentDescription aliases = null; + try { + aliases = (ComponentDescription) observed.sfResolve(ALIASES); + } catch (SmartFrogResolutionException ignore) { + + } + if (aliases != null) { + String alias = (String) aliases.sfContext().get(value); + if (alias != null) value = alias; + } + sfLog.debug("VALUE " + value); + result.append(SOMEPADDING).//append(SCRIPTHEADER1).append(indent).append(SCRIPTHEADER2). + append(value).append(annotate ? POBSERVED : "").append(SCRIPTHEADERCLOSE); + } + } + if (sfLog.isDebugEnabled()) sfLog.debug(Thread.currentThread().getStackTrace()[1] + ":LEAVING"); + } + + void desired(ComponentDescription entry, StringBuilder result, int indent) throws SmartFrogResolutionException, RemoteException { + if (sfLog.isDebugEnabled()) sfLog.debug(Thread.currentThread().getStackTrace()[1]); + ComponentDescription desired = (ComponentDescription) entry.sfContext().get(DESIRED); + boolean cont = true; + if (desired != null) { + + Vector values = null; + try { + values = (Vector) desired.sfResolve(VALUES); + } catch (SmartFrogResolutionException ignore) { + + } + + sfLog.debug("DESIREDGUARD! "); + + boolean annotate = desired.sfResolve(ANNOTATE, false, false); + + String description = null; + try { + description = desired.sfResolve(DESCRIPTION).toString(); + } catch (SmartFrogResolutionException e) { + sfLog.debug(e); + } + + if (description != null) { + result.append(SCRIPTHEADER1).append(indent).append(SCRIPTHEADER2).//append(SCRIPTHEADER). + append(ITAL). + append(description).append(ITALCLOSE);//.append(SCRIPTHEADERCLOSE); + } + + String attribute = null; + try { + attribute = desired.sfResolve(ATTRIBUTE).toString(); + } catch (SmartFrogResolutionException e) { + sfLog.ignore(e); + return; //ok + } + + String cvalue = me.sfContext().get(attribute).toString(); + if (values != null) { + + sfLog.debug("DESIREDATTR! "); + + ComponentDescription aliases = null; + try { + aliases = (ComponentDescription) desired.sfResolve(STATEALIASES); + } catch (SmartFrogResolutionException ignore) { + + } + sfLog.debug("DESIREDSTATEALIAS! "); + + if (aliases != null) { + String alias = (String) aliases.sfContext().get(cvalue); + if (alias != null) cvalue = alias; + } + result.append(SOMEPADDING).//append(SCRIPTHEADER1).append(indent).append(SCRIPTHEADER2). + append(cvalue).append(annotate ? PDESIRED : "").append(SCRIPTHEADERCLOSE); + } + + + sfLog.debug("DESIREDSTATEPRINT! "); + + /*try { + Boolean guardEval = (Boolean) desired.sfResolve(GUARD); + if ((guardEval != null) && !(guardEval)) cont = false; //round while + } catch (Exception ignore) { + + }*/ + + if (cont) { + + result.append(SCRIPTHEADER1).append(indent + 1).append(SCRIPTHEADER2).append(SETVALUE); + + + ComponentDescription aliases = null; + try { + aliases = (ComponentDescription) desired.sfResolve(ACTIONALIASES); + } catch (SmartFrogResolutionException ignore) { + + } + + sfLog.debug("DESIREDACTIONALIAS! "); + + String dStateName = ":::" + fullName + ":::" + attribute; + if (values != null) { + + result.append("<SELECT name=\"").append(dStateName).append("\">"); + for (Object value : values) { + result.append("<OPTION value=\""); + String realValue = value.toString(); + String shownValue = realValue; + if (aliases != null) { + String alias = (String) aliases.sfContext().get(realValue); + if (alias != null) shownValue = alias; + } + result.append(realValue).append("\">"). + append(shownValue).append("</OPTION>"); + } + result.append("</SELECT>"); + + } else { + result.append("<INPUT type=\"text\" ").//value=\"").append(cvalue).append("\" "). + append("name=\"").append(dStateName).append("\"/>"); + } + result.append(SCRIPTHEADERCLOSE); + sfLog.debug("DESIREDSTATESET! "); + } + } + if (sfLog.isDebugEnabled()) sfLog.debug(Thread.currentThread().getStackTrace()[1] + ":LEAVING"); + } + + + void links(ComponentDescription entry, StringBuilder result, int indent) { + if (sfLog.isDebugEnabled()) sfLog.debug(Thread.currentThread().getStackTrace()[1]); + ComponentDescription links = null; + try { + links = (ComponentDescription) entry.sfResolve(LINKS); + } catch (SmartFrogResolutionException ignore) { + + } catch (ClassCastException ignore) { + + } + if (links != null) { + + sfLog.debug("LINKS...yes "); + String dns = null; + try { + dns = (String) me.sfResolve(DNS); + } catch (Exception ignore) { + + } + + sfLog.debug("LINKS...dns " + dns); + + if (dns != null) { + Enumeration keys = links.sfContext().keys(); + while (keys.hasMoreElements()) { + ComponentDescription link = (ComponentDescription) links.sfContext().get(keys.nextElement()); + sfLog.debug("LINKS...link " + link); + try { + Boolean guardEval = (Boolean) link.sfResolve(GUARD); + if ((guardEval != null) && !(guardEval)) continue; //round while + } catch (Exception ignore) { + sfLog.debug("LINKS...did not resolve guard " + ignore); + } + result.append(SCRIPTHEADER1).append(indent + 1).append(SCRIPTHEADER2). + append("<A HREF=\"http://").append(dns). + append(link.sfContext().get(LINK)). + append("\">"). + append(link.sfContext().get(DESCRIPTION)). + append("</A>"). + append(SCRIPTHEADERCLOSE); + } + } + + } + if (sfLog.isDebugEnabled()) sfLog.debug(Thread.currentThread().getStackTrace()[1] + ":LEAVING"); + } + + public String getOrchestrationStateDetails() throws RemoteException, SmartFrogResolutionException { + if (sfLog.isDebugEnabled()) sfLog.debug(Thread.currentThread().getStackTrace()[1]); + + //First off - what about me? + boolean qmd = me.sfResolve(QUERYMETADATA, false, false); + sfLog.debug("QueryMetaData:"+qmd); + StringBuilder details = new StringBuilder(); + if (qmd){ + details.append(getOrchestrationStateDetailsWkr()); + } + + Prim parent = me.sfParent(); + if (parent!=null) { + sfLog.debug("$$$$"+parent.sfAttributeKeyFor(me)); + } else { + sfLog.debug("$$$$root"); + } + + //Do I have any children? + sfLog.debug("Children:"); + if (me instanceof Compound){ + Compound cme = (Compound) me; + + for (Enumeration<Liveness> e = cme.sfChildren(); e.hasMoreElements();) { + sfLog.debug("Children:yes"); + + Prim c = (Prim) e.nextElement(); + + details.append(new QueryMetaData(c, sfLog).getOrchestrationStateDetails()); + } + } + + return details.toString(); + } + + public String getOrchestrationStateDetailsWkr() throws RemoteException, SmartFrogResolutionException { + if (sfLog.isDebugEnabled()) sfLog.debug(Thread.currentThread().getStackTrace()[1]); + + ComponentDescription metaData = me.sfResolve(INFORMMETADATA, (ComponentDescription) null, false); + + StringBuilder status = new StringBuilder(); + + if (metaData != null) { + boolean show = me.sfResolve(SHOW, false, false); + String cdescription = me.sfResolve(DESCRIPTION, (String) null, false); + int indent = me.sfResolve(MYINDENT, MYINDENTDEFAULT, false) - 1; + + String myParent = MAINDIV; + try { + Object myParentObj = me.sfResolve(PARENT); + if (myParentObj instanceof String) { + Reference myParentRef = Reference.fromString(myParentObj.toString()); + myParentObj = me.sfResolve(myParentRef); + } + Prim myParentPrim = (Prim) myParentObj; + myParent = myParentPrim.sfResolve(FULLNAMEPATH).toString(); + myParent = myParent + SFDELIM + CONTAINER; + } catch (Exception e) { + sfLog.debug(e); //ok + } + + sfLog.debug("PARENT:::"+myParent); + + //Ok this should be moved...(hence direct specified literal) + String vmName = me.sfResolve("vmName", (String) null, false); + String additional = (vmName != null ? SOMEPADDING + "(" + vmName + ")" + SOMEPADDING : ""); + + status.append("<COMP>"); + status.append("<STATUS>").append(show ? SHOW : NOSHOW).append("</STATUS>"); + status.append("<DESCRIPTION>").append(cdescription).append(additional).append("</DESCRIPTION>"); + String resource = fullNamePath + SFDELIM + CONTAINER; + status.append("<PATH>").append(resource).append("</PATH>"); + status.append("<PARENT>").append(myParent).append("</PARENT>"); + status.append("<INDENT>").append(indent).append("</INDENT>"); + status.append("</COMP>"); + + StringBuilder extra = new StringBuilder(); + + Enumeration keys = metaData.sfContext().keys(); + while (keys.hasMoreElements()) { + Object key = keys.nextElement(); + ComponentDescription entry = null; + try { + entry = (ComponentDescription) metaData.sfContext().get(key); + } catch (Exception e) { + continue; //round while + } + + sfLog.debug("ENTRY!!! " + entry + ":" + key); + sfLog.debug("***GUARD***" + entry.sfContext().get(GUARD)); + + try { + Boolean guardEval = (Boolean) entry.sfResolve(GUARD); + if ((guardEval != null) && !(guardEval)) continue; //round while + } catch (Exception ignore) { + sfLog.debug(ignore); + } + + sfLog.debug("***GUARD*** PASSES"); + + ComponentDescription observed = (ComponentDescription) entry.sfContext().get(OBSERVED); + ComponentDescription links = null; + try { + links = (ComponentDescription) entry.sfResolve(LINKS); + } catch (SmartFrogResolutionException ignore) { + + } catch (ClassCastException ignore) { + + } + + sfLog.debug("***LINKS***" + links); + sfLog.debug("***OBSERVED***" + observed); + + if (links != null || observed != null) { + extra.append("<COMP>"); + extra.append("<STATUS>").append(observed != null ? "updating" : "static").append("</STATUS>"); + + resource = fullNamePath + SFDELIM + key + SFDELIM + OBSERVED; + extra.append("<PATH>").append(resource).append("</PATH>"); + extra.append("<PARENT>").append(fullNamePath).append(SFDELIM).append(CONTAINER).append("</PARENT>"); + extra.append("</COMP>"); + } + + ComponentDescription desired = (ComponentDescription) entry.sfContext().get(DESIRED); + sfLog.debug("***DESIRED***" + desired); + + if (desired != null) { + extra.append("<COMP>"); + extra.append("<STATUS>").append("static").append("</STATUS>"); + resource = fullNamePath + SFDELIM + key + SFDELIM + DESIRED; + extra.append("<PATH>").append(resource).append("</PATH>"); + extra.append("<PARENT>").append(fullNamePath).append(SFDELIM).append(CONTAINER).append("</PARENT>"); + extra.append("</COMP>"); + } + } + + if (extra.toString().length() == 0) return ""; + else status.append(extra); + } + if (sfLog.isDebugEnabled()) sfLog.debug(Thread.currentThread().getStackTrace()[1] + ":LEAVING"); + + return status.toString(); + } + + public String getOrchestrationStateObserved(String key) throws RemoteException, SmartFrogResolutionException { + if (sfLog.isDebugEnabled()) sfLog.debug(Thread.currentThread().getStackTrace()[1]); + + + StringBuilder result = new StringBuilder(); + + ComponentDescription metaData = me.sfResolve(INFORMMETADATA, (ComponentDescription) null, false); + ComponentDescription entry = (ComponentDescription) metaData.sfContext().get(key); + + sfLog.debug("OBSERVED! " + key); + + int indent = me.sfResolve(MYINDENT, MYINDENTDEFAULT, false); + + observed(entry, result, indent); + + //ANY LINKS? + links(entry, result, indent); + + if (sfLog.isDebugEnabled()) sfLog.debug(Thread.currentThread().getStackTrace()[1] + ":LEAVING"); + return result.toString(); + } + + public String getOrchestrationStateDesired(String key) throws RemoteException, SmartFrogResolutionException { + if (sfLog.isDebugEnabled()) sfLog.debug(Thread.currentThread().getStackTrace()[1]); + + + StringBuilder result = new StringBuilder(); + + ComponentDescription metaData = me.sfResolve(INFORMMETADATA, (ComponentDescription) null, false); + ComponentDescription entry = (ComponentDescription) metaData.sfContext().get(key); + + int indent = me.sfResolve(MYINDENT, MYINDENTDEFAULT, false); + + desired(entry, result, indent); + sfLog.debug("DESIRED! " + key); + + if (sfLog.isDebugEnabled()) sfLog.debug(Thread.currentThread().getStackTrace()[1] + ":LEAVING"); + return result.toString(); + } + + //TO DO!!! + public String getOrchestrationStateContainer() throws RemoteException, SmartFrogResolutionException { + if (sfLog.isDebugEnabled()) sfLog.debug(Thread.currentThread().getStackTrace()[1]); + StringBuilder result = new StringBuilder(); + + //This should be removed but it requires changing the index.html implementation to not ask for a "container!"... + + if (sfLog.isDebugEnabled()) sfLog.debug(Thread.currentThread().getStackTrace()[1] + ":LEAVING"); + return result.toString(); + } + +} Modified: trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/state/StateComponent.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/state/StateComponent.java 2010-12-10 20:55:33 UTC (rev 8446) +++ trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/state/StateComponent.java 2010-12-11 11:31:41 UTC (rev 8447) @@ -29,6 +29,7 @@ import org.smartfrog.sfcore.common.SmartFrogRuntimeException; import org.smartfrog.sfcore.componentdescription.ComponentDescription; import org.smartfrog.sfcore.languages.sf.constraints.ConstraintConstants; +import org.smartfrog.sfcore.languages.sf.functions.Constraint; import org.smartfrog.sfcore.prim.Prim; import org.smartfrog.sfcore.prim.PrimImpl; import org.smartfrog.sfcore.prim.TerminationRecord; @@ -70,10 +71,14 @@ private String fullNamePath; private Prim eventLog; //this needs proper synchronisation... + + protected boolean sfStarted=false; public StateComponent() throws RemoteException {} - @Override + + + @Override public synchronized void sfTerminateWith(TerminationRecord t) { if (sfLog().isDebugEnabled()) sfLog().debug(Thread.currentThread().getStackTrace()[1]); @@ -295,8 +300,7 @@ sfLog().debug(Thread.currentThread().getStackTrace()[1] + ":LEAVING"); } - //See handleDPEs() - /* + //See handleDPEs() -- this must go!!! private boolean runDPEs() throws SmartFrogResolutionException, RemoteException { sfLog().debug("IN: State(" + name + ").runDPEs()"); boolean ret=false; @@ -305,7 +309,7 @@ } sfLog().debug("OUT: State(" + name + ").runDPEs()"); return ret; - }*/ + } private void transitionScript(ComponentDescription transition, String key) throws StateComponentTransitionException { if (sfLog().isDebugEnabled()) @@ -380,8 +384,7 @@ return state; }*/ - /*THIS WILL BE MADE AVAILABLE IF AND WHEN THERE IS AN EVIDENT NEED! - //Save it as the next transition that should fire -- LOG ISSUE AND TIDY! + //Inappropriate name - this is not to do with asyncResponse. Instead, it is external management change related...*/ public void invokeAsynchronousStateChange(InvokeAsynchronousStateChange iasc) throws StateComponentTransitionException, RemoteException { @@ -400,7 +403,7 @@ clean(); } - /*THESE WILL BE ACCOMMODATED AS EXPLICIT TRANSITION -- TO LOG ISSUE AND REMOVE + /*THESE WILL BE ACCOMMODATED AS EXPLICIT TRANSITION -- TO LOG ISSUE AND REMOVE*/ public boolean handleDPEs() throws RemoteException, StateComponentTransitionException { sfLog().debug("IN: State(" + name + ").handleDPEs()"); boolean progress = false; @@ -417,7 +420,7 @@ sfLog().debug("IN: State(" + name + ").handleDPEs() Progress" + progress); return progress; - }*/ + } public void selectSingleAndGo() throws RemoteException, StateComponentTransitionException, SmartFrogRuntimeException { if (sfLog().isDebugEnabled()) @@ -952,11 +955,14 @@ return; //skip for now... } - /*if (handleDPEs()) { + + //This need cutting - but orchdws depends on it!!! + if (handleDPEs()) { sfLog().debug("OUT: State(" + name + ").handleStateChange()"); clean(); return; //dpes have proceeded... - }*/ + } + // resetPossibleTransitions(); Modified: trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/state/StateComponentTransitionException.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/state/StateComponentTransitionException.java 2010-12-10 20:55:33 UTC (rev 8446) +++ trunk/core/smartfrog/src/org/smartfrog/services/dependencies/statemodel/state/StateComponentTransitionException.java 2010-12-11 11:31:41 UTC (rev 8447) @@ -34,7 +34,7 @@ FAILEDTO_FINDSINGLEDEPENDENCYENABLED, FAILEDTO_GETNAMEDENABLEDTRANSITION, FAILEDTO_GETTRANSITIONS, - //FAILEDTO_HANDLEDPES, + FAILEDTO_HANDLEDPES, //CUT ME!!! FAILEDTO_RESOLVETRANSITIONEFFECTS, FAILEDTO_WRITEEVENTLOGBUTISPRESENT This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |