/*
* component: "openEHR Reference Implementation"
* description: "Class ISMTransition"
* keywords: "composition"
*
* author: "Yin Su Lim <y.lim@chime.ucl.ac.uk>"
* support: "CHIME, UCL"
* copyright: "Copyright (c) 2006 UCL, UK"
* license: "See notice at bottom of class"
*
* file: "$URL: http://svn.openehr.org/ref_impl_java/TRUNK/libraries/src/java/org/openehr/rm/composition/content/entry/ISMTransition.java $"
* revision: "$LastChangedRevision: 53 $"
* last_change: "$LastChangedDate: 2006-08-11 13:20:08 +0100 (Fri, 11 Aug 2006) $"
*/
package org.openehr.rm.composition.content.entry;
import org.openehr.rm.Attribute;
import org.openehr.rm.FullConstructor;
import org.openehr.rm.RMObject;
import org.openehr.rm.datatypes.text.DvCodedText;
import org.openehr.rm.support.terminology.*;
/**
* Model of a transition in the Instruction State machine, caused by a careflow step.
* The attributes document the careflow step as well as the ISM transition.
*
* @author Yin Su Lim
* @version 1.0
*/
public final class ISMTransition extends RMObject {
/**
* @param uid
* @param archetypeNodeId
* @param name
* @param archetypeDetails
* @param feederAudit
* @param links
* @param parent
*/
@FullConstructor
public ISMTransition(
@Attribute(name = "currentState", required = true) DvCodedText currentState,
@Attribute(name = "transition") DvCodedText transition,
@Attribute(name = "careflowStep") DvCodedText careflowStep,
@Attribute(name = "terminologyService", system = true) TerminologyService terminologyService) {
if (currentState == null) {
throw new IllegalArgumentException("null currentState");
}
if (terminologyService == null) {
throw new IllegalArgumentException("null terminologyService");
}
if (!terminologyService.terminology(TerminologyService.OPENEHR)
.codesForGroupName(OpenEHRTerminologyGroupIdentifiers
.INSTRUCTION_STATES.getValue(), "en")
.contains(currentState.getDefiningCode())) {
throw new IllegalArgumentException("unknown currentState:" + currentState);
}
if (transition != null && !terminologyService.terminology(TerminologyService.OPENEHR)
.codesForGroupName(OpenEHRTerminologyGroupIdentifiers
.INSTRUCTION_TRANSITIONS.getValue(), "en")
.contains(transition.getDefiningCode())) {
throw new IllegalArgumentException("unknown transition:" + transition);
}
this.currentState = currentState;
this.transition = transition;
this.careflowStep = careflowStep;
}
/**
* The step in the careflow process which occurred as part of generating
* this action, e.g. "dispense", "start_administration". This attribute
* represents the clinical label for the activity, as opposed to
* currentState which represents the state machine computable form.
*
* @return careflowStep
*/
public DvCodedText getCareflowStep() {
return careflowStep;
}
/**
* The ISM current state. Coded by openEHR terminology group "ISM states"
*
* @return currentState
*/
public DvCodedText getCurrentState() {
return currentState;
}
/**
* The ISM transition which occurred to arrive in the currentState. Coded by
* openEHR terminology group "ISM transitions"
*
* @return transition
*/
public DvCodedText getTransition() {
return transition;
}
//POJO start
ISMTransition() {
}
void setCareflowStep(DvCodedText careflowStep) {
this.careflowStep = careflowStep;
}
void setCurrentState(DvCodedText currentState) {
this.currentState = currentState;
}
void setTransition(DvCodedText transition) {
this.transition = transition;
}
//POJO end
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((careflowStep == null) ? 0 : careflowStep.hashCode());
result = prime * result
+ ((currentState == null) ? 0 : currentState.hashCode());
result = prime * result
+ ((transition == null) ? 0 : transition.hashCode());
return result;
}
@Override
// Generated by Eclipse
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
ISMTransition other = (ISMTransition) obj;
if (careflowStep == null) {
if (other.careflowStep != null) {
return false;
}
} else if (!careflowStep.equals(other.careflowStep)) {
return false;
}
if (currentState == null) {
if (other.currentState != null) {
return false;
}
} else if (!currentState.equals(other.currentState)) {
return false;
}
if (transition == null) {
if (other.transition != null) {
return false;
}
} else if (!transition.equals(other.transition)) {
return false;
}
return true;
}
/* fields */
private DvCodedText currentState;
private DvCodedText transition;
private DvCodedText careflowStep;
}
/*
* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the 'License'); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an 'AS IS' basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is ISMTransition.java
*
* The Initial Developer of the Original Code is Yin Su Lim.
* Portions created by the Initial Developer are Copyright (C) 2003-2004
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
*
* Software distributed under the License is distributed on an 'AS IS' basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* ***** END LICENSE BLOCK *****
*/