All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.glassfish.deployment.client.RemoteDeploymentFacility Maven / Gradle / Ivy

/*
 * Copyright (c) 2008, 2018 Oracle and/or its affiliates. All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0, which is available at
 * http://www.eclipse.org/legal/epl-2.0.
 *
 * This Source Code may also be made available under the following Secondary
 * Licenses when the conditions for such availability set forth in the
 * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
 * version 2 with the GNU Classpath Exception, which is available at
 * https://www.gnu.org/software/classpath/license.html.
 *
 * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
 */

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.glassfish.deployment.client;

import com.sun.enterprise.admin.cli.ProgramOptions;
import com.sun.enterprise.admin.cli.Environment;
import com.sun.enterprise.admin.cli.remote.RemoteCommand;
import org.glassfish.api.admin.CommandException;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Map;
import java.util.Properties;

/**
 * Implements DeploymentFacility, currently using the RemoteCommand to work with the
 * admin back-end.
 * 

* Because RemoteCommand uses the http interface with the admin back-end it * is connectionless. Clients of RemoteDeploymentFacility must still invoke * {@link #connect} before attempting to use the DF. * * @author tjquinn */ public class RemoteDeploymentFacility extends AbstractDeploymentFacility { @Override protected boolean doConnect() { return true; } @Override public boolean doDisconnect() { return true; } @Override protected DFCommandRunner getDFCommandRunner( String commandName, Map commandOptions, String[] operands) throws CommandException { return new RemoteCommandRunner(commandName, commandOptions, operands); } private class RemoteCommandRunner implements DFCommandRunner { private final String commandName; private final Map commandOptions; private final String[] operands; private RemoteCommandRunner( String commandName, Map commandOptions, String[] operands) { this.commandOptions = commandOptions; this.commandName = commandName; this.operands = operands; } public DFDeploymentStatus run() throws CommandException { try { ByteArrayOutputStream baos = new ByteArrayOutputStream(1024); String[] commandArgs = prepareRemoteCommandArguments( commandName, commandOptions, operands ); Environment env = new Environment(); ProgramOptions po = prepareRemoteCommandProgramOptions(env); RemoteCommand rc = new RemoteCommand(commandName, po, env, "jsr-88/xml", baos); rc.executeAndReturnOutput(commandArgs); DFDeploymentStatus status = CommandXMLResultParser.parse(new ByteArrayInputStream(baos.toByteArray())); return status; } catch (Exception ex) { throw new RuntimeException(ex); } } } /** * Assembles an argument list suitable for use by RemoteCommand from the * command, options, and operand. * @param commandName the command to execute * @param options Map, with each key an option name and each value (optionally) the corresponding option value * @param operands the operands to the command * @return argument list for RemoteCommand */ protected String[] prepareRemoteCommandArguments( String commandName, Map options, String[] operands) { ArrayList result = new ArrayList(); result.add(commandName); if (options == null) { options = Collections.EMPTY_MAP; } for (Map.Entry entry : options.entrySet()) { result.add("--" + entry.getKey() + "=" + convertValue(entry.getValue())); } if (operands != null) { for (String o : operands) { result.add(o); } } return result.toArray(new String[result.size()]); } protected ProgramOptions prepareRemoteCommandProgramOptions( Environment env) throws CommandException { /* * Add the authentication information from the * caller-provided connection identifier. */ ServerConnectionIdentifier targetDAS = getTargetDAS(); ProgramOptions po = new ProgramOptions(env); po.setHost(targetDAS.getHostName()); po.setPort(targetDAS.getHostPort()); po.setUser(targetDAS.getUserName()); po.setSecure(targetDAS.isSecure()); po.setPassword(getTargetDAS().getPassword() != null ? getTargetDAS().getPassword().toCharArray() : null, ProgramOptions.PasswordLocation.LOCAL_PASSWORD); po.setOptionsSet(true); return po; } private Object convertValue(Object value) { if (value instanceof Properties) { StringBuilder sb = new StringBuilder(); Properties p = (Properties) value; for (Map.Entry entry : p.entrySet()) { if (sb.length() > 0) { sb.append(":"); } sb.append((String) entry.getKey() + "=" + (String) entry.getValue()); } return sb.toString(); } else { return value; } } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy