package org.springframework.roo.project; import org.apache.commons.lang3.Validate; import org.apache.felix.scr.annotations.Component; import org.apache.felix.scr.annotations.Reference; import org.apache.felix.scr.annotations.Service; import org.springframework.roo.metadata.MetadataService; import org.springframework.roo.model.JavaPackage; import org.springframework.roo.process.manager.FileManager; import org.springframework.roo.support.util.DomUtils; import org.springframework.roo.support.util.FileUtils; import org.springframework.roo.support.util.XmlUtils; import org.w3c.dom.Document; import org.w3c.dom.Element; /** * Provides Spring application context-related operations. * * @author Ben Alex * @author Stefan Schmidt * @since 1.0 */ @Component @Service public class ApplicationContextOperationsImpl implements ApplicationContextOperations { @Reference private FileManager fileManager; @Reference private MetadataService metadataService; @Reference private PathResolver pathResolver; public void createMiddleTierApplicationContext( final JavaPackage topLevelPackage, final String moduleName) { final ProjectMetadata projectMetadata = (ProjectMetadata) metadataService .get(ProjectMetadata.getProjectIdentifier(moduleName)); Validate.notNull(projectMetadata, "Project metadata required for module '" + moduleName + "'"); final Document document = XmlUtils.readXml(FileUtils.getInputStream( getClass(), "applicationContext-template.xml")); final Element root = document.getDocumentElement(); DomUtils.findFirstElementByName("context:component-scan", root) .setAttribute("base-package", topLevelPackage.getFullyQualifiedPackageName()); fileManager.createOrUpdateTextFileIfRequired(pathResolver .getIdentifier( Path.SPRING_CONFIG_ROOT.getModulePathId(moduleName), "applicationContext.xml"), XmlUtils .nodeToString(document), false); fileManager.scan(); } }