package senseiTests.domainsTest; import sensei.middleware.gms.*; import sensei.middleware.domains.*; import senseiTests.middleware.domainsTest.AddColourMessage; import senseiTests.middleware.domainsTest.RemColourMessage; import senseiTests.middleware.domainsTest.ColourPhaseCoordination; import senseiTests.middleware.domainsTest.ColourState; import senseiTests.middleware.domainsTest.ColoursStates; import senseiTests.middleware.domainsTest.Factory; class ColoursSubgroupExtendedCheckpointable extends ExtendedCheckpointableBaseImpl implements ColoursSubgroup { public ColoursSubgroupExtendedCheckpointable(DomainGroupHandler groupHandler, ColoursSubgroupUser user, Factory factory, StateTransferAnswerer answerer) throws Exception { this.user=user; this.answerer=answerer; this.factory=factory; state=new StateKeeper(); this.groupHandler=groupHandler; } public void setIdentity(int identity) { id=identity; } public void assumeState() { state.generateRandomState(); answerer.onAssumeState(this); user.changedState(id, state.toString()); } public void setState(String substates[]) { state.setState(substates); user.changedState(id, state.toString()); } public String getAColour() { return state.generateRandomSubState(); } public void addColour(String colour) throws Exception { groupHandler.syncCastDomainMessage(factory.createAddColourMessage(id,colour), true); } public void remColour() throws Exception { groupHandler.syncCastDomainMessage(factory.createRemColourMessage(id), true); } public int getId() { return id; } public String getColour(int pos) { return state.getSubState(pos); } public void regenerateState() { state.generateRandomState(); user.changedState(id, state.toString()); } // public void assumeState() // { // state.generateRandomState(); // answerer.onAssumeState(this); // user.changedState(id, state.toString()); // } // public State getState() { answerer.onGetState(this); return factory.createState(state.getSubStates()); } public void setState(State s) { ColoursStates state = (ColoursStates)s; this.state.setState(state.chain); String finalString=this.state.toString(); user.changedState(id, finalString); answerer.onSetState(this, finalString); } public void processPTPMessage(int sender, Message msg) { } public void processCastMessage(int sender, Message msg) { boolean ok; if (msg instanceof AddColourMessage) { AddColourMessage message = (AddColourMessage) msg; state.addSubState(message.colour); ok=true; } else if (msg instanceof RemColourMessage) ok = state.removeSubState(); else ok=false; if (ok) user.changedState(id, state.toString()); } public void memberAccepted(int identity, GroupHandler handler, View theView) { this.groupHandler = (DomainGroupHandler) (handler); } public void changingView() { } public void installView(View theView) { } public void excludedFromGroup() { } StateKeeper state; boolean onTransfer; int id; DomainGroupHandler groupHandler; ColoursSubgroupUser user; StateTransferAnswerer answerer; Factory factory; };