001 /** 002 * 003 * Licensed to the Apache Software Foundation (ASF) under one or more 004 * contributor license agreements. See the NOTICE file distributed with 005 * this work for additional information regarding copyright ownership. 006 * The ASF licenses this file to You under the Apache License, Version 2.0 007 * (the "License"); you may not use this file except in compliance with 008 * the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, software 013 * distributed under the License is distributed on an "AS IS" BASIS, 014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018 019 package org.apache.geronimo.deployment; 020 021 import java.util.Set; 022 import java.util.HashSet; 023 import java.util.Iterator; 024 import java.util.Collection; 025 import java.util.List; 026 import java.util.Collections; 027 028 import org.apache.geronimo.gbean.ReferenceCollection; 029 import org.apache.geronimo.gbean.ReferenceCollectionListener; 030 import org.apache.geronimo.gbean.ReferenceCollectionEvent; 031 import org.apache.geronimo.common.DeploymentException; 032 import org.apache.geronimo.kernel.repository.Environment; 033 import org.apache.xmlbeans.XmlObject; 034 035 /** 036 * @version $Rev: 470597 $ $Date: 2006-11-02 15:30:55 -0800 (Thu, 02 Nov 2006) $ 037 */ 038 public class NamespaceDrivenBuilderCollection { 039 040 private final Collection builders; 041 private final Set namespaces = new HashSet(); 042 043 public NamespaceDrivenBuilderCollection(Collection builders) { 044 this.builders = builders == null? Collections.EMPTY_SET: builders; 045 if (builders instanceof ReferenceCollection) { 046 ((ReferenceCollection)builders).addReferenceCollectionListener(new ReferenceCollectionListener() { 047 048 public void memberAdded(ReferenceCollectionEvent event) { 049 addBuilder(event.getMember()); 050 } 051 052 public void memberRemoved(ReferenceCollectionEvent event) { 053 Object builder = event.getMember(); 054 String namespace = ((NamespaceDrivenBuilder)builder).getNamespace(); 055 namespaces.remove(namespace); 056 } 057 }); 058 } 059 for (Iterator iterator = this.builders.iterator(); iterator.hasNext();) { 060 Object builder = iterator.next(); 061 addBuilder(builder); 062 } 063 } 064 065 private void addBuilder(Object builder) { 066 String namespace = ((NamespaceDrivenBuilder)builder).getNamespace(); 067 if (namespaces.contains(namespace)) { 068 throw new IllegalArgumentException("Duplicate namespace in builder set: " + namespace); 069 } 070 namespaces.add(namespace); 071 } 072 073 public void buildEnvironment(XmlObject container, Environment environment) throws DeploymentException { 074 for (Iterator iterator = builders.iterator(); iterator.hasNext();) { 075 NamespaceDrivenBuilder builder = (NamespaceDrivenBuilder) iterator.next(); 076 builder.buildEnvironment(container, environment); 077 } 078 } 079 080 public void build(XmlObject container, DeploymentContext applicationContext, DeploymentContext moduleContext) throws DeploymentException { 081 for (Iterator iterator = builders.iterator(); iterator.hasNext();) { 082 NamespaceDrivenBuilder builder = (NamespaceDrivenBuilder) iterator.next(); 083 builder.build(container, applicationContext, moduleContext); 084 } 085 } 086 087 public void addLoaders(List loaderList) { 088 } 089 }