/*
* Copyright (c) 2005-2010, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. 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.
*/
package org.wso2.carbon.mediator.calltemplate.client;
import org.apache.axiom.om.OMAttribute;
import org.apache.axiom.om.OMElement;
import org.apache.axis2.AxisFault;
import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient;
import org.apache.axis2.context.ConfigurationContext;
import org.apache.synapse.config.xml.XMLConfigConstants;
import org.wso2.carbon.CarbonConstants;
import org.wso2.carbon.mediation.templates.stub.types.TemplateAdminServiceStub;
import org.wso2.carbon.mediation.templates.stub.types.common.TemplateInfo;
import org.wso2.carbon.ui.CarbonUIUtil;
import org.wso2.carbon.utils.ServerConstants;
import javax.servlet.ServletConfig;
import javax.servlet.http.HttpSession;
import javax.xml.namespace.QName;
import java.rmi.RemoteException;
import java.util.Arrays;
import java.util.Iterator;
public class TemplateAdminClient {
public static final QName PARAMETER_Q = new QName(XMLConfigConstants.SYNAPSE_NAMESPACE, "parameter");
public static final QName NAME_Q = new QName("name");
private TemplateAdminServiceStub templateAdminStub;
public TemplateAdminClient(ServletConfig config, HttpSession session) throws AxisFault {
String backendServerURL = CarbonUIUtil.getServerURL(config.getServletContext(), session);
ConfigurationContext configContext = (ConfigurationContext)
config.getServletContext().getAttribute(CarbonConstants.CONFIGURATION_CONTEXT);
String cookie = (String) session.getAttribute(ServerConstants.ADMIN_SERVICE_COOKIE);
String serviceURL = backendServerURL + "TemplateAdminService";
templateAdminStub = new TemplateAdminServiceStub(configContext, serviceURL);
ServiceClient client = templateAdminStub._getServiceClient();
Options option = client.getOptions();
option.setManageSession(true);
option.setProperty(org.apache.axis2.transport.http.HTTPConstants.COOKIE_STRING, cookie);
}
public String[] getAllTempalateNames() throws CallTemplateUIException {
String[] staticTemplateNames = new String[0];
String[] dynamicTemplateNames = new String[0];
try {
staticTemplateNames = getStaticTemplateNames();
} catch (Exception e) {
handleException("CallTemplateUI Couldn't retrieve info on static Template Names ", e);
}
try {
dynamicTemplateNames = getDynamicTemplateNames();
} catch (Exception e) {
handleException("CallTemplateUI Couldn't retrieve info on dynamic Tempalate Names ", e);
}
return merge(staticTemplateNames, dynamicTemplateNames);
}
/**
* This method will try to derive the parameter names for a given template name
*
* @param tempalteName
* @return parameter name string, string will be on the format og p1;p2;p3 ...
* @throws CallTemplateUIException
*/
public String getParameterStringForTemplate(String tempalteName) throws CallTemplateUIException {
OMElement mediatorElement = null;
try {
mediatorElement = templateAdminStub.getTemplate(tempalteName).getFirstElement();
} catch (Exception e) {
handleException("CallTemplateUI Couldn't retrieve the template element with name '"
+ tempalteName + "'", e);
}
if (mediatorElement != null) {
return getTempalateParamsString(mediatorElement);
} else {
try {
mediatorElement = templateAdminStub.getDynamicTemplate(tempalteName).getFirstElement();
} catch (Exception e) {
handleException("CallTemplateUI Couldn't retrieve the template element with name '"
+ tempalteName + "'", e);
}
return getTempalateParamsString(mediatorElement);
}
}
private static String getTempalateParamsString(OMElement templateElem) {
Iterator subElements = templateElem.getChildElements();
String templateParamsStr = "";
while (subElements.hasNext()) {
OMElement child = (OMElement) subElements.next();
if (child.getQName().equals(PARAMETER_Q)) {
OMAttribute paramNameAttr = child.getAttribute(NAME_Q);
if (paramNameAttr != null) {
templateParamsStr = templateParamsStr + paramNameAttr.getAttributeValue() + ";";
}
}
}
return templateParamsStr;
}
private static String[] merge(String[] first, String[] second) {
String[] result = Arrays.copyOf(first, first.length + second.length);
System.arraycopy(second, 0, result, first.length, second.length);
return result;
}
private String[] getStaticTemplateNames() throws RemoteException {
int staticTemplateCount = templateAdminStub.getTemplatesCount();
TemplateInfo[] temp1 =
templateAdminStub.getTemplates(0, staticTemplateCount);
String[] staticTemplateNames;
if (temp1 == null || temp1.length == 0 || temp1[0] == null) {
staticTemplateNames = new String[0];
} else {
staticTemplateNames = new String[temp1.length];
int i = 0;
for (TemplateInfo templateInfo : temp1) {
staticTemplateNames[i] = templateInfo.getName();
i++;
}
}
return staticTemplateNames;
}
private String[] getDynamicTemplateNames() throws RemoteException {
int dynamicTemplateCount = templateAdminStub.getDynamicTemplateCount();
TemplateInfo[] temp1 =
templateAdminStub.getDynamicTemplates(0, dynamicTemplateCount);
String[] dynamicTemplateNames;
if (temp1 == null || temp1.length == 0 || temp1[0] == null) {
dynamicTemplateNames = new String[0];
} else {
dynamicTemplateNames = new String[temp1.length];
int i = 0;
for (TemplateInfo templateInfo : temp1) {
dynamicTemplateNames[i] = templateInfo.getName();
i++;
}
}
return dynamicTemplateNames;
}
private void handleException(String message, Throwable e) throws CallTemplateUIException {
// log.error(message, e);
throw new CallTemplateUIException(message, e);
}
}