/**
* Copyright (c) 2009, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* Licensed 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.sequences.ui.client;
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.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.CarbonConstants;
import org.wso2.carbon.mediator.service.builtin.SequenceMediator;
import org.wso2.carbon.sequences.common.SequenceEditorException;
import org.wso2.carbon.sequences.common.to.ConfigurationObject;
import org.wso2.carbon.sequences.common.to.SequenceInfo;
import org.wso2.carbon.sequences.stub.types.SequenceAdminServiceStub;
import org.wso2.carbon.ui.CarbonUIUtil;
import org.wso2.carbon.utils.ServerConstants;
import javax.servlet.ServletConfig;
import javax.servlet.http.HttpSession;
import java.util.ArrayList;
import java.util.List;
/**
* Client class which is being called by the <em>sequence-editor</em> component user interface JSPs.
* This represents client invocation methods for the sequence editor admin service
*/
public class SequenceAdminClient implements EditorUIClient {
private static final Log log = LogFactory.getLog(SequenceAdminClient.class);
private SequenceAdminServiceStub sequenceAdminStub;
public SequenceAdminClient(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 + "SequenceAdminService";
sequenceAdminStub = new SequenceAdminServiceStub(configContext, serviceURL);
ServiceClient client = sequenceAdminStub._getServiceClient();
Options option = client.getOptions();
option.setManageSession(true);
option.setProperty(org.apache.axis2.transport.http.HTTPConstants.COOKIE_STRING, cookie);
}
public SequenceInfo[] getSequences(int pageNumber, int sequencePerPage)
throws SequenceEditorException {
List<SequenceInfo> sequences = new ArrayList<SequenceInfo>();
try {
org.wso2.carbon.sequences.stub.types.common.to.SequenceInfo[] temp =
sequenceAdminStub.getSequences(pageNumber,sequencePerPage);
if (temp == null || temp.length == 0 || temp[0] == null) {
return null;
}
for (org.wso2.carbon.sequences.stub.types.common.to.SequenceInfo info : temp) {
SequenceInfo seqInfo = new SequenceInfo();
seqInfo.setEnableStatistics(info.getEnableStatistics());
seqInfo.setEnableTracing(info.getEnableTracing());
seqInfo.setName(info.getName());
seqInfo.setDescription(info.getDescription());
sequences.add(seqInfo);
}
} catch (Exception e) {
handleException("Couldn't retrieve the information of the sequences", e);
}
if (sequences.size() > 0) {
return sequences.toArray(new SequenceInfo[sequences.size()]);
}
return null;
}
public int getSequencesCount() throws SequenceEditorException {
try {
return sequenceAdminStub.getSequencesCount();
} catch (Exception e) {
handleException("Couldn't retrieve the sequence element count", e);
}
return 0;
}
private OMElement getSequence(String sequenceName) throws SequenceEditorException {
OMElement element = null;
try {
element = sequenceAdminStub.getSequence(sequenceName).getFirstElement();
} catch (Exception e) {
handleException("Couldn't retrieve the sequence element with name '"
+ sequenceName + "'", e);
}
return element;
}
public void saveSequence(SequenceMediator sequence) throws SequenceEditorException {
OMElement sequenceElem = sequence.serialize(null);
try {
sequenceAdminStub.saveSequence(sequenceElem);
} catch (Exception e) {
handleException("Error in saving the sequence with the configuration '"
+ sequenceElem + "'", e);
}
}
public void addSequence(SequenceMediator sequence) throws SequenceEditorException {
OMElement sequenceElem = sequence.serialize(null);
try {
sequenceAdminStub.addSequence(sequenceElem);
} catch (Exception e) {
handleException("Error in adding the sequence with the configuration '"
+ sequenceElem + "'", e);
}
}
public void addDynamicSequence(String key, SequenceMediator sequence)
throws SequenceEditorException {
OMElement sequenceElem = sequence.serialize(null);
try {
sequenceAdminStub.addDynamicSequence(key, sequenceElem);
} catch (Exception e) {
handleException("Error in adding dynamic sequence with configuration '"
+ sequenceElem + "' to the registry with key '" + key + "'", e);
}
}
public OMElement getDynamicSequence(String key) throws SequenceEditorException {
OMElement dynamicSequence = null;
try {
dynamicSequence = sequenceAdminStub.getDynamicSequence(key);
} catch (Exception e) {
handleException("Couldn't get dynamic sequence with key '" + key + "'", e);
}
return dynamicSequence;
}
public void saveDynamicSequence(String key, SequenceMediator sequence)
throws SequenceEditorException {
OMElement sequenceElem = sequence.serialize(null);
try {
sequenceAdminStub.saveDynamicSequence(key, sequenceElem);
} catch (Exception e) {
handleException("Error in saving dynamic sequence with configuration '"
+ sequenceElem + "' for key '" + key + "'", e);
}
}
public String enableTracing(String sequenceName) throws SequenceEditorException {
String state = null;
try {
state = sequenceAdminStub.enableTracing(sequenceName);
} catch (Exception e) {
handleException("Couldn't enable tracing for the sequence '"
+ sequenceName + "'", e);
}
return state;
}
public String disableTracing(String sequenceName) throws SequenceEditorException {
String state = null;
try {
state = sequenceAdminStub.disableTracing(sequenceName);
} catch (Exception e) {
handleException("Couldn't disable tracing for the sequence '"
+ sequenceName + "'", e);
}
return state;
}
public String enableStatistics(String sequenceName) throws SequenceEditorException {
String state = null;
try {
state = sequenceAdminStub.enableStatistics(sequenceName);
} catch (Exception e) {
handleException("Couldn't enable statistics for the sequence '"
+ sequenceName + "'", e);
}
return state;
}
public String disableStatistics(String sequenceName) throws SequenceEditorException {
String state = null;
try {
state = sequenceAdminStub.disableStatistics(sequenceName);
} catch (Exception e) {
handleException("Couldn't disable statistics for the sequence '"
+ sequenceName + "'", e);
}
return state;
}
public void deleteSequence(String sequenceName) throws SequenceEditorException {
try {
sequenceAdminStub.deleteSequence(sequenceName);
} catch (Exception e) {
handleException("Couldn't delete the sequence '" + sequenceName + "'", e);
}
}
public String getEntryNamesString() throws SequenceEditorException {
String localRegistryKeys = null;
try {
localRegistryKeys = sequenceAdminStub.getEntryNamesString();
} catch (Exception e) {
handleException("Couldn't get local registry Keys", e);
}
return localRegistryKeys;
}
public void updateDynamicSequence(String key, SequenceMediator sequence)
throws SequenceEditorException {
try {
OMElement sequenceElem = sequence.serialize(null);
sequenceAdminStub.updateDynamicSequence(key, sequenceElem);
} catch (Exception e) {
handleException("Couldn't update sequence with key '" + key + "'", e);
}
}
public void deleteDynamicSequence(String key) throws SequenceEditorException {
try {
sequenceAdminStub.deleteDynamicSequence(key);
} catch (Exception e) {
handleException("Couldn't delete sequence with key '" + key + "'", e);
}
}
public SequenceInfo[] getDynamicSequences(int pageNumber, int sequencePerPage)
throws SequenceEditorException {
List<SequenceInfo> sequences = new ArrayList<SequenceInfo>();
try {
org.wso2.carbon.sequences.stub.types.common.to.SequenceInfo[] temp =
sequenceAdminStub.getDynamicSequences(pageNumber, sequencePerPage);
if (temp == null || temp.length == 0 || temp[0] == null) {
return null;
}
for (org.wso2.carbon.sequences.stub.types.common.to.SequenceInfo info : temp) {
SequenceInfo seqInfo = new SequenceInfo();
seqInfo.setName(info.getName());
sequences.add(seqInfo);
}
} catch (Exception e) {
handleException("Couldn't retrieve the information of the sequences", e);
}
if (sequences.size() > 0) {
return sequences.toArray(new SequenceInfo[sequences.size()]);
}
return null;
}
public int getDynamicSequenceCount() throws SequenceEditorException {
try {
return sequenceAdminStub.getDynamicSequenceCount();
} catch (Exception e) {
handleException("Couldn't retrieve the dynamic sequence element count", e);
}
return 0;
}
public ConfigurationObject[] getDependents(String sequence) throws SequenceEditorException {
try {
org.wso2.carbon.sequences.stub.types.common.to.ConfigurationObject[] tempDependents =
sequenceAdminStub.getDependents(sequence);
if (tempDependents != null && tempDependents.length > 0 && tempDependents[0] != null) {
ConfigurationObject[] dependents = new ConfigurationObject[tempDependents.length];
for (int i = 0; i < dependents.length; i++) {
dependents[i] = new ConfigurationObject(tempDependents[i].getType(),
tempDependents[i].getResourceId());
}
return dependents;
}
} catch (Exception e) {
handleException("Couldn't get the dependents for the sequence : " + sequence, e);
}
return null;
}
public SequenceMediator getSequenceMediator(String sequenceName)
throws SequenceEditorException {
OMElement ele = getSequence(sequenceName);
if (ele != null) {
SequenceMediator sequence = new SequenceMediator();
sequence.build(ele);
return sequence;
}
return null;
}
private void handleException(String message, Throwable e) throws SequenceEditorException {
log.error(message, e);
throw new SequenceEditorException(message, e);
}
}