/******************************************************************************* * Copyright (c) 2009, 2010 Progress Software Corporation. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html ******************************************************************************/ // Copyright (c) 2009 Progress Software Corporation. package org.fusesource.tools.messaging.server; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.wst.common.project.facet.core.IFacetedProject; import org.eclipse.wst.common.project.facet.core.IProjectFacet; import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager; import org.eclipse.wst.server.core.IModule; import org.eclipse.wst.server.core.IServer; import org.eclipse.wst.server.core.IServerWorkingCopy; import org.eclipse.wst.server.core.ServerCore; import org.eclipse.wst.server.core.ServerUtil; import org.fusesource.tools.messaging.IConstants; import org.fusesource.tools.messaging.MessagingException; import org.fusesource.tools.messaging.MsgProjectStateManager; import org.fusesource.tools.messaging.core.IConnection; import org.fusesource.tools.messaging.core.IProvider; import org.fusesource.tools.messaging.utils.MessageDialogUtils; /** * Provides Helper methods */ public class MessagingServersUtil { public static List<IServer> getMessagingServers() { List<IServer> msgServers = new ArrayList<IServer>(); IServer[] servers = ServerCore.getServers(); for (IServer server : servers) { if (isMsgServer(server)) { msgServers.add(server); } } return msgServers; } public static String[] getMessagingServerNames() { List<String> msgServerNames = new ArrayList<String>(); List<IServer> messagingServers = getMessagingServers(); for (IServer server : messagingServers) { msgServerNames.add(server.getName()); } return msgServerNames.toArray(new String[] {}); } public static Map<String, String> getMsgServersNameIdMap() { Map<String, String> nameServerMap = new HashMap<String, String>(); IServer[] servers = ServerCore.getServers(); for (IServer server : servers) { Object adapter = server.loadAdapter(MessagingServerDelegate.class, new NullProgressMonitor()); if (adapter != null) { nameServerMap.put(server.getName(), server.getId()); } } return nameServerMap; } public static boolean isMsgServer(IServer server) { if (server == null) { return false; } Object adapter = server.loadAdapter(MessagingServerDelegate.class, new NullProgressMonitor()); return adapter != null ? true : false; } public static boolean isMsgServerOnline(IServer server) { if (server == null) { return false; } try { IProvider provider = getProvider(server); if (provider == null) { return false; } IConnection connection = provider.getConnection(); if (connection == null) { return false; } return connection.isActive(); } catch (Exception e) { e.printStackTrace(); } return false; } public static boolean isMsgProjectOnline(IProject project) { return isMsgServerOnline(getDeployedServer(project)); } public static void deployModule(IProject project, IServer server) throws CoreException { if (server == null || project == null) { return; } IServerWorkingCopy wc = server.createWorkingCopy(); IModule msgModule = findMessagingModule(project); ServerUtil.modifyModules(wc, new IModule[] { msgModule }, null, null); wc.save(true, new NullProgressMonitor()); } public static void deployModule(IProject project, String serverId) throws CoreException { if (serverId == null || project == null || serverId.trim().length() == 0) { return; } IServer server = ServerCore.findServer(serverId); deployModule(project, server); } public static IServer getDeployedServer(IProject project) { IModule msgModule = findMessagingModule(project); IServer[] serversByModule = ServerUtil.getServersByModule(msgModule, null); if (serversByModule == null || serversByModule.length == 0) { return null; } if (serversByModule.length > 1) { // TODO log a warning...error? } return serversByModule[0]; } private static IModule findMessagingModule(IProject project) { IModule[] modules = ServerUtil.getModules(project); for (IModule eachModule : modules) { if (IConstants.MSG_PRJ_MODULE_ID.equals(eachModule.getModuleType().getId())) { return eachModule; } } return null; } public static IModule[] getMsgModules(IServer server) { return ServerUtil.getModules(IConstants.MSG_PRJ_MODULE_ID); } public static IProvider getProvider(IServer server) { if (server == null) { return null; } MessagingServerDelegate serverDelegate = (MessagingServerDelegate) server.loadAdapter( MessagingServerDelegate.class, new NullProgressMonitor()); if (serverDelegate == null) { return null; } return serverDelegate.getServerConfiguration().getProvider(); } public static boolean isMsgFacetedProject(IProject project) { try { IFacetedProject facetedProject = ProjectFacetsManager.create(project); if (facetedProject == null) { return false; } IProjectFacet projectFacet = ProjectFacetsManager.getProjectFacet(IConstants.MSG_PRJ_FACET); return facetedProject.hasProjectFacet(projectFacet); } catch (Exception e) { e.printStackTrace(); return false; } } public static void connectToServer(IServer server) throws MessagingException { MessagingServerDelegate serverDelegate = (MessagingServerDelegate) server.loadAdapter( MessagingServerDelegate.class, new NullProgressMonitor()); IProvider provider = serverDelegate.getServerConfiguration().getProvider(); if (provider == null) { MessageDialogUtils.showErrorMessage("Provider unavailable", "No messaging provider associated with the server. " + server.getName()); } MessagingServerConfiguration serverConfiguration = serverDelegate.getServerConfiguration(); provider.createConnection(serverConfiguration.getProperties()); MsgProjectStateManager.getInstance().updateMsgProjectsState(server, server.getModules()); } }