src/share/jaxws_classes/com/sun/tools/internal/jxc/NGCCRuntimeEx.java

Wed, 12 Jun 2013 14:47:09 +0100

author
mkos
date
Wed, 12 Jun 2013 14:47:09 +0100
changeset 384
8f2986ff0235
parent 368
0989ad8c0860
child 637
9c07ef4934dd
permissions
-rw-r--r--

8013021: Rebase 8005432 & 8003542 against the latest jdk8/jaxws
8003542: Improve processing of MTOM attachments
8005432: Update access to JAX-WS
Reviewed-by: mullan

     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 }

mercurial