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 }