package com.innowhere.relproxy.impl.jproxy.shell; import com.innowhere.relproxy.RelProxyException; import com.innowhere.relproxy.impl.jproxy.JProxyConfigImpl; import com.innowhere.relproxy.impl.jproxy.core.clsmgr.cldesc.ClassDescriptorSourceScript; import com.innowhere.relproxy.impl.jproxy.core.clsmgr.FolderSourceList; import com.innowhere.relproxy.impl.jproxy.core.clsmgr.srcunit.SourceScriptRoot; import com.innowhere.relproxy.impl.jproxy.core.clsmgr.srcunit.SourceScriptRootInMemory; import com.innowhere.relproxy.impl.jproxy.shell.inter.JProxyShellProcessor; import java.util.LinkedList; /** * Alguna inspiración: http://groovy.codehaus.org/Groovy+Shell * * @author jmarranz */ public class JProxyShellInteractiveImpl extends JProxyShellImpl { protected boolean test = false; protected JProxyShellProcessor processor = new JProxyShellProcessor(this); protected ClassDescriptorSourceScript classDescSourceScript; public void init(String[] args) { this.classDescSourceScript = super.init(args, null); if (test) { processor.test(); return; } processor.loop(); } public ClassDescriptorSourceScript getClassDescriptorSourceScript() { return classDescSourceScript; } public SourceScriptRootInMemory getSourceScriptInMemory() { return (SourceScriptRootInMemory)classDescSourceScript.getSourceScript(); } @Override public ClassDescriptorSourceScript init(JProxyConfigImpl config,SourceScriptRoot scriptFile,ClassLoader classLoader) { ClassDescriptorSourceScript script = super.init(config,scriptFile, classLoader); this.test = config.isTest(); return script; } @Override protected void executeFirstTime(ClassDescriptorSourceScript scriptFileDesc,LinkedList<String> argsToScript,JProxyShellClassLoader classLoader) { // La primera vez el script es vacío, no hay nada que ejecutar } @Override protected void processConfigParams(String[] args,LinkedList<String> argsToScript,JProxyConfigImpl config) { super.processConfigParams(args, argsToScript, config); String classFolder = config.getClassFolder(); if (classFolder != null && !classFolder.trim().isEmpty()) throw new RelProxyException("cacheClassFolder is useless to execute in interactive mode"); } @Override protected SourceScriptRoot createSourceScriptRoot(String[] args,LinkedList<String> argsToScript,FolderSourceList folderSourceList) { return SourceScriptRootInMemory.createSourceScriptInMemory(""); // La primera vez no hace nada, sirve para "calentar" la app } @Override protected JProxyShellClassLoader getJProxyShellClassLoader(JProxyConfigImpl config) { // No hay classFolder => no hay necesidad de nuevo ClassLoader return null; } }