summaryrefslogtreecommitdiffstats
path: root/wso2/wso2bpel-ext/wso2bpel-core/BPEL4RESTLight/src/main/java/de/unistuttgart/iaas/bpel/extensions/bpel4restlight/util/Bpel4RestLightUtil.java
blob: 1c9d7d17be2c73223e019faa14a6bb8d90d369c1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
/**
 * Copyright 2011 IAAS University of Stuttgart <br>
 * <br>
 * 
 * @author uwe.breitenbuecher@iaas.uni-stuttgart.de
 * 
 */
package de.unistuttgart.iaas.bpel.extensions.bpel4restlight.util;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.ode.bpel.common.FaultException;
import org.apache.ode.bpel.runtime.extension.ExtensionContext;
import org.w3c.dom.Element;
import org.w3c.dom.Node;

import de.unistuttgart.iaas.bpel.extensions.bpel4restlight.Bpel4RestLightOperation;
import de.unistuttgart.iaas.bpel.extensions.bpel4restlight.MethodAttribute;
import de.unistuttgart.iaas.xml.DomXmlConverter;


public class Bpel4RestLightUtil {
  protected static final Log log = LogFactory.getLog(Bpel4RestLightUtil.class);
	/**
	 * This function extracts the requestPayload specified in the passed
	 * element. This requestPayload is either the content contained in a special
	 * BPEL-Variable which is referenced by name by a special attribute of the
	 * passed element or the content contained in the first child node of the
	 * passed element
	 * 
	 * @param context ExtensionContext
	 * @param element Element from which the requestPayload has to be extracted
	 * @return RequestPayload as String
	 * @throws FaultException
	 */
	public static String extractRequestPayload(ExtensionContext context, Element element) throws FaultException {
		
		String requestPayload = "";
		
		String requestPayloadVariableName = getMethodAttributeValue(element, MethodAttribute.REQUESTPAYLOADVARIABLE);
		
		if (requestPayloadVariableName != null && requestPayloadVariableName != "") {
			Node requestVariableNode = context.readVariable(requestPayloadVariableName);
			if (requestVariableNode.getLocalName().equals("temporary-simple-type-wrapper")) {
				Bpel4RestLightOperation.wrapper = "temporary-simple-type-wrapper";
				requestPayload = DomXmlConverter.nodeToString(requestVariableNode, "temporary-simple-type-wrapper");
			} else {
				requestPayload = DomXmlConverter.nodeToString(requestVariableNode, null);
			}
			log.debug("The pure request variable as String: \n" + DomXmlConverter.nodeToString(requestVariableNode, null) + "\n");
		}
		
		return requestPayload;
	}
	
	public static String extractAcceptHeader(ExtensionContext context, Element element) throws FaultException {
		return getMethodAttributeValue(element, MethodAttribute.ACCEPTHEADER);
	}
	
	public static String extractContentTypeHeader(ExtensionContext context, Element element) throws FaultException {
      return getMethodAttributeValue(element, MethodAttribute.CONTENTTYPE);
  }
	
	/**
	 * This function extracts special predefined attributes (see
	 * {@link MethodAttribute}) from a passed DOM-Element
	 * 
	 * @param element Element containing the requested Attribute-Value
	 * @param methodAttribute Attribute whose content has to be returned
	 * @return Value / Content of the attribute
	 */
	public static String getMethodAttributeValue(Element element, MethodAttribute methodAttribute) {
		
		String result = "";
		
		switch (methodAttribute) {
		
			case REQUESTURI:
				result = element.getAttribute("uri");
				
				if (result == null || "".equals(result)) {
					result = element.getAttribute("requestUri");
				}
				break;
			case REQUESTPAYLOADVARIABLE:
				result = element.getAttribute("request");
				
				if (result == null || "".equals(result)) {
					result = element.getAttribute("requestPayload");
				}
				break;
			case RESPONSEPAYLOADVARIABLE:
				result = element.getAttribute("response");
				
				if (result == null || "".equals(result)) {
					result = element.getAttribute("responsePayload");
				}
				break;
			case STATUSCODEVARIABLE:
				result = element.getAttribute("statusCode");
				break;
			case ACCEPTHEADER:
				result = element.getAttribute("accept");
				break;
			case CONTENTTYPE:
			  result = element.getAttribute("contentType");
			  break;
		}
		
		return result;
	}
	
}