Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: org/apache/axis/tools/ant/wsdl/NamespaceMapping.java


1   /*
2    * Copyright 2002,2004 The Apache Software Foundation.
3    * 
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    * 
8    *      http://www.apache.org/licenses/LICENSE-2.0
9    * 
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  
17  package org.apache.axis.tools.ant.wsdl;
18  
19  import org.apache.tools.ant.BuildException;
20  import org.apache.tools.ant.Project;
21  import org.apache.tools.ant.ProjectComponent;
22  
23  import java.io.BufferedInputStream;
24  import java.io.File;
25  import java.io.FileInputStream;
26  import java.io.IOException;
27  import java.util.Enumeration;
28  import java.util.HashMap;
29  import java.util.Properties;
30  
31  /**
32   * Used for nested package definitions.
33   * The file format used for storing mappings is a list of package=namespace
34   */
35  public class NamespaceMapping implements Mapper {
36  
37  
38      private String namespace = null;
39      private String packageName = null;
40      private File mappingFile;
41  
42      /**
43       * pass in the namespace to map to
44       */
45      public NamespaceMapping() {
46      }
47  
48      /**
49       * the namespace in the WSDL. Required.
50       * @param value new uri of the mapping
51       */
52      public void setNamespace(String value) {
53          namespace = value;
54      }
55  
56      /**
57       * the Java package to bind to. Required.
58       * @param value java package name
59       */
60      public void setPackage(String value) {
61          packageName = value;
62      }
63  
64      /**
65       * name of a property file that contains mappings in
66       * package=namespace format
67       * @param file file to load
68       */
69      public void setFile(File file) {
70          mappingFile = file;
71      }
72  
73      /**
74       * map a namespace to a package
75       * @param owner owning project component (For logging)
76       * @param map map to assign to
77       * @param packName package name
78       * @param nspace namespace
79       * @param packageIsKey if the package is to be the key for the map
80       */
81      protected void map(ProjectComponent owner,
82                         HashMap map,
83                         String packName,
84                         String nspace,
85                         boolean packageIsKey) {
86          owner.log("mapping "+nspace+" to "+packName, Project.MSG_VERBOSE);
87          if(packageIsKey) {
88              map.put(packName,nspace);
89          } else {
90              map.put(nspace, packName);
91          }
92      }
93  
94      /**
95       * validate the option set
96       */
97      private void validate() {
98          if (mappingFile != null) {
99              if (namespace != null || packageName != null) {
100                 throw new BuildException(
101                         "Namespace or Package cannot be used with a File attribute");
102             }
103         } else {
104             if (namespace == null) {
105                 throw new BuildException("namespace must be defined");
106             }
107             if (packageName == null) {
108                 throw new BuildException("package must be defined");
109             }
110         }
111     }
112 
113     /**
114      * Load a mapping file and save it to the map
115      * @param owner owner component
116      * @param map target map file
117      * @param packageIsKey if the package is to be the key for the map
118      * @throws BuildException if an IOException needed swallowing
119      */
120     protected void mapFile(ProjectComponent owner, HashMap map, boolean packageIsKey) throws BuildException {
121         Properties props = loadMappingPropertiesFile();
122         Enumeration keys = props.keys();
123         while (keys.hasMoreElements()) {
124             String packageName = (String) keys.nextElement();
125             String namespace = props.getProperty(packageName);
126             map(owner, map, packageName, namespace, packageIsKey);
127         }
128     }
129 
130     /**
131      * load a file containing properties
132      * @return a properties file with zero or more mappings
133      * @throws BuildException if the load failed
134      */
135     private Properties loadMappingPropertiesFile() throws BuildException {
136         Properties props = new Properties();
137         FileInputStream instr = null;
138         try {
139             instr = new FileInputStream(mappingFile);
140             props.load(new BufferedInputStream(instr));
141         } catch (IOException e) {
142             throw new BuildException("Failed to load " + mappingFile, e);
143         } finally {
144             if (instr != null) {
145                 try {
146                     instr.close();
147                 } catch (IOException e) {
148                 }
149             }
150         }
151         return props;
152     }
153 
154 
155     /**
156      * execute the mapping
157      * @param owner owner object
158      * @param map map to map to
159      * @param packageIsKey if the package is to be the key for the map
160      * @throws BuildException in case of emergency
161      */
162     public void execute(ProjectComponent owner, HashMap map, boolean packageIsKey) throws BuildException {
163         validate();
164         if (mappingFile != null) {
165             mapFile(owner, map,packageIsKey);
166         } else {
167             map(owner, map, packageName, namespace, packageIsKey);
168         }
169     }
170 
171 
172 }