001: /**
002: * JOnAS: Java(TM) Open Application Server
003: * Copyright (C) 2003-2004 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: * --------------------------------------------------------------------------
022: * $Id: AbsApplicationModifier.java 6673 2005-04-28 16:53:00Z benoitf $
023: * --------------------------------------------------------------------------
024: */package org.objectweb.jonas_lib.genbase.modifier;
025:
026: import java.io.File;
027: import java.util.Iterator;
028: import java.util.List;
029: import java.util.Vector;
030:
031: import org.objectweb.jonas_lib.genbase.GenBaseException;
032: import org.objectweb.jonas_lib.genbase.archive.Application;
033: import org.objectweb.jonas_lib.genbase.archive.Archive;
034: import org.objectweb.jonas_lib.genbase.generator.Config;
035:
036: import org.objectweb.util.monolog.api.BasicLevel;
037:
038: /**
039: * Modify a given Application.
040: * @author Guillaume Sauthier
041: * @author Florent Benoit
042: */
043: public abstract class AbsApplicationModifier extends ArchiveModifier {
044:
045: /**
046: * ejbjar modifiers
047: */
048: private List ejbModifiers = null;
049:
050: /**
051: * web modifiers
052: */
053: private List webModifiers = null;
054:
055: /**
056: * client modifiers
057: */
058: private List cltModifiers = null;
059:
060: /**
061: * Wrapped application
062: */
063: private Application app = null;
064:
065: /**
066: * Configuration used to save
067: */
068: private Config config = null;
069:
070: /**
071: * Creates a new ApplicationModifier.
072: * @param archive the Application J2EE archive
073: * @param config the configuration object
074: */
075: public AbsApplicationModifier(Application archive, Config config) {
076: super (archive);
077: this .config = config;
078: app = archive;
079: initVectors();
080: init();
081: }
082:
083: /**
084: * Init the vectors of modifiers
085: */
086: private void initVectors() {
087: // create lists
088: ejbModifiers = new Vector();
089: webModifiers = new Vector();
090: cltModifiers = new Vector();
091: }
092:
093: /**
094: * initialize modifier
095: */
096: protected abstract void init();
097:
098: /**
099: * Modify the current archive and return a modified archive.
100: * @return a modified archive.
101: * @throws GenBaseException When modifications fails
102: */
103: public Archive modify() throws GenBaseException {
104:
105: getLogger().log(BasicLevel.INFO,
106: "Processing Application " + app.getName());
107:
108: /**
109: * Modify inner modules
110: */
111: for (Iterator i = webModifiers.iterator(); i.hasNext();) {
112: ArchiveModifier wm = (ArchiveModifier) i.next();
113: Archive a = wm.modify();
114: if (getLogger().isLoggable(BasicLevel.DEBUG)) {
115: getLogger().log(BasicLevel.DEBUG,
116: "Modifying WebApp '" + a.getName() + "'");
117: }
118: app.addFile(a.getRootFile());
119: }
120:
121: for (Iterator i = cltModifiers.iterator(); i.hasNext();) {
122: ArchiveModifier cm = (ArchiveModifier) i.next();
123: Archive a = cm.modify();
124: if (getLogger().isLoggable(BasicLevel.DEBUG)) {
125: getLogger().log(BasicLevel.DEBUG,
126: "Modifying Client '" + a.getName() + "'");
127: }
128: app.addFile(a.getRootFile());
129: }
130:
131: for (Iterator i = ejbModifiers.iterator(); i.hasNext();) {
132: ArchiveModifier em = (ArchiveModifier) i.next();
133: Archive a = em.modify();
134: if (getLogger().isLoggable(BasicLevel.DEBUG)) {
135: getLogger().log(BasicLevel.DEBUG,
136: "Modifying EjbJar '" + a.getName() + "'");
137: }
138: app.addFile(a.getRootFile());
139: }
140:
141: return save(config, "apps" + File.separator + app.getName());
142:
143: }
144:
145: /**
146: * @return the cltModifiers.
147: */
148: protected List getCltModifiers() {
149: return cltModifiers;
150: }
151:
152: /**
153: * @return the ejbModifiers.
154: */
155: protected List getEjbModifiers() {
156: return ejbModifiers;
157: }
158:
159: /**
160: * @return the webModifiers.
161: */
162: protected List getWebModifiers() {
163: return webModifiers;
164: }
165:
166: /**
167: * @return the application element.
168: */
169: protected Application getApplication() {
170: return app;
171: }
172: }
|