001 /**
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017
018 package org.apache.geronimo.naming.deployment;
019
020 import java.util.Map;
021
022 import javax.xml.namespace.QName;
023
024 import org.apache.geronimo.j2ee.deployment.NamingBuilder;
025 import org.apache.geronimo.j2ee.deployment.Module;
026 import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
027 import org.apache.geronimo.kernel.repository.Environment;
028 import org.apache.geronimo.common.DeploymentException;
029 import org.apache.geronimo.gbean.GBeanInfo;
030 import org.apache.geronimo.gbean.GBeanInfoBuilder;
031 import org.apache.xmlbeans.XmlObject;
032 import org.apache.xmlbeans.QNameSet;
033
034 /**
035 * @version $Rev: 535381 $ $Date: 2007-05-04 17:04:18 -0400 (Fri, 04 May 2007) $
036 */
037 public class UnavailableRefBuilder implements NamingBuilder {
038 private final QNameSet unavailableQNameSet;
039 private QName unavailableQName;
040
041 public UnavailableRefBuilder(String namespaceURI, String localPart) {
042 unavailableQName = new QName(namespaceURI, localPart);
043 unavailableQNameSet = QNameSet.singleton(unavailableQName);
044 }
045 public void buildEnvironment(XmlObject specDD, XmlObject plan, Environment environment) throws DeploymentException {
046 if (specDD != null) {
047 checkUnavailable(specDD);
048 }
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, Module module) throws DeploymentException {
059 checkUnavailable(specDD);
060 }
061
062 public void buildNaming(XmlObject specDD, XmlObject plan, 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 }