001    package org.shiftone.jrat.core.spi;
002    
003    
004    import org.shiftone.jrat.core.MethodKey;
005    import org.shiftone.jrat.core.shutdown.ShutdownListener;
006    import org.shiftone.jrat.util.log.Logger;
007    
008    
009    /**
010     * @author jeff@shiftone.org (Jeff Drost)
011     */
012    public abstract class AbstractMethodHandlerFactory implements MethodHandlerFactory, ShutdownListener {
013    
014        private static final Logger LOG = Logger.getLogger(AbstractMethodHandlerFactory.class);
015        private static final String FACTORY_POSTFIX = "Factory";
016        private RuntimeContext context = null;
017        private String outputFile = getDefaultOutputFile();
018    
019        public abstract MethodHandler createMethodHandler(MethodKey methodKey);
020    
021    
022        // ------------------------------------------------------------
023        public RuntimeContext getContext() {
024            return context;
025        }
026    
027    
028        private String getDefaultOutputFile() {
029    
030            Class klass = this.getClass();
031            String klassName = klass.getName();
032            int lastDot = klassName.lastIndexOf(".");
033            String name = (lastDot == -1)
034                    ? klassName
035                    : klassName.substring(lastDot + 1);
036    
037            if (name.endsWith(FACTORY_POSTFIX)) {
038                name = name.substring(0, name.length() - FACTORY_POSTFIX.length());
039            }
040    
041            return name + ".jrat";
042        }
043    
044    
045        public void setOutputFile(String outputFile) {
046            this.outputFile = outputFile;
047        }
048    
049        public String getOutputFile() {
050            return outputFile;
051        }
052    
053    
054        // ------------------------------------------------------------
055        public void shutdown() {
056            LOG.info("shutdown");
057        }
058    
059    
060        public void flush() {
061            LOG.info("flush");
062        }
063    
064    
065        public void startup(RuntimeContext context) throws Exception {
066    
067            this.context = context;
068    
069            context.registerShutdownListener(this);
070        }
071    }