org.wso2.developerstudio.eclipse.carbonserver.base.manager.CarbonServerManager.java Source code

Java tutorial

Introduction

Here is the source code for org.wso2.developerstudio.eclipse.carbonserver.base.manager.CarbonServerManager.java

Source

/*
 * Copyright (c) 2010, 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.developerstudio.eclipse.carbonserver.base.manager;

import java.io.File;
import java.lang.reflect.InvocationTargetException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IResourceChangeEvent;
import org.eclipse.core.resources.IResourceChangeListener;
import org.eclipse.core.resources.IResourceDelta;
import org.eclipse.core.resources.IResourceDeltaVisitor;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.IncrementalProjectBuilder;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
import org.eclipse.jst.server.generic.core.internal.GenericServer;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.wst.server.core.IModule;
import org.eclipse.wst.server.core.IServer;
import org.eclipse.wst.server.core.ServerCore;
import org.eclipse.wst.server.core.ServerPort;
import org.wso2.developerstudio.eclipse.carbonserver.base.Activator;
import org.wso2.developerstudio.eclipse.carbonserver.base.exception.NoSuchCarbonOperationDefinedException;
import org.wso2.developerstudio.eclipse.carbonserver.base.impl.Credentials;
import org.wso2.developerstudio.eclipse.carbonserver.base.interfaces.ICredentials;
import org.wso2.developerstudio.eclipse.carbonserver.base.monitor.CarbonServerLifeCycleListener;
import org.wso2.developerstudio.eclipse.carbonserver.base.utils.CarbonServerUtils;
import org.wso2.developerstudio.eclipse.logging.core.IDeveloperStudioLog;
import org.wso2.developerstudio.eclipse.logging.core.Logger;
import org.wso2.developerstudio.eclipse.server.base.core.IServerManager;
import org.wso2.developerstudio.eclipse.server.base.core.ServerController;
import org.wso2.developerstudio.eclipse.utils.file.FileUtils;

@SuppressWarnings("restriction")
public final class CarbonServerManager implements IServerManager {
    private static final String CARBON_SERVER_TYPE_REMOTE = "org.wso2.developerstudio.eclipse.carbon.server.remote";
    private static final String RESOURCE = "resource";
    private static final String RESOURCE_CHANGE_KIND = "resourceChangeKind";

    private static IDeveloperStudioLog log = Logger.getLog(Activator.PLUGIN_ID);

    private static List<IServer> servers;
    private static Map<String, ICarbonOperationManager> serverPlugins;
    private static Map<String, String> serverRuntimePlugins;

    private static CarbonServerManager instance;
    private static Map<IServer, CarbonServerInformation> appServerInformation;
    private static CarbonServerLifeCycleListener carbonServerLifeCycleListener;

    private static boolean isServerAdded;
    private IProject rootProject;
    private int resourceChngeKind;

    private CarbonServerManager() {
        init();
    }

    public static CarbonServerManager getInstance() {
        if (instance == null)
            instance = new CarbonServerManager();
        return instance;
    }

    private static Map<String, ICarbonOperationManager> getServerPlugin() {
        if (serverPlugins == null)
            serverPlugins = new HashMap<String, ICarbonOperationManager>();
        if (serverRuntimePlugins == null)
            serverRuntimePlugins = new HashMap<String, String>();
        return serverPlugins;
    }

    private static Map<String, String> getServerRuntimeIdPlugin() {
        if (serverRuntimePlugins == null)
            serverRuntimePlugins = new HashMap<String, String>();
        return serverRuntimePlugins;
    }

    public static List<IServer> getServers() {
        if (servers == null)
            servers = new ArrayList<IServer>();
        return servers;
    }

    public static void serverAdded(IServer server) {
        ICarbonOperationManager serverOperationManager = getServerOperationManager(server);
        if (serverOperationManager != null) {
            getServers().add(server);
            isServerAdded = true;
            IServerManager wsasServerManager = ServerController.getInstance().getServerManager();
            HashMap<String, Object> operationParameters = new HashMap<String, Object>();
            operationParameters.put(ICarbonOperationManager.PARAMETER_TYPE,
                    ICarbonOperationManager.OPERATION_GET_SERVER_PORTS);
            Object r;
            CarbonServerInformation serverInformation = new CarbonServerInformation();
            serverInformation.setServerId(server.getId());
            ServerPort[] wsasPorts = new ServerPort[] {};
            try {
                r = wsasServerManager.executeOperationOnServer(server, operationParameters);
                if (r instanceof ServerPort[])
                    wsasPorts = (ServerPort[]) r;
                CarbonServerUtils.setServicePath(server);
            } catch (NoSuchCarbonOperationDefinedException e) {
                // ports cannot be retrieved
            } catch (Exception e) {
                log.error(e);
            }
            serverInformation.setServerPorts(wsasPorts);
            // The localrepo path is for now is the bin distribution path. this
            // needs to be fixed in order to be set inside the workspace path
            // String workspaceRootPath =
            // ResourcesPlugin.getWorkspace().getRoot().getLocation().toOSString();
            // String serverPath=FileUtils.addNodesToPath(workspaceRootPath, new
            // String[]{".metadata",".carbon",server.getId()});
            IPath serverHome = getServerHome(server);
            if (serverHome != null) {
                String serverPath = serverHome.toOSString();
                (new File(serverPath)).mkdirs();
                serverInformation.setServerLocalWorkspacePath(serverPath);
            }
            getAppServerInformation().put(server, serverInformation);
            try {
                initializeServerConfigurations(server);
            } catch (Exception e) {
                log.error(e);
            }
        }
    }

    public static void serverRemoved(IServer server) {
        if (getServers().contains(server)) {
            try {
                cleanupServerConfigurations(server);
            } catch (Exception e) {
                log.error(e);
            }
            getServers().remove(server);
            if (getAppServerInformation().containsKey(server))
                getAppServerInformation().remove(server);
        }
    }

    public static void serverStateChanged(IServer server) {

    }

    public static void registerAppServerPlugin(String serverId, ICarbonOperationManager opManager) {
        if (!getServerPlugin().containsKey(serverId)) {
            getServerPlugin().put(serverId, opManager);
            getServerRuntimeIdPlugin().put(opManager.getRuntimeId(), serverId);
            addExistingServers();
        }
    }

    public static void unregisterAppServerPlugin(String serverId) {
        if (getServerPlugin().containsKey(serverId))
            serverPlugins.remove(serverId);
    }

    public static ICarbonOperationManager getServerOperationManager(IServer server) {
        return getServerOperationManager(server.getId());
    }

    public static ICarbonOperationManager getServerOperationManager(String serverId) {
        IServer server = getServer(serverId);
        if (getServerPlugin().containsKey(server.getServerType().getId()))
            return getServerPlugin().get(server.getServerType().getId());
        else {
            return null;
        }
    }

    public static ICarbonOperationManager getServerOperationManagerByServerType(String serverTypeId) {
        if (getServerPlugin().containsKey(serverTypeId))
            return getServerPlugin().get(serverTypeId);
        else {
            return null;
        }
    }

    public Object executeOperationOnServer(IServer server, Map<String, Object> operation) throws Exception {
        return executeOperationOnServer(server.getId(), operation);
    }

    public Object executeOperationOnServer(String serverId, Map<String, Object> operation) throws Exception {
        ICarbonOperationManager serverOperationManager = getServerOperationManager(serverId);
        if (!operation.containsKey(ICarbonOperationManager.PARAMETER_SERVER))
            addServerToParameters(operation, getServer(serverId));
        if (serverOperationManager == null)
            return null;
        else
            return serverOperationManager.executeOperation(operation);
    }

    public static IServer getServer(String serverId) {
        IServer server = null;
        for (IServer s : getServers()) {
            if (s.getId().equalsIgnoreCase(serverId)) {
                server = s;
                break;
            }
        }
        if (server == null) {
            IServer[] s = ServerCore.getServers();
            for (IServer aserver : s) {
                if (aserver.getId().equals(serverId)) {
                    server = aserver;
                    break;
                }
            }
        }
        return server;
    }

    public IProject[] getProjectsUsedByRuntime(String serverId) {
        return null;
    }

    public String getRuntimeServerIdForProject(IProject project) {
        // for(IServer server:getServers()){
        // for(IModule module:server.getModules()){
        // if (module.getProject()==project){
        // break;
        // }
        // }
        // }
        return null;
    }

    public static String[] getServerIdForProject(IProject project) {
        List<String> serverIds = new ArrayList<String>();
        IServer[] serversForProject = getServersForProject(project);
        for (IServer server : serversForProject) {
            serverIds.add(server.getId());
        }
        return serverIds.toArray(new String[] {});
    }

    public static IServer[] getServersForProject(IProject project) {
        List<IServer> serverIds = new ArrayList<IServer>();
        for (IServer server : getServers()) {
            for (IModule module : server.getModules()) {
                if (module.getProject() == project) {
                    serverIds.add(server);
                }
            }
        }
        return serverIds.toArray(new IServer[] {});
    }

    public IPath getServerHome(String serverId) {
        IServer server = getServer(serverId);
        return getServerHome(server);
    }

    public static IPath getServerHome(IServer server) {
        IPath location = null;
        if (server != null) {
            IServerManager wsasServerManager = getInstance();
            HashMap<String, Object> operationParameters = new HashMap<String, Object>();
            operationParameters.put(ICarbonOperationManager.PARAMETER_TYPE,
                    ICarbonOperationManager.OPERATION_GET_SERVER_HOME);
            Object r;
            try {
                r = wsasServerManager.executeOperationOnServer(server, operationParameters);
                if (r instanceof IPath)
                    location = (IPath) r;
            } catch (NoSuchCarbonOperationDefinedException e) {
                return null;
            } catch (Exception e) {
                log.error(e);
            }
        }

        return location;
    }

    public static IPath getServerConfDir(IServer server) {
        IPath location = null;
        if (server != null) {
            IServerManager wsasServerManager = getInstance();
            HashMap<String, Object> operationParameters = new HashMap<String, Object>();
            operationParameters.put(ICarbonOperationManager.PARAMETER_TYPE,
                    ICarbonOperationManager.OPERATION_GET_SERVER_CONF);
            Object r;
            try {
                r = wsasServerManager.executeOperationOnServer(server, operationParameters);
                if (r instanceof IPath)
                    location = (IPath) r;
            } catch (NoSuchCarbonOperationDefinedException e) {
                return null;
            } catch (Exception e) {
                log.error(e);
            }
        }

        return location;
    }

    public int getServerStatus(String serverId) {
        IServer server = getServer(serverId);
        if (server == null)
            return 0;
        else
            return server.getServerState();
    }

    public boolean restartServer(String serverId) {
        IServer server = getServer(serverId);
        if (server == null)
            return false;
        else {
            // TODO the restart a server
            return false;
        }
    }

    public boolean startServer(String serverId, Object shell) {
        IServer server = getServer(serverId);
        if (server == null)
            return false;
        else {
            try {
                if (server.getServerState() != IServer.STATE_STARTING) {
                    server.start("run", (IProgressMonitor) null);
                }
                if (shell == null)
                    return true;
                else {
                    if (shell instanceof Shell)
                        return waitUntilTheServerStarts(server, (Shell) shell);
                    else
                        return true;
                }
            } catch (CoreException e) {
                return false;
            }
        }
    }

    public static IServer getRunningServer() {
        IServer server = null;
        for (IServer s : getServers()) {
            if (s.getServerState() == IServer.STATE_STARTED) {
                server = s;
                break;
            }
        }
        return server;
    }

    public boolean stopServer(String serverId) {
        IServer server = getServer(serverId);
        if (server == null)
            return false;
        else {
            server.stop(false);
            return true;
        }
    }

    public static void initiateAppServerManagementOperations() {
        carbonServerLifeCycleListener = new CarbonServerLifeCycleListener();
        ServerCore.addServerLifecycleListener(carbonServerLifeCycleListener);
    }

    public static void deInitiateAppServerManagementOperations() {
        if (carbonServerLifeCycleListener != null) {
            ServerCore.removeServerLifecycleListener(carbonServerLifeCycleListener);
        }
    }

    private static void addExistingServers() {
        IServer[] s = ServerCore.getServers();
        for (IServer server : s) {
            if (!getServers().contains(server))
                serverAdded(server);
        }
    }

    public String[] getServerIds() {
        List<String> list = new ArrayList<String>();
        for (IServer server : getServers()) {
            list.add(server.getId());
        }
        return list.toArray(new String[] {});
    }

    public String[] getServerLibraryPaths(String serverId) throws Exception {
        IServer server = getServer(serverId);
        return getServerLibraryPaths(server);
    }

    public static String[] getServerLibraryPaths(IServer server) throws Exception {
        String[] result = null;
        if (server != null) {
            IServerManager wsasServerManager = ServerController.getInstance().getServerManager();
            HashMap<String, Object> operationParameters = new HashMap<String, Object>();
            operationParameters.put(ICarbonOperationManager.PARAMETER_TYPE,
                    ICarbonOperationManager.OPERATION_GET_LIBRARY_PATHS);
            Object r = wsasServerManager.executeOperationOnServer(server, operationParameters);// getWSDLConversionResultUrl(resourceFile);
            if (r instanceof String[]) {
                result = (String[]) r;
                IPath serverLocation = getServerHome(server);
                for (int i = 0; i < result.length; i++) {
                    result[i] = FileUtils.addAnotherNodeToPath(serverLocation.toOSString(), result[i]);
                }
            }
        }
        return result;
    }

    public static URL getServiceWSDLUrl(IServer server, String serviceName) throws Exception {
        URL result = null;
        if (server != null) {
            IServerManager wsasServerManager = ServerController.getInstance().getServerManager();
            HashMap<String, Object> operationParameters = new HashMap<String, Object>();
            operationParameters.put(ICarbonOperationManager.PARAMETER_TYPE,
                    ICarbonOperationManager.OPERATION_GET_SERVICE_WSDL_URL);
            operationParameters.put(ICarbonOperationManager.PARAMETER_SERVICE_NAME, serviceName);
            Object r = wsasServerManager.executeOperationOnServer(server, operationParameters);// getWSDLConversionResultUrl(resourceFile);
            if (r instanceof URL) {
                result = (URL) r;
            }
        }
        return result;
    }

    public static URL getServiceTryItUrl(IServer server, String serviceName) throws Exception {
        URL result = null;
        if (server != null) {
            IServerManager wsasServerManager = ServerController.getInstance().getServerManager();
            HashMap<String, Object> operationParameters = new HashMap<String, Object>();
            operationParameters.put(ICarbonOperationManager.PARAMETER_TYPE,
                    ICarbonOperationManager.OPERATION_GET_SERVICE_TRY_IT_URL);
            operationParameters.put(ICarbonOperationManager.PARAMETER_SERVICE_NAME, serviceName);
            Object r = wsasServerManager.executeOperationOnServer(server, operationParameters);// getWSDLConversionResultUrl(resourceFile);
            if (r instanceof URL) {
                result = (URL) r;
            }
        }
        return result;
    }

    public static Map<IServer, CarbonServerInformation> getAppServerInformation() {
        if (appServerInformation == null)
            appServerInformation = new HashMap<IServer, CarbonServerInformation>();
        return appServerInformation;
    }

    public ServerPort[] getServerPorts(IServer server) {
        GenericServer gserver = (GenericServer) server.getAdapter(GenericServer.class);
        return gserver.getServerPorts();
    }

    public static String getServerLocalWorkspacePath(IServer server) {
        if (getAppServerInformation().containsKey(server)) {
            return getAppServerInformation().get(server).getServerLocalWorkspacePath();
        } else
            return null;
    }

    public Map<String, Integer> getServerPorts(String serverId) throws Exception {
        Map<String, Integer> result = new HashMap<String, Integer>();
        IServer server = getServer(serverId);
        if (server != null) {
            ServerPort[] serverPorts2 = getServerPorts(server);
            if (serverPorts2 != null)
                for (ServerPort s : serverPorts2) {
                    result.put(s.getProtocol(), s.getPort());
                }
        }
        return result;
    }

    public static void addServerToParameters(Map<String, Object> properties, IServer server) {
        properties.put(ICarbonOperationManager.PARAMETER_SERVER, server);
    }

    public static boolean isOperationSupported(IServer server, int operation) throws Exception {
        IServerManager wsasServerManager = ServerController.getInstance().getServerManager();
        HashMap<String, Object> operationParameters = new HashMap<String, Object>();
        operationParameters.put(ICarbonOperationManager.PARAMETER_TYPE,
                ICarbonOperationManager.OPERATION_SUPPORTED_OPERATIONS);
        operationParameters.put(ICarbonOperationManager.PARAMETER_OP_TYPES, operation);
        Object r = wsasServerManager.executeOperationOnServer(server, operationParameters);
        if (r instanceof Boolean) {
            return (Boolean) r;
        }
        return false;
    }

    public static void initializeServerConfigurations(IServer server) throws Exception {
        IServerManager wsasServerManager = ServerController.getInstance().getServerManager();
        HashMap<String, Object> operationParameters = new HashMap<String, Object>();
        operationParameters.put(ICarbonOperationManager.PARAMETER_TYPE,
                ICarbonOperationManager.OPERATION_INITIALIZE_SERVER_CONFIGURATIONS);
        wsasServerManager.executeOperationOnServer(server, operationParameters);
    }

    public static void cleanupServerConfigurations(IServer server) throws Exception {
        IServerManager wsasServerManager = ServerController.getInstance().getServerManager();
        HashMap<String, Object> operationParameters = new HashMap<String, Object>();
        operationParameters.put(ICarbonOperationManager.PARAMETER_TYPE,
                ICarbonOperationManager.OPERATION_CLEANUP_SERVER_CONFIGURATIONS);
        wsasServerManager.executeOperationOnServer(server, operationParameters);
    }

    public boolean publishServiceModule(String serverId, String webTempPath, String projectName) {
        IServer server = getServer(serverId);
        IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
        IServerManager wsasServerManager = ServerController.getInstance().getServerManager();
        HashMap<String, Object> operationParameters = new HashMap<String, Object>();
        operationParameters.put(ICarbonOperationManager.PARAMETER_TYPE,
                ICarbonOperationManager.OPERATION_PUBLISH_MODULE);
        operationParameters.put(ICarbonOperationManager.PARAMETER_WebTempPath, webTempPath);
        operationParameters.put(ICarbonOperationManager.PARAMETER_PROJECT, project);
        try {
            wsasServerManager.executeOperationOnServer(server, operationParameters);
            return true;
        } catch (Exception e) {
            log.error(e);
            return false;
        }

    }

    public boolean hotUpdateServiceModule(String serverId, String webTempPath, String projectName) {
        IServer server = getServer(serverId);
        IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
        CarbonServerManager wsasServerManager = this;
        HashMap<String, Object> operationParameters = new HashMap<String, Object>();
        operationParameters.put(ICarbonOperationManager.PARAMETER_TYPE,
                ICarbonOperationManager.OPERATION_HOT_UPDATE_MODULE);
        operationParameters.put(ICarbonOperationManager.PARAMETER_WebTempPath, webTempPath);
        operationParameters.put(ICarbonOperationManager.PARAMETER_PROJECT, project);
        try {
            wsasServerManager.executeOperationOnServer(server, operationParameters);
            return true;
        } catch (Exception e) {
            log.error(e);
            return false;
        }
    }

    public boolean hotUpdateWebApp(String serverId, IResource resource, String projectName) {

        IServer server = getServer(serverId);
        IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
        CarbonServerManager wsasServerManager = this;
        HashMap<String, Object> operationParameters = new HashMap<String, Object>();
        operationParameters.put(ICarbonOperationManager.PARAMETER_TYPE,
                ICarbonOperationManager.OPERATION_HOT_UPDATE_MODULE);
        operationParameters.put(ICarbonOperationManager.PARAMETER_WebTempPath, "");
        operationParameters.put(ICarbonOperationManager.PARAMETER_PROJECT, project);
        operationParameters.put(RESOURCE, resource);
        operationParameters.put(RESOURCE_CHANGE_KIND, new Integer(resourceChngeKind));
        try {
            wsasServerManager.executeOperationOnServer(server, operationParameters);
            return true;
        } catch (Exception e) {
            log.error(e);
            return false;
        }
    }

    public boolean redeployServiceModule(String serverId, String webTempPath, String projectName) {
        IServer server = getServer(serverId);
        IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
        CarbonServerManager wsasServerManager = this;
        HashMap<String, Object> operationParameters = new HashMap<String, Object>();
        operationParameters.put(ICarbonOperationManager.PARAMETER_TYPE,
                ICarbonOperationManager.OPERATION_REDEPLOY_MODULE);
        operationParameters.put(ICarbonOperationManager.PARAMETER_WebTempPath, webTempPath);
        operationParameters.put(ICarbonOperationManager.PARAMETER_PROJECT, project);
        try {
            wsasServerManager.executeOperationOnServer(server, operationParameters);
            return true;
        } catch (Exception e) {
            log.error(e);
            return false;
        }

    }

    public boolean unpublishServiceModule(String serverId, String webTempPath, String projectName) {
        IServer server = getServer(serverId);
        IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
        CarbonServerManager wsasServerManager = this;
        HashMap<String, Object> operationParameters = new HashMap<String, Object>();
        operationParameters.put(ICarbonOperationManager.PARAMETER_TYPE,
                ICarbonOperationManager.OPERATION_UNPUBLISH_MODULE);
        operationParameters.put(ICarbonOperationManager.PARAMETER_WebTempPath, webTempPath);
        operationParameters.put(ICarbonOperationManager.PARAMETER_PROJECT, project);
        try {
            wsasServerManager.executeOperationOnServer(server, operationParameters);
            return true;
        } catch (Exception e) {
            log.error(e);
            return false;
        }

    }

    public static boolean waitForServerToChangeState(IServer server, Shell shell, int changeStateFrom,
            int changeStateTo, String msg) {
        ProgressMonitorDialog progressMonitorDialog = new ProgressMonitorDialog(shell);
        CarbonServerStateChange serverStateChange = new CarbonServerStateChange(server, changeStateFrom,
                changeStateTo, 180000, msg);
        progressMonitorDialog.setBlockOnOpen(false);
        try {
            progressMonitorDialog.run(true, true, serverStateChange);
            return progressMonitorDialog.getReturnCode() != ProgressMonitorDialog.CANCEL;
        } catch (InvocationTargetException e) {
            log.error(e);
        } catch (InterruptedException e) {
            log.error(e);
        }
        return false;
    }

    public static boolean waitUntilTheServerStarts(IServer server, Shell shell) {
        return waitForServerToChangeState(server, shell, IServer.STATE_STOPPED, IServer.STATE_STARTED,
                "Starting WSAS Server " + server.getId() + "...");
    }

    public Map<IFolder, IProject> getPublishedPaths(String serverId) {
        return getPublishedPaths(getServer(serverId));
    }

    public static Map<IFolder, IProject> getPublishedPaths(IServer server) {
        if (server == null)
            return null;
        IServerManager wsasServerManager = ServerController.getInstance().getServerManager();
        HashMap<String, Object> operationParameters = new HashMap<String, Object>();
        operationParameters.put(ICarbonOperationManager.PARAMETER_TYPE,
                ICarbonOperationManager.OPERATION_GET_PUBLISHED_SERVICES);
        try {
            Object result = wsasServerManager.executeOperationOnServer(server, operationParameters);
            if (result instanceof Map) {
                return (Map<IFolder, IProject>) result;
            }
            return null;
        } catch (Exception e) {
            log.error(e);
            return null;
        }
    }

    public IProject[] getPublishedProjects(String serverId) {
        return null;
    }

    public IProject[] getPublishedProjectsFromAllServers() {
        return null;
    }

    public String getServerRuntimeId(String serverId) {
        return getServerOperationManager(serverId).getRuntimeId();
    }

    public boolean isRuntimeIdPresent(String runtimeId) {
        return getServerRuntimeIdPlugin().containsKey(runtimeId);
    }

    public String getServerTypeIdForRuntimeId(String runtimeId) {
        if (getServerRuntimeIdPlugin().containsKey(runtimeId))
            return getServerRuntimeIdPlugin().get(runtimeId);
        else
            return null;
    }

    public String[] getServerRelativeLibraryPaths(String serverTypeId) throws Exception {
        String[] result = null;
        ICarbonOperationManager serverOperationManager = getServerOperationManagerByServerType(serverTypeId);
        HashMap<String, Object> operationParameters = new HashMap<String, Object>();
        operationParameters.put(ICarbonOperationManager.PARAMETER_TYPE,
                ICarbonOperationManager.OPERATION_GET_LIBRARY_PATHS);
        Object r = serverOperationManager.executeOperation(operationParameters);
        if (r instanceof String[]) {
            result = (String[]) r;
        }
        return result;
    }

    public String[] getServerCodegenLibraries(String serverId) throws Exception {

        IServer server = getServer(serverId);
        return getServerCodegenLibraries(server);
    }

    public static String[] getServerCodegenLibraries(IServer server) throws Exception {
        String[] result = null;
        if (server != null) {
            IServerManager wsasServerManager = ServerController.getInstance().getServerManager();
            HashMap<String, Object> operationParameters = new HashMap<String, Object>();
            operationParameters.put(ICarbonOperationManager.PARAMETER_TYPE,
                    ICarbonOperationManager.OPERATION_GET_CODEGEN_LIBRARIES);
            Object r = wsasServerManager.executeOperationOnServer(server, operationParameters);// getWSDLConversionResultUrl(resourceFile);
            if (r instanceof String[]) {
                result = (String[]) r;
            }
        }
        return result;
    }

    public String[] getServerAxis2Libraries(String serverTypeId, String wsasHome) throws Exception {
        String[] result = null;
        ICarbonOperationManager serverOperationManager = getServerOperationManagerByServerType(serverTypeId);
        HashMap<String, Object> operationParameters = new HashMap<String, Object>();
        operationParameters.put(ICarbonOperationManager.PARAMETER_TYPE,
                ICarbonOperationManager.OPERATION_GET_AXIS2_LIBRARIES);
        operationParameters.put(ICarbonOperationManager.PARAMETER_PATH, wsasHome);
        Object r = serverOperationManager.executeOperation(operationParameters);
        if (r instanceof String[]) {
            result = (String[]) r;
        }
        return result;
    }

    private void init() {
        createWorkspaceListener();
    }

    private void createWorkspaceListener() {
        IWorkspace workspace = ResourcesPlugin.getWorkspace();

        IResourceChangeListener listener = new IResourceChangeListener() {
            public void resourceChanged(IResourceChangeEvent event) {
                IResourceDelta projectDelta;
                if (isServerAdded) {
                    IResourceDelta resourceDelta = event.getDelta();
                    for (IResourceDelta modifideResourceDelta : resourceDelta.getAffectedChildren()) {
                        rootProject = (IProject) modifideResourceDelta.getResource();
                        projectDelta = modifideResourceDelta;
                        IResourceDeltaVisitor visitor = new IResourceDeltaVisitor() {
                            public boolean visit(IResourceDelta delta) throws CoreException {
                                IResource resource = delta.getResource();
                                resourceChngeKind = delta.getKind();
                                if (resource.getType() == IResource.FILE
                                        || resource.getType() == IResource.FOLDER) {
                                    IServer[] serversForProject = getServersForProject(rootProject);
                                    for (IServer server : serversForProject) {
                                        if (!CARBON_SERVER_TYPE_REMOTE
                                                .equalsIgnoreCase(server.getServerType().getId())) {
                                            CarbonServerInformation serverInformation = getAppServerInformation()
                                                    .get(server);
                                            if (!serverInformation.getChangedProjects().contains(rootProject)) {
                                                serverInformation.getChangedProjects().add(rootProject);
                                                hotUpdateWebApp(server.getId(), resource, rootProject.getName());
                                            }
                                        }
                                    }
                                }
                                return true;
                            }
                        };
                        try {
                            projectDelta.accept(visitor);
                        } catch (CoreException e) {
                            log.error(" adding IResourceDeltaVisitor to projectDelta was failed " + e);
                        }

                    }

                }
            }

        };
        workspace.addResourceChangeListener(listener, IResourceChangeEvent.POST_BUILD);
    }

    public String[] getServerCodegenLibrariesFromRuntimeId(String runtimeId, String runtimePath) throws Exception {
        String serverTypeId = getServerTypeIdForRuntimeId(runtimeId);
        String[] result = null;
        HashMap<String, Object> operationParameters = new HashMap<String, Object>();
        operationParameters.put(ICarbonOperationManager.PARAMETER_TYPE,
                ICarbonOperationManager.OPERATION_GET_CODEGEN_LIBRARIES);
        operationParameters.put(ICarbonOperationManager.PARAMETER_RUNTIME, runtimeId);
        operationParameters.put(ICarbonOperationManager.PARAMETER_PATH, runtimePath);
        ICarbonOperationManager wsasOperationManager = getServerOperationManagerByServerType(serverTypeId);
        Object r = wsasOperationManager.executeOperation(operationParameters);// getWSDLConversionResultUrl(resourceFile);
        if (r instanceof String[]) {
            result = (String[]) r;
        }
        return result;
    }

    public static ICredentials getServerCredentials(IServer server) throws Exception {
        Map<String, String> result = null;
        if (server != null) {
            IServerManager esbServerManager = ServerController.getInstance().getServerManager();
            HashMap<String, Object> operationParameters = new HashMap<String, Object>();
            operationParameters.put(ICarbonOperationManager.PARAMETER_TYPE,
                    ICarbonOperationManager.OPERATION_GET_SERVER_CREDENTIALS);
            Object r = esbServerManager.executeOperationOnServer(server, operationParameters);// getWSDLConversionResultUrl(resourceFile);
            if (r instanceof Map) {
                result = (Map<String, String>) r;
            }
        }
        Credentials credentials = null;
        if (result != null) {
            credentials = new Credentials(result.get("esb.username"), result.get("esb.password"));
        }
        return credentials;
    }

    public static URL getServerURL(IServer server) throws Exception {
        if (server != null) {
            IServerManager esbServerManager = ServerController.getInstance().getServerManager();
            HashMap<String, Object> operationParameters = new HashMap<String, Object>();
            operationParameters.put(ICarbonOperationManager.PARAMETER_TYPE,
                    ICarbonOperationManager.OPERATION_SERVER_URL);
            Object serverURL = esbServerManager.executeOperationOnServer(server, operationParameters);
            if (serverURL instanceof URL) {
                String serverId = server.getServerType().getId();
                URL urlWithContextRoot = (URL) serverURL;
                if (!CARBON_SERVER_TYPE_REMOTE.equals(serverId)) {
                    urlWithContextRoot = new URL(urlWithContextRoot, CarbonServerUtils.getWebContextRoot(server));
                }
                return urlWithContextRoot;
            }
        }
        return null;
    }

    public static String getServerAuthenticatedCookie(IServer server, String httpsPort) throws Exception {
        String result = null;
        if (server != null) {
            IServerManager esbServerManager = ServerController.getInstance().getServerManager();
            HashMap<String, Object> operationParameters = new HashMap<String, Object>();
            operationParameters.put(ICarbonOperationManager.PARAMETER_TYPE,
                    ICarbonOperationManager.OPERATION_GET_SERVER_AUTHENTICATED_COOKIE);
            operationParameters.put(ICarbonOperationManager.PARAMETER_SERVER_PORT, httpsPort);
            Object r = esbServerManager.executeOperationOnServer(server, operationParameters);
            if (r instanceof String) {
                result = (String) r;
            }
        }
        return result;
    }

    public static String getServerAuthenticatedCookie(IServer server) throws Exception {
        String result = null;
        if (server != null) {
            ServerPort[] serverPorts = getInstance().getServerPorts(server);
            String httpsPort = "9443";
            for (ServerPort port : serverPorts) {
                if (port.getProtocol().equalsIgnoreCase("https")) {
                    httpsPort = Integer.toString(port.getPort());
                }
            }
            result = getServerAuthenticatedCookie(server, httpsPort);
        }
        return result;
    }

    public static String getServerCarbonVersion(IServer server) {
        String result = null;
        if (server != null) {
            IServerManager wsasServerManager = ServerController.getInstance().getServerManager();
            HashMap<String, Object> operationParameters = new HashMap<String, Object>();
            operationParameters.put(ICarbonOperationManager.PARAMETER_TYPE,
                    ICarbonOperationManager.OPERATION_SERVER_VERSION);
            Object r = null;
            try {
                r = wsasServerManager.executeOperationOnServer(server, operationParameters);
            } catch (Exception e) {
                log.error(e);
            }
            result = (String) r;
        }
        return result;
    }

}