Fri, 04 Oct 2013 16:21:34 +0100
8025054: Update JAX-WS RI integration to 2.2.9-b130926.1035
Reviewed-by: chegar
1 /*
2 * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
26 package com.sun.tools.internal.jxc;
28 import java.io.File;
29 import java.util.ArrayList;
30 import java.util.List;
31 import java.util.regex.Pattern;
33 import com.sun.tools.internal.jxc.gen.config.NGCCRuntime;
35 import org.xml.sax.ErrorHandler;
36 import org.xml.sax.SAXException;
37 import org.xml.sax.SAXParseException;
40 /**
41 * Controls the validating and converting of values obtained
42 * from the config file.
43 *
44 * @author
45 * Bhakti Mehta (bhakti.mehta@sun.com)
46 */
47 public final class NGCCRuntimeEx extends NGCCRuntime {
48 /**
49 * All the errors shall be sent to this object.
50 */
51 private final ErrorHandler errorHandler;
53 public NGCCRuntimeEx(ErrorHandler errorHandler) {
54 this.errorHandler = errorHandler;
55 }
57 /**
58 * This will check if the baseDir provided by the user
59 * in the config file exists. If not it throws an error
60 * @param baseDir
61 * The baseDir attribute passed by the user in the xml config file as a path
62 * @return
63 * The file representation of the path name
64 */
65 public File getBaseDir(String baseDir) throws SAXException {
66 File dir = new File(baseDir);
67 if (dir.exists()) {
68 return dir;
69 } else {
70 SAXParseException e = new SAXParseException(
71 Messages.BASEDIR_DOESNT_EXIST.format(dir.getAbsolutePath()),
72 getLocator());
73 errorHandler.error(e);
74 throw e; // we can't recover from this error
75 }
76 }
78 /**
79 * This takes the include list provided by the user in the config file
80 * It converts the user values to {@link Pattern}
81 * @param includeContent
82 * The include list specified by the user
83 * @return
84 * A list of regular expression patterns {@link Pattern}
85 */
86 public List<Pattern> getIncludePatterns(List<String> includeContent ) {
87 List<Pattern> includeRegexList = new ArrayList<Pattern>();
88 for (String includes : includeContent) {
89 String regex = convertToRegex(includes);
90 Pattern pattern = Pattern.compile(regex);
91 includeRegexList.add(pattern);
92 }
93 return includeRegexList;
94 }
97 /**
98 * This takes the exclude list provided by the user in the config file
99 * It converts the user values to {@link Pattern}
100 * @param excludeContent
101 * The exclude list specified by the user
102 * @return
103 * A list of regular expression patterns {@link Pattern}
104 */
105 public List getExcludePatterns(List<String> excludeContent ) {
106 List<Pattern> excludeRegexList = new ArrayList<Pattern>();
107 for (String excludes : excludeContent) {
108 String regex = convertToRegex(excludes);
109 Pattern pattern = Pattern.compile(regex);
110 excludeRegexList.add(pattern);
111 }
112 return excludeRegexList;
113 }
116 /**
117 * This will tokenize the pattern and convert it into a regular expression
118 * @param pattern
119 */
120 private String convertToRegex(String pattern) {
121 StringBuilder regex = new StringBuilder();
122 char nc = ' ';
123 if (pattern.length() >0 ) {
125 for ( int i = 0 ; i < pattern.length(); i ++ ) {
126 char c = pattern.charAt(i);
127 nc = ' ';
128 if ((i +1) != pattern.length()) {
129 nc = pattern.charAt(i +1);
130 }
131 //escape single '.'
132 if (c == '.' && nc != '.'){
133 regex.append('\\');
134 regex.append('.');
135 //do not allow patterns like a..b
136 } else if (c == '.'){
137 continue;
138 // "**" gets replaced by ".*"
139 } else if ((c=='*') && (nc == '*')) {
140 regex.append(".*");
141 break;
142 //'*' replaced by anything but '.' i.e [^\\.]+
143 } else if (c=='*') {
144 regex.append("[^\\.]+");
145 continue;
146 //'?' replaced by anything but '.' i.e [^\\.]
147 } else if (c=='?') {
148 regex.append("[^\\.]");
149 //else leave the chars as they occur in the pattern
150 } else
151 regex.append(c);
152 }
154 }
156 return regex.toString();
157 }
159 protected void unexpectedX(String token) throws SAXException {
160 errorHandler.error(
161 new SAXParseException(Messages.UNEXPECTED_NGCC_TOKEN.format(
162 token, getLocator().getLineNumber(), getLocator().getColumnNumber()),
163 getLocator()));
164 }
165 }