/*
* JBoss, Home of Professional Open Source
* Copyright 2006, JBoss Inc., and individual contributors as indicated
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.seam.ioc.microcontainer.xml;
import javax.xml.namespace.QName;
import org.jboss.kernel.plugins.deployment.xml.BeanAnnotationInterceptor;
import org.jboss.kernel.plugins.deployment.xml.BeanClassLoaderInterceptor;
import org.jboss.kernel.plugins.deployment.xml.BeanConstructorInterceptor;
import org.jboss.kernel.plugins.deployment.xml.BeanCreateInterceptor;
import org.jboss.kernel.plugins.deployment.xml.BeanDemandsInterceptor;
import org.jboss.kernel.plugins.deployment.xml.BeanDependsInterceptor;
import org.jboss.kernel.plugins.deployment.xml.BeanDestroyInterceptor;
import org.jboss.kernel.plugins.deployment.xml.BeanInstallInterceptor;
import org.jboss.kernel.plugins.deployment.xml.BeanPropertyInterceptor;
import org.jboss.kernel.plugins.deployment.xml.BeanSchemaBinding20;
import org.jboss.kernel.plugins.deployment.xml.BeanStartInterceptor;
import org.jboss.kernel.plugins.deployment.xml.BeanStopInterceptor;
import org.jboss.kernel.plugins.deployment.xml.BeanSuppliesInterceptor;
import org.jboss.kernel.plugins.deployment.xml.BeanUninstallInterceptor;
import org.jboss.xb.binding.sunday.unmarshalling.SchemaBinding;
import org.jboss.xb.binding.sunday.unmarshalling.SchemaBindingInitializer;
import org.jboss.xb.binding.sunday.unmarshalling.TypeBinding;
/**
* Seam schema initializer.
*
* @author <a href="mailto:ales.justin@jboss.com">Ales Justin</a>
*/
public class SeamSchemaInitializer implements SchemaBindingInitializer
{
/** The namespace */
public static final String SEAM_COMPONENT_NS = "urn:jboss:seam-components:1.0";
/** The bean binding */
public static final QName componentTypeQName = new QName(SEAM_COMPONENT_NS, "componentType");
/** The bean binding */
public static final QName lookupTypeQName = new QName(SEAM_COMPONENT_NS, "lookupType");
public SchemaBinding init(SchemaBinding schema)
{
// remove replace in xml binding
schema.setReplacePropertyRefs(false);
// init component
initComponent(schema);
// init lookup
initLookup(schema);
return schema;
}
protected void initComponent(SchemaBinding schema)
{
TypeBinding componentType = schema.getType(componentTypeQName);
// handler
componentType.setHandler(ComponentHandler.HANDLER);
// bean has a classloader
componentType.pushInterceptor(BeanSchemaBinding20.classloaderQName, BeanClassLoaderInterceptor.INTERCEPTOR);
// bean has a constructor
componentType.pushInterceptor(BeanSchemaBinding20.constructorQName, BeanConstructorInterceptor.INTERCEPTOR);
// bean has properties
componentType.pushInterceptor(BeanSchemaBinding20.propertyQName, BeanPropertyInterceptor.INTERCEPTOR);
// bean has a create
componentType.pushInterceptor(BeanSchemaBinding20.createQName, BeanCreateInterceptor.INTERCEPTOR);
// bean has a start
componentType.pushInterceptor(BeanSchemaBinding20.startQName, BeanStartInterceptor.INTERCEPTOR);
// bean has a stop
componentType.pushInterceptor(BeanSchemaBinding20.stopQName, BeanStopInterceptor.INTERCEPTOR);
// bean has a destroy
componentType.pushInterceptor(BeanSchemaBinding20.destroyQName, BeanDestroyInterceptor.INTERCEPTOR);
// bean has annotations
componentType.pushInterceptor(BeanSchemaBinding20.annotationQName, BeanAnnotationInterceptor.INTERCEPTOR);
// bean has installs
componentType.pushInterceptor(BeanSchemaBinding20.installQName, BeanInstallInterceptor.INTERCEPTOR);
// bean has uninstalls
componentType.pushInterceptor(BeanSchemaBinding20.uninstallQName, BeanUninstallInterceptor.INTERCEPTOR);
// bean has depends
componentType.pushInterceptor(BeanSchemaBinding20.dependsQName, BeanDependsInterceptor.INTERCEPTOR);
// bean has demands
componentType.pushInterceptor(BeanSchemaBinding20.demandQName, BeanDemandsInterceptor.INTERCEPTOR);
// bean has supplies
componentType.pushInterceptor(BeanSchemaBinding20.supplyQName, BeanSuppliesInterceptor.INTERCEPTOR);
}
protected void initLookup(SchemaBinding schema)
{
TypeBinding lookuptype = schema.getType(lookupTypeQName);
// handler
lookuptype.setHandler(LookupHandler.HANDLER);
}
}