00001
00026 package org.objectweb.jonas.ant;
00027
00028 import java.io.File;
00029 import java.util.ArrayList;
00030 import java.util.Iterator;
00031 import java.util.List;
00032
00033 import org.apache.tools.ant.BuildException;
00034 import org.apache.tools.ant.Project;
00035 import org.apache.tools.ant.Task;
00036 import org.apache.tools.ant.taskdefs.Copy;
00037 import org.apache.tools.ant.types.FileSet;
00038 import org.apache.tools.ant.types.PatternSet.NameEntry;
00039 import org.objectweb.jonas.ant.jonasbase.Archives;
00040 import org.objectweb.jonas.ant.jonasbase.BaseTaskItf;
00041 import org.objectweb.jonas.ant.jonasbase.Carol;
00042 import org.objectweb.jonas.ant.jonasbase.Db;
00043 import org.objectweb.jonas.ant.jonasbase.Dbm;
00044 import org.objectweb.jonas.ant.jonasbase.Ejbjars;
00045 import org.objectweb.jonas.ant.jonasbase.JdbcRa;
00046 import org.objectweb.jonas.ant.jonasbase.Jms;
00047 import org.objectweb.jonas.ant.jonasbase.Lib;
00048 import org.objectweb.jonas.ant.jonasbase.Mail;
00049 import org.objectweb.jonas.ant.jonasbase.Rars;
00050 import org.objectweb.jonas.ant.jonasbase.Services;
00051 import org.objectweb.jonas.ant.jonasbase.Tasks;
00052 import org.objectweb.jonas.ant.jonasbase.Wars;
00053 import org.objectweb.jonas.ant.jonasbase.WebContainer;
00054 import org.objectweb.jonas.ant.jonasbase.WsdlPublish;
00055
00061 public class JOnASBaseTask extends Task {
00062
00066 public static final String JONAS_CONF_FILE = "jonas.properties";
00067
00071 public static final String JORAM_CONF_FILE = "a3servers.xml";
00072
00076 public static final String JORAM_ADMIN_CONF_FILE = "joram-admin.cfg";
00077
00081 public static final String CAROL_CONF_FILE = "carol.properties";
00082
00086 public static final String TOMCAT_CONF_FILE = "server.xml";
00087
00091 public static final String JETTY_CONF_FILE = "jetty5.xml";
00092
00096 public static final String P6SPY_CONF_FILE = "spy.properties";
00097
00101 public static final String[] WARS_LIST = new String[] {"juddi.war", "autoload/jonasAdmin.war"};
00102
00106 public static final String[] RARS_LIST = new String[] {"autoload/JOnAS_jdbcCP.rar", "autoload/JOnAS_jdbcDM.rar", "autoload/JOnAS_jdbcDS.rar", "autoload/JOnAS_jdbcXA.rar"};
00107
00111 public static final String[] EJBJARS_LIST = new String[] {"autoload/mejb.jar"};
00112
00113
00117 private File jonasRoot = null;
00118
00122 private File destDir = null;
00123
00127 private boolean onlyUpdate = false;
00128
00132 private List tasks = null;
00133
00137 public JOnASBaseTask() {
00138 tasks = new ArrayList();
00139 }
00140
00145 public void execute() {
00146 if (jonasRoot == null) {
00147 throw new BuildException("jonasRoot element is not set");
00148 }
00149
00150 if (destDir == null) {
00151 throw new BuildException("destDir element is not set");
00152 }
00153
00154 if (jonasRoot.getPath().equals(destDir.getPath())) {
00155 throw new BuildException("jonasRoot and destDir is the same path !");
00156 }
00157
00158 File jprops = new File(destDir.getPath() + File.separator + "conf" + File.separator + "jonas.properties");
00159
00160 if (onlyUpdate) {
00161 if (jprops.exists()) {
00162 log("Only updating JONAS_BASE in the directory '" + destDir + "' from source directory '" + jonasRoot + "'",
00163 Project.MSG_INFO);
00164 updateJonasBase();
00165 return;
00166 } else {
00167 throw new BuildException("JOnAS base directory '" + destDir.getPath() + "' doesn't exists. Cannot update.");
00168 }
00169 }
00170
00171
00172 log("Creating JONAS_BASE in the directory '" + destDir + "' from source directory '" + jonasRoot + "'",
00173 Project.MSG_INFO);
00174 Copy copy = new Copy();
00175 configure(copy);
00176 copy.setTodir(destDir);
00177 FileSet fileSet = new FileSet();
00178 fileSet.setDir(new File(new File(jonasRoot, "templates"), "conf"));
00179 copy.addFileset(fileSet);
00180 copy.setOverwrite(true);
00181 copy.execute();
00182
00183 for (Iterator it = tasks.iterator(); it.hasNext();) {
00184 BaseTaskItf task = (BaseTaskItf) it.next();
00185 task.setDestDir(destDir);
00186 task.setJonasRoot(jonasRoot);
00187 configure((Task) task);
00188 String info = task.getLogInfo();
00189 if (info != null) {
00190 log(info, Project.MSG_INFO);
00191 }
00192 task.execute();
00193 }
00194
00195
00196 updateJonasBase();
00197 }
00198
00202 private void updateJonasBase() {
00203 Archives wars = new Wars();
00204 updateJonasBaseForArchives(wars, "webapps", WARS_LIST);
00205
00206 Archives ejbjars = new Ejbjars();
00207 updateJonasBaseForArchives(ejbjars, "ejbjars", EJBJARS_LIST);
00208
00209 Archives rars = new Rars();
00210 updateJonasBaseForArchives(rars, "rars", RARS_LIST);
00211
00212 }
00213
00220 private void updateJonasBaseForArchives(Archives archives, String folderName, String[] listOfIncludes) {
00221 configure(archives);
00222 archives.setDestDir(destDir);
00223 FileSet fileSet = new FileSet();
00224 fileSet.setDir(new File(jonasRoot, folderName));
00225 for (int f = 0; f < listOfIncludes.length; f++) {
00226 NameEntry ne = fileSet.createInclude();
00227 ne.setName(listOfIncludes[f]);
00228 }
00229 archives.addFileset(fileSet);
00230 archives.setOverwrite(true);
00231 String info = archives.getLogInfo();
00232 if (info != null) {
00233 log(info, Project.MSG_INFO);
00234 }
00235 archives.execute();
00236 }
00237
00242 public void addTasks(Tasks subTasks) {
00243 if (subTasks != null) {
00244 for (Iterator it = subTasks.getTasks().iterator(); it.hasNext();) {
00245 tasks.add(it.next());
00246 }
00247 }
00248 }
00249
00254 public void addTask(BaseTaskItf task) {
00255 if (task != null) {
00256 tasks.add(task);
00257 }
00258 }
00259
00264 public void addConfiguredServices(Services servicesTasks) {
00265 addTask(servicesTasks);
00266 }
00267
00272 public void addConfiguredJms(Jms jmsTasks) {
00273 addTasks(jmsTasks);
00274 }
00275
00280 public void addConfiguredJdbcRa(JdbcRa jdbcRaTask) {
00281 addTask(jdbcRaTask);
00282 }
00283
00288 public void addConfiguredMail(Mail mailTask) {
00289 addTask(mailTask);
00290 }
00291
00296 public void addConfiguredDb(Db dbTask) {
00297 addTask(dbTask);
00298 }
00299
00304 public void addConfiguredDbm(Dbm dbTask) {
00305 addTask(dbTask);
00306 }
00311 public void addConfiguredLib(Lib libTask) {
00312 addTask(libTask);
00313 }
00314
00319 public void addConfiguredWsdlPublish(WsdlPublish wsdlTask) {
00320 addTask(wsdlTask);
00321 }
00322
00327 public void addConfiguredCarol(Carol carolTasks) {
00328 addTasks(carolTasks);
00329 }
00330
00335 public void addConfiguredWebContainer(WebContainer webContainerTasks) {
00336 addTasks(webContainerTasks);
00337 }
00338
00343 public void setDestDir(File destDir) {
00344 this.destDir = destDir;
00345 }
00346
00351 public void setJonasRoot(File jonasRoot) {
00352 this.jonasRoot = jonasRoot;
00353 }
00354
00359 private void configure(Task task) {
00360 task.setTaskName(getTaskName());
00361 task.setProject(getProject());
00362 }
00363
00364
00369 public void setUpdate(boolean onlyUpdate) {
00370 this.onlyUpdate = onlyUpdate;
00371 }
00372
00373 }