View Javadoc

1   /**
2    *
3    * Copyright 2005 The Apache Software Foundation
4    *
5    *  Licensed under the Apache License, Version 2.0 (the "License");
6    *  you may not use this file except in compliance with the License.
7    *  You may obtain a copy of the License at
8    *
9    *     http://www.apache.org/licenses/LICENSE-2.0
10   *
11   *  Unless required by applicable law or agreed to in writing, software
12   *  distributed under the License is distributed on an "AS IS" BASIS,
13   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   *  See the License for the specific language governing permissions and
15   *  limitations under the License.
16   */
17  package org.apache.geronimo.system.plugin;
18  
19  import java.io.Serializable;
20  import java.util.List;
21  import java.util.ArrayList;
22  import org.apache.geronimo.kernel.repository.Artifact;
23  
24  /**
25   * Provides the results of a configuration download operation.  This is updated
26   * along the way for callers who want to monitor the ongoing progress.
27   *
28   * @version $Rev: 410741 $ $Date: 2006-05-31 21:35:48 -0700 (Wed, 31 May 2006) $
29   */
30  public class DownloadResults implements Serializable, DownloadPoller {
31      private List removedConfigIDs = new ArrayList();
32      private List restartedConfigIDs = new ArrayList();
33      private List installedConfigIDs = new ArrayList();
34      private List dependenciesPresent = new ArrayList();
35      private List dependenciesInstalled = new ArrayList();
36      private String currentFile;
37      private String currentMessage;
38      private int currentFileProgress = -1;
39      private Exception failure;
40      private boolean finished;
41      private long totalDownloadBytes = 0;
42  
43      public synchronized DownloadResults duplicate() {
44          DownloadResults other = new DownloadResults();
45          other.removedConfigIDs.addAll(removedConfigIDs);
46          other.restartedConfigIDs.addAll(restartedConfigIDs);
47          other.installedConfigIDs.addAll(installedConfigIDs);
48          other.dependenciesPresent.addAll(dependenciesPresent);
49          other.dependenciesInstalled.addAll(dependenciesInstalled);
50          other.currentFile = currentFile;
51          other.currentMessage = currentMessage;
52          other.currentFileProgress = currentFileProgress;
53          other.failure = failure;
54          other.finished = finished;
55          other.totalDownloadBytes = totalDownloadBytes;
56          return other;
57      }
58  
59      public synchronized void addInstalledConfigID(Artifact dep) {
60          installedConfigIDs.add(dep);
61      }
62  
63      public synchronized void addRemovedConfigID(Artifact obsolete) {
64          removedConfigIDs.add(obsolete);
65      }
66  
67      public synchronized void addRestartedConfigID(Artifact target) {
68          restartedConfigIDs.add(target);
69      }
70  
71      public synchronized void addDependencyPresent(Artifact dep) {
72          dependenciesPresent.add(dep);
73      }
74  
75      public synchronized void addDependencyInstalled(Artifact dep) {
76          dependenciesInstalled.add(dep);
77      }
78  
79      public synchronized void setCurrentFile(String currentFile) {
80          this.currentFile = currentFile;
81      }
82  
83      public synchronized void setCurrentMessage(String currentMessage) {
84          this.currentMessage = currentMessage;
85      }
86  
87      public synchronized void setCurrentFilePercent(int currentFileProgress) {
88          this.currentFileProgress = currentFileProgress;
89      }
90  
91      public synchronized void setFailure(Exception failure) {
92          this.failure = failure;
93      }
94  
95      public synchronized void setFinished() {
96          finished = true;
97      }
98  
99      public synchronized void addDownloadBytes(long bytes) {
100         totalDownloadBytes += bytes;
101     }
102 
103     public boolean isFinished() {
104         return finished;
105     }
106 
107     public boolean isFailed() {
108         return failure != null;
109     }
110 
111     /**
112      * The total number of bytes in the archives downloaded from remote
113      * repositories.
114      */
115     public long getTotalDownloadBytes() {
116         return totalDownloadBytes;
117     }
118 
119     /**
120      * If the operation failed, the Exception that caused the failure.
121      */
122     public Exception getFailure() {
123         return failure;
124     }
125 
126     /**
127      * Gets the list of the originally requested Config IDs that were
128      * successfully installed.  Ordinarily this is not necessary, but
129      * it may be important in case of failure midway through, or if the
130      * request passed previously downloaded configurations on the command
131      * line and the caller doesn't know what the Config IDs are.
132      */
133     public Artifact[] getInstalledConfigIDs() {
134         return (Artifact[]) installedConfigIDs.toArray(new Artifact[installedConfigIDs.size()]);
135     }
136 
137     public Artifact[] getRemovedConfigIDs() {
138         return (Artifact[]) removedConfigIDs.toArray(new Artifact[installedConfigIDs.size()]);
139     }
140 
141     public Artifact[] getRestartedConfigIDs() {
142         return (Artifact[]) restartedConfigIDs.toArray(new Artifact[installedConfigIDs.size()]);
143     }
144 
145     /**
146      * Gets the dependencies that we've needed but they're already present in
147      * the local server so no installation was necessary.
148      */
149     public Artifact[] getDependenciesPresent() {
150         return (Artifact[]) dependenciesPresent.toArray(new Artifact[dependenciesPresent.size()]);
151     }
152 
153     /**
154      * Gets the dependencies that we've successfully downloaded and installed
155      * into the local server environment.
156      */
157     public Artifact[] getDependenciesInstalled() {
158         return (Artifact[]) dependenciesInstalled.toArray(new Artifact[dependenciesInstalled.size()]);
159     }
160 
161     /**
162      * Gets the name of the file that is currently being operated on.
163      */
164     public String getCurrentFile() {
165         return currentFile;
166     }
167 
168     /**
169      * Gets a description of the work currently being done.
170      */
171     public String getCurrentMessage() {
172         return currentMessage;
173     }
174 
175     /**
176      * Gets the progress on the current file expressed as a percentage.  This
177      * value may be -1 in which case the progress cannot be calculated (e.g. a
178      * download where the server doesn't supply the file size up front).
179      */
180     public int getCurrentFilePercent() {
181         return currentFileProgress;
182     }
183 }