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