package org.apache.ode.bpel.obj; import java.io.Serializable; import java.util.Arrays; import java.util.LinkedHashMap; import java.util.Map; import javax.xml.namespace.QName; import org.apache.ode.bpel.obj.serde.OmSerdeFactory; import org.apache.ode.bpel.obj.serde.OmSerdeFactory.SerializeFormat; import com.fasterxml.jackson.annotation.JsonIgnore; /** * The class maintains all data that should be serialized. Including headers * like magic number, format etc. and the BPEL process. The header and whole * class could be extended. * * An example: * { * "MAGIC":"VTVTAE9GSCAUBSk=", * "FORMAT":16, * "COMPILE_TIME":1401935206665, * "OTHER_HEADERS":{}, * "PROCESS":{} * } * * @author fangzhen */ public class OProcessWrapper extends ExtensibleImpl implements Serializable{ public static final long serialVersionUID = -1L; // constants public static final byte[] MAGIC_NUMBER_OFH_20140529 = new byte[] { 0x55, '5', 'S', 0x00, 'O', 'F', 'H', 0x20, 0x14, 0x05, 0x29 }; public static final byte[] CURRENT_MAGIC_NUMBER = MAGIC_NUMBER_OFH_20140529; // key constants private static final String MAGIC_NUMBER = "magic"; private static final String FORMAT = "format"; private static final String COMPILE_TIME = "compileTime"; private static final String GUID = "guid"; private static final String PROCESS = "process"; private static final String OTHER_HEADERS = "otherHeaders"; private static final String TYPE = "type"; public OProcessWrapper() { super(new LinkedHashMap<String, Object>()); setMagic(OProcessWrapper.CURRENT_MAGIC_NUMBER); setCompileTime(0); setFormat(SerializeFormat.FORMAT_UNINITIALIZED); setOtherHeaders(new LinkedHashMap<String, Object>()); } public OProcessWrapper(long compileTime) { this(); setCompileTime(compileTime); } public void checkValid() throws OModelException { if (!Arrays.equals(getMagic(), MAGIC_NUMBER_OFH_20140529)){ throw new OModelException("Unrecognized magic number"); } } //Accessors @JsonIgnore public QName getType(){ return (QName)fieldContainer.get(TYPE); } public void setType(QName qname){ fieldContainer.put(TYPE, qname); } private void setType(String namespace, String local){ fieldContainer.put(TYPE, new QName(namespace, local)); } @JsonIgnore public byte[] getMagic() { return (byte[])fieldContainer.get(MAGIC_NUMBER); } public void setMagic(byte[] magic) { fieldContainer.put(MAGIC_NUMBER, magic); } @JsonIgnore public SerializeFormat getFormat() { return (SerializeFormat)fieldContainer.get(FORMAT); } public void setFormat(SerializeFormat format) { fieldContainer.put(FORMAT, format); } @JsonIgnore public long getCompileTime() { return (Long)fieldContainer.get(COMPILE_TIME); } public void setCompileTime(long compileTime) { fieldContainer.put(COMPILE_TIME, compileTime); } @JsonIgnore public String getGuid() { return (String)fieldContainer.get(GUID); } public void setGuid(String guid) { fieldContainer.put(GUID, guid); } @JsonIgnore @SuppressWarnings("unchecked") public Map<String, Object> getOtherHeaders() { Object o = fieldContainer.get(OTHER_HEADERS); return o == null ? null : (Map<String,Object>)o; } public void setOtherHeaders(Map<String, Object> otherHeaders) { fieldContainer.put(OTHER_HEADERS, otherHeaders); } @JsonIgnore public OProcess getProcess() { return (OProcess)fieldContainer.get(PROCESS); } public void setProcess(OProcess process) { setGuid(process.getGuid()); setType(process.getTargetNamespace(), process.getProcessName()); fieldContainer.put(OProcessWrapper.PROCESS, process); } }