001 /**
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017
018 package org.apache.geronimo.deployment.cli;
019
020 import java.io.PrintWriter;
021 import java.io.IOException;
022 import java.util.ArrayList;
023 import java.util.List;
024
025 import javax.enterprise.deploy.spi.DeploymentManager;
026 import javax.enterprise.deploy.spi.Target;
027 import javax.enterprise.deploy.spi.TargetModuleID;
028 import javax.enterprise.deploy.spi.exceptions.TargetException;
029 import javax.enterprise.deploy.spi.status.ProgressObject;
030
031 import org.apache.geronimo.cli.deployer.CommandArgs;
032 import org.apache.geronimo.common.DeploymentException;
033 import jline.ConsoleReader;
034
035 /**
036 * The CLI deployer logic to start.
037 *
038 * @version $Rev: 706640 $ $Date: 2008-10-21 14:44:05 +0000 (Tue, 21 Oct 2008) $
039 */
040 public class CommandStart extends AbstractCommand {
041
042 public void execute(ConsoleReader consoleReader, ServerConnection connection, CommandArgs commandArgs) throws DeploymentException {
043 ProgressObject po = null;
044 try {
045 String[] args = commandArgs.getArgs();
046
047 DeploymentManager mgr = connection.getDeploymentManager();
048 Target[] allTargets = mgr.getTargets();
049 TargetModuleID[] allModules;
050 try {
051 allModules = mgr.getAvailableModules(null, allTargets);
052 } catch(TargetException e) {
053 throw new DeploymentException("Unable to load module list from server", e);
054 }
055 List modules = new ArrayList();
056 for(int i=0; i<args.length; i++) {
057 modules.addAll(DeployUtils.identifyTargetModuleIDs(allModules, args[i], false));
058 }
059 TargetModuleID[] ids = (TargetModuleID[]) modules.toArray(new TargetModuleID[modules.size()]);
060 boolean multiple = isMultipleTargets(ids);
061 po = runCommand(consoleReader, mgr, ids);
062 TargetModuleID[] done = po.getResultTargetModuleIDs();
063 consoleReader.printNewline();
064 for(int i = 0; i < done.length; i++) {
065 TargetModuleID id = done[i];
066 DeployUtils.println(getAction()+" "+id.getModuleID()+((multiple && id.getTarget() != null) ? " on "+ id.getTarget().getName() : "")+(id.getWebURL() == null || !getAction().equals("Started") ? "" : " @ "+id.getWebURL()),4, consoleReader);
067 if(id.getChildTargetModuleID() != null) {
068 for (int j = 0; j < id.getChildTargetModuleID().length; j++) {
069 TargetModuleID child = id.getChildTargetModuleID()[j];
070 DeployUtils.println(" `-> "+child.getModuleID()+(child.getWebURL() == null || getAction().toLowerCase().indexOf("started") == -1 ? "" : " @ "+child.getWebURL()),4, consoleReader);
071 }
072 } // Also print childs if existing in earlier configuration
073 else{
074 java.util.Iterator iterator = DeployUtils.identifyTargetModuleIDs(allModules, id.getModuleID(), false).iterator();
075 if(iterator.hasNext()){
076 TargetModuleID childs = (TargetModuleID)iterator.next();
077 if(childs.getChildTargetModuleID() != null) {
078 for (int j = 0; j < childs.getChildTargetModuleID().length; j++) {
079 TargetModuleID child = childs.getChildTargetModuleID()[j];
080 DeployUtils.println(" `-> "+child.getModuleID()+(child.getWebURL() == null || getAction().toLowerCase().indexOf("started") == -1 ? "" : " @ "+child.getWebURL()),4, consoleReader);
081 }
082 }
083 }
084 }
085 // consoleReader.printNewline();
086 }
087 } catch (IOException e) {
088 throw new DeploymentException("could not write to console", e);
089 }
090 if(po.getDeploymentStatus().isFailed()) {
091 throw new DeploymentException("Operation failed: "+po.getDeploymentStatus().getMessage());
092 }
093 }
094
095 protected ProgressObject runCommand(ConsoleReader out, DeploymentManager mgr, TargetModuleID[] ids) {
096 ProgressObject po = mgr.start(ids);
097 waitForProgress(out, po);
098 return po;
099 }
100
101 protected String getAction() {
102 return "Started";
103 }
104
105 }