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.util.Arrays;
022 import java.util.List;
023
024 import javax.enterprise.deploy.spi.DeploymentManager;
025 import javax.enterprise.deploy.spi.Target;
026 import javax.enterprise.deploy.spi.TargetModuleID;
027 import javax.enterprise.deploy.spi.exceptions.TargetException;
028
029 import org.apache.geronimo.cli.deployer.CommandArgs;
030 import org.apache.geronimo.cli.deployer.ListModulesCommandArgs;
031 import org.apache.geronimo.common.DeploymentException;
032
033 /**
034 * The CLI deployer logic to list modules.
035 *
036 * @version $Rev: 549455 $ $Date: 2007-06-21 08:12:27 -0400 (Thu, 21 Jun 2007) $
037 */
038 public class CommandListModules extends AbstractCommand {
039
040 public void execute(PrintWriter out, ServerConnection connection, CommandArgs commandArgs) throws DeploymentException {
041 if (!(commandArgs instanceof ListModulesCommandArgs)) {
042 throw new DeploymentSyntaxException("CommandArgs has the type [" + commandArgs.getClass() + "]; expected [" + ListModulesCommandArgs.class + "]");
043 }
044 ListModulesCommandArgs listModulesCommandArgs = (ListModulesCommandArgs) commandArgs;
045
046 Boolean started = null;
047 if (listModulesCommandArgs.isStarted()) {
048 started = Boolean.TRUE;
049 } else if (listModulesCommandArgs.isStopped()) {
050 started = Boolean.FALSE;
051 }
052
053 List targets = Arrays.asList(listModulesCommandArgs.getArgs());
054
055 final DeploymentManager mgr = connection.getDeploymentManager();
056 TargetModuleID[] running = null, notrunning = null;
057 Target[] tlist = identifyTargets(targets, mgr);
058 if(tlist.length == 0) {
059 tlist = mgr.getTargets();
060 }
061 try {
062 if(started == null || started.booleanValue()) {
063 running = mgr.getRunningModules(null, tlist);
064 }
065 if(started == null || !started.booleanValue()) {
066 notrunning = mgr.getNonRunningModules(null, tlist);
067 }
068 } catch (TargetException e) {
069 throw new DeploymentException("Unable to query modules", e);
070 } catch (IllegalStateException e) {
071 throw new DeploymentSyntaxException(e.getMessage(), e);
072 }
073 if(running == null) {
074 running = new TargetModuleID[0];
075 }
076 if(notrunning == null) {
077 notrunning = new TargetModuleID[0];
078 }
079
080 // print the module count, and if there are more than one
081 // targets print that count, too
082 int total = running.length+notrunning.length;
083 out.print("Found "+total+" module"+(total != 1 ? "s" : ""));
084 if ((tlist != null) && (tlist.length > 1)) {
085 out.println(" deployed to " + tlist.length + " target" + (tlist.length != 1 ? "s" : ""));
086 } else {
087 out.println("");
088 }
089
090 // for each target, print the modules that were deployed to it
091 for (int i = 0; (tlist != null) && (i < tlist.length); i++) {
092 Target target = tlist[i];
093 if (tlist.length > 1)
094 out.println("\n Target " + target);
095 printTargetModules(out, target, running, " + ");
096 printTargetModules(out, target, notrunning, " ");
097 }
098 }
099
100
101 /**
102 * Prints the names of the modules (that belong to the target) on
103 * the provided PrintWriter.
104 *
105 * @param out a <code>PrintWriter</code>
106 * @param target a <code>Target</code> value; only the modules
107 * whose target equals this one will be listed. Must not be null.
108 * @param modules a <code>TargetModuleID[]</code> value, must not
109 * be null.
110 * @param prefix a <code>String</code> value that will be
111 * prepended to each module
112 */
113 void printTargetModules(PrintWriter out, Target target, TargetModuleID[] modules, String prefix) {
114 for (int i = 0; i < modules.length; i++) {
115 TargetModuleID result = modules[i];
116 if (result.getTarget().equals(target)) {
117 out.println(prefix+result.getModuleID());
118 if(result.getChildTargetModuleID() != null) {
119 for (int j = 0; j < result.getChildTargetModuleID().length; j++) {
120 TargetModuleID child = result.getChildTargetModuleID()[j];
121 out.println(" `-> "+child.getModuleID());
122 }
123 }
124 }
125 }
126 }
127 }