/* * RHQ Management Platform * Copyright (C) 2005-2010 Red Hat, Inc. * All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License, version 2, as * published by the Free Software Foundation, and/or the GNU Lesser * General Public License, version 2.1, also as published by the Free * Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License and the GNU Lesser General Public License * for more details. * * You should have received a copy of the GNU General Public License * and the GNU Lesser General Public License along with this program; * if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ package org.rhq.coregui.server.gwt; import javax.ejb.EJBException; import org.rhq.core.domain.install.remote.AgentInstallInfo; import org.rhq.core.domain.install.remote.CustomAgentInstallData; import org.rhq.core.domain.install.remote.RemoteAccessInfo; import org.rhq.core.domain.install.remote.SSHSecurityException; import org.rhq.coregui.client.gwt.RemoteInstallGWTService; import org.rhq.coregui.server.util.SerialUtility; import org.rhq.enterprise.server.install.remote.RemoteInstallManagerLocal; import org.rhq.enterprise.server.util.LookupUtil; /** * @author Greg Hinkle */ public class RemoteInstallGWTServiceImpl extends AbstractGWTServiceImpl implements RemoteInstallGWTService { private static final long serialVersionUID = 1L; private RemoteInstallManagerLocal remoteInstallManager = LookupUtil.getRemoteInstallManager(); public void checkSSHConnection(RemoteAccessInfo remoteAccessInfo) throws SSHSecurityException, RuntimeException { try { remoteInstallManager.checkSSHConnection(getSessionSubject(), remoteAccessInfo); } catch (Throwable t) { throw getExceptionToThrowToClient(t); } } public boolean agentInstallCheck(RemoteAccessInfo remoteAccessInfo, String agentInstallPath) throws SSHSecurityException, RuntimeException { try { return SerialUtility.prepare(remoteInstallManager.agentInstallCheck(getSessionSubject(), remoteAccessInfo, agentInstallPath), "RemoteInstallService.agentInstallCheck"); } catch (Throwable t) { throw getExceptionToThrowToClient(t); } } public AgentInstallInfo installAgent(RemoteAccessInfo remoteAccessInfo, CustomAgentInstallData customData) throws SSHSecurityException, RuntimeException { try { return SerialUtility.prepare( remoteInstallManager.installAgent(getSessionSubject(), remoteAccessInfo, customData), "RemoteInstallService.installAgent"); } catch (Throwable t) { throw getExceptionToThrowToClient(t); } } public String uninstallAgent(RemoteAccessInfo remoteAccessInfo, String agentInstallPath) throws SSHSecurityException, RuntimeException { try { return SerialUtility.prepare(remoteInstallManager.uninstallAgent(getSessionSubject(), remoteAccessInfo, agentInstallPath), "RemoteInstallService.uninstallAgent"); } catch (Throwable t) { throw getExceptionToThrowToClient(t); } } public String startAgent(RemoteAccessInfo remoteAccessInfo, String agentInstallPath) throws SSHSecurityException, RuntimeException { try { return SerialUtility.prepare(remoteInstallManager.startAgent(getSessionSubject(), remoteAccessInfo, agentInstallPath), "RemoteInstallService.startAgent"); } catch (Throwable t) { throw getExceptionToThrowToClient(t); } } public String stopAgent(RemoteAccessInfo remoteAccessInfo, String agentInstallPath) throws SSHSecurityException, RuntimeException { try { return SerialUtility.prepare(remoteInstallManager.stopAgent(getSessionSubject(), remoteAccessInfo, agentInstallPath), "RemoteInstallService.stopAgent"); } catch (Throwable t) { throw getExceptionToThrowToClient(t); } } public String agentStatus(RemoteAccessInfo remoteAccessInfo, String agentInstallPath) throws SSHSecurityException, RuntimeException { try { return SerialUtility.prepare(remoteInstallManager.agentStatus(getSessionSubject(), remoteAccessInfo, agentInstallPath), "RemoteInstallService.agentStatus"); } catch (Throwable t) { throw getExceptionToThrowToClient(t); } } public String findAgentInstallPath(RemoteAccessInfo remoteAccessInfo, String parentPath) throws SSHSecurityException, RuntimeException { try { return SerialUtility.prepare((remoteInstallManager.findAgentInstallPath(getSessionSubject(), remoteAccessInfo, parentPath)), "RemoteInstallService.findAgentInstallPath"); } catch (Throwable t) { throw getExceptionToThrowToClient(t); } } public String[] remotePathDiscover(RemoteAccessInfo remoteAccessInfo, String parentPath) throws SSHSecurityException, RuntimeException { try { return SerialUtility.prepare((remoteInstallManager.remotePathDiscover(getSessionSubject(), remoteAccessInfo, parentPath)), "RemoteInstallService.remotePathDiscover"); } catch (Throwable t) { throw getExceptionToThrowToClient(t); } } @Override protected RuntimeException getExceptionToThrowToClient(Throwable t) throws SSHSecurityException, RuntimeException { // if the SSH connection failed because of a bad or missing SSH key fingerprint, a SSHSecurityException will be thrown. // We want that SSHSecurityException sent back as-is to the GWT UI. if (t instanceof SSHSecurityException) { return (SSHSecurityException) t; } else if (t instanceof EJBException) { if (t.getCause() instanceof SSHSecurityException) { return (SSHSecurityException) t.getCause(); } } return super.getExceptionToThrowToClient(t); } }