001    package org.shiftone.jrat.inject.process;
002    
003    
004    import org.shiftone.jrat.inject.InjectorOptions;
005    import org.shiftone.jrat.inject.bytecode.Transformer;
006    import org.shiftone.jrat.util.io.IOUtil;
007    import org.shiftone.jrat.util.log.Logger;
008    
009    import java.io.File;
010    
011    
012    /**
013     * @author jeff@shiftone.org (Jeff Drost)
014     */
015    public class CompositeFileProcessor implements FileProcessor {
016    
017        private static final Logger LOG = Logger.getLogger(CompositeFileProcessor.class);
018        private final ClassFileProcessor classProcessor = new ClassFileProcessor();
019        private final ArchiveFileProcessor archiveProcessor = new ArchiveFileProcessor();
020        private final CopyFileProcessor fileProcessor = new CopyFileProcessor();
021        private final DirectoryFileProcessor directoryProcessor = new DirectoryFileProcessor(this);
022    
023        public void process(Transformer transformer, InjectorOptions options, File source, File target) {
024    
025            LOG.info("process " + source.getAbsolutePath() + " => " + target.getAbsolutePath());
026    
027            String ext = IOUtil.getExtention(source);
028    
029            if (ext != null) {
030                ext = ext.toLowerCase();
031            }
032    
033            LOG.debug("ext = >" + ext + "<");
034    
035            if (source.isDirectory()) {
036                LOG.debug("directoryProcessor");
037                directoryProcessor.process(transformer, options, source, target);
038            } else if ("class".equals(ext)) {
039                LOG.debug("classProcessor");
040                classProcessor.process(transformer, options, source, target);
041            } else if (archiveProcessor.isArchiveExtention(ext)) {
042                LOG.debug("archiveProcessor");
043                archiveProcessor.process(transformer, options, source, target);
044            } else {
045                LOG.debug("copy");
046                fileProcessor.processFile(transformer, source, target);
047            }
048        }
049    
050    
051    }