blob: 6b0b44070966c0c3b4cbdbf98441fff6751b8799 [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
<simple-methods xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/simple-methods.xsd">
<simple-method method-name="transmitRequest" short-description="" login-required="false">
<!-- Connect, there may be ofbiz HttpClient.java that may handle this well -->
<call-service service-name="connectToGoogleCheckoutServer">
<result-to-field result-name="conn"/>
</call-service>
<log level="info" message="step 1 done"/>
<!-- Get the Content -->
<call-simple-method method-name="createXMLOutput"/>
<log level="info" message="step 2 done"/>
<!-- Setup the Content -->
<call-simple-method method-name="setupContent"/>
<log level="info" message="step 3 done ${content}"/>
<!-- Get Response -->
<call-simple-method method-name="getResponse"/>
<log level="info" message="step 4 done"/>
<!-- Get Redirect from xml document response -->
<log level="info" message="${response}"/>
<call-simple-method method-name="getReDirectFromXmlDoc"/>
<log level="info" message="step 5 done"/>
<field-to-result field="redirect"/>
</simple-method>
<!-- Step 1 -->
<simple-method method-name="connectToGoogleCheckoutServer" short-description="create connection to Google Checkout server" login-required="false">
<call-simple-method method-name="createRequestUrl"/>
<call-simple-method method-name="getHttpAuth"/>
<call-bsh><![CDATA[
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setDoInput (true);
conn.setDoOutput (true);
conn.setUseCaches (false);
conn.setFollowRedirects(true);
conn.setInstanceFollowRedirects(false);
conn.setRequestMethod("POST");
conn.setRequestProperty("Authorization", HttpAuth);
conn.setRequestProperty("Host", conn.getURL().getHost());
conn.setRequestProperty("content-type", "application/xml");
conn.setRequestProperty("accept", "application/xml");
conn.connect();
return org.ofbiz.base.util.UtilMisc.toMap("conn", conn);
]]></call-bsh>
<field-to-result field="conn"/>
</simple-method>
<simple-method method-name="createRequestUrl" short-description="" login-required="false">
<!-- Setup Url spec -->
<property-to-field resource="googleCheckout" property="basePostUrl" field="basePostUrl"/>
<property-to-field resource="googleCheckout" property="merchantId" field="merchantId"/>
<property-to-field resource="googleCheckout" property="request" field="request"/>
<set field="urlSpec" value="${basePostUrl}${merchantId}"/>
<create-object class-name="java.net.URL" field="url">
<field field="urlSpec"/>
</create-object>
</simple-method>
<simple-method method-name="getHttpAuth" short-description="" login-required="false">
<property-to-field resource="googleCheckout" property="merchantId" field="merchantId"/>
<property-to-field resource="googleCheckout" property="merchantKey" field="merchantKey"/>
<set field="userNameAndPass" value="${merchantId}:${merchantKey}"/>
<call-class-method method-name="base64Encode" class-name="org.ofbiz.base.util.Base64" ret-field="encodedValue">
<field field="userNameAndPass"/>
</call-class-method>
<set field="HttpAuth" value="Basic ${encodedValue}"/>
</simple-method>
<!-- Step 2 -->
<simple-method method-name="createXMLOutput" short-description="" login-required="false">
<!-- create writer -->
<create-object class-name="java.io.StringWriter" field="XMLWriter"/>
<!-- create screen context -->
<call-class-method method-name="create" class-name="org.ofbiz.base.util.collections.MapStack" ret-field="xscreenContext"/>
<!-- Add the shoppingCart to the MapStack -->
<set field="inMap.shoppingCart" from-field="parameters.shoppingCart"/>
<set-service-fields map="inMap" service-name="ConvertOfbizCartToGoogle" to-map="serMap"/>
<call-service service-name="ConvertOfbizCartToGoogle" in-map-name="serMap">
<result-to-field result-name="googleCart"/>
<result-to-field result-name="flowSupport"/>
<result-to-field result-name="sendInitialAuthDetails"/>
</call-service>
<set field="xscreenContext.googleCart" from-field="googleCart"/>
<set field="xscreenContext.flowSupport" from-field="flowSupport"/>
<set field="xscreenContext.sendInitialAuthDetails" from-field="sendInitialAuthDetails"/>
<set field="xscreenContext.shoppingCart" from-field="parameters.shoppingCart"/>
<!-- create string renderer -->
<create-object class-name="org.ofbiz.widget.html.HtmlScreenRenderer" field="xhtmlStringRenderer"></create-object>
<!-- create screen renderer -->
<create-object class-name="org.ofbiz.widget.screen.ScreenRenderer" field="screens">
<field field="XMLWriter" type="java.lang.Appendable"/>
<field field="xscreenContext" type="org.ofbiz.base.util.collections.MapStack"/>
<field field="xhtmlStringRenderer" type="org.ofbiz.widget.screen.ScreenStringRenderer"/>
</create-object>
<set field="xscreenContext.screens" from-field="screens"/>
<create-object class-name="org.ofbiz.widget.screen.ScreenRenderer" field="xscreens">
<field field="XMLWriter" type="java.lang.Appendable"/>
<field field="xscreenContext" type="org.ofbiz.base.util.collections.MapStack"/>
<field field="xhtmlStringRenderer" type="org.ofbiz.widget.screen.ScreenStringRenderer"/>
</create-object>
<!-- get uri -->
<property-to-field resource="googleCheckout" property="xmlTemplateUri" field="screenUri"/>
<call-object-method method-name="render" obj-field="xscreens">
<field field="screenUri" type="String"/>
</call-object-method>
<set field="content" value="${groovy:XMLWriter.toString()}"/>
</simple-method>
<!-- Step 3 -->
<simple-method method-name="setupContent" short-description="" login-required="false">
<call-bsh><![CDATA[
sWriter = new OutputStreamWriter(conn.getOutputStream());
return org.ofbiz.base.util.UtilMisc.toMap("sWriter", sWriter);
]]></call-bsh>
<create-object class-name="java.io.BufferedWriter" field="writer">
<field field="sWriter" type="java.io.Writer"/>
</create-object>
<call-object-method method-name="write" obj-field="writer">
<field field="content" type="String"/>
</call-object-method>
<call-object-method method-name="close" obj-field="writer"/>
</simple-method>
<!-- Step 4 -->
<simple-method method-name="getResponse" short-description="" login-required="false">
<clear-field field="sReader"/>
<call-bsh><![CDATA[
try {
sReader = new InputStreamReader(conn.getInputStream());
} catch (IOException ex) {
sReader = new InputStreamReader(conn.getErrorStream());
}
return org.ofbiz.base.util.UtilMisc.toMap("sReader", sReader);
]]></call-bsh>
<create-object class-name="java.io.BufferedReader" field="reader">
<field field="sReader" type="java.io.Reader"/>
</create-object>
<call-bsh><![CDATA[
StringBuffer buffer = new StringBuffer();
String line = null;
while (null != (line = reader.readLine())) {
buffer.append(line);
}
return org.ofbiz.base.util.UtilMisc.toMap("buffer", buffer);
]]></call-bsh>
<set field="response" value="${groovy:buffer.toString()}"/>
</simple-method>
<!-- Step 5 -->
<simple-method method-name="getReDirectFromXmlDoc" short-description="" login-required="false">
<call-bsh><![CDATA[
document = org.ofbiz.base.util.UtilXml.readXmlDocument(response, false);
return org.ofbiz.base.util.UtilMisc.toMap("document", document);
]]></call-bsh>
<call-object-method method-name="getDocumentElement" obj-field="document" ret-field="rootElement"/>
<!-- May want to get the serial number to store eventually; would be an attribute of this rootElement,
Skipping for now -->
<call-simple-method method-name="getRedirectFromRootElement"/>
</simple-method>
<simple-method method-name="getRedirectFromRootElement" short-description="" login-required="false">
<call-class-method method-name="childElementList" class-name="org.ofbiz.base.util.UtilXml" ret-field="childList">
<field field="rootElement" type="org.w3c.dom.Element"/>
</call-class-method>
<call-bsh><![CDATA[
redirect = null;
childListIter = childList.iterator();
while (childListIter.hasNext()){
child = childListIter.next();
org.ofbiz.base.util.Debug.logInfo("child =" + child,null);
nodeName = child.getNodeName();
if ("redirect-url".equals(nodeName)){
redirect = org.ofbiz.base.util.UtilXml.elementValue(child);
} else {
redirect = document;
}
}
return org.ofbiz.base.util.UtilMisc.toMap("redirect", redirect.toString());
]]></call-bsh>
</simple-method>
<simple-method method-name="setupHeaders" short-description="">
<set field="true" value="true" type="Boolean"/>
<set field="false" value="false" type="Boolean"/>
<call-object-method method-name="setDoInput" obj-field="conn">
<field field="true" type="boolean"/>
</call-object-method>
<call-object-method method-name="setDoOutput" obj-field="conn">
<field field="true" type="boolean"/>
</call-object-method>
<call-object-method method-name="setUseCaches" obj-field="conn">
<field field="false" type="boolean"/>
</call-object-method>
<call-object-method method-name="setFollowRedirects" obj-field="conn">
<field field="true" type="boolean"/>
</call-object-method>
<call-object-method method-name="setInstanceFollowRedirects" obj-field="conn">
<field field="true" type="boolean"/>
</call-object-method>
<call-object-method method-name="setRequestMethod" obj-field="conn">
<string value="POST"/>
</call-object-method>
<call-simple-method method-name="getHttpAuth"/>
<call-object-method method-name="setRequestProperty" obj-field="conn">
<string value="Authorization"/>
<field field="HttpAuth"/>
</call-object-method>
<call-simple-method method-name="getHttpHost"/>
<call-object-method method-name="setRequestProperty" obj-field="conn">
<string value="Host"/>
<field field="HttpHost"/>
</call-object-method>
<call-object-method method-name="setRequestProperty" obj-field="conn">
<string value="content-type"/>
<string value="application/xml"/>
</call-object-method>
<call-object-method method-name="setRequestProperty" obj-field="conn">
<string value="accept"/>
<string value="application/xml"/>
</call-object-method>
</simple-method>
<simple-method method-name="getHttpHost" short-description="">
<call-bsh><![CDATA[
HttpHost = conn.getURL().getHost();
return org.ofbiz.base.util.UtilMisc.toMap("HttpHost", HttpHost);
]]></call-bsh>
</simple-method>
</simple-methods>