FileDocCategorySizeDatePackage
PolicyMapBuilder.javaAPI DocExample4663Tue May 29 16:56:36 BST 2007com.sun.xml.ws.policy.jaxws

PolicyMapBuilder.java

/*
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
 * 
 * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
 * 
 * The contents of this file are subject to the terms of either the GNU
 * General Public License Version 2 only ("GPL") or the Common Development
 * and Distribution License("CDDL") (collectively, the "License").  You
 * may not use this file except in compliance with the License. You can obtain
 * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
 * or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
 * language governing permissions and limitations under the License.
 * 
 * When distributing the software, include this License Header Notice in each
 * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
 * Sun designates this particular file as subject to the "Classpath" exception
 * as provided by Sun in the GPL Version 2 section of the License file that
 * accompanied this code.  If applicable, add the following below the License
 * Header, with the fields enclosed by brackets [] replaced by your own
 * identifying information: "Portions Copyrighted [year]
 * [name of copyright owner]"
 * 
 * Contributor(s):
 * 
 * If you wish your version of this file to be governed by only the CDDL or
 * only the GPL Version 2, indicate your decision by adding "[Contributor]
 * elects to include this software in this distribution under the [CDDL or GPL
 * Version 2] license."  If you don't indicate a single choice of license, a
 * recipient has the option to distribute your version of this file under
 * either the CDDL, the GPL Version 2 or to extend the choice of license to
 * its licensees as provided above.  However, if you add GPL Version 2 code
 * and therefore, elected the GPL Version 2 license, then the option applies
 * only if the new code is made subject to such option by the copyright
 * holder.
 */
package com.sun.xml.ws.policy.jaxws;



import com.sun.xml.ws.policy.PolicyException;

import com.sun.xml.ws.policy.PolicyMap;

import com.sun.xml.ws.policy.PolicyMapExtender;

import com.sun.xml.ws.policy.PolicyMapMutator;

import java.util.Arrays;

import java.util.HashSet;

import java.util.LinkedList;

import java.util.List;



/**

 * Used for populating changes into PolicyMap. Once a PolicyMap is created

 * PolicyMapBuilder notifies all the registered WSPolicyBuilderHandler to populate

 * changes to the PolicyMap.

 *

 *

 * @author Jakub Podlesak (jakub.podlesak at sun.com)

 */

class PolicyMapBuilder {

    /**

     * policyBuilders should contain list of registered PolicyBuilders

     */

    private List<BuilderHandler> policyBuilders = new LinkedList<BuilderHandler>();

        

    /**

     * Creates a new instance of PolicyMapBuilder

     */

    PolicyMapBuilder() {

        // nothing to initialize

    }

        

    /**

     *     Registers another builder, which has to be notified after a new

     *     PolicyMap is created in order to populate it's changes.

     *

     */

    void registerHandler(final BuilderHandler builder){

        if (null != builder) {

            policyBuilders.add(builder);

        }

    }    

   

    /**

     * Iterates all the registered PolicyBuilders and lets them populate

     * their changes into PolicyMap. Registers mutators given as a parameter

     * with the newly created map.

     */

    PolicyMap getPolicyMap(final PolicyMapMutator... externalMutators) throws PolicyException{

        return getNewPolicyMap(externalMutators);

    }

    

    

    /**

     * Iterates all the registered PolicyBuilders and lets them populate

     * their changes into PolicyMap. Registers mutators from collection given as a parameter

     * with the newly created map.

     */

    private PolicyMap getNewPolicyMap(final PolicyMapMutator... externalMutators) throws PolicyException{

        final HashSet<PolicyMapMutator> mutators = new HashSet<PolicyMapMutator>();

        final PolicyMapExtender myExtender = PolicyMapExtender.createPolicyMapExtender();

        mutators.add(myExtender);

        if (null != externalMutators) {

            mutators.addAll(Arrays.asList(externalMutators));

        }

        final PolicyMap policyMap = PolicyMap.createPolicyMap(mutators);

        for(BuilderHandler builder : policyBuilders){

            builder.populate(myExtender);

        }

        return policyMap;

    }

    

    void unregisterAll() {

        this.policyBuilders = null;

    }    

}