NodeList stateNodes = hmlElement.getElementsByTagName(HML_STATE);
LinkedList<State> states = new LinkedList<State>();
for(int index = 0; index < stateNodes.getLength(); index++){
Node mainNode = stateNodes.item(index);
State state = new State();
Attribute attr = null;
//check if the node is element node. It should be state Element.
//If it is not, continue to the main node
if (mainNode.getNodeType() == Node.ELEMENT_NODE) {
Element stateElement = (Element) mainNode;
if(stateElement.hasAttribute(ID)){
state.setId(stateElement.getAttribute(ID));
}
if(stateElement.hasAttribute(NAME)){
state.setName(stateElement.getAttribute(NAME));
}
//Get a list of state elements frm this element
NodeList stateElements = stateElement.getChildNodes();
StateElement stateElementObject = null;
for(int se = 0; se < stateElements.getLength(); se++){
Node finalStateNode = stateElements.item(se);
if (finalStateNode.getNodeType() == Node.ELEMENT_NODE) {
Element finalStateElement = (Element) finalStateNode;
if(finalStateElement.getNodeName().equals(ATTREF)){
stateElementObject = new StateElement();
String attrId = finalStateElement.getAttribute(REF);
attr = model.getAttributeById(attrId);
stateElementObject.setAttributeName(attr.getName());
}else if(finalStateElement.getNodeName().equals(SET)){
Type corresponginType = attr.getType();
ArrayList<Value> values = parseValues(finalStateElement, corresponginType.getBase());
if(values.size() > 1){
stateElementObject.setValue(new SetValue(values));
}else{
stateElementObject.setValue(values.get(0));
}
state.addStateElement(stateElementObject);
}
}
}
}
if(state != null) states.add(state);