1 /** 2 * 3 * Copyright 2003-2004 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 18 package org.apache.geronimo.deployment.util; 19 20 import java.io.IOException; 21 import java.net.MalformedURLException; 22 import java.net.URL; 23 24 import javax.xml.parsers.DocumentBuilder; 25 26 import org.apache.geronimo.common.DeploymentException; 27 import org.w3c.dom.Document; 28 import org.xml.sax.SAXException; 29 30 /** 31 * Helper class that handles locating DDs in directories (mainly WEB-INF, META-INF), 32 * building class space and dealing with deployments 33 * 34 * @version $Rev: 109898 $ $Date: 2004-12-05 10:21:47 -0800 (Sun, 05 Dec 2004) $ 35 */ 36 public class DeploymentHelper { 37 protected final URL url; 38 protected final URLType urlType; 39 protected URL j2eeURL; 40 protected URL geronimoURL; 41 42 /** 43 * Create an helper related to the specified deployment URL with META-INF 44 * as the directory with the given files 45 * 46 * @see #DeploymentHelper(URLInfo, String, String, String) 47 */ 48 public DeploymentHelper(URLInfo urlInfo, String j2eeDDName, 49 String geronimoDDName) throws DeploymentException { 50 this(urlInfo, j2eeDDName, geronimoDDName, "META-INF"); 51 } 52 53 /** 54 * Creates an helper related to the specified deployment URL. 55 * 56 * @param urlInfo Deployment URLInfo. 57 * @param j2eeDDName name of the J2EE deployment descriptor file 58 * @param geronimoDDName name of the Geronimo deployment descriptor file 59 * @param infDir the directory where deployment descriptors are to be looked up 60 * @throws DeploymentException when the deployment doesn't exist 61 */ 62 public DeploymentHelper(URLInfo urlInfo, String j2eeDDName, 63 String geronimoDDName, String infDir) throws DeploymentException { 64 this.url = urlInfo.getUrl(); 65 this.urlType = urlInfo.getType(); 66 try { 67 if (URLType.RESOURCE == urlType) { 68 j2eeURL = null; 69 geronimoURL = url; 70 } else if (URLType.PACKED_ARCHIVE == urlType) { 71 j2eeURL = new URL("jar:" + this.url.toExternalForm() + "!/" + infDir + "/" + j2eeDDName); 72 geronimoURL = new URL("jar:" + this.url.toExternalForm() + "!/" + infDir + "/" + geronimoDDName); 73 } else if (URLType.UNPACKED_ARCHIVE == urlType) { 74 j2eeURL = new URL(this.url, infDir + "/" + j2eeDDName); 75 geronimoURL = new URL(this.url, infDir + "/" + geronimoDDName); 76 } else { 77 j2eeURL = null; 78 geronimoURL = null; 79 return; 80 } 81 } catch (MalformedURLException e1) { 82 throw new DeploymentException("Should never occur", e1); 83 } 84 } 85 /** 86 * Locates J2EE deployment descriptor. 87 * 88 * @return URL referencing the J2EE DD or null if no deployment descriptor 89 * is found. 90 */ 91 public URL locateJ2EEDD() { 92 return j2eeURL; 93 } 94 95 public Document getJ2EEDoc(DocumentBuilder parser) { 96 return getDoc(parser, j2eeURL); 97 } 98 99 public Document getGeronimoDoc(DocumentBuilder parser) { 100 return getDoc(parser, geronimoURL); 101 } 102 103 private Document getDoc(DocumentBuilder parser, URL url) { 104 if (url == null) { 105 return null; 106 } 107 try { 108 return parser.parse(url.openStream()); 109 } catch (SAXException e) { 110 return null; 111 } catch (IOException e) { 112 return null; 113 } 114 } 115 116 /** 117 * Locates Geronimo's deployment descriptor 118 * 119 * @return URL referencing Geronimo's DD or null if no deployment 120 * descriptor is found 121 */ 122 public URL locateGeronimoDD() { 123 return geronimoURL; 124 } 125 }