package won.node.facet.businessactivity.participantcompletion; import won.node.facet.impl.WON_TX; import java.net.URI; import java.util.ArrayList; import java.util.Arrays; /** * Created with IntelliJ IDEA. * User: Danijel * Date: 24.1.14. * Time: 16.08 * To change this template use File | Settings | File Templates. */ public enum BAPCEventType { //in general, be permissive about messages where possible. Don't care about duplicate messages //close may always be called. It always closes the connection. /// MESSAGE_CANCEL("MessageCancel", new ArrayList<BAPCState>(Arrays.asList(BAPCState.ACTIVE, BAPCState.CANCELING, BAPCState.COMPLETED, BAPCState.CLOSING, BAPCState.COMPENSATING, BAPCState.FAILING_ACTIVE_CANCELING, BAPCState.FAILING_COMPENSATING, BAPCState.NOT_COMPLETING, BAPCState.EXITING, BAPCState.ENDED))), MESSAGE_CLOSE("MessageClose", new ArrayList<BAPCState>(Arrays.asList(BAPCState.ACTIVE, BAPCState.CANCELING, BAPCState.COMPLETED, BAPCState.CLOSING, BAPCState.COMPENSATING, BAPCState.FAILING_ACTIVE_CANCELING, BAPCState.FAILING_COMPENSATING, BAPCState.NOT_COMPLETING, BAPCState.EXITING, BAPCState.ENDED))), MESSAGE_COMPENSATE("MessageCompensate", new ArrayList<BAPCState>(Arrays.asList(BAPCState.ACTIVE, BAPCState.CANCELING, BAPCState.COMPLETED, BAPCState.CLOSING, BAPCState.COMPENSATING, BAPCState.FAILING_ACTIVE_CANCELING, BAPCState.FAILING_COMPENSATING, BAPCState.NOT_COMPLETING, BAPCState.EXITING, BAPCState.ENDED))), MESSAGE_FAILED("MessageFailed", new ArrayList<BAPCState>(Arrays.asList(BAPCState.ACTIVE, BAPCState.CANCELING, BAPCState.COMPLETED, BAPCState.CLOSING, BAPCState.COMPENSATING, BAPCState.FAILING_ACTIVE_CANCELING, BAPCState.FAILING_COMPENSATING, BAPCState.NOT_COMPLETING, BAPCState.EXITING, BAPCState.ENDED))), MESSAGE_EXITED("MessageExited", new ArrayList<BAPCState>(Arrays.asList(BAPCState.ACTIVE, BAPCState.CANCELING, BAPCState.COMPLETED, BAPCState.CLOSING, BAPCState.COMPENSATING, BAPCState.FAILING_ACTIVE_CANCELING, BAPCState.FAILING_COMPENSATING, BAPCState.NOT_COMPLETING, BAPCState.EXITING, BAPCState.ENDED))), MESSAGE_NOTCOMPLETED("MessageNotCompleted", new ArrayList<BAPCState>(Arrays.asList(BAPCState.ACTIVE, BAPCState.CANCELING, BAPCState.COMPLETED, BAPCState.CLOSING, BAPCState.COMPENSATING, BAPCState.FAILING_ACTIVE_CANCELING, BAPCState.FAILING_COMPENSATING, BAPCState.NOT_COMPLETING, BAPCState.EXITING, BAPCState.ENDED))), MESSAGE_EXIT("MessageExit", new ArrayList<BAPCState>(Arrays.asList(BAPCState.ACTIVE, BAPCState.CANCELING, BAPCState.COMPLETED, BAPCState.CLOSING, BAPCState.COMPENSATING, BAPCState.FAILING_ACTIVE_CANCELING, BAPCState.FAILING_COMPENSATING, BAPCState.NOT_COMPLETING, BAPCState.EXITING, BAPCState.ENDED))), MESSAGE_COMPLETED("MessageCompleted", new ArrayList<BAPCState>(Arrays.asList(BAPCState.ACTIVE, BAPCState.CANCELING, BAPCState.COMPLETED, BAPCState.CLOSING, BAPCState.COMPENSATING, BAPCState.FAILING_ACTIVE_CANCELING, BAPCState.FAILING_COMPENSATING, BAPCState.NOT_COMPLETING, BAPCState.EXITING, BAPCState.ENDED))), MESSAGE_FAIL("MessageFail", new ArrayList<BAPCState>(Arrays.asList(BAPCState.ACTIVE, BAPCState.CANCELING, BAPCState.COMPLETED, BAPCState.CLOSING, BAPCState.COMPENSATING, BAPCState.FAILING_ACTIVE_CANCELING, BAPCState.FAILING_COMPENSATING, BAPCState.NOT_COMPLETING, BAPCState.EXITING, BAPCState.ENDED))), MESSAGE_CANNOTCOMPLETE("MessageCanNotComplete", new ArrayList<BAPCState>(Arrays.asList(BAPCState.ACTIVE, BAPCState.CANCELING, BAPCState.COMPLETED, BAPCState.CLOSING, BAPCState.COMPENSATING, BAPCState.FAILING_ACTIVE_CANCELING, BAPCState.FAILING_COMPENSATING, BAPCState.NOT_COMPLETING, BAPCState.EXITING, BAPCState.ENDED))), MESSAGE_CANCELED("MessageCanceled", new ArrayList<BAPCState>(Arrays.asList(BAPCState.ACTIVE, BAPCState.CANCELING, BAPCState.COMPLETED, BAPCState.CLOSING, BAPCState.COMPENSATING, BAPCState.FAILING_ACTIVE_CANCELING, BAPCState.FAILING_COMPENSATING, BAPCState.NOT_COMPLETING, BAPCState.EXITING, BAPCState.ENDED))), MESSAGE_CLOSED("MessageClosed", new ArrayList<BAPCState>(Arrays.asList(BAPCState.ACTIVE, BAPCState.CANCELING, BAPCState.COMPLETED, BAPCState.CLOSING, BAPCState.COMPENSATING, BAPCState.FAILING_ACTIVE_CANCELING, BAPCState.FAILING_COMPENSATING, BAPCState.NOT_COMPLETING, BAPCState.EXITING, BAPCState.ENDED))), MESSAGE_COMPENSATED("MessageCompensated", new ArrayList<BAPCState>(Arrays.asList(BAPCState.ACTIVE, BAPCState.CANCELING, BAPCState.COMPLETED, BAPCState.CLOSING, BAPCState.COMPENSATING, BAPCState.FAILING_ACTIVE_CANCELING, BAPCState.FAILING_COMPENSATING, BAPCState.NOT_COMPLETING, BAPCState.EXITING, BAPCState.ENDED))); private String name; private ArrayList<BAPCState> permittingPStates; BAPCEventType(String name, ArrayList<BAPCState> permittingPStates) { this.permittingPStates = permittingPStates; this.name = name; } public boolean isMessageAllowed(BAPCState stateToCheck){ if (this.permittingPStates.contains(stateToCheck)) return true; else return false; } public URI getURI() { return URI.create(WON_TX.BASE_URI + name); } public BAPCEventType getBAEventTypeFromURIParticipantInbound (String sURI) { for (BAPCEventType eventType: BAPCEventType.values()){ if (sURI.equals(eventType.getURI().toString())) return eventType; } return null; } public static BAPCEventType getBAEventTypeFromURI (String sURI) { for (BAPCEventType eventType: BAPCEventType.values()){ if (sURI.equals(eventType.getURI().toString())) return eventType; } return null; } public static BAPCEventType getCoordinationEventTypeFromString(final String fragment) { for (BAPCEventType event : BAPCEventType.values()) if (event.name().equals(fragment)) { return event; } return null; } public static BAPCEventType getCoordinationEventTypeFromURI(final String fragment) { String s = fragment.substring(fragment.lastIndexOf("#Message")+8,fragment.length()); for (BAPCEventType event : BAPCEventType.values()) if (event.name().equals("MESSAGE_"+fragment.substring(fragment.lastIndexOf("#Message")+8,fragment.length()).toUpperCase())) return event; return null; } public static boolean isBAPCParticipantEventType(final BAPCEventType event) { boolean ret = false; if(event.equals(BAPCEventType.MESSAGE_COMPLETED) || event.equals(BAPCEventType.MESSAGE_EXIT) || event.equals(BAPCEventType.MESSAGE_FAIL) || event.equals(BAPCEventType.MESSAGE_CANNOTCOMPLETE) || event.equals(BAPCEventType.MESSAGE_CANCELED) || event.equals(BAPCEventType.MESSAGE_COMPENSATED) || event.equals(BAPCEventType.MESSAGE_CLOSED)) ret=true; return ret; } public static boolean isBAPCCoordinatorEventType(final BAPCEventType event) { return !isBAPCParticipantEventType(event); } }