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 }