001: /**
002: * JOnAS: Java(TM) Open Application Server
003: * Copyright (C) 1999 Bull S.A.
004: * Contact: jonas-team@objectweb.org
005: *
006: * This library is free software; you can redistribute it and/or
007: * modify it under the terms of the GNU Lesser General Public
008: * License as published by the Free Software Foundation; either
009: * version 2.1 of the License, or any later version.
010: *
011: * This library is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * Lesser General Public License for more details.
015: *
016: * You should have received a copy of the GNU Lesser General Public
017: * License along with this library; if not, write to the Free Software
018: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
019: * USA
020: *
021: * Initial developer(s): Florent BENOIT & Ludovic BERT
022: * --------------------------------------------------------------------------
023: * $Id: JarList.java 4623 2004-04-19 14:28:04Z benoitf $
024: * --------------------------------------------------------------------------
025: */package org.objectweb.jonas.ear.lib;
026:
027: //java import
028: import java.io.File;
029: import java.io.IOException;
030: import java.net.URL;
031: import java.util.Enumeration;
032: import java.util.StringTokenizer;
033: import java.util.Vector;
034:
035: import org.objectweb.jonas_ear.deployment.xml.Web;
036:
037: /**
038: * JOnAS Jar list This class provides a way for managing the class-path
039: * dependency libraries.
040: * @author Florent Benoit
041: * @author Ludovic Bert
042: */
043: public class JarList extends Vector {
044:
045: /**
046: * Construct an instance of a JarList
047: */
048: public JarList() {
049: super ();
050: }
051:
052: /**
053: * Construct an instance of a JarList
054: * @param st a String tokenizer
055: */
056: public JarList(StringTokenizer st) {
057: super ();
058:
059: //add each entries
060: while (st.hasMoreTokens()) {
061: String fileName = st.nextToken();
062: add(fileName);
063: }
064: }
065:
066: /**
067: * Construct an instance of a JarList
068: * @param strs an array of files
069: */
070: public JarList(String[] strs) {
071: super ();
072:
073: for (int i = 0; i < strs.length; i++) {
074: add(strs[i]);
075: }
076: }
077:
078: /**
079: * Construct an instance of a JarList with a wars Array
080: * @param wars an array of war file
081: */
082: public JarList(Web[] wars) {
083: super ();
084:
085: for (int i = 0; i < wars.length; i++) {
086: String s = wars[i].getWebUri();
087: add(s);
088: }
089: }
090:
091: /**
092: * Add the specified file to the current list.
093: * @param fileName the name of the file to add.
094: */
095: public void add(String fileName) {
096: if (!contains(fileName) && !fileName.equals("")) {
097: super .add(fileName);
098: }
099: }
100:
101: /**
102: * Get the URLs of all the JAR file list append to dirName.
103: * @param dirName the name of the directory where we append the files.
104: * @return the absolute URLs of the JAR files.
105: * @throws JarListException if url are malformed
106: */
107: public URL[] getURLs(String dirName) throws JarListException {
108:
109: URL[] urls = new URL[elementCount];
110: for (int i = 0; i < elementCount; i++) {
111: String s = (String) elementData[i];
112: try {
113: urls[i] = new File(
114: new URL(dirName + File.separator + s).getFile())
115: .getCanonicalFile().toURL();
116: } catch (IOException e) {
117: throw new JarListException(
118: "Error when trying to get the canonical form for the file "
119: + elementData[i]);
120: }
121: }
122: return urls;
123: }
124:
125: /**
126: * Merge the specified JarList to the current JarList without adding
127: * duplicate entry.
128: * @param jarList the list to merge.
129: */
130: public void merge(JarList jarList) {
131: for (Enumeration e = jarList.elements(); e.hasMoreElements();) {
132: String s = (String) e.nextElement();
133: //call add which call super.add
134: add(s);
135: }
136: }
137:
138: /**
139: * Remove all the entries contained in the jarList to the current jarList.
140: * @param jarList the jarList to remove.
141: */
142: public void remove(JarList jarList) {
143:
144: for (Enumeration e = jarList.elements(); e.hasMoreElements();) {
145: String s = (String) e.nextElement();
146: if (contains(s)) {
147: remove(s);
148: }
149: }
150: }
151:
152: /**
153: * Set the relative path of the current list. This is useful in the case of
154: * an EAR file because the class-path is relative to the JAR file and not
155: * the EAR file.
156: * @param path the path for set the relative path
157: */
158: public void setRelativePath(String path) {
159: if (path.equals("")) {
160: return;
161: }
162:
163: for (int i = 0; i < elementCount; i++) {
164: elementData[i] = path + File.separator + elementData[i];
165: }
166: }
167: }
|