KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > objectstyle > cayenne > tools > DeploymentConfigurator


1 /* ====================================================================
2  *
3  * The ObjectStyle Group Software License, version 1.1
4  * ObjectStyle Group - http://objectstyle.org/
5  *
6  * Copyright (c) 2002-2005, Andrei (Andrus) Adamchik and individual authors
7  * of the software. All rights reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  *
13  * 1. Redistributions of source code must retain the above copyright
14  * notice, this list of conditions and the following disclaimer.
15  *
16  * 2. Redistributions in binary form must reproduce the above copyright
17  * notice, this list of conditions and the following disclaimer in
18  * the documentation and/or other materials provided with the
19  * distribution.
20  *
21  * 3. The end-user documentation included with the redistribution, if any,
22  * must include the following acknowlegement:
23  * "This product includes software developed by independent contributors
24  * and hosted on ObjectStyle Group web site (http://objectstyle.org/)."
25  * Alternately, this acknowlegement may appear in the software itself,
26  * if and wherever such third-party acknowlegements normally appear.
27  *
28  * 4. The names "ObjectStyle Group" and "Cayenne" must not be used to endorse
29  * or promote products derived from this software without prior written
30  * permission. For written permission, email
31  * "andrus at objectstyle dot org".
32  *
33  * 5. Products derived from this software may not be called "ObjectStyle"
34  * or "Cayenne", nor may "ObjectStyle" or "Cayenne" appear in their
35  * names without prior written permission.
36  *
37  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
38  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
39  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
40  * DISCLAIMED. IN NO EVENT SHALL THE OBJECTSTYLE GROUP OR
41  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
42  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
43  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
44  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
45  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
46  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
47  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
48  * SUCH DAMAGE.
49  * ====================================================================
50  *
51  * This software consists of voluntary contributions made by many
52  * individuals and hosted on ObjectStyle Group web site. For more
53  * information on the ObjectStyle Group, please see
54  * <http://objectstyle.org/>.
55  */

56 package org.objectstyle.cayenne.tools;
57
58 import java.io.File JavaDoc;
59 import java.util.Iterator JavaDoc;
60
61 import org.apache.tools.ant.BuildException;
62 import org.objectstyle.cayenne.project.DataNodeConfigInfo;
63 import org.objectstyle.cayenne.project.ProjectConfigInfo;
64 import org.objectstyle.cayenne.project.ProjectConfigurator;
65 import org.objectstyle.cayenne.project.ProjectException;
66 import org.objectstyle.cayenne.util.Util;
67
68 /**
69  * A "cdeploy" Ant task providing an Ant frontend to
70  * org.objectstyle.cayenne.project.ProjectConfigurator.
71  *
72  * @author Andrei Adamchik
73  */

74 public class DeploymentConfigurator extends CayenneTask {
75
76     protected ProjectConfigInfo info;
77
78     /**
79      * Constructor for DeploymentConfigurator.
80      */

81     public DeploymentConfigurator() {
82         super();
83         info = new ProjectConfigInfo();
84     }
85
86     public ProjectConfigInfo getInfo() {
87         return info;
88     }
89
90     /**
91      * Executes the task. It will be called by ant framework.
92      */

93     public void execute() throws BuildException {
94         configureLogging();
95         
96         validateAttributes();
97
98         try {
99             processProject();
100         }
101         catch (Exception JavaDoc ex) {
102             Throwable JavaDoc th = Util.unwindException(ex);
103             String JavaDoc message = th.getMessage();
104             StringBuffer JavaDoc buf = new StringBuffer JavaDoc();
105
106             if (message != null && message.trim().length() > 0) {
107                 buf.append("Error: [").append(message).append("].");
108             }
109             else {
110                 buf.append("Error reconfiguring jar file.");
111             }
112
113             buf
114                     .append(" Source: ")
115                     .append(info.getSourceJar())
116                     .append("; target: ")
117                     .append(info.getDestJar());
118
119             String JavaDoc errorMessage = buf.toString();
120             super.log(errorMessage);
121             throw new BuildException(errorMessage, ex);
122         }
123     }
124
125     /**
126      * Performs validation of task attributes. Throws BuildException if validation fails.
127      */

128     protected void validateAttributes() throws BuildException {
129         if (info.getSourceJar() == null) {
130             throw new BuildException("'src' attribute is required.");
131         }
132
133         if (!info.getSourceJar().isFile()) {
134             throw new BuildException("'src' must be a valid file: " + info.getSourceJar());
135         }
136
137         if (info.getAltProjectFile() != null && !info.getAltProjectFile().isFile()) {
138             throw new BuildException("'altProjectFile' must be a valid file: "
139                     + info.getAltProjectFile());
140         }
141
142         Iterator JavaDoc nodes = info.getNodes().iterator();
143         while (nodes.hasNext()) {
144             DataNodeConfigInfo node = (DataNodeConfigInfo) nodes.next();
145             if (node.getName() == null) {
146                 throw new BuildException("'node.name' attribute is required.");
147             }
148
149             if (node.getDataSource() != null && node.getDriverFile() != null) {
150                 throw new BuildException(
151                         "'node.dataSource' and 'node.driverFile' are mutually exclusive.");
152             }
153
154             if (node.getDriverFile() != null && !node.getDriverFile().isFile()) {
155                 throw new BuildException("'node.driverFile' does not exist.");
156             }
157         }
158     }
159
160     /**
161      * Performs the actual work on the project.
162      */

163     protected void processProject() throws ProjectException {
164         ProjectConfigurator conf = new ProjectConfigurator(info);
165         conf.execute();
166     }
167
168     public void setSrc(File JavaDoc file) {
169         info.setSourceJar(file);
170     }
171
172     public void setDest(File JavaDoc file) {
173         info.setDestJar(file);
174     }
175
176     public void setAltProjectFile(File JavaDoc file) {
177         info.setAltProjectFile(file);
178     }
179
180     public void addNode(DataNodeConfigInfo node) {
181         info.addToNodes(node);
182     }
183 }
Popular Tags