/**
* EasyBeans
* Copyright 2013 Peergreen S.A.S.
* Contact: easybeans@ow2.org
*
* This library 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 any later version.
*
* This library 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 library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*/
package org.ow2.easybeans.deployment.metadata.ejbjar;
import java.util.List;
import org.ow2.easybeans.deployment.metadata.ejbjar.configurator.EasyBeansSessionConfigurator;
import org.ow2.easybeans.deployment.metadata.ejbjar.helper.MetadataSpecificMerge;
import org.ow2.easybeans.deployment.metadata.ejbjar.xml.EasyBeansDD;
import org.ow2.easybeans.deployment.metadata.ejbjar.xml.EasyBeansDeploymentDesc;
import org.ow2.util.archive.api.IArchive;
import org.ow2.util.ee.metadata.common.impl.xml.parsing.ParsingException;
import org.ow2.util.ee.metadata.ejbjar.api.IEjbJarMetadata;
import org.ow2.util.ee.metadata.ejbjar.impl.EjbJarMetadataFactory;
import org.ow2.util.ee.metadata.ejbjar.impl.configurator.EjbJarSessionConfigurator;
import org.ow2.util.log.Log;
import org.ow2.util.log.LogFactory;
import org.ow2.util.scan.api.IScanner;
/**
* @author Gael Lalire
*/
public class EasyBeansEjbJarMetadataFactory extends EjbJarMetadataFactory {
/**
* The logger.
*/
private static final Log logger = LogFactory.getLog(EasyBeansEjbJarMetadataFactory.class);
/**
* Constructor a scanner.
* @param scanner the scanner
*/
public EasyBeansEjbJarMetadataFactory(final IScanner scanner) {
super(scanner);
}
/**
* This method is called before metadata is filled.
*/
@Override
public void beforeScan(final IEjbJarMetadata ejbJarArchiveMetadata) {
EasyBeansDD easyBeansDD = null;
try {
easyBeansDD = EasyBeansDeploymentDesc.getEasyBeansDD(ejbJarArchiveMetadata.getArchive());
} catch (ParsingException e) {
logger.warn("Exception during parsing of easybeans.xml ", e);
easyBeansDD = null;
}
ejbJarArchiveMetadata.set(EasyBeansDD.class, easyBeansDD);
}
/**
* Flag the bean that are lifecycle beans.
*/
@Override
public void afterMerge(final IEjbJarMetadata ejbJarMetadata) {
EjbJarArchiveMetadata ejbJarArchiveMetadata = ejbJarMetadata.as(EjbJarArchiveMetadata.class);
// Apply specific data for Beans
List<String> beanNames = ejbJarArchiveMetadata.getBeanNames();
for (String beanName : beanNames) {
List<String> keys = ejbJarArchiveMetadata.getClassesnameForBean(beanName);
for (String key : keys) {
EasyBeansEjbJarClassMetadata easyBeansEjbJarClassMetadata = ejbJarArchiveMetadata
.getClassForBean(beanName, key);
for (EasyBeansEjbJarMethodMetadata ejbJarMethodMetadata : easyBeansEjbJarClassMetadata.getMethodMetadataCollection()) {
if (ejbJarMethodMetadata.isAroundInvoke()) {
easyBeansEjbJarClassMetadata.addAroundInvokeMethodMetadata(ejbJarMethodMetadata);
}
if (ejbJarMethodMetadata.isPostActivate()) {
easyBeansEjbJarClassMetadata.addPostActivateMethodMetadata(ejbJarMethodMetadata);
}
if (ejbJarMethodMetadata.isPostConstruct()) {
easyBeansEjbJarClassMetadata.addPostConstructMethodMetadata(ejbJarMethodMetadata);
}
if (ejbJarMethodMetadata.isPreDestroy()) {
easyBeansEjbJarClassMetadata.addPreDestroyMethodMetadata(ejbJarMethodMetadata);
}
if (ejbJarMethodMetadata.isPrePassivate()) {
easyBeansEjbJarClassMetadata.addPrePassivateMethodMetadata(ejbJarMethodMetadata);
}
}
}
}
// Apply specific data for other classes
for (EasyBeansEjbJarClassMetadata ejbClassMetadata : ejbJarArchiveMetadata.getEjbJarClassMetadataCollection()) {
for (EasyBeansEjbJarMethodMetadata ejbJarMethodMetadata : ejbClassMetadata.getMethodMetadataCollection()) {
if (ejbJarMethodMetadata.isAroundInvoke()) {
ejbClassMetadata.addAroundInvokeMethodMetadata(ejbJarMethodMetadata);
}
if (ejbJarMethodMetadata.isPostActivate()) {
ejbClassMetadata.addPostActivateMethodMetadata(ejbJarMethodMetadata);
}
if (ejbJarMethodMetadata.isPostConstruct()) {
ejbClassMetadata.addPostConstructMethodMetadata(ejbJarMethodMetadata);
}
if (ejbJarMethodMetadata.isPreDestroy()) {
ejbClassMetadata.addPreDestroyMethodMetadata(ejbJarMethodMetadata);
}
if (ejbJarMethodMetadata.isPrePassivate()) {
ejbClassMetadata.addPrePassivateMethodMetadata(ejbJarMethodMetadata);
}
}
}
// Merge specific stuff
MetadataSpecificMerge.merge(ejbJarArchiveMetadata.getEjbJarMetadata());
}
@Override
protected EjbJarSessionConfigurator createEjbJarSessionConfigurator(IArchive archive) {
return new EasyBeansSessionConfigurator(archive);
}
}