| 1 package nl.hippo.cocoon.profiling; 2 3 import java.io.IOException ; 4 import nl.hippo.util.logging.DebugLevelLogger; 5 import nl.hippo.util.logging.ErrorLevelLogger; 6 import nl.hippo.util.logging.FatalErrorLevelLogger; 7 import nl.hippo.util.logging.InfoLevelLogger; 8 import nl.hippo.util.logging.SpecificLogLevelLogger; 9 import nl.hippo.util.logging.WarnLevelLogger; 10 import org.apache.avalon.framework.activity.Disposable; 11 import org.apache.avalon.framework.parameters.ParameterException; 12 import org.apache.avalon.framework.service.ServiceException; 13 import org.apache.avalon.framework.service.ServiceManager; 14 import org.apache.avalon.framework.service.ServiceSelector; 15 import org.apache.avalon.framework.service.Serviceable; 16 import org.apache.cocoon.ProcessingException; 17 import org.apache.cocoon.environment.Request; 18 import org.apache.cocoon.generation.AbstractGenerator; 19 import org.apache.cocoon.generation.Generator; 20 import org.xml.sax.SAXException ; 21 22 public class ProfilingGenerator extends AbstractGenerator implements Serviceable, Disposable 23 { 24 25 private ServiceManager m_manager; 26 27 private ServiceSelector m_generatorSelector; 28 29 public ProfilingGenerator() 30 { 31 super(); 32 } 33 34 public void generate() throws IOException , SAXException , ProcessingException 35 { 36 long start = System.currentTimeMillis(); 37 Generator delegate = null; 38 Request request = (Request) objectModel.get("request"); 39 String sitemapURI = request.getSitemapURI(); 40 SpecificLogLevelLogger logger = new DebugLevelLogger(getLogger()); 41 try 42 { 43 String logLevel = parameters.getParameter("loglevel"); 44 if (logLevel != null) 45 { 46 if (logLevel.equals("info")) 47 { 48 logger = new InfoLevelLogger(getLogger()); 49 } 50 else if (logLevel.equals("warn")) 51 { 52 logger = new WarnLevelLogger(getLogger()); 53 } 54 else if (logLevel.equals("error")) 55 { 56 logger = new ErrorLevelLogger(getLogger()); 57 } 58 else if (logLevel.equals("fatal")) 59 { 60 logger = new FatalErrorLevelLogger(getLogger()); 61 } 62 } 63 } 64 catch (ParameterException e) 65 { 66 } 68 try 69 { 70 delegate = (Generator) m_generatorSelector.select(parameters.getParameter("generator")); 71 delegate.setup(resolver, objectModel, source, parameters); 72 delegate.setConsumer(xmlConsumer); 73 delegate.generate(); 74 } 75 catch (ParameterException e) 76 { 77 throw new ProcessingException("Unable to get delegate generator", e); 78 } 79 catch (ServiceException e) 80 { 81 throw new ProcessingException("Unable to get delegate generator", e); 82 } 83 finally 84 { 85 if (logger.isEnabled()) 86 { 87 long end = System.currentTimeMillis(); 88 logger.log("Processing of " + sitemapURI + " took: " + (end - start) + "ms"); 89 } 90 if (delegate != null) 91 { 92 m_generatorSelector.release(delegate); 93 } 94 } 95 } 96 97 public void service(ServiceManager manager) throws ServiceException 98 { 99 m_manager = manager; 100 m_generatorSelector = (ServiceSelector) manager.lookup(Generator.ROLE + "Selector"); 101 } 102 103 public void dispose() 104 { 105 m_manager.release(m_generatorSelector); 106 m_manager = null; 107 } 108 109 } 110 | Popular Tags |