package org.xmlsh.sh.module;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.xmlsh.core.ScriptSource;
import org.xmlsh.sh.shell.SerializeOpts;
import org.xmlsh.util.JavaUtils;
import org.xmlsh.util.Util;
public class ModuleConfig {
private String mType;
private String mName ;
private List<URL> mClassPath;
private List<String> mPackages;
private List<URL> mModulePath;
private String mHelpURI;
private SerializeOpts mSerialOpts;
private URL mModuleRoot;
private String mModuleClass;
private String mModuleScriptName; // main script entry point
private ScriptSource mModuleScript; // main script entry point
// Additional class names to search
private List<String> mClassNames;
protected String getModuleScriptName() {
return mModuleScriptName;
}
protected void setModuleScriptName(String moduleScript) {
mModuleScriptName = moduleScript;
}
protected void setClassPath(List<URL> classPath) {
mClassPath = classPath;
}
protected void setModulePath(List<URL> modulePath) {
mModulePath = modulePath;
}
public List<String> getClassNames() {
return mClassNames;
}
public void setClassNames(List<String> classNames) {
mClassNames = classNames;
}
static Logger mLogger = LogManager.getLogger();
public ModuleConfig(String type) {
this.mType = type ;
}
@Deprecated
public ModuleConfig(String type , String name,
List<URL> classpath, SerializeOpts serialOpts) {
this( type,name,null,null,classpath, null , serialOpts);
}
public ModuleConfig(
String type ,
String name,
String modclass,
URL modRoot,
List<URL> classpath,
List<URL> modpath,
SerializeOpts serialOpts) {
this( type , name , modclass , modRoot , classpath , modpath , serialOpts , null , null );
}
public ModuleConfig(String type , String name, String modClass ,
URL modRoot, List<URL> classpath, List<URL> modpath,
SerializeOpts serialOpts, List<String> mPackages, String mHelpURI) {
mLogger.entry(type, name, classpath, modpath , serialOpts, mPackages, mHelpURI);
assert( serialOpts !=null);
assert( name != null );
assert( type != null );
this.mType =type ;
this.mName = name;
this.mModuleClass = modClass ;
this.mModuleRoot = modRoot ;
this.mClassPath = JavaUtils.uniqueList( classpath);
this.mModulePath = JavaUtils.uniqueList(modpath);
this.mSerialOpts = serialOpts;
this.mPackages = mPackages;
this.mHelpURI = mHelpURI;
}
public synchronized List<URL> getClassPath() {
return mClassPath;
}
public synchronized List<URL> getModulePath() {
return mModulePath;
}
public String getHelpURI() {
return mHelpURI;
}
public String getInputTextEncoding() {
return mSerialOpts.getInputTextEncoding();
}
public String getModuleClass() {
return mLogger.exit( mModuleClass);
}
public String getName() {
return mName;
}
public String getOutput_xml_encoding() {
return mSerialOpts.getOutput_xml_encoding();
}
public List<String> getPackages() {
return mPackages;
}
public SerializeOpts getSerialOpts() {
return mSerialOpts == null ? SerializeOpts.getShellLocalOpts() : mSerialOpts;
}
public String getType() {
return mType;
}
public void setHelpURI(String helpURI) {
mHelpURI = helpURI;
}
public void setModuleClass(String moduleClass) {
mLogger.entry(moduleClass);
mModuleClass = moduleClass;
}
public void setName(String name) {
this.mName = name;
}
public void setPackages(List<String> packages) {
mPackages = packages;
}
public void setSerialOpts(SerializeOpts serialOpts) {
mSerialOpts = serialOpts;
}
public void setType(String type) {
this.mType = type;
}
public synchronized boolean addClassPaths(List<URL> urls) {
if( Util.isEmpty(mClassPath)){
mClassPath = JavaUtils.uniqueList(urls);
return ! Util.isEmpty(mClassPath);
}
List<URL> newPath = new ArrayList<>( mClassPath );
if( ! newPath.addAll( urls ) )
return false ;
newPath = JavaUtils.uniqueList(newPath);
if( mClassPath.equals(newPath) )
return false ;
mClassPath = newPath ;
return true ;
}
public synchronized void addClassName(String clsname) {
if( mClassNames == null )
mClassNames = new ArrayList<>();
mClassNames.add( clsname );
}
protected void finalize() {
mModuleScript = null ;
}
public ScriptSource getModuleScript() {
return mModuleScript;
}
public void setModuleScript(ScriptSource moduleScript) {
mModuleScript = moduleScript;
}
public URL getModuleRoot() {
return mModuleRoot;
}
public void setModuleRoot(URL moduleRoot) {
mModuleRoot = moduleRoot;
}
}