001: /**
002: * WfXmlRegistryBindingImpl.java This file was auto-generated from WSDL by the Apache Axis
003: * 1.2RC2 Nov 16, 2004 (12:19:44 EST) WSDL2Java emitter.
004: */package org.enhydra.shark.wfxml;
005:
006: import java.io.StringWriter;
007: import java.net.URLEncoder;
008: import java.rmi.RemoteException;
009: import java.util.Arrays;
010: import java.util.Iterator;
011:
012: import javax.transaction.Status;
013: import javax.transaction.UserTransaction;
014: import javax.xml.transform.Transformer;
015: import javax.xml.transform.TransformerFactory;
016: import javax.xml.transform.dom.DOMSource;
017: import javax.xml.transform.stream.StreamResult;
018:
019: import org.apache.axis.MessageContext;
020: import org.apache.axis.message.MessageElement;
021: import org.apache.axis.types.URI;
022: import org.enhydra.shark.api.client.wfmc.wapi.WMSessionHandle;
023: import org.enhydra.shark.api.client.wfmodel.WfProcessMgr;
024: import org.enhydra.shark.api.client.wfservice.SharkConnection;
025: import org.enhydra.shark.api.client.wfservice.WMEntity;
026: import org.enhydra.shark.asap.AsapBindingUtilitiesImpl;
027: import org.enhydra.shark.asap.types.Request;
028: import org.enhydra.shark.asap.types.holders.ResponseHolder;
029: import org.enhydra.shark.client.utilities.SharkInterfaceWrapper;
030: import org.enhydra.shark.wfxml.types.DefinitionInfo;
031: import org.enhydra.shark.wfxml.types.GetPropertiesRs;
032: import org.enhydra.shark.wfxml.types.ListDefinitionsRq;
033: import org.enhydra.shark.wfxml.types.NewDefinitionRq;
034: import org.enhydra.shark.wfxml.types.NewDefinitionRs;
035: import org.enhydra.shark.wfxml.types.SetPropertiesRq;
036: import org.enhydra.shark.wfxml.types.SetPropertiesRs;
037: import org.enhydra.shark.wfxml.types.holders.GetPropertiesRsHolder;
038: import org.enhydra.shark.wfxml.types.holders.ListDefinitionsRsHolder;
039: import org.enhydra.shark.wfxml.types.holders.NewDefinitionRsHolder;
040: import org.enhydra.shark.wfxml.types.holders.SetPropertiesRsHolder;
041: import org.w3c.dom.Document;
042:
043: /**
044: * Wf-XML registry service implementation
045: *
046: * @author V.Puskas, S.Bojanic
047: * @version 0.11
048: */
049: public class WfXmlRegistryBindingImpl implements
050: org.enhydra.shark.wfxml.RegistryPortType {
051:
052: public void getProperties(Request rqHead, String rqBody,
053: ResponseHolder rsHead, GetPropertiesRsHolder rsBody)
054: throws java.rmi.RemoteException {
055: AsapBindingUtilitiesImpl.turnHeads(rqHead, rsHead);
056:
057: Iterator it = MessageContext.getCurrentContext()
058: .getRequestMessage().getMimeHeaders().getAllHeaders();
059: // MessageContext.getCurrentContext().getPropertyNames();
060: System.err.println("##:--");
061: while (it.hasNext()) {
062: System.err
063: .println("##:"
064: + ((javax.xml.soap.MimeHeader) it.next())
065: .getName());
066: }
067: System.err.println("##:--");
068: System.err.println(Arrays.asList(MessageContext
069: .getCurrentContext().getRequestMessage()
070: .getMimeHeaders().getHeader("User-Agent")));
071: rsBody.value = new GetPropertiesRs();
072: rsBody.value.setKey(rqHead.getReceiverKey());
073: rsBody.value.setName("Enhydra Shark");
074: }
075:
076: public void setProperties(Request rqHead, SetPropertiesRq rqBody,
077: ResponseHolder rsHead, SetPropertiesRsHolder rsBody)
078: throws java.rmi.RemoteException {
079: AsapBindingUtilitiesImpl.turnHeads(rqHead, rsHead);
080: rsBody.value = new org.enhydra.shark.wfxml.types.SetPropertiesRs();
081:
082: rsBody.value = new SetPropertiesRs();
083: rsBody.value.setKey(rqHead.getReceiverKey());
084: rsBody.value.setName("Enhydra Shark");
085: }
086:
087: public void listDefinitions(Request rqHead,
088: ListDefinitionsRq rqBody, ResponseHolder rsHead,
089: ListDefinitionsRsHolder rsBody)
090: throws java.rmi.RemoteException {
091: URI rk = rqHead.getReceiverKey();
092: System.err.println("LISTING DEFS FOR " + rk);
093: AsapBindingUtilitiesImpl.turnHeads(rqHead, rsHead);
094: // rsBody.value = new ListDefinitionsRs();
095: UserTransaction ut = null;
096: try {
097: ut = SharkInterfaceWrapper.getUserTransaction();
098: ut.begin();
099: SharkConnection sc = SharkInterfaceWrapper
100: .getDefaultSharkConnection(null);
101: WfProcessMgr p[] = sc.get_iterator_processmgr()
102: .get_next_n_sequence(0);
103: DefinitionInfo[] di = new DefinitionInfo[p.length];
104: for (int i = 0; i < p.length; ++i) {
105: WMEntity ent = SharkInterfaceWrapper
106: .getShark()
107: .getAdminMisc()
108: .getProcessDefinitionInfoByUniqueProcessDefinitionName(
109: sc.getSessionHandle(), p[i].name());
110: di[i] = new DefinitionInfo(createFactoryKey(rk, p[i]
111: .name()), ent.getName(), p[i].description(),
112: p[i].version(), String.valueOf(p[i]
113: .process_mgr_state().value()));
114: }
115: rsBody.value = di;
116: ut.commit();
117: } catch (Throwable ex) {
118: ex.printStackTrace();
119: try {
120: if (ut.getStatus() != Status.STATUS_NO_TRANSACTION) {
121: ut.rollback();
122: }
123: } catch (Exception _) {
124: }
125: throw new RemoteException(ex.getMessage());
126: }
127: }
128:
129: public void newDefinition(Request rqHead, NewDefinitionRq rqBody,
130: ResponseHolder rsHead, NewDefinitionRsHolder rsBody)
131: throws java.rmi.RemoteException {
132: AsapBindingUtilitiesImpl.turnHeads(rqHead, rsHead);
133: rsBody.value = new NewDefinitionRs(rqBody.getDefinition()
134: .get_any());
135:
136: if (!"XPDL".equals(rqBody.getProcessLanguage())) {
137: throw new RemoteException(
138: "Allowed value for process language is XPDL only!");
139: }
140: UserTransaction ut = null;
141: try {
142: ut = SharkInterfaceWrapper.getUserTransaction();
143: ut.begin();
144: MessageElement m = rqBody.getDefinition().get_any()[0];
145: // String pkgId = m.getAttribute("Id");
146: String relPath = "wfxml/" + System.currentTimeMillis()
147: + ".xpdl";
148: Document document = m.getAsDocument();
149: // Use a Transformer for output
150: DOMSource source = new DOMSource(document);
151: StringWriter sw = new StringWriter();
152: StreamResult result = new StreamResult(sw);
153: Transformer transformer = TransformerFactory.newInstance()
154: .newTransformer();
155: transformer.transform(source, result);
156: byte[] bytes = sw.toString().getBytes("UTF8");
157: // try {
158: // SharkServiceImpl.getRepositoryMgr().deletePackage(relPath);
159: // } catch (Exception _) {}
160: // SharkServiceImpl.getRepositoryMgr().uploadPackage(bytes,
161: // relPath);
162: // if (SharkServiceImpl.getPackageAdministration()
163: // .isPackageOpened(pkgId)) {
164: // SharkServiceImpl.getPackageAdministration()
165: // .updatePackage(pkgId, relPath);
166: // } else {
167: // SharkServiceImpl.getPackageAdministration().openPackage(relPath);
168: // }
169: try {
170: SharkServiceImpl.getRepositoryMgr().uploadPackage(
171: bytes, relPath);
172: } catch (Exception _) {
173: }
174: // SharkServiceImpl.getPackageAdministration().openPackage(relPath);
175: WMSessionHandle shandle = SharkInterfaceWrapper
176: .getDefaultSessionHandle(null);
177: SharkInterfaceWrapper.getShark().getPackageAdministration()
178: .uploadPackage(shandle, bytes);
179: ut.commit();
180: } catch (Exception ex) {
181: ex.printStackTrace();
182: try {
183: if (ut.getStatus() != Status.STATUS_NO_TRANSACTION) {
184: ut.rollback();
185: }
186: } catch (Exception _) {
187: }
188: throw new RemoteException(ex.getMessage());
189: }
190: }
191:
192: private static URI createFactoryKey(URI rk, String string)
193: throws Exception {
194: URI factoryURI = new URI(rk);
195: String def = new SharkWebServiceLocator()
196: .getwfxmlFactoryBindingWSDDServiceName();
197: String path = rk.getPath();
198: int ind = path.lastIndexOf("/");
199: path = path.substring(0, ind + 1) + def;
200: factoryURI.setPath(path);
201: // factoryURI.setHost(SharkServiceImpl.getMyAddress());
202: AsapBindingUtilitiesImpl.imprintURI(factoryURI);
203: factoryURI.setQueryString(SharkServiceImpl.QSPN_PROCESS_MANAGER
204: + URLEncoder.encode(string, "UTF-8"));
205: return factoryURI;
206: }
207: }
|