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.naming.deployment;
020
021 import java.util.Map;
022
023 import javax.xml.namespace.QName;
024
025 import org.apache.geronimo.j2ee.deployment.NamingBuilder;
026 import org.apache.geronimo.j2ee.deployment.Module;
027 import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
028 import org.apache.geronimo.kernel.repository.Environment;
029 import org.apache.geronimo.kernel.config.Configuration;
030 import org.apache.geronimo.common.DeploymentException;
031 import org.apache.geronimo.gbean.GBeanInfo;
032 import org.apache.geronimo.gbean.GBeanInfoBuilder;
033 import org.apache.xmlbeans.XmlObject;
034 import org.apache.xmlbeans.QNameSet;
035
036 /**
037 * @version $Rev: 470597 $ $Date: 2006-11-02 15:30:55 -0800 (Thu, 02 Nov 2006) $
038 */
039 public class UnavailableRefBuilder implements NamingBuilder {
040 private final QNameSet unavailableQNameSet;
041 private QName unavailableQName;
042
043 public UnavailableRefBuilder(String namespaceURI, String localPart) {
044 unavailableQName = new QName(namespaceURI, localPart);
045 unavailableQNameSet = QNameSet.singleton(unavailableQName);
046 }
047 public void buildEnvironment(XmlObject specDD, XmlObject plan, Environment environment) throws DeploymentException {
048 checkUnavailable(specDD);
049 }
050
051 private void checkUnavailable(XmlObject specDD) throws DeploymentException {
052 XmlObject[] specRefs = specDD.selectChildren(unavailableQNameSet);
053 if (specRefs.length > 0) {
054 throw new DeploymentException("This server cannot deploy references of type " + unavailableQName);
055 }
056 }
057
058 public void initContext(XmlObject specDD, XmlObject plan, Configuration localConfiguration, Configuration remoteConfiguration, Module module) throws DeploymentException {
059 checkUnavailable(specDD);
060 }
061
062 public void buildNaming(XmlObject specDD, XmlObject plan, Configuration localConfiguration, Configuration remoteConfiguration, Module module, Map componentContext) throws DeploymentException {
063 checkUnavailable(specDD);
064 }
065
066 public QNameSet getSpecQNameSet() {
067 return unavailableQNameSet;
068 }
069
070 public QNameSet getPlanQNameSet() {
071 return QNameSet.EMPTY;
072 }
073
074 public static final GBeanInfo GBEAN_INFO;
075
076 static {
077 GBeanInfoBuilder infoBuilder = GBeanInfoBuilder.createStatic(UnavailableRefBuilder.class, NameFactory.MODULE_BUILDER);
078 infoBuilder.addAttribute("specNamespaceURI", String.class, true, true);
079 infoBuilder.addAttribute("specLocalPart", String.class, true, true);
080
081 infoBuilder.setConstructor(new String[] {"specNamespaceURI", "specLocalPart"});
082
083 GBEAN_INFO = infoBuilder.getBeanInfo();
084 }
085
086 public static GBeanInfo getGBeanInfo() {
087 return GBEAN_INFO;
088 }
089 }