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 package org.apache.geronimo.deployment.cli; 018 019 import java.io.File; 020 import java.io.PrintWriter; 021 022 import javax.enterprise.deploy.spi.DeploymentManager; 023 024 import org.apache.geronimo.cli.deployer.BaseCommandArgs; 025 import org.apache.geronimo.cli.deployer.CommandArgs; 026 import org.apache.geronimo.common.DeploymentException; 027 import org.apache.geronimo.deployment.plugin.GeronimoDeploymentManager; 028 import org.apache.geronimo.kernel.repository.Artifact; 029 import org.apache.geronimo.system.plugin.DownloadResults; 030 031 /** 032 * The CLI deployer logic to start. 033 * 034 * @version $Rev: 535507 $ $Date: 2007-05-05 07:22:39 -0400 (Sat, 05 May 2007) $ 035 */ 036 public class CommandInstallCAR extends AbstractCommand { 037 038 //todo: provide a way to handle a username and password for the remote repo? 039 040 public void execute(PrintWriter out, ServerConnection connection, CommandArgs commandArgs) throws DeploymentException { 041 DeploymentManager dmgr = connection.getDeploymentManager(); 042 if(dmgr instanceof GeronimoDeploymentManager) { 043 GeronimoDeploymentManager mgr = (GeronimoDeploymentManager) dmgr; 044 File carFile = new File(commandArgs.getArgs()[0]); 045 carFile = carFile.getAbsoluteFile(); 046 if(!carFile.exists() || !carFile.canRead()) { 047 throw new DeploymentException("CAR file cannot be read: "+carFile.getAbsolutePath()); 048 } 049 Object key = mgr.startInstall(carFile, null, null); 050 long start = System.currentTimeMillis(); 051 DownloadResults results = showProgress(mgr, key); 052 int time = (int)(System.currentTimeMillis() - start) / 1000; 053 System.out.println(); 054 if(!results.isFailed()) { 055 System.out.print(DeployUtils.reformat("**** Installation Complete!", 4, 72)); 056 for (int i = 0; i < results.getDependenciesPresent().length; i++) { 057 Artifact uri = results.getDependenciesPresent()[i]; 058 System.out.print(DeployUtils.reformat("Used existing: "+uri, 4, 72)); 059 } 060 for (int i = 0; i < results.getDependenciesInstalled().length; i++) { 061 Artifact uri = results.getDependenciesInstalled()[i]; 062 System.out.print(DeployUtils.reformat("Installed new: "+uri, 4, 72)); 063 } 064 if(results.getTotalDownloadBytes() > 0 && time > 0) { 065 System.out.println(); 066 System.out.print(DeployUtils.reformat("Downloaded "+(results.getTotalDownloadBytes()/1024)+" kB in "+time+"s ("+results.getTotalDownloadBytes()/(1024*time)+" kB/s)", 4, 72)); 067 } 068 } 069 if(results.isFinished() && !results.isFailed() && results.getInstalledConfigIDs().length == 1) { 070 Artifact target = results.getInstalledConfigIDs()[0]; 071 System.out.print(DeployUtils.reformat("Now starting "+target+"...", 4, 72)); 072 System.out.flush(); 073 new CommandStart().execute(out, connection, new BaseCommandArgs(new String[]{target.toString()})); 074 } 075 } else { 076 throw new DeploymentException("Cannot install plugins when connected to "+connection.getServerURI()); 077 } 078 } 079 080 static DownloadResults showProgress(GeronimoDeploymentManager mgr, Object key) { 081 System.out.println("Checking for status every 1000ms:"); 082 String last = null, status; 083 while(true) { 084 DownloadResults results = mgr.checkOnInstall(key); 085 if(results.getCurrentFile() != null) { 086 if(results.getCurrentFilePercent() > -1) { 087 status = results.getCurrentMessage()+" ("+results.getCurrentFilePercent()+"%)"; 088 } else { 089 status = results.getCurrentMessage(); 090 } 091 if(last == null || !last.equals(status)) { 092 last = status; 093 System.out.println(status); 094 } 095 } 096 if(results.isFinished()) { 097 if(results.isFailed()) { 098 System.err.println("Installation FAILED: "+results.getFailure().getMessage()); 099 } 100 return results; 101 } 102 try { 103 Thread.sleep(1000); 104 } catch (InterruptedException e) { 105 return results; 106 } 107 } 108 } 109 }