src/share/jaxws_classes/com/sun/tools/internal/xjc/model/CCustomizations.java

Thu, 31 Aug 2017 15:18:52 +0800

author
aoqi
date
Thu, 31 Aug 2017 15:18:52 +0800
changeset 637
9c07ef4934dd
parent 0
373ffda63c9a
permissions
-rw-r--r--

merge

     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.xjc.model;
    28 import java.util.ArrayList;
    29 import java.util.Collection;
    31 import com.sun.tools.internal.xjc.Plugin;
    33 /**
    34  * Represents the list of {@link CPluginCustomization}s attached to a JAXB model component.
    35  *
    36  * <p>
    37  * When {@link Plugin}s register the customization namespace URIs through {@link Plugin#getCustomizationURIs()},
    38  * XJC will treat those URIs just like XJC's own extension "http://java.sun.com/xml/ns/xjc" and make them
    39  * available as DOM nodes through {@link CPluginCustomization}. A {@link Plugin} can then access
    40  * this information to change its behavior.
    41  *
    42  * @author Kohsuke Kawaguchi
    43  */
    44 public final class CCustomizations extends ArrayList<CPluginCustomization> {
    46     /**
    47      * All {@link CCustomizations} used by a {@link Model} form a single linked list
    48      * so that we can look for unacknowledged customizations later.
    49      *
    50      * @see CPluginCustomization#markAsAcknowledged()
    51      * @see #setParent(Model,CCustomizable)
    52      */
    53     /*package*/ CCustomizations next;
    55     /**
    56      * The owner model component that carries these customizations.
    57      */
    58     private CCustomizable owner;
    60     public CCustomizations() {
    61     }
    63     public CCustomizations(Collection<? extends CPluginCustomization> cPluginCustomizations) {
    64         super(cPluginCustomizations);
    65     }
    67     /*package*/ void setParent(Model model,CCustomizable owner) {
    68         if(this.owner!=null)     return;
    70 //        // loop check
    71 //        for( CCustomizations c = model.customizations; c!=null; c=c.next )
    72 //            assert c!=this;
    74         this.next = model.customizations;
    75         model.customizations = this;
    76         assert owner!=null;
    77         this.owner = owner;
    78     }
    80     /**
    81      * Gets the model component that carries this customization.
    82      *
    83      * @return never null.
    84      */
    85     public CCustomizable getOwner() {
    86         assert owner!=null;
    87         return owner;
    88     }
    90     /**
    91      * Finds the first {@link CPluginCustomization} that belongs to the given namespace URI.
    92      * @return null if not found
    93      */
    94     public CPluginCustomization find( String nsUri ) {
    95         for (CPluginCustomization p : this) {
    96             if(fixNull(p.element.getNamespaceURI()).equals(nsUri))
    97                 return p;
    98         }
    99         return null;
   100     }
   102     /**
   103      * Finds the first {@link CPluginCustomization} that belongs to the given namespace URI and the local name.
   104      * @return null if not found
   105      */
   106     public CPluginCustomization find( String nsUri, String localName ) {
   107         for (CPluginCustomization p : this) {
   108             if(fixNull(p.element.getNamespaceURI()).equals(nsUri)
   109             && fixNull(p.element.getLocalName()).equals(localName))
   110                 return p;
   111         }
   112         return null;
   113     }
   115     private String fixNull(String s) {
   116         if(s==null) return "";
   117         else        return s;
   118     }
   120     /**
   121      * Convenient singleton instance that represents an empty {@link CCustomizations}.
   122      */
   123     public static final CCustomizations EMPTY = new CCustomizations();
   125     /**
   126      * Merges two {@link CCustomizations} objects into one.
   127      */
   128     public static CCustomizations merge(CCustomizations lhs, CCustomizations rhs) {
   129         if(lhs==null || lhs.isEmpty())   return rhs;
   130         if(rhs==null || rhs.isEmpty())   return lhs;
   132         CCustomizations r = new CCustomizations(lhs);
   133         r.addAll(rhs);
   134         return r;
   135     }
   137     public boolean equals(Object o) {
   138         return this==o;
   139     }
   141     public int hashCode() {
   142         return System.identityHashCode(this);
   143     }
   144 }

mercurial