Jacob Saoumi created SCXML-240: ---------------------------------- Summary: adding user-defined properties to the state model Key: SCXML-240 URL: https://issues.apache.org/jira/browse/SCXML-240 Project: Commons SCXML Issue Type: Improvement Affects Versions: 2.0 Reporter: Jacob Saoumi Fix For: 2.0
I need to extend the state model to have a user-defined properties. For example: <state id="xy" cs:type="myStateType"></state> The solution is to easy. Add the following methods to the org.apache.commons.scxml2.model.State class: /** * set a user-defined property with the given {@code name} * * @param name * the name of the user-defined propery * @param value * the value of the property */ public final synchronized void setProperty(String name, String value) { if (this.extendProperties == null) { this.extendProperties = new HashMap<String, String>(); } this.extendProperties.put(name, value); } /** * * @param name * the name of the user-defined propery * @return the value of the property with the given {@code name} */ public final String getProperty(String name) { return extendProperties == null ? null : extendProperties.get(name); } /** * * @return a set of user-defined properties names */ public final Set<String> getPropertyNames() { return extendProperties == null ? null : extendProperties.keySet(); } /** * * @return the count of the user-defined properties */ public final int getPropertyCount() { return extendProperties == null ? 0 : extendProperties.size(); } and extend the readState method of the SCXMLReader to read this properties from xml: // reading user-defined properties int attrCount = reader.getAttributeCount(); for (int i = 0; i < attrCount; i++) { QName attrName = reader.getAttributeName(i); String prefix = nullIfEmpty(attrName.getPrefix()); String localPart = attrName.getLocalPart(); if (prefix != null) { localPart = prefix + ":" + localPart; } if (ATTR_SRC.equals(localPart) || TTR_INITIAL.equals(localPart) || ATTR_ID.equals(localPart)) { continue; } state.setProperty(localPart, reader.getAttributeValue(i)); } -- This message was sent by Atlassian JIRA (v6.3.4#6332)