|
From: Leandro R. S. C. <bas...@us...> - 2004-03-22 21:34:25
|
Update of /cvsroot/xingu/xingu/exintake/src/java/br/com/ibnetwork/xingu/exintake/impl In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31708/exintake/src/java/br/com/ibnetwork/xingu/exintake/impl Added Files: IntakeDefaultImpl.java Log Message: adding Extensible input taker --- NEW FILE: IntakeDefaultImpl.java --- /* * Created on Dec 22, 2003 * * To change the template for this generated file go to * Window>Preferences>Java>Code Generation>Code and Comments */ package br.com.ibnetwork.xingu.exintake.impl; import java.io.File; import java.io.FilenameFilter; import java.net.URL; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.apache.avalon.framework.component.ComponentException; import org.apache.avalon.framework.component.ComponentManager; import org.apache.avalon.framework.component.Composable; import org.apache.avalon.framework.activity.Initializable; import org.apache.avalon.framework.configuration.Configurable; import org.apache.avalon.framework.configuration.Configuration; import org.apache.avalon.framework.configuration.ConfigurationException; import org.apache.avalon.framework.thread.ThreadSafe; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.logging.Log; import org.xml.sax.helpers.DefaultHandler; import br.com.ibnetwork.xingu.chain.ChainManager; import br.com.ibnetwork.xingu.chain.ChainOfResponsibility; import br.com.ibnetwork.xingu.chainingcontenthandler.impl.ChainingContentHandler; import br.com.ibnetwork.xingu.exintake.Intake; import br.com.ibnetwork.xingu.exintake.IntakeException; import br.com.ibnetwork.xingu.exintake.model.Field; import br.com.ibnetwork.xingu.exintake.model.Group; import br.com.ibnetwork.xingu.exintake.model.IntakeModel; import br.com.ibnetwork.xingu.factory.ObjectFactory; import br.com.ibnetwork.xingu.logging.LoggerFactory; /** * @author neto * * To change the template for this generated type comment go to * Window>Preferences>Java>Code Generation>Code and Comments */ public class IntakeDefaultImpl implements Intake, ThreadSafe, Composable, Configurable , Initializable { private static final String FILE_ELEMENT = "file"; /** model */ private IntakeModel model; /** conf */ private List configurationFileNames; /** Components */ private ChainManager chainManager; private Log logger; private ObjectFactory factory; /* (non-Javadoc) * @see org.apache.avalon.framework.component.Composable#compose(org.apache.avalon.framework.component.ComponentManager) */ public void compose(ComponentManager manager) throws ComponentException { logger = ((LoggerFactory)manager.lookup(LoggerFactory.ROLE)) .getLoggerForClass(this.getClass().getName()); factory = (ObjectFactory) manager.lookup(ObjectFactory.ROLE); chainManager = (ChainManager) manager.lookup(ChainManager.ROLE); } /* (non-Javadoc) * @see org.apache.avalon.framework.configuration.Configurable#configure(org.apache.avalon.framework.configuration.Configuration) */ public void configure(Configuration conf) throws ConfigurationException { Configuration[] fileNames = conf.getChild("configurationFileNames").getChildren(); configurationFileNames = new ArrayList(fileNames.length); FilenameFilter filter = new Filter(); for (int i = 0; i < fileNames.length; i++) { String fileName = fileNames[i].getAttribute("name"); boolean reloadOnChange = fileNames[i].getAttributeAsBoolean("reload-on-change"); logger.info("Must read file ["+fileName+"] reload on change ["+reloadOnChange+"]"); if(FILE_ELEMENT.equals(fileNames[i].getName())) { //its a file configurationFileNames.add(fileName); } else { //its a directory String dirName = fileName; URL url = Thread.currentThread().getContextClassLoader().getResource(dirName); File dir = new File(url.getFile()); String[] files = dir.list(filter); for (int j = 0; j < files.length; j++) { String fileNameOnDir = files[j]; configurationFileNames.add(dirName + File.separator + fileNameOnDir); } } } } public void initialize() throws Exception { ChainOfResponsibility chain = chainManager.getChainingByName("intake"); SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser(); ChainingContentHandler handler = new ChainingContentHandler(chain); for (Iterator iter = configurationFileNames.iterator(); iter.hasNext();) { String element = (String) iter.next(); URL url = Thread.currentThread().getContextClassLoader().getResource(element); saxParser.parse( new File(url.getFile()), handler ); //join all files into the same model model = (IntakeModel)handler.getModel(); } } /* (non-Javadoc) * @see br.com.ibnetwork.xingu.exintake.Intake#get(java.lang.String) */ public Group get(String groupName) throws IntakeException { return model.getGroupByName(groupName.toLowerCase()); } /* (non-Javadoc) * @see br.com.ibnetwork.xingu.exintake.Intake#getGroupNames() */ public String[] getGroupNames() throws IntakeException { return model.getGroupNames(); } private class Filter implements FilenameFilter { /* (non-Javadoc) * @see java.io.FilenameFilter#accept(java.io.File, java.lang.String) */ public boolean accept(File dir, String name) { //accept all files ending with .xml return name.endsWith(".xml"); } } } |