X4O: Fixed recursief debugging xml output
This commit is contained in:
parent
889e4b9eb8
commit
2819b36a45
37 changed files with 592 additions and 570 deletions
|
|
@ -148,22 +148,6 @@ public abstract class X4ODriver<T> {
|
||||||
return buildLanguage(getLanguageVersionDefault());
|
return buildLanguage(getLanguageVersionDefault());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Creates the X4OLanguageSession for the default language version.
|
|
||||||
* @return The created X4OLanguageSession.
|
|
||||||
*
|
|
||||||
final public X4OLanguageSession createLanguageSession() {
|
|
||||||
return createLanguageSession(getLanguageVersionDefault());
|
|
||||||
}
|
|
||||||
|
|
||||||
*
|
|
||||||
* Creates the X4OLanguageSession for the specified version.
|
|
||||||
* @param version The language version to create the context for.
|
|
||||||
* @return The created X4OLanguageSession.
|
|
||||||
*
|
|
||||||
final public X4OLanguageSession createLanguageSession(String version) {
|
|
||||||
return createLanguage(version).createLanguageSession();
|
|
||||||
}*/
|
|
||||||
|
|
||||||
|
|
||||||
// =============== Language Tasks
|
// =============== Language Tasks
|
||||||
|
|
|
||||||
|
|
@ -43,12 +43,10 @@ import org.x4o.xml.lang.X4OLanguage;
|
||||||
import org.x4o.xml.lang.X4OLanguageClassLoader;
|
import org.x4o.xml.lang.X4OLanguageClassLoader;
|
||||||
import org.x4o.xml.lang.X4OLanguageConfiguration;
|
import org.x4o.xml.lang.X4OLanguageConfiguration;
|
||||||
import org.x4o.xml.lang.phase.DefaultX4OPhaseManager;
|
import org.x4o.xml.lang.phase.DefaultX4OPhaseManager;
|
||||||
import org.x4o.xml.lang.phase.X4OPhaseException;
|
|
||||||
import org.x4o.xml.lang.phase.X4OPhaseLanguageInit;
|
import org.x4o.xml.lang.phase.X4OPhaseLanguageInit;
|
||||||
import org.x4o.xml.lang.phase.X4OPhaseLanguageRead;
|
import org.x4o.xml.lang.phase.X4OPhaseLanguageRead;
|
||||||
import org.x4o.xml.lang.phase.X4OPhaseLanguageWrite;
|
import org.x4o.xml.lang.phase.X4OPhaseLanguageWrite;
|
||||||
import org.x4o.xml.lang.phase.X4OPhaseManager;
|
import org.x4o.xml.lang.phase.X4OPhaseManager;
|
||||||
import org.x4o.xml.lang.phase.X4OPhaseType;
|
|
||||||
import org.x4o.xml.lang.task.X4OLanguageTask;
|
import org.x4o.xml.lang.task.X4OLanguageTask;
|
||||||
import org.xml.sax.Attributes;
|
import org.xml.sax.Attributes;
|
||||||
import org.xml.sax.InputSource;
|
import org.xml.sax.InputSource;
|
||||||
|
|
@ -128,11 +126,6 @@ public final class X4ODriverManager {
|
||||||
version = driver.getLanguageVersionDefault();
|
version = driver.getLanguageVersionDefault();
|
||||||
}
|
}
|
||||||
DefaultX4OLanguage result = new DefaultX4OLanguage(driver.buildLanguageConfiguration(), driver.buildPhaseManager(), driver.getLanguageName(), version);
|
DefaultX4OLanguage result = new DefaultX4OLanguage(driver.buildLanguageConfiguration(), driver.buildPhaseManager(), driver.getLanguageName(), version);
|
||||||
try {
|
|
||||||
result.getPhaseManager().runPhases(result.createLanguageSession(), X4OPhaseType.INIT); // TODO: fix phase to interface T
|
|
||||||
} catch (X4OPhaseException e) {
|
|
||||||
throw new RuntimeException(e); // TODO: change layer
|
|
||||||
}
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -75,12 +75,13 @@ public class EldModuleLoader implements X4OLanguageModuleLoader {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Loads the ELD language into the module.
|
* Loads the ELD language into the module.
|
||||||
* @param language The langauge to load for.
|
* @param session The session we run in.
|
||||||
* @param languageModule The module to load it in.
|
* @param language The local Language to load for.
|
||||||
|
* @param module The language module to load it into.
|
||||||
* @throws X4OLanguageModuleLoaderException When eld language could not be loaded.
|
* @throws X4OLanguageModuleLoaderException When eld language could not be loaded.
|
||||||
* @see org.x4o.xml.lang.X4OLanguageModuleLoader#loadLanguageModule(org.x4o.xml.lang.X4OLanguageLocal, org.x4o.xml.lang.X4OLanguageModuleLocal)
|
* @see org.x4o.xml.lang.X4OLanguageModuleLoader#loadLanguageModule(org.x4o.xml.lang.X4OLanguageLocal, org.x4o.xml.lang.X4OLanguageModuleLocal)
|
||||||
*/
|
*/
|
||||||
public void loadLanguageModule(X4OLanguageLocal language, X4OLanguageModuleLocal languageModule) throws X4OLanguageModuleLoaderException {
|
public void loadLanguageModule(X4OLanguageSession session, X4OLanguageLocal language, X4OLanguageModuleLocal module) throws X4OLanguageModuleLoaderException {
|
||||||
logger.fine("Loading name eld file from resource: " + eldResource);
|
logger.fine("Loading name eld file from resource: " + eldResource);
|
||||||
try {
|
try {
|
||||||
X4ODriver<?> driver = null;
|
X4ODriver<?> driver = null;
|
||||||
|
|
@ -90,19 +91,11 @@ public class EldModuleLoader implements X4OLanguageModuleLoader {
|
||||||
driver = X4ODriverManager.getX4ODriver(EldDriver.LANGUAGE_NAME);
|
driver = X4ODriverManager.getX4ODriver(EldDriver.LANGUAGE_NAME);
|
||||||
}
|
}
|
||||||
X4OReader<?> reader = driver.createReader();
|
X4OReader<?> reader = driver.createReader();
|
||||||
|
|
||||||
//X4OLanguageSession eldLang = driver.createLanguageSession(driver.getLanguageVersionDefault());
|
|
||||||
//X4OReader<?> reader = new DefaultX4OReader<Object>(eldLang);
|
|
||||||
|
|
||||||
reader.addELBeanInstance(EL_PARENT_LANGUAGE, language);
|
reader.addELBeanInstance(EL_PARENT_LANGUAGE, language);
|
||||||
reader.addELBeanInstance(EL_PARENT_LANGUAGE_MODULE, languageModule);
|
reader.addELBeanInstance(EL_PARENT_LANGUAGE_MODULE, module);
|
||||||
|
if (session.hasX4ODebugWriter()) {
|
||||||
reader.setProperty(DefaultX4OReader.DEBUG_OUTPUT_HANDLER, null);
|
reader.setProperty(DefaultX4OReader.DEBUG_OUTPUT_HANDLER, session.getX4ODebugWriter().getContentWriter());
|
||||||
|
}
|
||||||
//TODO: if (language.getLanguageConfiguration().getLanguagePropertyBoolean(X4OLanguageProperty.DEBUG_OUTPUT_ELD_PARSER)) {
|
|
||||||
// eldLang.setX4ODebugWriter(elementLanguage.getLanguageConfiguration().getX4ODebugWriter());
|
|
||||||
// }
|
|
||||||
|
|
||||||
reader.readResource(eldResource);
|
reader.readResource(eldResource);
|
||||||
} catch (X4OConnectionException e) {
|
} catch (X4OConnectionException e) {
|
||||||
throw new X4OLanguageModuleLoaderException(this,e.getMessage()+" while parsing: "+eldResource,e);
|
throw new X4OLanguageModuleLoaderException(this,e.getMessage()+" while parsing: "+eldResource,e);
|
||||||
|
|
|
||||||
|
|
@ -48,9 +48,11 @@ import org.x4o.xml.lang.X4OLanguageClassLoader;
|
||||||
import org.x4o.xml.lang.X4OLanguageModuleLoader;
|
import org.x4o.xml.lang.X4OLanguageModuleLoader;
|
||||||
import org.x4o.xml.lang.X4OLanguageModuleLoaderException;
|
import org.x4o.xml.lang.X4OLanguageModuleLoaderException;
|
||||||
import org.x4o.xml.lang.X4OLanguageModuleLocal;
|
import org.x4o.xml.lang.X4OLanguageModuleLocal;
|
||||||
|
import org.x4o.xml.lang.X4OLanguageSession;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* EldModuleLoaderCore provides a few basic elements for the core eld x4o language.
|
* EldModuleLoaderCore provides a few basic elements for the core eld x4o
|
||||||
|
* language.
|
||||||
*
|
*
|
||||||
* @author Willem Cazander
|
* @author Willem Cazander
|
||||||
* @version 1.0 Jan 11, 2009
|
* @version 1.0 Jan 11, 2009
|
||||||
|
|
@ -59,117 +61,122 @@ public class EldModuleLoaderCore implements X4OLanguageModuleLoader {
|
||||||
|
|
||||||
private Logger logger = null;
|
private Logger logger = null;
|
||||||
private static final String PP_CEL_PROVIDER_HOST = "cel.x4o.org";
|
private static final String PP_CEL_PROVIDER_HOST = "cel.x4o.org";
|
||||||
private static final String PP_CEL_XMLNS = "http://"+PP_CEL_PROVIDER_HOST+"/xml/ns/";
|
private static final String PP_CEL_XMLNS = "http://" + PP_CEL_PROVIDER_HOST + "/xml/ns/";
|
||||||
private static final String PP_CEL_XSD_FILE = "-1.0.xsd";
|
private static final String PP_CEL_XSD_FILE = "-1.0.xsd";
|
||||||
private static final String CEL_CORE = "cel-core";
|
private static final String CEL_CORE = "cel-core";
|
||||||
private static final String CEL_ROOT = "cel-root";
|
private static final String CEL_ROOT = "cel-root";
|
||||||
private static final String CEL_CORE_XSD_FILE = CEL_CORE+PP_CEL_XSD_FILE;
|
private static final String CEL_CORE_XSD_FILE = CEL_CORE + PP_CEL_XSD_FILE;
|
||||||
private static final String CEL_ROOT_XSD_FILE = CEL_ROOT+PP_CEL_XSD_FILE;
|
private static final String CEL_ROOT_XSD_FILE = CEL_ROOT + PP_CEL_XSD_FILE;
|
||||||
/** The cel core namespace uri. */
|
/** The cel core namespace uri. */
|
||||||
public static final String CEL_CORE_URI = PP_CEL_XMLNS+CEL_CORE;
|
public static final String CEL_CORE_URI = PP_CEL_XMLNS + CEL_CORE;
|
||||||
/** The cel root namespace uri. */
|
/** The cel root namespace uri. */
|
||||||
public static final String CEL_ROOT_URI = PP_CEL_XMLNS+CEL_ROOT;
|
public static final String CEL_ROOT_URI = PP_CEL_XMLNS + CEL_ROOT;
|
||||||
/** The cel core schema namespace uri. */
|
/** The cel core schema namespace uri. */
|
||||||
public static final String CEL_CORE_XSD_URI = CEL_CORE_URI+PP_CEL_XSD_FILE;
|
public static final String CEL_CORE_XSD_URI = CEL_CORE_URI + PP_CEL_XSD_FILE;
|
||||||
/** The cel root schema namespace uri. */
|
/** The cel root schema namespace uri. */
|
||||||
public static final String CEL_ROOT_XSD_URI = CEL_ROOT_URI+PP_CEL_XSD_FILE;
|
public static final String CEL_ROOT_XSD_URI = CEL_ROOT_URI + PP_CEL_XSD_FILE;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates the CEL module loader.
|
* Creates the CEL module loader.
|
||||||
*/
|
*/
|
||||||
public EldModuleLoaderCore() {
|
public EldModuleLoaderCore() {
|
||||||
logger = Logger.getLogger(EldModuleLoaderCore.class.getName());
|
logger = Logger.getLogger(EldModuleLoaderCore.class.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Loads the CEL language into the module.
|
* Loads the CEL language into the module.
|
||||||
* @param language The langauge to load for.
|
*
|
||||||
|
* @param session The session to run in.
|
||||||
|
* @param language The langauge to load for.
|
||||||
* @param languageModule The module to load it in.
|
* @param languageModule The module to load it in.
|
||||||
* @see org.x4o.xml.lang.X4OLanguageModuleLoader#loadLanguageModule(org.x4o.xml.lang.X4OLanguageLocal, org.x4o.xml.lang.X4OLanguageModuleLocald)
|
* @see org.x4o.xml.lang.X4OLanguageModuleLoader#loadLanguageModule(org.x4o.xml.lang.X4OLanguageLocal,
|
||||||
|
* org.x4o.xml.lang.X4OLanguageModuleLocald)
|
||||||
*/
|
*/
|
||||||
public void loadLanguageModule(X4OLanguageLocal language,X4OLanguageModuleLocal languageModule) throws X4OLanguageModuleLoaderException {
|
@Override
|
||||||
|
public void loadLanguageModule(X4OLanguageSession session, X4OLanguageLocal language, X4OLanguageModuleLocal languageModule) throws X4OLanguageModuleLoaderException {
|
||||||
|
|
||||||
// Config module meta data
|
// Config module meta data
|
||||||
configLanguageModule(languageModule);
|
configLanguageModule(languageModule);
|
||||||
|
|
||||||
// Config language
|
// Config language
|
||||||
addBindingHandler(languageModule,new ElementClassBindingHandler(),"cel-class-bind","Binds the ElementClass childeren.");
|
addBindingHandler(languageModule, new ElementClassBindingHandler(), "cel-class-bind", "Binds the ElementClass childeren.");
|
||||||
addBindingHandler(languageModule,new ElementModuleBindingHandler(),"cel-module-bind","Binds the LanguageModule childeren.");
|
addBindingHandler(languageModule, new ElementModuleBindingHandler(), "cel-module-bind", "Binds the LanguageModule childeren.");
|
||||||
addBindingHandler(languageModule,new ElementClassAttributeBindingHandler(),"cel-class-attr-bind","Binds the ElementClassAttribute childeren.");
|
addBindingHandler(languageModule, new ElementClassAttributeBindingHandler(), "cel-class-attr-bind", "Binds the ElementClassAttribute childeren.");
|
||||||
addBindingHandler(languageModule,new ElementInterfaceBindingHandler(),"cel-interface-bind","Binds the ElementInterface childeren.");
|
addBindingHandler(languageModule, new ElementInterfaceBindingHandler(), "cel-interface-bind", "Binds the ElementInterface childeren.");
|
||||||
addBindingHandler(languageModule,new ElementNamespaceBindingHandler(),"cel-namespace-bind","Binds the Namespace childeren.");
|
addBindingHandler(languageModule, new ElementNamespaceBindingHandler(), "cel-namespace-bind", "Binds the Namespace childeren.");
|
||||||
|
|
||||||
// Create cel-lang namespace in language
|
// Create cel-lang namespace in language
|
||||||
ElementNamespace namespace = createNamespaceContext(language,CEL_CORE,CEL_CORE_URI,CEL_CORE_XSD_URI,CEL_CORE_XSD_FILE,CEL_CORE);
|
ElementNamespace namespace = createNamespaceContext(language, CEL_CORE, CEL_CORE_URI, CEL_CORE_XSD_URI, CEL_CORE_XSD_FILE, CEL_CORE);
|
||||||
configElementClasses(language,namespace);
|
configElementClasses(language, namespace);
|
||||||
startAndAddNamespace(language,languageModule,namespace);
|
startAndAddNamespace(language, languageModule, namespace);
|
||||||
|
|
||||||
// Create cel-root namespace in language for schema support
|
// Create cel-root namespace in language for schema support
|
||||||
ElementNamespace namespaceRoot = createNamespaceContext(language,CEL_ROOT,CEL_ROOT_URI,CEL_ROOT_XSD_URI,CEL_ROOT_XSD_FILE,CEL_ROOT);
|
ElementNamespace namespaceRoot = createNamespaceContext(language, CEL_ROOT, CEL_ROOT_URI, CEL_ROOT_XSD_URI, CEL_ROOT_XSD_FILE, CEL_ROOT);
|
||||||
namespaceRoot.setLanguageRoot(true); // Only define single language root so xsd is (mostly) not cicle import.
|
namespaceRoot.setLanguageRoot(true); // Only define single language root so xsd is (mostly) not cicle import.
|
||||||
ElementClass rootElement = createElementClass(language,"module",language.getLanguageConfiguration().getDefaultElementLanguageModule(),ModuleElement.class,"The module tag is the root xml element for ELD language.");
|
ElementClass rootElement = createElementClass(language, "module", language.getLanguageConfiguration().getDefaultElementLanguageModule(), ModuleElement.class, "The module tag is the root xml element for ELD language.");
|
||||||
rootElement.addElementClassAttribute(createElementClassAttribute(language,"id",true,null));
|
rootElement.addElementClassAttribute(createElementClassAttribute(language, "id", true, null));
|
||||||
rootElement.addElementClassAttribute(createElementClassAttribute(language,"providerHost",true,null));
|
rootElement.addElementClassAttribute(createElementClassAttribute(language, "providerHost", true, null));
|
||||||
namespaceRoot.addElementClass(rootElement);
|
namespaceRoot.addElementClass(rootElement);
|
||||||
startAndAddNamespace(language,languageModule,namespaceRoot);
|
startAndAddNamespace(language, languageModule, namespaceRoot);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds only Element class beans which need extra meta info for schema.
|
* Adds only Element class beans which need extra meta info for schema.
|
||||||
|
*
|
||||||
* @param namespace The namespace to config.
|
* @param namespace The namespace to config.
|
||||||
* @param language The language to config for.
|
* @param language The language to config for.
|
||||||
* @throws X4OLanguageModuleLoaderException
|
* @throws X4OLanguageModuleLoaderException
|
||||||
*/
|
*/
|
||||||
private void configElementClasses(X4OLanguage language,ElementNamespace namespace) throws X4OLanguageModuleLoaderException {
|
private void configElementClasses(X4OLanguage language, ElementNamespace namespace) throws X4OLanguageModuleLoaderException {
|
||||||
ElementClass ec = null;
|
ElementClass ec = null;
|
||||||
|
|
||||||
namespace.addElementClass(createElementClass(language,"attribute",language.getLanguageConfiguration().getDefaultElementClassAttribute(),null,"Defines xml element attribute."));
|
namespace.addElementClass(createElementClass(language, "attribute", language.getLanguageConfiguration().getDefaultElementClassAttribute(), null, "Defines xml element attribute."));
|
||||||
|
|
||||||
ec = createElementClass(language,"attributeAlias",null,AttributeAliasElement.class,"Adds an attribute alias.");
|
ec = createElementClass(language, "attributeAlias", null, AttributeAliasElement.class, "Adds an attribute alias.");
|
||||||
ec.addElementClassAttribute(createElementClassAttribute(language,"name",true,null));
|
ec.addElementClassAttribute(createElementClassAttribute(language, "name", true, null));
|
||||||
ec.addElementParent(CEL_CORE_URI, "attribute");
|
ec.addElementParent(CEL_CORE_URI, "attribute");
|
||||||
namespace.addElementClass(ec);
|
namespace.addElementClass(ec);
|
||||||
|
|
||||||
namespace.addElementClass(createElementClass(language,"classConverter",ClassConverter.class,null,"Converts string attribute to java class instance."));
|
namespace.addElementClass(createElementClass(language, "classConverter", ClassConverter.class, null, "Converts string attribute to java class instance."));
|
||||||
|
|
||||||
ec = createElementClass(language,"namespace",language.getLanguageConfiguration().getDefaultElementNamespace(),null,"Defines an xml namespace.");
|
ec = createElementClass(language, "namespace", language.getLanguageConfiguration().getDefaultElementNamespace(), null, "Defines an xml namespace.");
|
||||||
ec.addElementClassAttribute(createElementClassAttribute(language,"uri",true,null));
|
ec.addElementClassAttribute(createElementClassAttribute(language, "uri", true, null));
|
||||||
namespace.addElementClass(ec);
|
namespace.addElementClass(ec);
|
||||||
|
|
||||||
ec = createElementClass(language,"element",language.getLanguageConfiguration().getDefaultElementClass(),null,"Defines xml element tag.");
|
ec = createElementClass(language, "element", language.getLanguageConfiguration().getDefaultElementClass(), null, "Defines xml element tag.");
|
||||||
ec.addElementClassAttribute(createElementClassAttribute(language,"objectClass",false,new ClassConverter()));
|
ec.addElementClassAttribute(createElementClassAttribute(language, "objectClass", false, new ClassConverter()));
|
||||||
ec.addElementClassAttribute(createElementClassAttribute(language,"elementClass",false,new ClassConverter()));
|
ec.addElementClassAttribute(createElementClassAttribute(language, "elementClass", false, new ClassConverter()));
|
||||||
namespace.addElementClass(ec);
|
namespace.addElementClass(ec);
|
||||||
|
|
||||||
ec = createElementClass(language,"elementInterface",language.getLanguageConfiguration().getDefaultElementInterface(),null,"Defines element interface class.");
|
ec = createElementClass(language, "elementInterface", language.getLanguageConfiguration().getDefaultElementInterface(), null, "Defines element interface class.");
|
||||||
ec.addElementClassAttribute(createElementClassAttribute(language,"interfaceClass",false,new ClassConverter()));
|
ec.addElementClassAttribute(createElementClassAttribute(language, "interfaceClass", false, new ClassConverter()));
|
||||||
namespace.addElementClass(ec);
|
namespace.addElementClass(ec);
|
||||||
|
|
||||||
ec = createElementClass(language,"bindingHandler",null,BeanElement.class,"Defines generic binding handler for languge.");
|
ec = createElementClass(language, "bindingHandler", null, BeanElement.class, "Defines generic binding handler for languge.");
|
||||||
ec.addElementParent(CEL_ROOT_URI, "module");
|
ec.addElementParent(CEL_ROOT_URI, "module");
|
||||||
ec.addElementClassAttribute(createElementClassAttribute(language,"id",true,null));
|
ec.addElementClassAttribute(createElementClassAttribute(language, "id", true, null));
|
||||||
ec.addElementClassAttribute(createElementClassAttribute(language,"bean.class",true,null));
|
ec.addElementClassAttribute(createElementClassAttribute(language, "bean.class", true, null));
|
||||||
namespace.addElementClass(ec);
|
namespace.addElementClass(ec);
|
||||||
|
|
||||||
ec = createElementClass(language,"namespaceAttribute",null,BeanElement.class,"Defines generic namespace attribute for language.");
|
ec = createElementClass(language, "namespaceAttribute", null, BeanElement.class, "Defines generic namespace attribute for language.");
|
||||||
ec.addElementParent(CEL_CORE_URI, "namespace");
|
ec.addElementParent(CEL_CORE_URI, "namespace");
|
||||||
ec.addElementClassAttribute(createElementClassAttribute(language,"bean.class",true,null));
|
ec.addElementClassAttribute(createElementClassAttribute(language, "bean.class", true, null));
|
||||||
namespace.addElementClass(ec);
|
namespace.addElementClass(ec);
|
||||||
|
|
||||||
ec = createElementClass(language,"configurator",null,BeanElement.class,"Define generic configurator for language.");
|
ec = createElementClass(language, "configurator", null, BeanElement.class, "Define generic configurator for language.");
|
||||||
ec.addElementParent(CEL_CORE_URI, "elementInterface");
|
ec.addElementParent(CEL_CORE_URI, "elementInterface");
|
||||||
ec.addElementParent(CEL_CORE_URI, "element");
|
ec.addElementParent(CEL_CORE_URI, "element");
|
||||||
ec.addElementClassAttribute(createElementClassAttribute(language,"bean.class",true,null));
|
ec.addElementClassAttribute(createElementClassAttribute(language, "bean.class", true, null));
|
||||||
ec.addElementClassAttribute(createElementClassAttribute(language,"configAction",false,null));
|
ec.addElementClassAttribute(createElementClassAttribute(language, "configAction", false, null));
|
||||||
namespace.addElementClass(ec);
|
namespace.addElementClass(ec);
|
||||||
|
|
||||||
ec = createElementClass(language,"configuratorGlobal",null,BeanElement.class,"Define generic global configuator for languge.");
|
ec = createElementClass(language, "configuratorGlobal", null, BeanElement.class, "Define generic global configuator for languge.");
|
||||||
ec.addElementParent(CEL_ROOT_URI, "module");
|
ec.addElementParent(CEL_ROOT_URI, "module");
|
||||||
ec.addElementClassAttribute(createElementClassAttribute(language,"bean.class",true,null));
|
ec.addElementClassAttribute(createElementClassAttribute(language, "bean.class", true, null));
|
||||||
ec.addElementClassAttribute(createElementClassAttribute(language,"configAction",false,null));
|
ec.addElementClassAttribute(createElementClassAttribute(language, "configAction", false, null));
|
||||||
namespace.addElementClass(ec);
|
namespace.addElementClass(ec);
|
||||||
|
|
||||||
ec = createElementClass(language,"description",null,DescriptionElement.class,"Adds description as text on all eld elements.");
|
ec = createElementClass(language, "description", null, DescriptionElement.class, "Adds description as text on all eld elements.");
|
||||||
ec.setSchemaContentBase("string");
|
ec.setSchemaContentBase("string");
|
||||||
ec.addElementParent(CEL_ROOT_URI, "module");
|
ec.addElementParent(CEL_ROOT_URI, "module");
|
||||||
ec.addElementParent(CEL_CORE_URI, "namespace");
|
ec.addElementParent(CEL_CORE_URI, "namespace");
|
||||||
|
|
@ -181,47 +188,44 @@ public class EldModuleLoaderCore implements X4OLanguageModuleLoader {
|
||||||
ec.addElementParent(CEL_CORE_URI, "element");
|
ec.addElementParent(CEL_CORE_URI, "element");
|
||||||
ec.addElementParent(CEL_CORE_URI, "attribute");
|
ec.addElementParent(CEL_CORE_URI, "attribute");
|
||||||
namespace.addElementClass(ec);
|
namespace.addElementClass(ec);
|
||||||
|
|
||||||
ec = createElementClass(language,"elementParent",null,ElementClassAddParentElement.class,"Added (meta) element parent.");
|
ec = createElementClass(language, "elementParent", null, ElementClassAddParentElement.class, "Added (meta) element parent.");
|
||||||
ec.addElementParent(CEL_CORE_URI, "element");
|
ec.addElementParent(CEL_CORE_URI, "element");
|
||||||
ec.addElementParent(CEL_CORE_URI, "elementInterface");
|
ec.addElementParent(CEL_CORE_URI, "elementInterface");
|
||||||
ec.addElementClassAttribute(createElementClassAttribute(language,"tag",true,null));
|
ec.addElementClassAttribute(createElementClassAttribute(language, "tag", true, null));
|
||||||
ec.addElementClassAttribute(createElementClassAttribute(language,"uri",false,null));
|
ec.addElementClassAttribute(createElementClassAttribute(language, "uri", false, null));
|
||||||
namespace.addElementClass(ec);
|
namespace.addElementClass(ec);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void configLanguageModule(X4OLanguageModuleLocal languageModule) {
|
private void configLanguageModule(X4OLanguageModuleLocal languageModule) {
|
||||||
languageModule.setId("cel-module");
|
languageModule.setId("cel-module");
|
||||||
languageModule.setProviderName("Core Element Languag Module");
|
languageModule.setProviderName("Core Element Languag Module");
|
||||||
languageModule.setProviderHost(PP_CEL_PROVIDER_HOST);
|
languageModule.setProviderHost(PP_CEL_PROVIDER_HOST);
|
||||||
languageModule.setDescription("Core Element Language Module Loader");
|
languageModule.setDescription("Core Element Language Module Loader");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void startAndAddNamespace(X4OLanguageLocal language,X4OLanguageModuleLocal languageModule,ElementNamespace namespace) throws X4OLanguageModuleLoaderException {
|
private void startAndAddNamespace(X4OLanguageLocal language, X4OLanguageModuleLocal languageModule, ElementNamespace namespace) throws X4OLanguageModuleLoaderException {
|
||||||
try {
|
try {
|
||||||
namespace.getElementNamespaceInstanceProvider().start(language, namespace);
|
namespace.getElementNamespaceInstanceProvider().start(language, namespace);
|
||||||
} catch (ElementNamespaceInstanceProviderException e) {
|
} catch (ElementNamespaceInstanceProviderException e) {
|
||||||
throw new X4OLanguageModuleLoaderException(this,"Error starting instance provider: "+e.getMessage(),e);
|
throw new X4OLanguageModuleLoaderException(this, "Error starting instance provider: " + e.getMessage(), e);
|
||||||
}
|
}
|
||||||
languageModule.addElementNamespace(namespace);
|
languageModule.addElementNamespace(namespace);
|
||||||
}
|
}
|
||||||
|
|
||||||
private ElementNamespace createNamespaceContext(X4OLanguageLocal language,String id,String uri,String schemaUri,String schemaResource,String schemaPrefix) throws X4OLanguageModuleLoaderException {
|
private ElementNamespace createNamespaceContext(X4OLanguageLocal language, String id, String uri, String schemaUri, String schemaResource, String schemaPrefix) throws X4OLanguageModuleLoaderException {
|
||||||
logger.finer("Creating "+language.getLanguageName()+" namespace.");
|
logger.finer("Creating " + language.getLanguageName() + " namespace.");
|
||||||
ElementNamespace namespace;
|
ElementNamespace namespace;
|
||||||
try {
|
try {
|
||||||
namespace = X4OLanguageClassLoader.newInstance(ElementNamespace.class, language.getLanguageConfiguration().getDefaultElementNamespace());
|
namespace = X4OLanguageClassLoader.newInstance(ElementNamespace.class, language.getLanguageConfiguration().getDefaultElementNamespace());
|
||||||
} catch (ClassNotFoundException e) {
|
} catch (ClassNotFoundException e) {
|
||||||
throw new X4OLanguageModuleLoaderException(this,e.getMessage(),e);
|
throw new X4OLanguageModuleLoaderException(this, e.getMessage(), e);
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
namespace.setElementNamespaceInstanceProvider(
|
namespace.setElementNamespaceInstanceProvider(X4OLanguageClassLoader.newInstance(ElementNamespaceInstanceProvider.class, language.getLanguageConfiguration().getDefaultElementNamespaceInstanceProvider()));
|
||||||
X4OLanguageClassLoader.newInstance(ElementNamespaceInstanceProvider.class, language.getLanguageConfiguration().getDefaultElementNamespaceInstanceProvider())
|
|
||||||
);
|
|
||||||
} catch (ClassNotFoundException e) {
|
} catch (ClassNotFoundException e) {
|
||||||
throw new X4OLanguageModuleLoaderException(this,e.getMessage(),e);
|
throw new X4OLanguageModuleLoaderException(this, e.getMessage(), e);
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace.setId(id);
|
namespace.setId(id);
|
||||||
namespace.setUri(uri);
|
namespace.setUri(uri);
|
||||||
namespace.setSchemaUri(schemaUri);
|
namespace.setSchemaUri(schemaUri);
|
||||||
|
|
@ -229,8 +233,8 @@ public class EldModuleLoaderCore implements X4OLanguageModuleLoader {
|
||||||
namespace.setSchemaPrefix(schemaPrefix);
|
namespace.setSchemaPrefix(schemaPrefix);
|
||||||
return namespace;
|
return namespace;
|
||||||
}
|
}
|
||||||
|
|
||||||
private ElementClass createElementClass(X4OLanguage language,String tag,Class<?> objectClass,Class<?> elementClass,String description) throws X4OLanguageModuleLoaderException {
|
private ElementClass createElementClass(X4OLanguage language, String tag, Class<?> objectClass, Class<?> elementClass, String description) throws X4OLanguageModuleLoaderException {
|
||||||
try {
|
try {
|
||||||
ElementClass result = X4OLanguageClassLoader.newInstance(ElementClass.class, language.getLanguageConfiguration().getDefaultElementClass());
|
ElementClass result = X4OLanguageClassLoader.newInstance(ElementClass.class, language.getLanguageConfiguration().getDefaultElementClass());
|
||||||
result.setId(tag);
|
result.setId(tag);
|
||||||
|
|
@ -239,43 +243,45 @@ public class EldModuleLoaderCore implements X4OLanguageModuleLoader {
|
||||||
result.setDescription(description);
|
result.setDescription(description);
|
||||||
return result;
|
return result;
|
||||||
} catch (ClassNotFoundException e) {
|
} catch (ClassNotFoundException e) {
|
||||||
throw new X4OLanguageModuleLoaderException(this,e.getMessage(),e);
|
throw new X4OLanguageModuleLoaderException(this, e.getMessage(), e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates new configed ElementClassAttribute instance.
|
* Creates new configed ElementClassAttribute instance.
|
||||||
* @param language The X4OLanguage to create from.
|
*
|
||||||
* @param name The name of the attribute.
|
* @param language The X4OLanguage to create from.
|
||||||
* @param required Is the attribute required.
|
* @param name The name of the attribute.
|
||||||
|
* @param required Is the attribute required.
|
||||||
* @param converter The converter for the attribute.
|
* @param converter The converter for the attribute.
|
||||||
* @return The new ElementClassAttribute instance.
|
* @return The new ElementClassAttribute instance.
|
||||||
* @throws X4OLanguageModuleLoaderException When class could not be created.
|
* @throws X4OLanguageModuleLoaderException When class could not be created.
|
||||||
*/
|
*/
|
||||||
private ElementClassAttribute createElementClassAttribute(X4OLanguage language,String name,boolean required,ObjectConverter converter) throws X4OLanguageModuleLoaderException {
|
private ElementClassAttribute createElementClassAttribute(X4OLanguage language, String name, boolean required, ObjectConverter converter) throws X4OLanguageModuleLoaderException {
|
||||||
try {
|
try {
|
||||||
ElementClassAttribute result = X4OLanguageClassLoader.newInstance(ElementClassAttribute.class, language.getLanguageConfiguration().getDefaultElementClassAttribute());
|
ElementClassAttribute result = X4OLanguageClassLoader.newInstance(ElementClassAttribute.class, language.getLanguageConfiguration().getDefaultElementClassAttribute());
|
||||||
result.setId(name);
|
result.setId(name);
|
||||||
if (required) {
|
if (required) {
|
||||||
result.setRequired(required);
|
result.setRequired(required);
|
||||||
}
|
}
|
||||||
if (converter!=null) {
|
if (converter != null) {
|
||||||
result.setObjectConverter(converter);
|
result.setObjectConverter(converter);
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
} catch (ClassNotFoundException e) {
|
} catch (ClassNotFoundException e) {
|
||||||
throw new X4OLanguageModuleLoaderException(this,e.getMessage(),e);
|
throw new X4OLanguageModuleLoaderException(this, e.getMessage(), e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds binding handler to module.
|
* Adds binding handler to module.
|
||||||
|
*
|
||||||
* @param languageModule The language module.
|
* @param languageModule The language module.
|
||||||
* @param handler The handler to add the the module.
|
* @param handler The handler to add the the module.
|
||||||
* @param id The handler id.
|
* @param id The handler id.
|
||||||
* @param description The handler descripion.
|
* @param description The handler descripion.
|
||||||
*/
|
*/
|
||||||
private void addBindingHandler(X4OLanguageModuleLocal languageModule,ElementBindingHandler handler,String id,String description) {
|
private void addBindingHandler(X4OLanguageModuleLocal languageModule, ElementBindingHandler handler, String id, String description) {
|
||||||
handler.setId(id);
|
handler.setId(id);
|
||||||
handler.setDescription(description);
|
handler.setDescription(description);
|
||||||
languageModule.addElementBindingHandler(handler);
|
languageModule.addElementBindingHandler(handler);
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,7 @@ import java.io.OutputStream;
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
import java.io.StringWriter;
|
import java.io.StringWriter;
|
||||||
import java.io.UnsupportedEncodingException;
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import org.x4o.sax3.SAX3WriterXml;
|
import org.x4o.sax3.SAX3WriterXml;
|
||||||
import org.x4o.sax3.io.ContentWriter;
|
import org.x4o.sax3.io.ContentWriter;
|
||||||
|
|
@ -36,6 +37,7 @@ import org.x4o.xml.lang.phase.X4OPhase;
|
||||||
import org.x4o.xml.lang.phase.X4OPhaseException;
|
import org.x4o.xml.lang.phase.X4OPhaseException;
|
||||||
import org.x4o.xml.lang.phase.X4OPhaseLanguageRead;
|
import org.x4o.xml.lang.phase.X4OPhaseLanguageRead;
|
||||||
import org.x4o.xml.lang.phase.X4OPhaseLanguageWrite;
|
import org.x4o.xml.lang.phase.X4OPhaseLanguageWrite;
|
||||||
|
import org.x4o.xml.lang.phase.X4OPhaseListener;
|
||||||
import org.xml.sax.SAXException;
|
import org.xml.sax.SAXException;
|
||||||
import org.xml.sax.helpers.AttributesImpl;
|
import org.xml.sax.helpers.AttributesImpl;
|
||||||
|
|
||||||
|
|
@ -46,59 +48,52 @@ import org.xml.sax.helpers.AttributesImpl;
|
||||||
* @version 1.0 Mar 14, 2014
|
* @version 1.0 Mar 14, 2014
|
||||||
*/
|
*/
|
||||||
public abstract class AbstractX4OConnectionDebug implements X4OConnection {
|
public abstract class AbstractX4OConnectionDebug implements X4OConnection {
|
||||||
|
|
||||||
private boolean debugStarted = false;
|
private boolean debugStarted = false;
|
||||||
private boolean debugAutoCloseOutputStream = true;
|
protected final static String ABSTRACT_DEBUG_OUTPUT_HANDLER = "debug/output-handler";
|
||||||
private OutputStream debugCloseOutputStream = null;
|
protected final static String ABSTRACT_DEBUG_OUTPUT_STREAM = "debug/output-stream";
|
||||||
protected final static String ABSTRACT_DEBUG_OUTPUT_HANDLER = "debug/output-handler";
|
|
||||||
protected final static String ABSTRACT_DEBUG_OUTPUT_STREAM = "debug/output-stream";
|
protected void debugStart(X4OLanguageSession languageSession, String debugHandlerKey, String debugStreamKey) throws UnsupportedEncodingException, SAXException {
|
||||||
protected final static String ABSTRACT_DEBUG_OUTPUT_STREAM_CLOSE = "debug/output-stream-close";
|
|
||||||
|
|
||||||
protected void debugStart(X4OLanguageSession languageSession,String debugHandlerKey,String debugStreamKey,String debugStreamCloseKey) throws UnsupportedEncodingException, SAXException {
|
|
||||||
debugAutoCloseOutputStream = (Boolean)getProperty(debugStreamCloseKey);
|
|
||||||
Object debugOutputHandler = getProperty(debugHandlerKey);
|
Object debugOutputHandler = getProperty(debugHandlerKey);
|
||||||
Object debugOutputStream = getProperty(debugStreamKey);
|
Object debugOutputStream = getProperty(debugStreamKey);
|
||||||
if (languageSession.getX4ODebugWriter()==null) {
|
// init debug infra
|
||||||
|
if (languageSession.getX4ODebugWriter() == null) {
|
||||||
ContentWriter xmlDebugWriter = null;
|
ContentWriter xmlDebugWriter = null;
|
||||||
if (debugOutputHandler instanceof ContentWriter) {
|
if (debugOutputHandler instanceof ContentWriter) {
|
||||||
xmlDebugWriter = (ContentWriter)debugOutputHandler;
|
xmlDebugWriter = (ContentWriter) debugOutputHandler;
|
||||||
} else if (debugOutputStream instanceof OutputStream) {
|
} else if (debugOutputStream instanceof OutputStream) {
|
||||||
debugCloseOutputStream = (OutputStream)debugOutputStream;
|
xmlDebugWriter = new SAX3WriterXml((OutputStream) debugOutputStream);
|
||||||
xmlDebugWriter = new SAX3WriterXml(debugCloseOutputStream);
|
|
||||||
}
|
|
||||||
if (xmlDebugWriter!=null) {
|
|
||||||
xmlDebugWriter.startDocument();
|
xmlDebugWriter.startDocument();
|
||||||
xmlDebugWriter.startPrefixMapping("debug", X4ODebugWriter.DEBUG_URI);
|
xmlDebugWriter.startPrefixMapping(X4ODebugWriter.DEBUG_URI_NS, X4ODebugWriter.DEBUG_URI);
|
||||||
X4ODebugWriter debugWriter = new X4ODebugWriter(xmlDebugWriter);
|
// We only close if we started it, this is for recursief debugging AND debug output stream.
|
||||||
X4OLanguageSessionLocal local = (X4OLanguageSessionLocal)languageSession;
|
|
||||||
local.setX4ODebugWriter(debugWriter);
|
|
||||||
|
|
||||||
// We only close if we started it, this is for recursief debugging.
|
|
||||||
debugStarted = true;
|
debugStarted = true;
|
||||||
}
|
}
|
||||||
|
if (xmlDebugWriter != null) {
|
||||||
|
X4ODebugWriter debugWriter = new X4ODebugWriter(xmlDebugWriter);
|
||||||
|
X4OLanguageSessionLocal local = (X4OLanguageSessionLocal) languageSession;
|
||||||
|
local.setX4ODebugWriter(debugWriter);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
// start debug language
|
||||||
// debug language
|
|
||||||
if (languageSession.hasX4ODebugWriter()) {
|
if (languageSession.hasX4ODebugWriter()) {
|
||||||
try {
|
try {
|
||||||
languageSession.getX4ODebugWriter().debugConnectionStart(languageSession, this);
|
languageSession.getX4ODebugWriter().debugConnectionStart(languageSession, this);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new SAXException(e);
|
throw new SAXException(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add debug phases for all phases
|
// Add debug phases for all phases
|
||||||
for (String key:languageSession.getLanguage().getPhaseManager().getPhaseKeys()) {
|
X4OLanguageSessionLocal local = (X4OLanguageSessionLocal) languageSession;
|
||||||
|
for (String key : languageSession.getLanguage().getPhaseManager().getPhaseKeys()) {
|
||||||
X4OPhase p = languageSession.getLanguage().getPhaseManager().getPhase(key);
|
X4OPhase p = languageSession.getLanguage().getPhaseManager().getPhase(key);
|
||||||
|
List<X4OPhaseListener> listeners = local.storePhaseListeners(p.getId());
|
||||||
p.addPhaseListener(languageSession.getX4ODebugWriter().createDebugX4OPhaseListener());
|
listeners.add(languageSession.getX4ODebugWriter().createDebugX4OPhaseListener());
|
||||||
|
|
||||||
if (shouldPrintTree(p)) {
|
if (shouldPrintTree(p)) {
|
||||||
p.addPhaseListener(languageSession.getX4ODebugWriter().createDebugPrintTreePhaseListener());
|
listeners.add(languageSession.getX4ODebugWriter().createDebugPrintTreePhaseListener());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean shouldPrintTree(X4OPhase p) {
|
private boolean shouldPrintTree(X4OPhase p) {
|
||||||
String phase = p.getId();
|
String phase = p.getId();
|
||||||
if (X4OPhaseLanguageWrite.WRITE_END.equals(phase)) {
|
if (X4OPhaseLanguageWrite.WRITE_END.equals(phase)) {
|
||||||
|
|
@ -118,22 +113,22 @@ public abstract class AbstractX4OConnectionDebug implements X4OConnection {
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void debugException(X4OLanguageSession languageSession,Exception e) throws X4OConnectionException {
|
protected void debugException(X4OLanguageSession languageSession, Exception e) throws X4OConnectionException {
|
||||||
if (!languageSession.hasX4ODebugWriter()) {
|
if (!languageSession.hasX4ODebugWriter()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
AttributesImpl atts = new AttributesImpl();
|
AttributesImpl atts = new AttributesImpl();
|
||||||
atts.addAttribute ("", "message", "", "", e.getMessage());
|
atts.addAttribute("", "message", "", "", e.getMessage());
|
||||||
if (e instanceof X4OPhaseException) {
|
if (e instanceof X4OPhaseException) {
|
||||||
atts.addAttribute ("", "phase", "", "", ((X4OPhaseException)e).getX4OPhaseHandler().getId());
|
atts.addAttribute("", "phase", "", "", ((X4OPhaseException) e).getX4OPhaseHandler().getId());
|
||||||
}
|
}
|
||||||
languageSession.getX4ODebugWriter().getContentWriter().startElement(X4ODebugWriter.DEBUG_URI, "exceptionStackTrace", "", atts);
|
languageSession.getX4ODebugWriter().getContentWriter().startElement(X4ODebugWriter.DEBUG_URI, "exceptionStackTrace", "", atts);
|
||||||
StringWriter writer = new StringWriter();
|
StringWriter writer = new StringWriter();
|
||||||
PrintWriter printer = new PrintWriter(writer);
|
PrintWriter printer = new PrintWriter(writer);
|
||||||
printer.append('\n');
|
printer.append('\n');
|
||||||
if (e.getCause()==null) {
|
if (e.getCause() == null) {
|
||||||
e.printStackTrace(printer);
|
e.printStackTrace(printer);
|
||||||
} else {
|
} else {
|
||||||
e.getCause().printStackTrace(printer);
|
e.getCause().printStackTrace(printer);
|
||||||
|
|
@ -142,10 +137,10 @@ public abstract class AbstractX4OConnectionDebug implements X4OConnection {
|
||||||
languageSession.getX4ODebugWriter().getContentWriter().characters(stack, 0, stack.length);
|
languageSession.getX4ODebugWriter().getContentWriter().characters(stack, 0, stack.length);
|
||||||
languageSession.getX4ODebugWriter().getContentWriter().endElement(X4ODebugWriter.DEBUG_URI, "exceptionStackTrace", "");
|
languageSession.getX4ODebugWriter().getContentWriter().endElement(X4ODebugWriter.DEBUG_URI, "exceptionStackTrace", "");
|
||||||
} catch (SAXException ee) {
|
} catch (SAXException ee) {
|
||||||
throw new X4OConnectionException("Error while writing debug; "+ee.getMessage(),ee);
|
throw new X4OConnectionException("Error while writing debug; " + ee.getMessage(), ee);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void debugStop(X4OLanguageSession languageSession) throws X4OConnectionException {
|
protected void debugStop(X4OLanguageSession languageSession) throws X4OConnectionException {
|
||||||
if (!languageSession.hasX4ODebugWriter()) {
|
if (!languageSession.hasX4ODebugWriter()) {
|
||||||
return;
|
return;
|
||||||
|
|
@ -155,20 +150,12 @@ public abstract class AbstractX4OConnectionDebug implements X4OConnection {
|
||||||
if (!debugStarted) {
|
if (!debugStarted) {
|
||||||
return; // not in this instance started so no stopping then.
|
return; // not in this instance started so no stopping then.
|
||||||
}
|
}
|
||||||
languageSession.getX4ODebugWriter().getContentWriter().endPrefixMapping("debug");
|
languageSession.getX4ODebugWriter().getContentWriter().endPrefixMapping(X4ODebugWriter.DEBUG_URI_NS);
|
||||||
languageSession.getX4ODebugWriter().getContentWriter().endDocument();
|
languageSession.getX4ODebugWriter().getContentWriter().endDocument();
|
||||||
if (debugCloseOutputStream==null) {
|
|
||||||
return; // we have handler
|
|
||||||
}
|
|
||||||
debugCloseOutputStream.flush();
|
|
||||||
if (!debugAutoCloseOutputStream) {
|
|
||||||
return; // no auto close
|
|
||||||
}
|
|
||||||
debugCloseOutputStream.close();
|
|
||||||
} catch (SAXException ee) {
|
} catch (SAXException ee) {
|
||||||
throw new X4OConnectionException("Error while closing debug; "+ee.getMessage(),ee);
|
throw new X4OConnectionException("Error while closing debug; " + ee.getMessage(), ee);
|
||||||
} catch (IOException ee) {
|
} catch (IOException ee) {
|
||||||
throw new X4OConnectionException("Error while closing debug; "+ee.getMessage(),ee);
|
throw new X4OConnectionException("Error while closing debug; " + ee.getMessage(), ee);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@
|
||||||
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
package org.x4o.xml.io;
|
package org.x4o.xml.io;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
|
|
@ -41,92 +41,98 @@ import org.xml.sax.SAXException;
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
abstract public class AbstractX4OReader<T> extends AbstractX4OReaderSession<T> implements X4OReader<T> {
|
abstract public class AbstractX4OReader<T> extends AbstractX4OReaderSession<T> implements X4OReader<T> {
|
||||||
|
|
||||||
public AbstractX4OReader(X4OLanguage language) {
|
public AbstractX4OReader(X4OLanguage language) {
|
||||||
super(language);
|
super(language);
|
||||||
}
|
}
|
||||||
|
|
||||||
public T read(InputStream input, String systemId, URL basePath) throws X4OConnectionException, SAXException, IOException {
|
public T read(InputStream input, String systemId, URL basePath) throws X4OConnectionException, SAXException, IOException {
|
||||||
try (X4OLanguageSession session = createLanguageSession()) {
|
try (X4OLanguageSession session = createLanguageSession()) {
|
||||||
readSession(session, input, systemId, basePath);
|
readSession(session, input, systemId, basePath);
|
||||||
return (T)session.getRootElement().getElementObject();
|
return (T) session.getRootElement().getElementObject();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reads the file fileName and reads it as an InputStream.
|
* Reads the file fileName and reads it as an InputStream.
|
||||||
* @param fileName The file name to read.
|
*
|
||||||
* @throws FileNotFoundException Is thrown is file is not found.
|
* @param fileName The file name to read.
|
||||||
* @throws X4OConnectionException Is thrown after x4o exception.
|
* @throws FileNotFoundException Is thrown is file is not found.
|
||||||
* @throws SAXException Is thrown after sax xml exception.
|
* @throws X4OConnectionException Is thrown after x4o exception.
|
||||||
* @throws IOException Is thrown after io exception.
|
* @throws SAXException Is thrown after sax xml exception.
|
||||||
|
* @throws IOException Is thrown after io exception.
|
||||||
* @see org.x4o.xml.io.X4OReaderSession#readSession(java.io.InputStream,java.lang.String,java.net.URL)
|
* @see org.x4o.xml.io.X4OReaderSession#readSession(java.io.InputStream,java.lang.String,java.net.URL)
|
||||||
*/
|
*/
|
||||||
public T readFile(String fileName) throws X4OConnectionException, SAXException, IOException, FileNotFoundException {
|
public T readFile(String fileName) throws X4OConnectionException, SAXException, IOException, FileNotFoundException {
|
||||||
try (X4OLanguageSession session = createLanguageSession()) {
|
try (X4OLanguageSession session = createLanguageSession()) {
|
||||||
readFileSession(session, fileName);
|
readFileSession(session, fileName);
|
||||||
return (T)session.getRootElement().getElementObject();
|
return (T) session.getRootElement().getElementObject();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reads the file and reads it as an InputStream.
|
* Reads the file and reads it as an InputStream.
|
||||||
* @param file The file to read.
|
*
|
||||||
* @throws FileNotFoundException Is thrown is file is not found.
|
* @param file The file to read.
|
||||||
* @throws X4OConnectionException Is thrown after x4o exception.
|
* @throws FileNotFoundException Is thrown is file is not found.
|
||||||
* @throws SAXException Is thrown after sax xml exception.
|
* @throws X4OConnectionException Is thrown after x4o exception.
|
||||||
* @throws IOException Is thrown after io exception.
|
* @throws SAXException Is thrown after sax xml exception.
|
||||||
|
* @throws IOException Is thrown after io exception.
|
||||||
* @see org.x4o.xml.io.X4OReaderSession#readSession(java.io.InputStream,java.lang.String,java.net.URL)
|
* @see org.x4o.xml.io.X4OReaderSession#readSession(java.io.InputStream,java.lang.String,java.net.URL)
|
||||||
*/
|
*/
|
||||||
public T readFile(File file) throws X4OConnectionException, SAXException, IOException, FileNotFoundException {
|
public T readFile(File file) throws X4OConnectionException, SAXException, IOException, FileNotFoundException {
|
||||||
try (X4OLanguageSession session = createLanguageSession()) {
|
try (X4OLanguageSession session = createLanguageSession()) {
|
||||||
readFileSession(session, file);
|
readFileSession(session, file);
|
||||||
return (T)session.getRootElement().getElementObject();
|
return (T) session.getRootElement().getElementObject();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* reads an resource locaction.
|
* reads an resource locaction.
|
||||||
* @param resourceName The resource to readr.
|
*
|
||||||
* @throws X4OConnectionException Is thrown after x4o exception.
|
* @param resourceName The resource to readr.
|
||||||
* @throws SAXException Is thrown after sax xml exception.
|
* @throws X4OConnectionException Is thrown after x4o exception.
|
||||||
* @throws IOException Is thrown after io exception.
|
* @throws SAXException Is thrown after sax xml exception.
|
||||||
|
* @throws IOException Is thrown after io exception.
|
||||||
* @see org.x4o.xml.io.X4OReaderSession#readSession(java.io.InputStream,java.lang.String,java.net.URL)
|
* @see org.x4o.xml.io.X4OReaderSession#readSession(java.io.InputStream,java.lang.String,java.net.URL)
|
||||||
*/
|
*/
|
||||||
public T readResource(String resourceName) throws X4OConnectionException, SAXException, IOException {
|
public T readResource(String resourceName) throws X4OConnectionException, SAXException, IOException {
|
||||||
try (X4OLanguageSession session = createLanguageSession()) {
|
try (X4OLanguageSession session = createLanguageSession()) {
|
||||||
readResourceSession(session, resourceName);
|
readResourceSession(session, resourceName);
|
||||||
return (T)session.getRootElement().getElementObject();
|
return (T) session.getRootElement().getElementObject();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Converts a String to a InputStream to is can me readd by SAX.
|
* Converts a String to a InputStream to is can me readd by SAX.
|
||||||
* @param xmlString The xml as String to read.
|
*
|
||||||
* @throws X4OConnectionException Is thrown after x4o exception.
|
* @param xmlString The xml as String to read.
|
||||||
* @throws SAXException Is thrown after sax xml exception.
|
* @throws X4OConnectionException Is thrown after x4o exception.
|
||||||
* @throws IOException Is thrown after io exception.
|
* @throws SAXException Is thrown after sax xml exception.
|
||||||
|
* @throws IOException Is thrown after io exception.
|
||||||
* @see org.x4o.xml.io.X4OReaderSession#readSession(java.io.InputStream,java.lang.String,java.net.URL)
|
* @see org.x4o.xml.io.X4OReaderSession#readSession(java.io.InputStream,java.lang.String,java.net.URL)
|
||||||
*/
|
*/
|
||||||
public T readString(String xmlString) throws X4OConnectionException, SAXException, IOException {
|
public T readString(String xmlString) throws X4OConnectionException, SAXException, IOException {
|
||||||
try (X4OLanguageSession session = createLanguageSession()) {
|
try (X4OLanguageSession session = createLanguageSession()) {
|
||||||
readStringSession(session, xmlString);
|
readStringSession(session, xmlString);
|
||||||
return (T)session.getRootElement().getElementObject();
|
return (T) session.getRootElement().getElementObject();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fetched the data direct from remote url to a InputStream to is can me readd by SAX.
|
* Fetched the data direct from remote url to a InputStream to is can me readd
|
||||||
* @param url The url to read.
|
* by SAX.
|
||||||
* @throws X4OConnectionException Is thrown after x4o exception.
|
*
|
||||||
* @throws SAXException Is thrown after sax xml exception.
|
* @param url The url to read.
|
||||||
* @throws IOException Is thrown after io exception.
|
* @throws X4OConnectionException Is thrown after x4o exception.
|
||||||
|
* @throws SAXException Is thrown after sax xml exception.
|
||||||
|
* @throws IOException Is thrown after io exception.
|
||||||
* @see org.x4o.xml.io.X4OReaderSession#readSession(java.io.InputStream,java.lang.String,java.net.URL)
|
* @see org.x4o.xml.io.X4OReaderSession#readSession(java.io.InputStream,java.lang.String,java.net.URL)
|
||||||
*/
|
*/
|
||||||
public T readUrl(URL url) throws X4OConnectionException,SAXException,IOException {
|
public T readUrl(URL url) throws X4OConnectionException, SAXException, IOException {
|
||||||
try (X4OLanguageSession session = createLanguageSession()) {
|
try (X4OLanguageSession session = createLanguageSession()) {
|
||||||
readUrlSession(session, url);
|
readUrlSession(session, url);
|
||||||
return (T)session.getRootElement().getElementObject();
|
return (T) session.getRootElement().getElementObject();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,20 +20,20 @@
|
||||||
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
package org.x4o.xml.io;
|
package org.x4o.xml.io;
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
|
|
||||||
import org.x4o.xml.lang.X4OLanguage;
|
import org.x4o.xml.lang.X4OLanguage;
|
||||||
import org.x4o.xml.lang.X4OLanguageClassLoader;
|
import org.x4o.xml.lang.X4OLanguageClassLoader;
|
||||||
import org.x4o.xml.lang.X4OLanguageSession;
|
import org.x4o.xml.lang.X4OLanguageSession;
|
||||||
import org.xml.sax.SAXException;
|
import org.xml.sax.SAXException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* AbstractX4OReaderSession
|
* AbstractX4OReaderSession
|
||||||
|
|
@ -43,7 +43,7 @@ import org.xml.sax.SAXException;
|
||||||
* @param <T> The root element object type.
|
* @param <T> The root element object type.
|
||||||
*/
|
*/
|
||||||
abstract public class AbstractX4OReaderSession<T> extends AbstractX4OConnection implements X4OReaderSession<T> {
|
abstract public class AbstractX4OReaderSession<T> extends AbstractX4OConnection implements X4OReaderSession<T> {
|
||||||
|
|
||||||
public AbstractX4OReaderSession(X4OLanguage language) {
|
public AbstractX4OReaderSession(X4OLanguage language) {
|
||||||
super(language);
|
super(language);
|
||||||
}
|
}
|
||||||
|
|
@ -54,56 +54,60 @@ abstract public class AbstractX4OReaderSession<T> extends AbstractX4OConnection
|
||||||
}
|
}
|
||||||
readFileSession(session, new File(fileName));
|
readFileSession(session, new File(fileName));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void readFileSession(X4OLanguageSession session, File file) throws X4OConnectionException, SAXException, IOException, FileNotFoundException {
|
public void readFileSession(X4OLanguageSession session, File file) throws X4OConnectionException, SAXException, IOException, FileNotFoundException {
|
||||||
if (file == null) {
|
if (file == null) {
|
||||||
throw new NullPointerException("Can't read null file.");
|
throw new NullPointerException("Can't read null file.");
|
||||||
}
|
}
|
||||||
if (file.exists() == false) {
|
if (file.exists() == false) {
|
||||||
throw new FileNotFoundException("File does not exists; "+file);
|
throw new FileNotFoundException("File does not exists; " + file);
|
||||||
}
|
}
|
||||||
if (file.canRead() == false) {
|
if (file.canRead() == false) {
|
||||||
throw new IOException("File exists but can't read file: "+file);
|
throw new IOException("File exists but can't read file: " + file);
|
||||||
}
|
}
|
||||||
URL basePath = new File(file.getAbsolutePath()).toURI().toURL();
|
URL basePath = new File(file.getAbsolutePath()).toURI().toURL();
|
||||||
try (InputStream inputStream = new FileInputStream(file)) {
|
try (InputStream inputStream = new FileInputStream(file)) {
|
||||||
readSession(session, inputStream,file.getAbsolutePath(),basePath);
|
readSession(session, inputStream, file.getAbsolutePath(), basePath);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void readResourceSession(X4OLanguageSession session, String resourceName) throws X4OConnectionException, SAXException, IOException {
|
public void readResourceSession(X4OLanguageSession session, String resourceName) throws X4OConnectionException, SAXException, IOException {
|
||||||
if (resourceName == null) {
|
if (resourceName == null) {
|
||||||
throw new NullPointerException("Can't read null resourceName from classpath.");
|
throw new NullPointerException("Can't read null resourceName from classpath.");
|
||||||
}
|
}
|
||||||
URL url = X4OLanguageClassLoader.getResource(resourceName);
|
URL url = X4OLanguageClassLoader.getResource(resourceName);
|
||||||
if (url == null) {
|
if (url == null) {
|
||||||
throw new NullPointerException("Could not find resource on classpath: "+resourceName);
|
throw new NullPointerException("Could not find resource on classpath: " + resourceName);
|
||||||
}
|
}
|
||||||
String baseUrl = url.toExternalForm();
|
String baseUrl = url.toExternalForm();
|
||||||
int lastSlash = baseUrl.lastIndexOf('/');
|
int lastSlash = baseUrl.lastIndexOf('/');
|
||||||
if (lastSlash > 0 && (lastSlash+1) < baseUrl.length()) {
|
if (lastSlash > 0 && (lastSlash + 1) < baseUrl.length()) {
|
||||||
baseUrl = baseUrl.substring(0,lastSlash+1);
|
baseUrl = baseUrl.substring(0, lastSlash + 1);
|
||||||
}
|
}
|
||||||
URL basePath = new URL(baseUrl);
|
URL basePath = new URL(baseUrl);
|
||||||
try (InputStream inputStream = X4OLanguageClassLoader.getResourceAsStream(resourceName)) {
|
try (InputStream inputStream = X4OLanguageClassLoader.getResourceAsStream(resourceName)) {
|
||||||
readSession(session, inputStream,url.toExternalForm(),basePath);
|
readSession(session, inputStream, url.toExternalForm(), basePath);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void readStringSession(X4OLanguageSession session, String xmlString) throws X4OConnectionException, SAXException, IOException {
|
public void readStringSession(X4OLanguageSession session, String xmlString) throws X4OConnectionException, SAXException, IOException {
|
||||||
if (xmlString == null) {
|
if (xmlString == null) {
|
||||||
throw new NullPointerException("Can't read null xml string.");
|
throw new NullPointerException("Can't read null xml string.");
|
||||||
}
|
}
|
||||||
URL basePath = new File(System.getProperty("user.dir")).toURI().toURL();
|
URL basePath = new File(System.getProperty("user.dir")).toURI().toURL();
|
||||||
String encoding = (String)getProperty(DefaultX4OReader.INPUT_ENCODING);
|
String encoding = (String) getProperty(DefaultX4OReader.INPUT_ENCODING);
|
||||||
readSession(session, new ByteArrayInputStream(xmlString.getBytes(encoding)),"inline-xml",basePath);
|
try (InputStream inputStream = new ByteArrayInputStream(xmlString.getBytes(encoding))) {
|
||||||
|
readSession(session, inputStream, "inline-xml", basePath);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void readUrlSession(X4OLanguageSession session, URL url) throws X4OConnectionException, SAXException, IOException {
|
public void readUrlSession(X4OLanguageSession session, URL url) throws X4OConnectionException, SAXException, IOException {
|
||||||
if (url == null) {
|
if (url == null) {
|
||||||
throw new NullPointerException("Can't read null url.");
|
throw new NullPointerException("Can't read null url.");
|
||||||
}
|
}
|
||||||
URL basePath = new URL(url.toExternalForm().substring(0,url.toExternalForm().length()-url.getFile().length()));
|
URL basePath = new URL(url.toExternalForm().substring(0, url.toExternalForm().length() - url.getFile().length()));
|
||||||
readSession(session, url.openStream(),url.toExternalForm(),basePath);
|
try (InputStream inputStream = url.openStream()) {
|
||||||
|
readSession(session, inputStream, url.toExternalForm(), basePath);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,7 @@ public abstract class AbstractX4OWriter<T> extends AbstractX4OWriterSession<T> i
|
||||||
public AbstractX4OWriter(X4OLanguage language) {
|
public AbstractX4OWriter(X4OLanguage language) {
|
||||||
super(language);
|
super(language);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected X4OLanguageSession createObjectContext(T object) throws SAXException {
|
protected X4OLanguageSession createObjectContext(T object) throws SAXException {
|
||||||
X4OLanguageSession context = createLanguageSession();
|
X4OLanguageSession context = createLanguageSession();
|
||||||
Element rootElement = null;
|
Element rootElement = null;
|
||||||
|
|
@ -59,26 +59,26 @@ public abstract class AbstractX4OWriter<T> extends AbstractX4OWriterSession<T> i
|
||||||
context.setRootElement(rootElement);
|
context.setRootElement(rootElement);
|
||||||
return context;
|
return context;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void write(T object,OutputStream output) throws X4OConnectionException,SAXException,IOException {
|
public void write(T object, OutputStream output) throws X4OConnectionException, SAXException, IOException {
|
||||||
try (X4OLanguageSession session = createObjectContext(object)) {
|
try (X4OLanguageSession session = createObjectContext(object)) {
|
||||||
writeSession(session, output);
|
writeSession(session, output);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void writeFile(T object,String fileName) throws X4OConnectionException,SAXException,IOException,FileNotFoundException {
|
public void writeFile(T object, String fileName) throws X4OConnectionException, SAXException, IOException, FileNotFoundException {
|
||||||
try (X4OLanguageSession session = createObjectContext(object)) {
|
try (X4OLanguageSession session = createObjectContext(object)) {
|
||||||
writeFileSession(session, fileName);
|
writeFileSession(session, fileName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void writeFile(T object,File file) throws X4OConnectionException,SAXException,IOException,FileNotFoundException {
|
public void writeFile(T object, File file) throws X4OConnectionException, SAXException, IOException, FileNotFoundException {
|
||||||
try (X4OLanguageSession session = createObjectContext(object)) {
|
try (X4OLanguageSession session = createObjectContext(object)) {
|
||||||
writeFileSession(session, file);
|
writeFileSession(session, file);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public String writeString(T object) throws X4OConnectionException,SAXException,IOException,FileNotFoundException {
|
public String writeString(T object) throws X4OConnectionException, SAXException, IOException, FileNotFoundException {
|
||||||
try (X4OLanguageSession session = createObjectContext(object)) {
|
try (X4OLanguageSession session = createObjectContext(object)) {
|
||||||
return writeStringSession(session);
|
return writeStringSession(session);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -45,27 +45,27 @@ public abstract class AbstractX4OWriterSession<T> extends AbstractX4OConnection
|
||||||
public AbstractX4OWriterSession(X4OLanguage language) {
|
public AbstractX4OWriterSession(X4OLanguage language) {
|
||||||
super(language);
|
super(language);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void writeFileSession(X4OLanguageSession languageSession,String fileName) throws X4OConnectionException,SAXException,IOException {
|
public void writeFileSession(X4OLanguageSession languageSession, String fileName) throws X4OConnectionException, SAXException, IOException {
|
||||||
if (fileName == null) {
|
if (fileName == null) {
|
||||||
throw new NullPointerException("Can't convert null fileName to file object.");
|
throw new NullPointerException("Can't convert null fileName to file object.");
|
||||||
}
|
}
|
||||||
writeFileSession(languageSession,new File(fileName));
|
writeFileSession(languageSession, new File(fileName));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void writeFileSession(X4OLanguageSession languageSession,File file) throws X4OConnectionException,SAXException,IOException {
|
public void writeFileSession(X4OLanguageSession languageSession, File file) throws X4OConnectionException, SAXException, IOException {
|
||||||
if (file == null) {
|
if (file == null) {
|
||||||
throw new NullPointerException("Can't read null file.");
|
throw new NullPointerException("Can't read null file.");
|
||||||
}
|
}
|
||||||
try (OutputStream outputStream = new FileOutputStream(file)) {
|
try (OutputStream outputStream = new FileOutputStream(file)) {
|
||||||
writeSession(languageSession,outputStream);
|
writeSession(languageSession, outputStream);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public String writeStringSession(X4OLanguageSession languageSession) throws X4OConnectionException,SAXException,IOException {
|
public String writeStringSession(X4OLanguageSession languageSession) throws X4OConnectionException, SAXException, IOException {
|
||||||
ByteArrayOutputStream out = new ByteArrayOutputStream(4096);
|
ByteArrayOutputStream out = new ByteArrayOutputStream(4096);
|
||||||
writeSession(languageSession, out);
|
writeSession(languageSession, out);
|
||||||
String encoding = (String)getProperty(SAX3WriterXml.OUTPUT_ENCODING);
|
String encoding = (String) getProperty(SAX3WriterXml.OUTPUT_ENCODING);
|
||||||
return out.toString(encoding);
|
return out.toString(encoding);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -38,6 +38,7 @@ import org.x4o.sax3.io.SAX3PropertyConfig;
|
||||||
import org.x4o.sax3.io.SAX3XMLConstants;
|
import org.x4o.sax3.io.SAX3XMLConstants;
|
||||||
import org.x4o.sax3.io.SAX3PropertyConfig.PropertyConfigItem;
|
import org.x4o.sax3.io.SAX3PropertyConfig.PropertyConfigItem;
|
||||||
import org.x4o.xml.lang.X4OLanguage;
|
import org.x4o.xml.lang.X4OLanguage;
|
||||||
|
import org.x4o.xml.lang.X4OLanguageLocal;
|
||||||
import org.x4o.xml.lang.X4OLanguageSession;
|
import org.x4o.xml.lang.X4OLanguageSession;
|
||||||
import org.x4o.xml.lang.X4OLanguageSessionLocal;
|
import org.x4o.xml.lang.X4OLanguageSessionLocal;
|
||||||
import org.x4o.xml.lang.phase.X4OPhaseType;
|
import org.x4o.xml.lang.phase.X4OPhaseType;
|
||||||
|
|
@ -75,10 +76,9 @@ public class DefaultX4OReader<T> extends AbstractX4OReader<T> {
|
||||||
public final static String VALIDATION_INPUT_SCHEMA = PROPERTY_CONTEXT_PREFIX + "validation/input-schema";
|
public final static String VALIDATION_INPUT_SCHEMA = PROPERTY_CONTEXT_PREFIX + "validation/input-schema";
|
||||||
public final static String DEBUG_OUTPUT_HANDLER = PROPERTY_CONTEXT_PREFIX + ABSTRACT_DEBUG_OUTPUT_HANDLER;
|
public final static String DEBUG_OUTPUT_HANDLER = PROPERTY_CONTEXT_PREFIX + ABSTRACT_DEBUG_OUTPUT_HANDLER;
|
||||||
public final static String DEBUG_OUTPUT_STREAM = PROPERTY_CONTEXT_PREFIX + ABSTRACT_DEBUG_OUTPUT_STREAM;
|
public final static String DEBUG_OUTPUT_STREAM = PROPERTY_CONTEXT_PREFIX + ABSTRACT_DEBUG_OUTPUT_STREAM;
|
||||||
public final static String DEBUG_OUTPUT_STREAM_CLOSE = PROPERTY_CONTEXT_PREFIX + ABSTRACT_DEBUG_OUTPUT_STREAM_CLOSE;
|
|
||||||
|
|
||||||
static {
|
static {
|
||||||
DEFAULT_PROPERTY_CONFIG = new SAX3PropertyConfig(true,null,PROPERTY_CONTEXT_PREFIX,
|
DEFAULT_PROPERTY_CONFIG = new SAX3PropertyConfig(true, null, PROPERTY_CONTEXT_PREFIX,
|
||||||
new PropertyConfigItem(SAX_ERROR_HANDLER,ErrorHandler.class),
|
new PropertyConfigItem(SAX_ERROR_HANDLER,ErrorHandler.class),
|
||||||
new PropertyConfigItem(SAX_ENTITY_RESOLVER,EntityResolver.class),
|
new PropertyConfigItem(SAX_ENTITY_RESOLVER,EntityResolver.class),
|
||||||
new PropertyConfigItem(DOC_EMPTY_NAMESPACE_URI,String.class),
|
new PropertyConfigItem(DOC_EMPTY_NAMESPACE_URI,String.class),
|
||||||
|
|
@ -93,18 +93,20 @@ public class DefaultX4OReader<T> extends AbstractX4OReader<T> {
|
||||||
new PropertyConfigItem(VALIDATION_INPUT_DOC,Boolean.class,false),
|
new PropertyConfigItem(VALIDATION_INPUT_DOC,Boolean.class,false),
|
||||||
new PropertyConfigItem(VALIDATION_INPUT_SCHEMA,Boolean.class,false),
|
new PropertyConfigItem(VALIDATION_INPUT_SCHEMA,Boolean.class,false),
|
||||||
new PropertyConfigItem(DEBUG_OUTPUT_HANDLER,ContentWriter.class),
|
new PropertyConfigItem(DEBUG_OUTPUT_HANDLER,ContentWriter.class),
|
||||||
new PropertyConfigItem(DEBUG_OUTPUT_STREAM,OutputStream.class),
|
new PropertyConfigItem(DEBUG_OUTPUT_STREAM,OutputStream.class)
|
||||||
new PropertyConfigItem(DEBUG_OUTPUT_STREAM_CLOSE,Boolean.class,true)
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public DefaultX4OReader(X4OLanguage language) {
|
public DefaultX4OReader(X4OLanguage language) {
|
||||||
super(language);
|
super(language);
|
||||||
propertyConfig = new SAX3PropertyConfig(DEFAULT_PROPERTY_CONFIG,PROPERTY_CONTEXT_PREFIX);
|
propertyConfig = new SAX3PropertyConfig(DEFAULT_PROPERTY_CONFIG, PROPERTY_CONTEXT_PREFIX);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see org.x4o.xml.io.AbstractX4OConnection#getPropertyConfig()
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
SAX3PropertyConfig getPropertyConfig() {
|
public SAX3PropertyConfig getPropertyConfig() {
|
||||||
return propertyConfig;
|
return propertyConfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -122,13 +124,13 @@ public class DefaultX4OReader<T> extends AbstractX4OReader<T> {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addELBeanInstance(String name, Object bean) {
|
public void addELBeanInstance(String name, Object bean) {
|
||||||
if (name==null) {
|
if (name == null) {
|
||||||
throw new NullPointerException("Can't add null name.");
|
throw new NullPointerException("Can't add null name.");
|
||||||
}
|
}
|
||||||
if (name.length()==0) {
|
if (name.length() == 0) {
|
||||||
throw new NullPointerException("Can't add empty name.");
|
throw new NullPointerException("Can't add empty name.");
|
||||||
}
|
}
|
||||||
if (bean==null) {
|
if (bean == null) {
|
||||||
throw new NullPointerException("Can't add null bean.");
|
throw new NullPointerException("Can't add null bean.");
|
||||||
}
|
}
|
||||||
elBeans.put(name, bean);
|
elBeans.put(name, bean);
|
||||||
|
|
@ -137,27 +139,30 @@ public class DefaultX4OReader<T> extends AbstractX4OReader<T> {
|
||||||
/**
|
/**
|
||||||
* Parses the input stream as a X4O document.
|
* Parses the input stream as a X4O document.
|
||||||
*/
|
*/
|
||||||
protected void readSession(X4OLanguageSession languageSession) throws X4OConnectionException,SAXException,IOException {
|
protected void readSession(X4OLanguageSession languageSession) throws X4OConnectionException, SAXException, IOException {
|
||||||
// Extra check if we have a language
|
// Extra check if we have a language
|
||||||
if (languageSession.getLanguage()==null) {
|
if (languageSession.getLanguage() == null) {
|
||||||
throw new X4OConnectionException("languageSession is broken getLanguage() returns null.");
|
throw new X4OConnectionException("languageSession is broken getLanguage() returns null.");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Insert stop/skip phase if we allowed to. TODO: move layer ?
|
// Insert stop/skip phase if we allowed to. TODO: move layer ?
|
||||||
if (languageSession instanceof X4OLanguageSessionLocal) {
|
if (languageSession instanceof X4OLanguageSessionLocal) {
|
||||||
X4OLanguageSessionLocal ll = (X4OLanguageSessionLocal)languageSession;
|
X4OLanguageSessionLocal ll = (X4OLanguageSessionLocal)languageSession;
|
||||||
if (phaseStop!=null) {
|
if (phaseStop != null) {
|
||||||
ll.setPhaseStop(phaseStop);
|
ll.setPhaseStop(phaseStop);
|
||||||
}
|
}
|
||||||
for (String phaseId:phaseSkip) {
|
for (String phaseId : phaseSkip) {
|
||||||
ll.addPhaseSkip(phaseId);
|
ll.addPhaseSkip(phaseId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// init debug
|
// init debug
|
||||||
debugStart(languageSession, DEBUG_OUTPUT_HANDLER, DEBUG_OUTPUT_STREAM, DEBUG_OUTPUT_STREAM_CLOSE);
|
debugStart(languageSession, DEBUG_OUTPUT_HANDLER, DEBUG_OUTPUT_STREAM);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
// Run init (auto once)
|
||||||
|
X4OLanguageLocal.class.cast(languageSession.getLanguage()).init(languageSession);
|
||||||
|
|
||||||
// Run document parsing
|
// Run document parsing
|
||||||
X4OContentParser parser = new X4OContentParser(propertyConfig);
|
X4OContentParser parser = new X4OContentParser(propertyConfig);
|
||||||
parser.parse(languageSession);
|
parser.parse(languageSession);
|
||||||
|
|
|
||||||
|
|
@ -46,6 +46,7 @@ import org.x4o.xml.element.ElementInterface;
|
||||||
import org.x4o.xml.element.ElementNamespace;
|
import org.x4o.xml.element.ElementNamespace;
|
||||||
import org.x4o.xml.element.ElementObjectPropertyValueException;
|
import org.x4o.xml.element.ElementObjectPropertyValueException;
|
||||||
import org.x4o.xml.lang.X4OLanguage;
|
import org.x4o.xml.lang.X4OLanguage;
|
||||||
|
import org.x4o.xml.lang.X4OLanguageLocal;
|
||||||
import org.x4o.xml.lang.X4OLanguageSession;
|
import org.x4o.xml.lang.X4OLanguageSession;
|
||||||
import org.x4o.xml.lang.X4OLanguageModule;
|
import org.x4o.xml.lang.X4OLanguageModule;
|
||||||
import org.x4o.xml.lang.phase.X4OPhaseException;
|
import org.x4o.xml.lang.phase.X4OPhaseException;
|
||||||
|
|
@ -76,17 +77,15 @@ public class DefaultX4OWriter<T> extends AbstractX4OWriter<T> {
|
||||||
public final static String SCHEMA_ROOT_URI = PROPERTY_CONTEXT_PREFIX+"schema/root-uri";
|
public final static String SCHEMA_ROOT_URI = PROPERTY_CONTEXT_PREFIX+"schema/root-uri";
|
||||||
public final static String DEBUG_OUTPUT_HANDLER = PROPERTY_CONTEXT_PREFIX + ABSTRACT_DEBUG_OUTPUT_HANDLER;
|
public final static String DEBUG_OUTPUT_HANDLER = PROPERTY_CONTEXT_PREFIX + ABSTRACT_DEBUG_OUTPUT_HANDLER;
|
||||||
public final static String DEBUG_OUTPUT_STREAM = PROPERTY_CONTEXT_PREFIX + ABSTRACT_DEBUG_OUTPUT_STREAM;
|
public final static String DEBUG_OUTPUT_STREAM = PROPERTY_CONTEXT_PREFIX + ABSTRACT_DEBUG_OUTPUT_STREAM;
|
||||||
public final static String DEBUG_OUTPUT_STREAM_CLOSE = PROPERTY_CONTEXT_PREFIX + ABSTRACT_DEBUG_OUTPUT_STREAM_CLOSE;
|
|
||||||
|
|
||||||
static {
|
static {
|
||||||
DEFAULT_PROPERTY_CONFIG = new SAX3PropertyConfig(true,SAX3WriterXml.DEFAULT_PROPERTY_CONFIG,PROPERTY_CONTEXT_PREFIX,
|
DEFAULT_PROPERTY_CONFIG = new SAX3PropertyConfig(true, SAX3WriterXml.DEFAULT_PROPERTY_CONFIG, PROPERTY_CONTEXT_PREFIX,
|
||||||
new PropertyConfigItem(true,OUTPUT_STREAM,OutputStream.class),
|
new PropertyConfigItem(true,OUTPUT_STREAM,OutputStream.class),
|
||||||
new PropertyConfigItem(OUTPUT_XDBX,Boolean.class,false),
|
new PropertyConfigItem(OUTPUT_XDBX,Boolean.class,false),
|
||||||
new PropertyConfigItem(SCHEMA_PRINT,Boolean.class,true),
|
new PropertyConfigItem(SCHEMA_PRINT,Boolean.class,true),
|
||||||
new PropertyConfigItem(SCHEMA_ROOT_URI,String.class),
|
new PropertyConfigItem(SCHEMA_ROOT_URI,String.class),
|
||||||
new PropertyConfigItem(DEBUG_OUTPUT_HANDLER,ContentWriter.class),
|
new PropertyConfigItem(DEBUG_OUTPUT_HANDLER,ContentWriter.class),
|
||||||
new PropertyConfigItem(DEBUG_OUTPUT_STREAM,OutputStream.class),
|
new PropertyConfigItem(DEBUG_OUTPUT_STREAM,OutputStream.class)
|
||||||
new PropertyConfigItem(DEBUG_OUTPUT_STREAM_CLOSE,Boolean.class,true)
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -112,8 +111,9 @@ public class DefaultX4OWriter<T> extends AbstractX4OWriter<T> {
|
||||||
public void writeSession(X4OLanguageSession languageSession, OutputStream output) throws X4OConnectionException,SAXException,IOException {
|
public void writeSession(X4OLanguageSession languageSession, OutputStream output) throws X4OConnectionException,SAXException,IOException {
|
||||||
setProperty(OUTPUT_STREAM, output);
|
setProperty(OUTPUT_STREAM, output);
|
||||||
addPhaseSkip(X4OPhaseLanguageWrite.WRITE_RELEASE);
|
addPhaseSkip(X4OPhaseLanguageWrite.WRITE_RELEASE);
|
||||||
debugStart(languageSession, DEBUG_OUTPUT_HANDLER, DEBUG_OUTPUT_STREAM, DEBUG_OUTPUT_STREAM_CLOSE);
|
debugStart(languageSession, DEBUG_OUTPUT_HANDLER, DEBUG_OUTPUT_STREAM);
|
||||||
try {
|
try {
|
||||||
|
X4OLanguageLocal.class.cast(languageSession.getLanguage()).init(languageSession);
|
||||||
languageSession.getLanguage().getPhaseManager().runPhases(languageSession, X4OPhaseType.XML_WRITE);
|
languageSession.getLanguage().getPhaseManager().runPhases(languageSession, X4OPhaseType.XML_WRITE);
|
||||||
} catch (X4OPhaseException e) {
|
} catch (X4OPhaseException e) {
|
||||||
throw new X4OConnectionException(e);
|
throw new X4OConnectionException(e);
|
||||||
|
|
@ -121,6 +121,7 @@ public class DefaultX4OWriter<T> extends AbstractX4OWriter<T> {
|
||||||
runWrite(languageSession);
|
runWrite(languageSession);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("resource") // caller closes the resource thus writerXML and writerXDBX are not closed
|
||||||
private void runWrite(X4OLanguageSession languageSession) throws X4OConnectionException {
|
private void runWrite(X4OLanguageSession languageSession) throws X4OConnectionException {
|
||||||
OutputStream out = (OutputStream)getProperty(OUTPUT_STREAM);
|
OutputStream out = (OutputStream)getProperty(OUTPUT_STREAM);
|
||||||
try {
|
try {
|
||||||
|
|
@ -169,7 +170,7 @@ public class DefaultX4OWriter<T> extends AbstractX4OWriter<T> {
|
||||||
debugException(languageSession, e);
|
debugException(languageSession, e);
|
||||||
throw new X4OConnectionException(e);
|
throw new X4OConnectionException(e);
|
||||||
} finally {
|
} finally {
|
||||||
if (out!=null) {
|
if (out != null) {
|
||||||
try {
|
try {
|
||||||
out.close();
|
out.close();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
|
|
@ -201,7 +202,7 @@ public class DefaultX4OWriter<T> extends AbstractX4OWriter<T> {
|
||||||
if (m.getName().equals("getClass")) {
|
if (m.getName().equals("getClass")) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (m.getName().startsWith("get")==false) {
|
if (m.getName().startsWith("get") == false) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
String name = m.getName().substring(3, 4).toLowerCase() + m.getName().substring(4);
|
String name = m.getName().substring(3, 4).toLowerCase() + m.getName().substring(4);
|
||||||
|
|
@ -233,7 +234,7 @@ public class DefaultX4OWriter<T> extends AbstractX4OWriter<T> {
|
||||||
private void writeTree(ContentWriter writer, Element element, boolean isRoot) throws SAXException, ElementObjectPropertyValueException {
|
private void writeTree(ContentWriter writer, Element element, boolean isRoot) throws SAXException, ElementObjectPropertyValueException {
|
||||||
List<AttributeEntry> attr = new ArrayList<AttributeEntry>(20);
|
List<AttributeEntry> attr = new ArrayList<AttributeEntry>(20);
|
||||||
if (element.getElementClass().getAutoAttributes() != null && element.getElementClass().getAutoAttributes() == false) {
|
if (element.getElementClass().getAutoAttributes() != null && element.getElementClass().getAutoAttributes() == false) {
|
||||||
for (ElementClassAttribute eca:element.getElementClass().getElementClassAttributes()) {
|
for (ElementClassAttribute eca : element.getElementClass().getElementClassAttributes()) {
|
||||||
if (eca.getRunBeanValue() != null && eca.getRunBeanValue() == false) {
|
if (eca.getRunBeanValue() != null && eca.getRunBeanValue() == false) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
@ -241,7 +242,7 @@ public class DefaultX4OWriter<T> extends AbstractX4OWriter<T> {
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
AttributeEntry e = new AttributeEntry(eca.getId(), ""+value, calcOrderNumber(eca.getId(),eca.getWriteOrder()));
|
AttributeEntry e = new AttributeEntry(eca.getId(), "" + value, calcOrderNumber(eca.getId(), eca.getWriteOrder()));
|
||||||
attr.add(e);
|
attr.add(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -278,7 +279,7 @@ public class DefaultX4OWriter<T> extends AbstractX4OWriter<T> {
|
||||||
if (value instanceof List || value instanceof Collection) {
|
if (value instanceof List || value instanceof Collection) {
|
||||||
continue; // TODO; filter on type of childeren
|
continue; // TODO; filter on type of childeren
|
||||||
}
|
}
|
||||||
AttributeEntry e = new AttributeEntry(p, ""+value, calcOrderNumber(p,writeOrder));
|
AttributeEntry e = new AttributeEntry(p, "" + value, calcOrderNumber(p,writeOrder));
|
||||||
attr.add(e);
|
attr.add(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -288,7 +289,7 @@ public class DefaultX4OWriter<T> extends AbstractX4OWriter<T> {
|
||||||
if (isRoot && schemaUriPrint) {
|
if (isRoot && schemaUriPrint) {
|
||||||
String rootUri = findElementUri(element);
|
String rootUri = findElementUri(element);
|
||||||
writer.startPrefixMapping("xsi", SAX3XMLConstants.XML_SCHEMA_INSTANCE_NS_URI);
|
writer.startPrefixMapping("xsi", SAX3XMLConstants.XML_SCHEMA_INSTANCE_NS_URI);
|
||||||
atts.addAttribute ("xsi", "schemaLocation", "", "", rootUri+" "+schemaUriRoot);
|
atts.addAttribute ("xsi", "schemaLocation", "", "", rootUri + " " + schemaUriRoot);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sort attributes in natural order of localName and add to attributes
|
// Sort attributes in natural order of localName and add to attributes
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,6 @@ import java.util.Map;
|
||||||
|
|
||||||
import org.x4o.sax3.SAX3WriterEnum;
|
import org.x4o.sax3.SAX3WriterEnum;
|
||||||
import org.x4o.sax3.io.ContentWriter;
|
import org.x4o.sax3.io.ContentWriter;
|
||||||
import org.x4o.sax3.io.SAX3XMLConstants;
|
|
||||||
import org.x4o.xml.conv.ObjectConverter;
|
import org.x4o.xml.conv.ObjectConverter;
|
||||||
import org.x4o.xml.element.Element;
|
import org.x4o.xml.element.Element;
|
||||||
import org.x4o.xml.element.ElementNamespaceAttribute;
|
import org.x4o.xml.element.ElementNamespaceAttribute;
|
||||||
|
|
@ -48,6 +47,7 @@ import org.x4o.xml.element.ElementNamespaceInstanceProvider;
|
||||||
import org.x4o.xml.lang.X4OLanguageModule;
|
import org.x4o.xml.lang.X4OLanguageModule;
|
||||||
import org.x4o.xml.lang.X4OLanguageModuleLoaderResult;
|
import org.x4o.xml.lang.X4OLanguageModuleLoaderResult;
|
||||||
import org.x4o.xml.lang.X4OLanguageSession;
|
import org.x4o.xml.lang.X4OLanguageSession;
|
||||||
|
import org.x4o.xml.lang.X4OLanguageSessionLocal;
|
||||||
import org.x4o.xml.lang.X4OLanguageConfiguration;
|
import org.x4o.xml.lang.X4OLanguageConfiguration;
|
||||||
import org.x4o.xml.lang.phase.X4OPhase;
|
import org.x4o.xml.lang.phase.X4OPhase;
|
||||||
import org.x4o.xml.lang.phase.X4OPhaseException;
|
import org.x4o.xml.lang.phase.X4OPhaseException;
|
||||||
|
|
@ -63,12 +63,13 @@ import org.xml.sax.helpers.AttributesImpl;
|
||||||
*/
|
*/
|
||||||
public class X4ODebugWriter {
|
public class X4ODebugWriter {
|
||||||
|
|
||||||
static public final String DEBUG_URI = "http://language.x4o.org/xml/ns/debug-output";
|
static public final String DEBUG_URI = "http://language.x4o.org/xml/ns/debug-output";
|
||||||
|
static public final String DEBUG_URI_NS = "debug";
|
||||||
|
|
||||||
protected SAX3WriterEnum<Tag,ContentWriter> contentWriter = null;
|
protected SAX3WriterEnum<Tag,ContentWriter> contentWriter = null;
|
||||||
|
|
||||||
public X4ODebugWriter(ContentWriter debugWriter) {
|
public X4ODebugWriter(ContentWriter debugWriter) {
|
||||||
this.contentWriter=new SAX3WriterEnum<Tag,ContentWriter>(debugWriter,DEBUG_URI,SAX3XMLConstants.NULL_NS_URI);
|
this.contentWriter = new SAX3WriterEnum<Tag,ContentWriter>(debugWriter, DEBUG_URI, DEBUG_URI_NS);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ContentWriter getContentWriter() {
|
public ContentWriter getContentWriter() {
|
||||||
|
|
@ -83,6 +84,7 @@ public class X4ODebugWriter {
|
||||||
X4OConnection,
|
X4OConnection,
|
||||||
X4OLanguageSession,
|
X4OLanguageSession,
|
||||||
X4OLanguageSessionSkipPhase,
|
X4OLanguageSessionSkipPhase,
|
||||||
|
X4OLanguageSessionPhaseListener,
|
||||||
X4OConnectionProperties,
|
X4OConnectionProperties,
|
||||||
X4OConnectionProperty,
|
X4OConnectionProperty,
|
||||||
|
|
||||||
|
|
@ -91,7 +93,6 @@ public class X4ODebugWriter {
|
||||||
|
|
||||||
phaseOrder,
|
phaseOrder,
|
||||||
phase,
|
phase,
|
||||||
X4OPhaseListener,
|
|
||||||
X4OPhaseDependency,
|
X4OPhaseDependency,
|
||||||
|
|
||||||
ElementLanguageModules,
|
ElementLanguageModules,
|
||||||
|
|
@ -196,10 +197,24 @@ public class X4ODebugWriter {
|
||||||
atts = new AttributesImpl();
|
atts = new AttributesImpl();
|
||||||
atts.addAttribute("", "phaseStop", "", "", languageSession.getPhaseStop());
|
atts.addAttribute("", "phaseStop", "", "", languageSession.getPhaseStop());
|
||||||
atts.addAttribute("", "className", "", "", languageSession.getClass().getName());
|
atts.addAttribute("", "className", "", "", languageSession.getClass().getName());
|
||||||
|
//atts.addAttribute("", "listenersSize", "", "", phase.getPhaseListeners().size()+"");
|
||||||
contentWriter.printTagStart(Tag.X4OLanguageSession, atts);
|
contentWriter.printTagStart(Tag.X4OLanguageSession, atts);
|
||||||
for (String skipPhase:languageSession.getPhaseSkip()) {
|
for (String skipPhase:languageSession.getPhaseSkip()) {
|
||||||
contentWriter.printTagCharacters(Tag.X4OLanguageSessionSkipPhase, skipPhase);
|
contentWriter.printTagCharacters(Tag.X4OLanguageSessionSkipPhase, skipPhase);
|
||||||
}
|
}
|
||||||
|
if (languageSession instanceof X4OLanguageSessionLocal) {
|
||||||
|
X4OLanguageSessionLocal languageSessionLocal = X4OLanguageSessionLocal.class.cast(languageSession);
|
||||||
|
for (String key : languageSession.getLanguage().getPhaseManager().getPhaseKeys()) {
|
||||||
|
X4OPhase p = languageSession.getLanguage().getPhaseManager().getPhase(key);
|
||||||
|
List<X4OPhaseListener> listeners = languageSessionLocal.storePhaseListeners(p.getId());
|
||||||
|
for (X4OPhaseListener l : listeners) {
|
||||||
|
atts = new AttributesImpl();
|
||||||
|
atts.addAttribute("", "phaseId", "", "", p.getId());
|
||||||
|
atts.addAttribute("", "className", "", "", l.getClass().getName());
|
||||||
|
contentWriter.printTagStartEnd(Tag.X4OLanguageSessionPhaseListener, atts);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
contentWriter.printTagEnd(Tag.X4OLanguageSession);
|
contentWriter.printTagEnd(Tag.X4OLanguageSession);
|
||||||
|
|
||||||
atts = new AttributesImpl();
|
atts = new AttributesImpl();
|
||||||
|
|
@ -286,14 +301,8 @@ public class X4ODebugWriter {
|
||||||
atts.addAttribute("", "id", "", "", phase.getId());
|
atts.addAttribute("", "id", "", "", phase.getId());
|
||||||
atts.addAttribute("", "type", "", "", phase.getType().name());
|
atts.addAttribute("", "type", "", "", phase.getType().name());
|
||||||
atts.addAttribute("", "runOnce", "", "", phase.isRunOnce()+"");
|
atts.addAttribute("", "runOnce", "", "", phase.isRunOnce()+"");
|
||||||
atts.addAttribute("", "listenersSize", "", "", phase.getPhaseListeners().size()+"");
|
|
||||||
|
|
||||||
contentWriter.printTagStart(Tag.phase, atts);
|
contentWriter.printTagStart(Tag.phase, atts);
|
||||||
for (X4OPhaseListener l:phase.getPhaseListeners()) {
|
|
||||||
atts = new AttributesImpl();
|
|
||||||
atts.addAttribute("", "className", "", "", l.getClass().getName());
|
|
||||||
contentWriter.printTagStartEnd(Tag.X4OPhaseListener, atts);
|
|
||||||
}
|
|
||||||
for (String dep:phase.getPhaseDependencies()) {
|
for (String dep:phase.getPhaseDependencies()) {
|
||||||
contentWriter.printTagCharacters(Tag.X4OPhaseDependency, dep);
|
contentWriter.printTagCharacters(Tag.X4OPhaseDependency, dep);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,9 @@
|
||||||
package org.x4o.xml.lang;
|
package org.x4o.xml.lang;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
import javax.el.ELContext;
|
import javax.el.ELContext;
|
||||||
|
|
@ -34,6 +36,7 @@ import org.x4o.xml.element.ElementAttributeValueParser;
|
||||||
import org.x4o.xml.element.ElementObjectPropertyValue;
|
import org.x4o.xml.element.ElementObjectPropertyValue;
|
||||||
import org.x4o.xml.io.X4ODebugWriter;
|
import org.x4o.xml.io.X4ODebugWriter;
|
||||||
import org.x4o.xml.lang.phase.X4OPhase;
|
import org.x4o.xml.lang.phase.X4OPhase;
|
||||||
|
import org.x4o.xml.lang.phase.X4OPhaseListener;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* AbstractX4OLanguageSession.
|
* AbstractX4OLanguageSession.
|
||||||
|
|
@ -55,19 +58,21 @@ public abstract class AbstractX4OLanguageSession implements X4OLanguageSessionLo
|
||||||
private X4OPhase phaseCurrent = null;
|
private X4OPhase phaseCurrent = null;
|
||||||
private String phaseStop = null;
|
private String phaseStop = null;
|
||||||
private List<String> phaseSkip = null;
|
private List<String> phaseSkip = null;
|
||||||
|
private Map<String, List<X4OPhaseListener>> phaseListeners = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new empty language context.
|
* Creates a new empty language context.
|
||||||
*/
|
*/
|
||||||
public AbstractX4OLanguageSession(X4OLanguage language) {
|
public AbstractX4OLanguageSession(X4OLanguage language) {
|
||||||
if (language==null) {
|
if (language == null) {
|
||||||
throw new NullPointerException("language may not be null");
|
throw new NullPointerException("language may not be null");
|
||||||
}
|
}
|
||||||
logger = Logger.getLogger(AbstractX4OLanguageSession.class.getName());
|
logger = Logger.getLogger(AbstractX4OLanguageSession.class.getName());
|
||||||
logger.finest("Creating new ParsingContext");
|
logger.finest("Creating new ParsingContext");
|
||||||
this.language=language;
|
this.language=language;
|
||||||
dirtyElements = new ArrayList<Element>(20);
|
dirtyElements = new ArrayList<>(20);
|
||||||
phaseSkip = new ArrayList<String>(5);
|
phaseSkip = new ArrayList<>(5);
|
||||||
|
phaseListeners = new HashMap<>(3);
|
||||||
}
|
}
|
||||||
|
|
||||||
public X4OLanguage getLanguage() {
|
public X4OLanguage getLanguage() {
|
||||||
|
|
@ -238,4 +243,18 @@ public abstract class AbstractX4OLanguageSession implements X4OLanguageSessionLo
|
||||||
public void addPhaseSkip(String phaseId) {
|
public void addPhaseSkip(String phaseId) {
|
||||||
phaseSkip.add(phaseId);
|
phaseSkip.add(phaseId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the phase listeners for a phase.
|
||||||
|
* @param phaseId The phaseId of for the listeners.
|
||||||
|
* @return The x4o phase listeners.
|
||||||
|
*/
|
||||||
|
public List<X4OPhaseListener> storePhaseListeners(String phaseId) {
|
||||||
|
List<X4OPhaseListener> result = phaseListeners.get(phaseId);
|
||||||
|
if (result == null) {
|
||||||
|
result = new ArrayList<>(3);
|
||||||
|
phaseListeners.put(phaseId, result);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,9 @@ import org.x4o.xml.element.ElementInterface;
|
||||||
import org.x4o.xml.element.ElementNamespace;
|
import org.x4o.xml.element.ElementNamespace;
|
||||||
import org.x4o.xml.element.ElementNamespaceInstanceProviderException;
|
import org.x4o.xml.element.ElementNamespaceInstanceProviderException;
|
||||||
import org.x4o.xml.element.ElementObjectPropertyValue;
|
import org.x4o.xml.element.ElementObjectPropertyValue;
|
||||||
|
import org.x4o.xml.lang.phase.X4OPhaseException;
|
||||||
import org.x4o.xml.lang.phase.X4OPhaseManager;
|
import org.x4o.xml.lang.phase.X4OPhaseManager;
|
||||||
|
import org.x4o.xml.lang.phase.X4OPhaseType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* DefaultX4OLanguage holds all information about the x4o xml language.
|
* DefaultX4OLanguage holds all information about the x4o xml language.
|
||||||
|
|
@ -55,6 +57,7 @@ public class DefaultX4OLanguage implements X4OLanguageLocal {
|
||||||
private final String languageVersion;
|
private final String languageVersion;
|
||||||
private final X4OPhaseManager phaseManager;
|
private final X4OPhaseManager phaseManager;
|
||||||
private final Map<String, ElementNamespace> keyedNamespaceLookup;
|
private final Map<String, ElementNamespace> keyedNamespaceLookup;
|
||||||
|
private boolean inited = false;
|
||||||
|
|
||||||
public DefaultX4OLanguage(X4OLanguageConfiguration languageConfiguration, X4OPhaseManager phaseManager, String languageName, String languageVersion) {
|
public DefaultX4OLanguage(X4OLanguageConfiguration languageConfiguration, X4OPhaseManager phaseManager, String languageName, String languageVersion) {
|
||||||
if (languageName == null) {
|
if (languageName == null) {
|
||||||
|
|
@ -72,6 +75,15 @@ public class DefaultX4OLanguage implements X4OLanguageLocal {
|
||||||
this.phaseManager = phaseManager;
|
this.phaseManager = phaseManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void init(X4OLanguageSession session) throws X4OPhaseException {
|
||||||
|
if (inited) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
inited = true;
|
||||||
|
getPhaseManager().runPhases(session, X4OPhaseType.INIT);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see org.x4o.xml.lang.X4OLanguage#getLanguageName()
|
* @see org.x4o.xml.lang.X4OLanguage#getLanguageName()
|
||||||
*/
|
*/
|
||||||
|
|
@ -139,16 +151,13 @@ public class DefaultX4OLanguage implements X4OLanguageLocal {
|
||||||
languageSession.setExpressionLanguageFactory(X4OExpressionFactory.createExpressionFactory());
|
languageSession.setExpressionLanguageFactory(X4OExpressionFactory.createExpressionFactory());
|
||||||
}
|
}
|
||||||
if (languageSession.getExpressionLanguageContext() == null) {
|
if (languageSession.getExpressionLanguageContext() == null) {
|
||||||
languageSession.setExpressionLanguageContext(
|
languageSession.setExpressionLanguageContext(X4OExpressionFactory.createELContext(languageSession.getLanguage().getLanguageConfiguration().getDefaultExpressionLanguageContext()));
|
||||||
X4OExpressionFactory.createELContext(languageSession.getLanguage().getLanguageConfiguration().getDefaultExpressionLanguageContext()));
|
|
||||||
}
|
}
|
||||||
if (languageSession.getElementAttributeValueParser() == null) {
|
if (languageSession.getElementAttributeValueParser() == null) {
|
||||||
languageSession.setElementAttributeValueParser(X4OLanguageClassLoader.newInstance(ElementAttributeValueParser.class,
|
languageSession.setElementAttributeValueParser(X4OLanguageClassLoader.newInstance(ElementAttributeValueParser.class, getLanguageConfiguration().getDefaultElementAttributeValueParser()));
|
||||||
getLanguageConfiguration().getDefaultElementAttributeValueParser()));
|
|
||||||
}
|
}
|
||||||
if (languageSession.getElementObjectPropertyValue() == null) {
|
if (languageSession.getElementObjectPropertyValue() == null) {
|
||||||
languageSession.setElementObjectPropertyValue(X4OLanguageClassLoader.newInstance(ElementObjectPropertyValue.class,
|
languageSession.setElementObjectPropertyValue(X4OLanguageClassLoader.newInstance(ElementObjectPropertyValue.class, getLanguageConfiguration().getDefaultElementObjectPropertyValue()));
|
||||||
getLanguageConfiguration().getDefaultElementObjectPropertyValue()));
|
|
||||||
}
|
}
|
||||||
} catch (ClassNotFoundException e) {
|
} catch (ClassNotFoundException e) {
|
||||||
throw new RuntimeException(e.getMessage(), e);
|
throw new RuntimeException(e.getMessage(), e);
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,7 @@ import javax.xml.parsers.SAXParserFactory;
|
||||||
|
|
||||||
import org.x4o.xml.eld.EldDriver;
|
import org.x4o.xml.eld.EldDriver;
|
||||||
import org.x4o.xml.eld.EldModuleLoader;
|
import org.x4o.xml.eld.EldModuleLoader;
|
||||||
|
import org.x4o.xml.element.ElementException;
|
||||||
import org.x4o.xml.lang.phase.X4OPhaseLanguageInit;
|
import org.x4o.xml.lang.phase.X4OPhaseLanguageInit;
|
||||||
import org.x4o.xml.lang.phase.X4OPhaseLanguageInit.X4OPhaseInitLanguageSiblings;
|
import org.x4o.xml.lang.phase.X4OPhaseLanguageInit.X4OPhaseInitLanguageSiblings;
|
||||||
import org.xml.sax.Attributes;
|
import org.xml.sax.Attributes;
|
||||||
|
|
@ -67,74 +68,70 @@ public class DefaultX4OLanguageLoader implements X4OLanguageLoader {
|
||||||
* @param language The X4O language we are loading.
|
* @param language The X4O language we are loading.
|
||||||
* @param message The message to log to the debug output.
|
* @param message The message to log to the debug output.
|
||||||
*/
|
*/
|
||||||
private void logMessage(X4OLanguage language,String message) {
|
private void logMessage(X4OLanguageSession session, String message) {
|
||||||
logger.finest(message+" from: "+language.getLanguageName());
|
logger.finest(message + " from: " + session.getLanguage().getLanguageName());
|
||||||
/*
|
if (session.hasX4ODebugWriter()) {
|
||||||
TODO: if (language.getLanguageConfiguration().hasX4ODebugWriter()) {
|
|
||||||
try {
|
try {
|
||||||
language.getLanguageConfiguration().getX4ODebugWriter().debugPhaseMessage(message, this.getClass());
|
session.getX4ODebugWriter().debugPhaseMessage(message, this.getClass());
|
||||||
} catch (ElementException e) {
|
} catch (ElementException e) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
@Override
|
||||||
* @see org.x4o.xml.lang.X4OLanguageLoader#loadLanguage(org.x4o.xml.lang.X4OLanguageLocal, java.lang.String, java.lang.String)
|
public void loadLanguage(X4OLanguageSession session, X4OLanguageLocal languageLocal, String language, String languageVersion) throws X4OLanguageLoaderException {
|
||||||
*/
|
logger.finer("Loading all modules for language: " + language);
|
||||||
public void loadLanguage(X4OLanguageLocal languageLocal, String language,String languageVersion) throws X4OLanguageLoaderException {
|
List<VersionedResources> modulesAll = loadLanguageModules(session, languageLocal, language);
|
||||||
logger.finer("Loading all modules for language: "+language);
|
modulesAll = filterVersionModules(modulesAll, languageLocal, languageVersion);
|
||||||
List<VersionedResources> modulesAll = loadLanguageModules(languageLocal,language);
|
|
||||||
modulesAll = filterVersionModules(modulesAll,languageLocal,languageVersion);
|
|
||||||
validateModules(modulesAll);
|
validateModules(modulesAll);
|
||||||
|
|
||||||
int loaded = 0;
|
int loaded = 0;
|
||||||
for (VersionedResources versionedResources:modulesAll) {
|
for (VersionedResources versionedResources : modulesAll) {
|
||||||
X4OLanguageModuleLoader loader;
|
X4OLanguageModuleLoader loader;
|
||||||
for (String value:versionedResources.eldResources) {
|
for (String value : versionedResources.eldResources) {
|
||||||
String languagePrefix = languageLocal.getLanguageConfiguration().getLanguageResourcePathPrefix();
|
String languagePrefix = languageLocal.getLanguageConfiguration().getLanguageResourcePathPrefix();
|
||||||
String resource = languagePrefix+"/"+language+"/"+value;
|
String resource = languagePrefix + "/" + language + "/" + value;
|
||||||
if (language.equals(EldDriver.LANGUAGE_NAME)) {
|
if (language.equals(EldDriver.LANGUAGE_NAME)) {
|
||||||
loader = new EldModuleLoader(resource,true); // load cel
|
loader = new EldModuleLoader(resource,true); // load cel
|
||||||
} else {
|
} else {
|
||||||
loader = new EldModuleLoader(resource,false); // load eld
|
loader = new EldModuleLoader(resource,false); // load eld
|
||||||
}
|
}
|
||||||
loadModule(languageLocal,loader,value,versionedResources);
|
loadModule(session, languageLocal, loader, value, versionedResources);
|
||||||
}
|
}
|
||||||
for (String value:versionedResources.moduleLoaders) {
|
for (String value : versionedResources.moduleLoaders) {
|
||||||
try {
|
try {
|
||||||
loader = (X4OLanguageModuleLoader)X4OLanguageClassLoader.newInstance(value);
|
loader = (X4OLanguageModuleLoader)X4OLanguageClassLoader.newInstance(value);
|
||||||
} catch (Exception ee) {
|
} catch (Exception ee) {
|
||||||
throw new X4OLanguageLoaderException("Could not load class: "+value+" error: "+ee.getMessage(),ee);
|
throw new X4OLanguageLoaderException("Could not load class: " + value + " error: " + ee.getMessage(),ee);
|
||||||
}
|
}
|
||||||
loadModule(languageLocal,loader,value,versionedResources);
|
loadModule(session, languageLocal, loader, value, versionedResources);
|
||||||
}
|
}
|
||||||
for (String value:versionedResources.siblingLoaders) {
|
for (String value : versionedResources.siblingLoaders) {
|
||||||
try {
|
try {
|
||||||
loader = (X4OLanguageModuleLoader)X4OLanguageClassLoader.newInstance(value);
|
loader = (X4OLanguageModuleLoader)X4OLanguageClassLoader.newInstance(value);
|
||||||
} catch (Exception ee) {
|
} catch (Exception ee) {
|
||||||
throw new X4OLanguageLoaderException("Could not load class: "+value+" error: "+ee.getMessage(),ee);
|
throw new X4OLanguageLoaderException("Could not load class: " + value + " error: " + ee.getMessage(),ee);
|
||||||
}
|
}
|
||||||
loadModule(languageLocal,loader,value,versionedResources);
|
loadModule(session, languageLocal, loader, value, versionedResources);
|
||||||
if (loader instanceof X4OLanguageModuleLoaderSibling) {
|
if (loader instanceof X4OLanguageModuleLoaderSibling) {
|
||||||
// mmm
|
// mmm
|
||||||
X4OPhaseInitLanguageSiblings sibPhase = (X4OPhaseInitLanguageSiblings)languageLocal.getPhaseManager().getPhase(X4OPhaseLanguageInit.INIT_LANG_SIB);
|
X4OPhaseInitLanguageSiblings sibPhase = (X4OPhaseInitLanguageSiblings)languageLocal.getPhaseManager().getPhase(X4OPhaseLanguageInit.INIT_LANG_SIB);
|
||||||
sibPhase.addLanguageModuleLoaderSibling((X4OLanguageModuleLoaderSibling)loader);
|
sibPhase.addLanguageModuleLoaderSibling((X4OLanguageModuleLoaderSibling)loader);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (String value:versionedResources.elbResources) {
|
for (String value : versionedResources.elbResources) {
|
||||||
// TODO: add elb support
|
// TODO: add elb support
|
||||||
logger.finer("elb-resources are not done yet; "+value);
|
logger.finer("elb-resources are not done yet; " + value);
|
||||||
}
|
}
|
||||||
loaded++;
|
loaded++;
|
||||||
}
|
}
|
||||||
if (loaded==0) {
|
if (loaded == 0) {
|
||||||
throw new X4OLanguageLoaderException("No modules defined for version: "+languageVersion);
|
throw new X4OLanguageLoaderException("No modules defined for version: " + languageVersion);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<VersionedResources> filterVersionModules(List<VersionedResources> resources,X4OLanguageLocal languageLocal,String languageVersion) throws X4OLanguageLoaderException {
|
private List<VersionedResources> filterVersionModules(List<VersionedResources> resources, X4OLanguageLocal languageLocal, String languageVersion) throws X4OLanguageLoaderException {
|
||||||
List<VersionedResources> result = new ArrayList<VersionedResources>(resources.size());
|
List<VersionedResources> result = new ArrayList<VersionedResources>(resources.size());
|
||||||
X4OLanguageVersionFilter lvf;
|
X4OLanguageVersionFilter lvf;
|
||||||
try {
|
try {
|
||||||
|
|
@ -142,11 +139,11 @@ TODO: if (language.getLanguageConfiguration().hasX4ODebugWriter()) {
|
||||||
} catch (ClassNotFoundException e) {
|
} catch (ClassNotFoundException e) {
|
||||||
throw new X4OLanguageLoaderException(e);
|
throw new X4OLanguageLoaderException(e);
|
||||||
}
|
}
|
||||||
for (VersionedResources versionedResources:resources) {
|
for (VersionedResources versionedResources : resources) {
|
||||||
List<String> versions = new ArrayList<String>();
|
List<String> versions = new ArrayList<String>();
|
||||||
versions.add(versionedResources.version); // FIXME
|
versions.add(versionedResources.version); // FIXME
|
||||||
String modulesVersion = lvf.filterVersion(languageVersion, versions);
|
String modulesVersion = lvf.filterVersion(languageVersion, versions);
|
||||||
if (modulesVersion==null) {
|
if (modulesVersion == null) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
result.add(versionedResources);
|
result.add(versionedResources);
|
||||||
|
|
@ -159,44 +156,44 @@ TODO: if (language.getLanguageConfiguration().hasX4ODebugWriter()) {
|
||||||
List<String> moduleLoaders = new ArrayList<String>(5);
|
List<String> moduleLoaders = new ArrayList<String>(5);
|
||||||
List<String> elbResources = new ArrayList<String>(5);
|
List<String> elbResources = new ArrayList<String>(5);
|
||||||
List<String> siblingLoaders = new ArrayList<String>(5);
|
List<String> siblingLoaders = new ArrayList<String>(5);
|
||||||
for (VersionedResources vr:resources) {
|
for (VersionedResources vr : resources) {
|
||||||
validateModuleList(eldResources,vr.eldResources,"eld-resource");
|
validateModuleList(eldResources, vr.eldResources, "eld-resource");
|
||||||
validateModuleList(moduleLoaders,vr.moduleLoaders,"module-loader");
|
validateModuleList(moduleLoaders, vr.moduleLoaders, "module-loader");
|
||||||
validateModuleList(elbResources,vr.elbResources,"elb-resource");
|
validateModuleList(elbResources, vr.elbResources, "elb-resource");
|
||||||
validateModuleList(siblingLoaders,vr.siblingLoaders,"sibling-loader");
|
validateModuleList(siblingLoaders, vr.siblingLoaders, "sibling-loader");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void validateModuleList(List<String> data,List<String> values,String xmlTag) throws X4OLanguageLoaderException {
|
private void validateModuleList(List<String> data, List<String> values, String xmlTag) throws X4OLanguageLoaderException {
|
||||||
for (String value:values) {
|
for (String value : values) {
|
||||||
if (data.contains(value)) {
|
if (data.contains(value)) {
|
||||||
throw new X4OLanguageLoaderException("Duplicate "+xmlTag+" entry detected; "+value);
|
throw new X4OLanguageLoaderException("Duplicate " + xmlTag + " entry detected; " + value);
|
||||||
}
|
}
|
||||||
data.add(value);
|
data.add(value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void loadModule(X4OLanguageLocal languageLocal,X4OLanguageModuleLoader loader,String resource,VersionedResources versionedResources) throws X4OLanguageLoaderException {
|
private void loadModule(X4OLanguageSession session, X4OLanguageLocal languageLocal, X4OLanguageModuleLoader loader, String resource, VersionedResources versionedResources) throws X4OLanguageLoaderException {
|
||||||
X4OLanguageModuleLocal module;
|
X4OLanguageModuleLocal module;
|
||||||
try {
|
try {
|
||||||
module = X4OLanguageClassLoader.newInstance(X4OLanguageModuleLocal.class, languageLocal.getLanguageConfiguration().getDefaultElementLanguageModule());
|
module = X4OLanguageClassLoader.newInstance(X4OLanguageModuleLocal.class, languageLocal.getLanguageConfiguration().getDefaultElementLanguageModule());
|
||||||
} catch (ClassNotFoundException e) {
|
} catch (ClassNotFoundException e) {
|
||||||
throw new X4OLanguageLoaderException(e);
|
throw new X4OLanguageLoaderException(e);
|
||||||
}
|
}
|
||||||
logMessage(languageLocal,"Created module: "+module);
|
logMessage(session,"Created module: " + module);
|
||||||
long startTime = System.currentTimeMillis();
|
long startTime = System.currentTimeMillis();
|
||||||
try {
|
try {
|
||||||
logMessage(languageLocal,"Starting modules: "+module+" for language: "+languageLocal.getLanguageName());
|
logMessage(session,"Starting modules: " + module + " for language: " + languageLocal.getLanguageName());
|
||||||
loader.loadLanguageModule(languageLocal, module);
|
loader.loadLanguageModule(session, languageLocal, module);
|
||||||
} catch (X4OLanguageModuleLoaderException e) {
|
} catch (X4OLanguageModuleLoaderException e) {
|
||||||
throw new X4OLanguageLoaderException(e); // FIXME info
|
throw new X4OLanguageLoaderException(e); // FIXME info
|
||||||
}
|
}
|
||||||
long totalTime = System.currentTimeMillis() - startTime;
|
long totalTime = System.currentTimeMillis() - startTime;
|
||||||
module.putLoaderResult(X4OLanguageModuleLoaderResult.LOAD_TIME, ""+totalTime);
|
module.putLoaderResult(X4OLanguageModuleLoaderResult.LOAD_TIME, "" + totalTime);
|
||||||
module.putLoaderResult(X4OLanguageModuleLoaderResult.LOAD_VERSION, versionedResources.version);
|
module.putLoaderResult(X4OLanguageModuleLoaderResult.LOAD_VERSION, versionedResources.version);
|
||||||
module.putLoaderResult(X4OLanguageModuleLoaderResult.LOAD_CLASS, loader.getClass().getName());
|
module.putLoaderResult(X4OLanguageModuleLoaderResult.LOAD_CLASS, loader.getClass().getName());
|
||||||
module.putLoaderResult(X4OLanguageModuleLoaderResult.LOAD_DATE, ""+new Date());
|
module.putLoaderResult(X4OLanguageModuleLoaderResult.LOAD_DATE, "" + new Date());
|
||||||
if (resource!=null) {
|
if (resource != null) {
|
||||||
module.putLoaderResult(X4OLanguageModuleLoaderResult.LOAD_MODULE_RESOURCE, resource);
|
module.putLoaderResult(X4OLanguageModuleLoaderResult.LOAD_MODULE_RESOURCE, resource);
|
||||||
}
|
}
|
||||||
module.putLoaderResult(X4OLanguageModuleLoaderResult.LOAD_FROM_RESOURCE, versionedResources.loadedFrom);
|
module.putLoaderResult(X4OLanguageModuleLoaderResult.LOAD_FROM_RESOURCE, versionedResources.loadedFrom);
|
||||||
|
|
@ -209,7 +206,7 @@ TODO: if (language.getLanguageConfiguration().hasX4ODebugWriter()) {
|
||||||
* @param languageLocal The ElementLanguage to load for.
|
* @param languageLocal The ElementLanguage to load for.
|
||||||
* @param language The language to load.
|
* @param language The language to load.
|
||||||
*/
|
*/
|
||||||
protected List<VersionedResources> loadLanguageModules(X4OLanguageLocal languageLocal,String language) throws X4OLanguageLoaderException {
|
protected List<VersionedResources> loadLanguageModules(X4OLanguageSession session, X4OLanguageLocal languageLocal, String language) throws X4OLanguageLoaderException {
|
||||||
List<VersionedResources> result = new ArrayList<VersionedResources>(15);
|
List<VersionedResources> result = new ArrayList<VersionedResources>(15);
|
||||||
StringBuilder buf = new StringBuilder(150);
|
StringBuilder buf = new StringBuilder(150);
|
||||||
buf.append(languageLocal.getLanguageConfiguration().getLanguageResourcePathPrefix());
|
buf.append(languageLocal.getLanguageConfiguration().getLanguageResourcePathPrefix());
|
||||||
|
|
@ -219,20 +216,20 @@ TODO: if (language.getLanguageConfiguration().hasX4ODebugWriter()) {
|
||||||
buf.append(language);
|
buf.append(language);
|
||||||
buf.append(languageLocal.getLanguageConfiguration().getLanguageResourceModulesFileName());
|
buf.append(languageLocal.getLanguageConfiguration().getLanguageResourceModulesFileName());
|
||||||
|
|
||||||
logger.finer("loading X4O language: "+language);
|
logger.finer("loading X4O language: " + language);
|
||||||
try {
|
try {
|
||||||
Enumeration<URL> e = Thread.currentThread().getContextClassLoader().getResources(buf.toString());
|
Enumeration<URL> e = Thread.currentThread().getContextClassLoader().getResources(buf.toString());
|
||||||
while(e.hasMoreElements()) {
|
while (e.hasMoreElements()) {
|
||||||
URL u = e.nextElement();
|
URL u = e.nextElement();
|
||||||
logMessage(languageLocal,"Loading relative modules: "+u+" for: "+language);
|
logMessage(session, "Loading relative modules: " + u + " for: " + language);
|
||||||
result.addAll(loadLanguageModulesXml(u.openStream(),u.toString()));
|
result.addAll(loadLanguageModulesXml(u.openStream(), u.toString()));
|
||||||
}
|
}
|
||||||
|
|
||||||
e = Thread.currentThread().getContextClassLoader().getResources("/"+buf.toString());
|
e = Thread.currentThread().getContextClassLoader().getResources("/"+buf.toString());
|
||||||
while(e.hasMoreElements()) {
|
while (e.hasMoreElements()) {
|
||||||
URL u = e.nextElement();
|
URL u = e.nextElement();
|
||||||
logMessage(languageLocal,"Loading root modules: "+u+" for: "+language);
|
logMessage(session, "Loading root modules: " + u + " for: " + language);
|
||||||
result.addAll(loadLanguageModulesXml(u.openStream(),u.toString()));
|
result.addAll(loadLanguageModulesXml(u.openStream(), u.toString()));
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
} catch (IOException | SAXException | ParserConfigurationException e) {
|
} catch (IOException | SAXException | ParserConfigurationException e) {
|
||||||
|
|
@ -247,8 +244,8 @@ TODO: if (language.getLanguageConfiguration().hasX4ODebugWriter()) {
|
||||||
* @throws SAXException
|
* @throws SAXException
|
||||||
* @throws ParserConfigurationException
|
* @throws ParserConfigurationException
|
||||||
*/
|
*/
|
||||||
protected List<VersionedResources> loadLanguageModulesXml(InputStream in,String loadedFrom) throws IOException, SAXException, ParserConfigurationException {
|
protected List<VersionedResources> loadLanguageModulesXml(InputStream in, String loadedFrom) throws IOException, SAXException, ParserConfigurationException {
|
||||||
if (in==null) {
|
if (in == null) {
|
||||||
throw new NullPointerException("Can't parse null input stream");
|
throw new NullPointerException("Can't parse null input stream");
|
||||||
}
|
}
|
||||||
ModulesTagHandler xth = new ModulesTagHandler(loadedFrom);
|
ModulesTagHandler xth = new ModulesTagHandler(loadedFrom);
|
||||||
|
|
@ -274,12 +271,11 @@ TODO: if (language.getLanguageConfiguration().hasX4ODebugWriter()) {
|
||||||
private List<VersionedResources> result = null;
|
private List<VersionedResources> result = null;
|
||||||
|
|
||||||
public ModulesTagHandler(String loadedFrom) {
|
public ModulesTagHandler(String loadedFrom) {
|
||||||
this.loadedFrom=loadedFrom;
|
this.loadedFrom = loadedFrom;
|
||||||
this.result = new ArrayList<VersionedResources>(5);
|
this.result = new ArrayList<VersionedResources>(5);
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<VersionedResources> getResult()
|
public List<VersionedResources> getResult() {
|
||||||
{
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -288,13 +284,13 @@ TODO: if (language.getLanguageConfiguration().hasX4ODebugWriter()) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void startElement(String namespaceUri, String tag, String qName,Attributes attr) throws SAXException {
|
public void startElement(String namespaceUri, String tag, String qName, Attributes attr) throws SAXException {
|
||||||
if ("language".equals(tag)) {
|
if ("language".equals(tag)) {
|
||||||
String version = attr.getValue("version");
|
String version = attr.getValue("version");
|
||||||
versionedResources = new VersionedResources();
|
versionedResources = new VersionedResources();
|
||||||
versionedResources.version=version;
|
versionedResources.version = version;
|
||||||
versionedResources.loadedFrom=loadedFrom;
|
versionedResources.loadedFrom = loadedFrom;
|
||||||
logger.finest("Version attribute: "+version);
|
logger.finest("Version attribute: " + version);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -314,7 +310,7 @@ TODO: if (language.getLanguageConfiguration().hasX4ODebugWriter()) {
|
||||||
versionedResources = null;
|
versionedResources = null;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (versionedResources==null) {
|
if (versionedResources == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -327,13 +323,13 @@ TODO: if (language.getLanguageConfiguration().hasX4ODebugWriter()) {
|
||||||
} else if ("sibling-loader".equals(tag)) {
|
} else if ("sibling-loader".equals(tag)) {
|
||||||
versionedResources.siblingLoaders.add(value);
|
versionedResources.siblingLoaders.add(value);
|
||||||
}
|
}
|
||||||
logger.finest("Stored tag: "+tag+" value: "+value);
|
logger.finest("Stored tag: " + tag + " value: " + value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void characters(char[] ch, int start, int length) throws SAXException {
|
public void characters(char[] ch, int start, int length) throws SAXException {
|
||||||
String text = new String(ch,start,length).trim();
|
String text = new String(ch, start, length).trim();
|
||||||
if (text.length()==0) {
|
if (text.length() == 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
buf.append(text);
|
buf.append(text);
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@ import org.x4o.xml.lang.phase.X4OPhaseException;
|
||||||
public class DefaultX4OLanguageSession extends AbstractX4OLanguageSession {
|
public class DefaultX4OLanguageSession extends AbstractX4OLanguageSession {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new empty language context.
|
* Creates a new empty language session.
|
||||||
*/
|
*/
|
||||||
public DefaultX4OLanguageSession(X4OLanguage language) {
|
public DefaultX4OLanguageSession(X4OLanguage language) {
|
||||||
super(language);
|
super(language);
|
||||||
|
|
|
||||||
|
|
@ -32,10 +32,11 @@ public interface X4OLanguageLoader {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Loads the language modules.
|
* Loads the language modules.
|
||||||
* @param languageLocal The elementLanguage to load the module in.
|
* @param session The session we run in.
|
||||||
|
* @param language The local Language to load for.
|
||||||
* @param languageName The language name to load.
|
* @param languageName The language name to load.
|
||||||
* @param languageVersion The language version to load.
|
* @param languageVersion The language version to load.
|
||||||
* @throws X4OLanguageLoaderException When there is an error.
|
* @throws X4OLanguageLoaderException When there is an error.
|
||||||
*/
|
*/
|
||||||
void loadLanguage(X4OLanguageLocal languageLocal,String languageName,String languageVersion) throws X4OLanguageLoaderException;
|
void loadLanguage(X4OLanguageSession session, X4OLanguageLocal language, String languageName, String languageVersion) throws X4OLanguageLoaderException;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@
|
||||||
*/
|
*/
|
||||||
package org.x4o.xml.lang;
|
package org.x4o.xml.lang;
|
||||||
|
|
||||||
|
import org.x4o.xml.lang.phase.X4OPhaseException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* X4OLanguageLocal exposes the add method to load the language.
|
* X4OLanguageLocal exposes the add method to load the language.
|
||||||
|
|
@ -31,11 +32,8 @@ package org.x4o.xml.lang;
|
||||||
*/
|
*/
|
||||||
public interface X4OLanguageLocal extends X4OLanguage {
|
public interface X4OLanguageLocal extends X4OLanguage {
|
||||||
|
|
||||||
/*
|
// TODO: refactor a bit more a this is now called manually on magic places
|
||||||
* @param parserConfiguration The parserConfiguration to set.
|
void init(X4OLanguageSession session) throws X4OPhaseException;
|
||||||
|
|
||||||
void setLanguageConfiguration(X4OLanguageConfiguration parserConfiguration);
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds an X4OLanguageModule to this language.
|
* Adds an X4OLanguageModule to this language.
|
||||||
|
|
|
||||||
|
|
@ -33,9 +33,10 @@ public interface X4OLanguageModuleLoader {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Starts the ElementProvider.
|
* Starts the ElementProvider.
|
||||||
* @param language The ElementLanguage to load for.
|
* @param session The session we run in.
|
||||||
* @param module The ElementLanguageModule to load it into.
|
* @param language The local Language to load for.
|
||||||
|
* @param module The language module to load it into.
|
||||||
* @throws X4OLanguageModuleLoaderException Gets thrown when modules could not be correctly loaded.
|
* @throws X4OLanguageModuleLoaderException Gets thrown when modules could not be correctly loaded.
|
||||||
*/
|
*/
|
||||||
void loadLanguageModule(X4OLanguageLocal language,X4OLanguageModuleLocal module) throws X4OLanguageModuleLoaderException;
|
void loadLanguageModule(X4OLanguageSession session, X4OLanguageLocal language, X4OLanguageModuleLocal module) throws X4OLanguageModuleLoaderException;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -35,9 +35,10 @@ public interface X4OLanguageModuleLoaderSibling extends X4OLanguageModuleLoader
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Loads in the sibling language.
|
* Loads in the sibling language.
|
||||||
* @param languageLocal The ElementLanguage for which we load an sibling.
|
* @param session The session we run in.
|
||||||
* @param languageLoader The loader to use to load the x4o languages.
|
* @param language The local Language to load for.
|
||||||
|
* @param loader The loader to use to load the x4o languages.
|
||||||
* @throws X4OLanguageLoaderException Gets thrown when there is an error loading the sibling language.
|
* @throws X4OLanguageLoaderException Gets thrown when there is an error loading the sibling language.
|
||||||
*/
|
*/
|
||||||
void loadLanguageSibling(X4OLanguageLocal languageLocal,X4OLanguageLoader languageLoader) throws X4OLanguageLoaderException;
|
void loadLanguageSibling(X4OLanguageSession session, X4OLanguageLocal language, X4OLanguageLoader loader) throws X4OLanguageLoaderException;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,8 @@
|
||||||
*/
|
*/
|
||||||
package org.x4o.xml.lang;
|
package org.x4o.xml.lang;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import javax.el.ELContext;
|
import javax.el.ELContext;
|
||||||
import javax.el.ExpressionFactory;
|
import javax.el.ExpressionFactory;
|
||||||
|
|
||||||
|
|
@ -29,6 +31,7 @@ import org.x4o.xml.element.ElementAttributeValueParser;
|
||||||
import org.x4o.xml.element.ElementObjectPropertyValue;
|
import org.x4o.xml.element.ElementObjectPropertyValue;
|
||||||
import org.x4o.xml.io.X4ODebugWriter;
|
import org.x4o.xml.io.X4ODebugWriter;
|
||||||
import org.x4o.xml.lang.phase.X4OPhase;
|
import org.x4o.xml.lang.phase.X4OPhase;
|
||||||
|
import org.x4o.xml.lang.phase.X4OPhaseListener;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* X4OLanguageSessionLocal is the local set interface for X4OLanguageSession.
|
* X4OLanguageSessionLocal is the local set interface for X4OLanguageSession.
|
||||||
|
|
@ -37,7 +40,15 @@ import org.x4o.xml.lang.phase.X4OPhase;
|
||||||
* @version 1.0 Oct 28, 2009
|
* @version 1.0 Oct 28, 2009
|
||||||
*/
|
*/
|
||||||
public interface X4OLanguageSessionLocal extends X4OLanguageSession {
|
public interface X4OLanguageSessionLocal extends X4OLanguageSession {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns list of phase listeners which where added to it.
|
||||||
|
* TODO: bad api here
|
||||||
|
* @param phaseId The phaseId of for the listeners.
|
||||||
|
* @return All X4OPhaseListeners.
|
||||||
|
*/
|
||||||
|
List<X4OPhaseListener> storePhaseListeners(String phaseId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the EL Context.
|
* Sets the EL Context.
|
||||||
* @param context The ELContext to set.
|
* @param context The ELContext to set.
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,7 @@ import org.x4o.xml.lang.X4OLanguageLoader;
|
||||||
import org.x4o.xml.lang.X4OLanguageLoaderException;
|
import org.x4o.xml.lang.X4OLanguageLoaderException;
|
||||||
import org.x4o.xml.lang.X4OLanguageLocal;
|
import org.x4o.xml.lang.X4OLanguageLocal;
|
||||||
import org.x4o.xml.lang.X4OLanguageModuleLocal;
|
import org.x4o.xml.lang.X4OLanguageModuleLocal;
|
||||||
|
import org.x4o.xml.lang.X4OLanguageSession;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* MetaLanguageSiblingLoader loads the generic x4o meta language into defined language.
|
* MetaLanguageSiblingLoader loads the generic x4o meta language into defined language.
|
||||||
|
|
@ -49,30 +50,16 @@ public class MetaLanguageSiblingLoader implements X4OLanguageModuleLoaderSibling
|
||||||
/** Defines the identifier of the meta x4o language host. */
|
/** Defines the identifier of the meta x4o language host. */
|
||||||
public static final String META_LANGUAGE_DESCRIPTION = "X4O Meta XML Language Module.";
|
public static final String META_LANGUAGE_DESCRIPTION = "X4O Meta XML Language Module.";
|
||||||
|
|
||||||
/**
|
@Override
|
||||||
* Loads an ElementLanguageModule.
|
public void loadLanguageModule(X4OLanguageSession session, X4OLanguageLocal language, X4OLanguageModuleLocal module) throws X4OLanguageModuleLoaderException {
|
||||||
* @param language The ElementLanguage to load for.
|
module.setId(META_LANGUAGE);
|
||||||
* @param languageModule The ElementLanguageModule to load into.
|
module.setProviderHost(META_LANGUAGE_HOST);
|
||||||
* @throws X4OLanguageModuleLoaderException Is thrown when meta language could not be loaded.
|
module.setProviderName(MetaLanguageSiblingLoader.class.getSimpleName());
|
||||||
* @see org.x4o.xml.lang.X4OLanguageModuleLoader#loadLanguageModule(org.x4o.xml.lang.X4OLanguageLocal, org.x4o.xml.lang.X4OLanguageModuleLocal)
|
module.setDescription(META_LANGUAGE_DESCRIPTION);
|
||||||
*/
|
|
||||||
public void loadLanguageModule(X4OLanguageLocal language,X4OLanguageModuleLocal languageModule) throws X4OLanguageModuleLoaderException {
|
|
||||||
languageModule.setId(META_LANGUAGE);
|
|
||||||
languageModule.setProviderHost(META_LANGUAGE_HOST);
|
|
||||||
languageModule.setProviderName(MetaLanguageSiblingLoader.class.getSimpleName());
|
|
||||||
languageModule.setDescription(META_LANGUAGE_DESCRIPTION);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
@Override
|
||||||
* Loads an sibling language.
|
public void loadLanguageSibling(X4OLanguageSession session, X4OLanguageLocal language, X4OLanguageLoader loader) throws X4OLanguageLoaderException {
|
||||||
* @param language The ElementLanguage to load for.
|
loader.loadLanguage(session, language, META_LANGUAGE, META_LANGUAGE_VERSION);
|
||||||
* @param languageLoader The x4o language loader.
|
|
||||||
* @throws X4OLanguageLoaderException
|
|
||||||
* @see org.x4o.xml.lang.X4OLanguageModuleLoaderSibling#loadLanguageSibling(org.x4o.xml.lang.X4OLanguageLocal, org.x4o.xml.lang.X4OLanguageLoader)
|
|
||||||
*/
|
|
||||||
public void loadLanguageSibling(X4OLanguageLocal language,X4OLanguageLoader languageLoader) throws X4OLanguageLoaderException {
|
|
||||||
|
|
||||||
// Load the meta language.
|
|
||||||
languageLoader.loadLanguage(language, META_LANGUAGE, META_LANGUAGE_VERSION);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -22,10 +22,8 @@
|
||||||
*/
|
*/
|
||||||
package org.x4o.xml.lang.phase;
|
package org.x4o.xml.lang.phase;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.x4o.xml.element.Element;
|
import org.x4o.xml.element.Element;
|
||||||
|
import org.x4o.xml.element.ElementException;
|
||||||
import org.x4o.xml.lang.X4OLanguageSession;
|
import org.x4o.xml.lang.X4OLanguageSession;
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -36,14 +34,11 @@ import org.x4o.xml.lang.X4OLanguageSession;
|
||||||
* @version 1.0 Dec 31, 2008
|
* @version 1.0 Dec 31, 2008
|
||||||
*/
|
*/
|
||||||
public abstract class AbstractX4OPhase implements X4OPhase {
|
public abstract class AbstractX4OPhase implements X4OPhase {
|
||||||
|
|
||||||
protected List<X4OPhaseListener> phaseListeners = null;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates the AbstractX4OPhaseHandler.
|
* Creates the AbstractX4OPhaseHandler.
|
||||||
*/
|
*/
|
||||||
public AbstractX4OPhase() {
|
public AbstractX4OPhase() {
|
||||||
phaseListeners = new ArrayList<X4OPhaseListener>(3);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -53,30 +48,6 @@ public abstract class AbstractX4OPhase implements X4OPhase {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the phase listeners.
|
|
||||||
* @return The x4o phase listeners.
|
|
||||||
*/
|
|
||||||
public List<X4OPhaseListener> getPhaseListeners() {
|
|
||||||
return phaseListeners;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Adds a phase listener.
|
|
||||||
* @param listener The phase listener to add.
|
|
||||||
*/
|
|
||||||
public void addPhaseListener(X4OPhaseListener listener) {
|
|
||||||
phaseListeners.add(listener);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Removed a phase listener.
|
|
||||||
* @param listener The phase listener to remove.
|
|
||||||
*/
|
|
||||||
public void removePhaseListener(X4OPhaseListener listener) {
|
|
||||||
phaseListeners.remove(listener);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If returns true then this handler will run on all elements.
|
* If returns true then this handler will run on all elements.
|
||||||
* @return defaults to true.
|
* @return defaults to true.
|
||||||
|
|
@ -97,6 +68,17 @@ public abstract class AbstractX4OPhase implements X4OPhase {
|
||||||
* @param elementLanguage The language to run phase for.
|
* @param elementLanguage The language to run phase for.
|
||||||
* @throws X4OPhaseException when phase has error.
|
* @throws X4OPhaseException when phase has error.
|
||||||
*/
|
*/
|
||||||
public void runPhase(X4OLanguageSession elementLanguage) throws X4OPhaseException {
|
public void runPhase(X4OLanguageSession languageSession) throws X4OPhaseException {
|
||||||
|
}
|
||||||
|
|
||||||
|
public void debugPhaseMessage(X4OLanguageSession languageSession, String message) throws X4OPhaseException {
|
||||||
|
if (!languageSession.hasX4ODebugWriter()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
languageSession.getX4ODebugWriter().debugPhaseMessage(message,this.getClass());
|
||||||
|
} catch (ElementException ee) {
|
||||||
|
throw new X4OPhaseException(this, ee);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@ import org.x4o.xml.lang.X4OLanguageSessionLocal;
|
||||||
public class DefaultX4OPhaseManager implements X4OPhaseManagerLocal {
|
public class DefaultX4OPhaseManager implements X4OPhaseManagerLocal {
|
||||||
|
|
||||||
/** The X4OPhaseHandler */
|
/** The X4OPhaseHandler */
|
||||||
private List<X4OPhase> x4oPhases = null;
|
private final List<X4OPhase> x4oPhases;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor.
|
* Constructor.
|
||||||
|
|
@ -68,7 +68,7 @@ PHASE_ORDER = { *startupX4OPhase,
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public X4OPhase getPhase(String phaseName) {
|
public X4OPhase getPhase(String phaseName) {
|
||||||
for (X4OPhase phase:x4oPhases) {
|
for (X4OPhase phase : x4oPhases) {
|
||||||
if (phase.getId().equals(phaseName)) {
|
if (phase.getId().equals(phaseName)) {
|
||||||
return phase;
|
return phase;
|
||||||
}
|
}
|
||||||
|
|
@ -78,7 +78,7 @@ PHASE_ORDER = { *startupX4OPhase,
|
||||||
|
|
||||||
public List<String> getPhaseKeys() {
|
public List<String> getPhaseKeys() {
|
||||||
List<String> result = new ArrayList<String>(x4oPhases.size());
|
List<String> result = new ArrayList<String>(x4oPhases.size());
|
||||||
for (X4OPhase phase:x4oPhases) {
|
for (X4OPhase phase : x4oPhases) {
|
||||||
result.add(phase.getId());
|
result.add(phase.getId());
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
|
@ -97,7 +97,6 @@ PHASE_ORDER = { *startupX4OPhase,
|
||||||
// throw new IllegalStateException("Can't add new phases after first phase is completed.");
|
// throw new IllegalStateException("Can't add new phases after first phase is completed.");
|
||||||
//}
|
//}
|
||||||
x4oPhases.add(phase);
|
x4oPhases.add(phase);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -114,12 +113,12 @@ PHASE_ORDER = { *startupX4OPhase,
|
||||||
*/
|
*/
|
||||||
public List<X4OPhase> getOrderedPhases(X4OPhaseType type) {
|
public List<X4OPhase> getOrderedPhases(X4OPhaseType type) {
|
||||||
List<X4OPhase> result = new ArrayList<X4OPhase>(x4oPhases.size());
|
List<X4OPhase> result = new ArrayList<X4OPhase>(x4oPhases.size());
|
||||||
for (X4OPhase p:x4oPhases) {
|
for (X4OPhase p : x4oPhases) {
|
||||||
if (p.getType().equals(type)) {
|
if (p.getType().equals(type)) {
|
||||||
result.add(p);
|
result.add(p);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Collections.sort(result,new X4OPhaseComparator());
|
Collections.sort(result, new X4OPhaseComparator());
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -127,13 +126,15 @@ PHASE_ORDER = { *startupX4OPhase,
|
||||||
* Runs all the phases in the right order.
|
* Runs all the phases in the right order.
|
||||||
* @throws X4OPhaseException When a running handlers throws one.
|
* @throws X4OPhaseException When a running handlers throws one.
|
||||||
*/
|
*/
|
||||||
public void runPhases(X4OLanguageSession languageSession,X4OPhaseType type) throws X4OPhaseException {
|
public void runPhases(X4OLanguageSession languageSession, X4OPhaseType type) throws X4OPhaseException {
|
||||||
|
// convert to local for state changes
|
||||||
|
X4OLanguageSessionLocal languageSessionLocal = X4OLanguageSessionLocal.class.cast(languageSession);
|
||||||
|
|
||||||
// sort for the order
|
// sort for the order
|
||||||
List<X4OPhase> x4oPhasesOrder = getOrderedPhases(type);
|
List<X4OPhase> x4oPhasesOrder = getOrderedPhases(type);
|
||||||
|
|
||||||
// debug output
|
// debug output
|
||||||
if (languageSession.getX4ODebugWriter()!=null) {
|
if (languageSession.getX4ODebugWriter() != null) {
|
||||||
languageSession.getX4ODebugWriter().debugPhaseOrder(x4oPhasesOrder);
|
languageSession.getX4ODebugWriter().debugPhaseOrder(x4oPhasesOrder);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -141,17 +142,17 @@ PHASE_ORDER = { *startupX4OPhase,
|
||||||
String phaseStop = languageSession.getPhaseStop();
|
String phaseStop = languageSession.getPhaseStop();
|
||||||
|
|
||||||
// run the phases in ordered order
|
// run the phases in ordered order
|
||||||
for (X4OPhase phase:x4oPhasesOrder) {
|
for (X4OPhase phase : x4oPhasesOrder) {
|
||||||
|
|
||||||
if (phaseSkip.contains(phase.getId())) {
|
if (phaseSkip.contains(phase.getId())) {
|
||||||
continue; // skip phase when requested by context
|
continue; // skip phase when requested by context
|
||||||
}
|
}
|
||||||
|
|
||||||
// debug output
|
// debug output
|
||||||
((X4OLanguageSessionLocal)languageSession).setPhaseCurrent(phase);
|
languageSessionLocal.setPhaseCurrent(phase);
|
||||||
|
|
||||||
// run listeners
|
// run listeners
|
||||||
for (X4OPhaseListener l:phase.getPhaseListeners()) {
|
for (X4OPhaseListener l : languageSessionLocal.storePhaseListeners(phase.getId())) {
|
||||||
l.preRunPhase(phase, languageSession);
|
l.preRunPhase(phase, languageSession);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -161,15 +162,15 @@ PHASE_ORDER = { *startupX4OPhase,
|
||||||
phase.runPhase(languageSession);
|
phase.runPhase(languageSession);
|
||||||
|
|
||||||
// run the element phase if possible
|
// run the element phase if possible
|
||||||
executePhaseRoot(languageSession,phase);
|
executePhaseRoot(languageSession, phase);
|
||||||
} finally {
|
} finally {
|
||||||
// run the listeners again
|
// run the listeners again
|
||||||
for (X4OPhaseListener l:phase.getPhaseListeners()) {
|
for (X4OPhaseListener l : languageSessionLocal.storePhaseListeners(phase.getId())) {
|
||||||
l.endRunPhase(phase, languageSession);
|
l.endRunPhase(phase, languageSession);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (phaseStop!=null && phaseStop.equals(phase.getId())) {
|
if (phaseStop != null && phaseStop.equals(phase.getId())) {
|
||||||
return; // we are done
|
return; // we are done
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -188,8 +189,8 @@ PHASE_ORDER = { *startupX4OPhase,
|
||||||
|
|
||||||
// sort for the order
|
// sort for the order
|
||||||
List<X4OPhase> x4oPhasesOrder = getOrderedPhases(type);
|
List<X4OPhase> x4oPhasesOrder = getOrderedPhases(type);
|
||||||
for (X4OPhase phase:x4oPhasesOrder) {
|
for (X4OPhase phase : x4oPhasesOrder) {
|
||||||
if (phase.getId().equals(p.getId())==false) {
|
if (phase.getId().equals(p.getId()) == false) {
|
||||||
continue; // we start running all phases from specified phase
|
continue; // we start running all phases from specified phase
|
||||||
}
|
}
|
||||||
if (phaseSkip.contains(phase.getId())) {
|
if (phaseSkip.contains(phase.getId())) {
|
||||||
|
|
@ -203,9 +204,9 @@ PHASE_ORDER = { *startupX4OPhase,
|
||||||
phase.runPhase(languageSession);
|
phase.runPhase(languageSession);
|
||||||
|
|
||||||
// run the element phase if possible
|
// run the element phase if possible
|
||||||
executePhaseRoot(languageSession,phase);
|
executePhaseRoot(languageSession, phase);
|
||||||
|
|
||||||
if (phaseStop!=null && phaseStop.equals(phase.getId())) {
|
if (phaseStop != null && phaseStop.equals(phase.getId())) {
|
||||||
return; // we are done
|
return; // we are done
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -224,25 +225,25 @@ PHASE_ORDER = { *startupX4OPhase,
|
||||||
if (phaseSkip.contains(X4OPhaseLanguageWrite.WRITE_RELEASE)) {
|
if (phaseSkip.contains(X4OPhaseLanguageWrite.WRITE_RELEASE)) {
|
||||||
releaseRequested = X4OPhaseLanguageWrite.WRITE_RELEASE;
|
releaseRequested = X4OPhaseLanguageWrite.WRITE_RELEASE;
|
||||||
}
|
}
|
||||||
if (releaseRequested==null) {
|
if (releaseRequested == null) {
|
||||||
return; // No manual release requested
|
return; // No manual release requested
|
||||||
//throw new IllegalStateException("No manual release requested.");
|
//throw new IllegalStateException("No manual release requested.");
|
||||||
}
|
}
|
||||||
if (languageSession.getRootElement()==null) {
|
if (languageSession.getRootElement() == null) {
|
||||||
return; // no root element , empty xml document ?
|
return; // no root element , empty xml document ?
|
||||||
}
|
}
|
||||||
if (languageSession.getRootElement().getElementClass()==null) {
|
if (languageSession.getRootElement().getElementClass() == null) {
|
||||||
throw new IllegalStateException("Release phase has already been runned.");
|
throw new IllegalStateException("Release phase has already been runned.");
|
||||||
}
|
}
|
||||||
|
|
||||||
X4OPhase h = null;
|
X4OPhase h = null;
|
||||||
for (X4OPhase phase:x4oPhases) {
|
for (X4OPhase phase : x4oPhases) {
|
||||||
if (phase.getId().equals(releaseRequested)) {
|
if (phase.getId().equals(releaseRequested)) {
|
||||||
h = phase;
|
h = phase;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (h==null) {
|
if (h == null) {
|
||||||
throw new IllegalStateException("No release phase found in manager to run.");
|
throw new IllegalStateException("No release phase found in manager to run.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -253,7 +254,7 @@ PHASE_ORDER = { *startupX4OPhase,
|
||||||
h.runPhase(languageSession);
|
h.runPhase(languageSession);
|
||||||
|
|
||||||
// run the element phase if possible
|
// run the element phase if possible
|
||||||
executePhaseRoot(languageSession,h);
|
executePhaseRoot(languageSession, h);
|
||||||
}
|
}
|
||||||
|
|
||||||
class X4OPhaseComparator implements Comparator<X4OPhase> {
|
class X4OPhaseComparator implements Comparator<X4OPhase> {
|
||||||
|
|
@ -265,7 +266,7 @@ PHASE_ORDER = { *startupX4OPhase,
|
||||||
String pid = e1.getId();
|
String pid = e1.getId();
|
||||||
String[] dpids = e2.getPhaseDependencies();
|
String[] dpids = e2.getPhaseDependencies();
|
||||||
|
|
||||||
for (int i=0;i<dpids.length;i++) {
|
for (int i = 0; i < dpids.length; i++) {
|
||||||
String dpid = dpids[i];
|
String dpid = dpids[i];
|
||||||
if (pid.equals(dpid)) {
|
if (pid.equals(dpid)) {
|
||||||
return -1;
|
return -1;
|
||||||
|
|
@ -315,8 +316,8 @@ PHASE_ORDER = { *startupX4OPhase,
|
||||||
* @param phase The phase to run.
|
* @param phase The phase to run.
|
||||||
* @throws X4OPhaseException When a running handlers throws one.
|
* @throws X4OPhaseException When a running handlers throws one.
|
||||||
*/
|
*/
|
||||||
private void executePhaseRoot(X4OLanguageSession elementLanguage,X4OPhase phase) throws X4OPhaseException {
|
private void executePhaseRoot(X4OLanguageSession elementLanguage, X4OPhase phase) throws X4OPhaseException {
|
||||||
if (elementLanguage.getRootElement()==null) {
|
if (elementLanguage.getRootElement() == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
executePhaseTree(elementLanguage.getRootElement(),phase);
|
executePhaseTree(elementLanguage.getRootElement(),phase);
|
||||||
|
|
@ -329,8 +330,8 @@ PHASE_ORDER = { *startupX4OPhase,
|
||||||
* @param phase The phase to run.
|
* @param phase The phase to run.
|
||||||
* @throws X4OPhaseException
|
* @throws X4OPhaseException
|
||||||
*/
|
*/
|
||||||
private void executePhaseTree(Element element,X4OPhase phase) throws X4OPhaseException {
|
private void executePhaseTree(Element element, X4OPhase phase) throws X4OPhaseException {
|
||||||
if (element.getElementClass()!=null && element.getElementClass().getSkipPhases().contains(phase.getId())==false) {
|
if (element.getElementClass() != null && element.getElementClass().getSkipPhases().contains(phase.getId()) == false) {
|
||||||
phase.runElementPhase(element);
|
phase.runElementPhase(element);
|
||||||
}
|
}
|
||||||
for (Element e:element.getChilderen()) {
|
for (Element e:element.getChilderen()) {
|
||||||
|
|
|
||||||
|
|
@ -22,12 +22,9 @@
|
||||||
*/
|
*/
|
||||||
package org.x4o.xml.lang.phase;
|
package org.x4o.xml.lang.phase;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.x4o.xml.element.Element;
|
import org.x4o.xml.element.Element;
|
||||||
import org.x4o.xml.lang.X4OLanguageSession;
|
import org.x4o.xml.lang.X4OLanguageSession;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* X4OPhase is one small step in the read or write process of the language.
|
* X4OPhase is one small step in the read or write process of the language.
|
||||||
*
|
*
|
||||||
|
|
@ -59,24 +56,6 @@ public interface X4OPhase {
|
||||||
*/
|
*/
|
||||||
void runPhase(X4OLanguageSession elementLanguage) throws X4OPhaseException;
|
void runPhase(X4OLanguageSession elementLanguage) throws X4OPhaseException;
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns all phase listeners which where added.
|
|
||||||
* @return All X4OPhaseListeners.
|
|
||||||
*/
|
|
||||||
List<X4OPhaseListener> getPhaseListeners();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Adds an X4OPhaseListener.
|
|
||||||
* @param listener The listener to add.
|
|
||||||
*/
|
|
||||||
void addPhaseListener(X4OPhaseListener listener);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Removes an X4OPhaseListener.
|
|
||||||
* @param listener The listener to remove.
|
|
||||||
*/
|
|
||||||
void removePhaseListener(X4OPhaseListener listener);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* runPhase is called but should do nothig.
|
* runPhase is called but should do nothig.
|
||||||
* When elementPhase is enables x4o tries to merge all element phases so
|
* When elementPhase is enables x4o tries to merge all element phases so
|
||||||
|
|
|
||||||
|
|
@ -76,7 +76,7 @@ public class X4OPhaseLanguageInit {
|
||||||
}
|
}
|
||||||
public void runElementPhase(Element element) throws X4OPhaseException {
|
public void runElementPhase(Element element) throws X4OPhaseException {
|
||||||
}
|
}
|
||||||
public void runPhase(X4OLanguageSession languageSession) throws X4OPhaseException {
|
public void runPhase(X4OLanguageSession languageSession) throws X4OPhaseException {
|
||||||
logger.finest("Run init start phase");
|
logger.finest("Run init start phase");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
@ -100,11 +100,12 @@ public class X4OPhaseLanguageInit {
|
||||||
}
|
}
|
||||||
public void runElementPhase(Element element) throws X4OPhaseException {
|
public void runElementPhase(Element element) throws X4OPhaseException {
|
||||||
}
|
}
|
||||||
public void runPhase(X4OLanguageSession languageSession) throws X4OPhaseException {
|
public void runPhase(X4OLanguageSession languageSession) throws X4OPhaseException {
|
||||||
try {
|
try {
|
||||||
//debugPhaseMessage("Loading main language: "+elementLanguage.getLanguage(),this,elementLanguage);
|
debugPhaseMessage(languageSession, "Load main language: " + languageSession.getLanguage().getLanguageName());
|
||||||
X4OLanguageLoader loader = X4OLanguageClassLoader.newInstance(X4OLanguageLoader.class, languageSession.getLanguage().getLanguageConfiguration().getDefaultLanguageLoader());
|
X4OLanguageLoader loader = X4OLanguageClassLoader.newInstance(X4OLanguageLoader.class, languageSession.getLanguage().getLanguageConfiguration().getDefaultLanguageLoader());
|
||||||
loader.loadLanguage((X4OLanguageLocal)languageSession.getLanguage(),languageSession.getLanguage().getLanguageName(),languageSession.getLanguage().getLanguageVersion());
|
X4OLanguageLocal language = (X4OLanguageLocal)languageSession.getLanguage();
|
||||||
|
loader.loadLanguage(languageSession, language, language.getLanguageName(), language.getLanguageVersion());
|
||||||
|
|
||||||
if (languageSession.hasX4ODebugWriter()) {
|
if (languageSession.hasX4ODebugWriter()) {
|
||||||
languageSession.getX4ODebugWriter().debugElementLanguageModules(languageSession);
|
languageSession.getX4ODebugWriter().debugElementLanguageModules(languageSession);
|
||||||
|
|
@ -142,9 +143,10 @@ public class X4OPhaseLanguageInit {
|
||||||
try {
|
try {
|
||||||
if (siblingLoaders.isEmpty()==false) {
|
if (siblingLoaders.isEmpty()==false) {
|
||||||
X4OLanguageLoader loader = X4OLanguageClassLoader.newInstance(X4OLanguageLoader.class, languageSession.getLanguage().getLanguageConfiguration().getDefaultLanguageLoader());
|
X4OLanguageLoader loader = X4OLanguageClassLoader.newInstance(X4OLanguageLoader.class, languageSession.getLanguage().getLanguageConfiguration().getDefaultLanguageLoader());
|
||||||
|
X4OLanguageLocal language = (X4OLanguageLocal)languageSession.getLanguage();
|
||||||
for (X4OLanguageModuleLoaderSibling siblingLoader:siblingLoaders) {
|
for (X4OLanguageModuleLoaderSibling siblingLoader:siblingLoaders) {
|
||||||
//debugPhaseMessage("Loading sibling langauge loader: "+siblingLoader,this,elementLanguage);
|
debugPhaseMessage(languageSession, "Loading sibling langauge loader: " + siblingLoader);
|
||||||
siblingLoader.loadLanguageSibling((X4OLanguageLocal)languageSession.getLanguage(), loader);
|
siblingLoader.loadLanguageSibling(languageSession, language, loader);
|
||||||
}
|
}
|
||||||
if (languageSession.hasX4ODebugWriter()) {
|
if (languageSession.hasX4ODebugWriter()) {
|
||||||
languageSession.getX4ODebugWriter().debugElementLanguageModules(languageSession);
|
languageSession.getX4ODebugWriter().debugElementLanguageModules(languageSession);
|
||||||
|
|
@ -175,7 +177,7 @@ public class X4OPhaseLanguageInit {
|
||||||
}
|
}
|
||||||
public void runElementPhase(Element element) throws X4OPhaseException {
|
public void runElementPhase(Element element) throws X4OPhaseException {
|
||||||
}
|
}
|
||||||
public void runPhase(X4OLanguageSession languageSession) throws X4OPhaseException {
|
public void runPhase(X4OLanguageSession languageSession) throws X4OPhaseException {
|
||||||
logger.finest("Run init end phase");
|
logger.finest("Run init end phase");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,6 @@ import java.util.logging.Logger;
|
||||||
import org.x4o.xml.conv.ObjectConverterException;
|
import org.x4o.xml.conv.ObjectConverterException;
|
||||||
import org.x4o.xml.element.Element;
|
import org.x4o.xml.element.Element;
|
||||||
import org.x4o.xml.element.ElementNamespaceAttribute;
|
import org.x4o.xml.element.ElementNamespaceAttribute;
|
||||||
import org.x4o.xml.io.X4ODebugWriter;
|
|
||||||
import org.x4o.xml.element.ElementAttributeValueParser;
|
import org.x4o.xml.element.ElementAttributeValueParser;
|
||||||
import org.x4o.xml.element.ElementBindingHandler;
|
import org.x4o.xml.element.ElementBindingHandler;
|
||||||
import org.x4o.xml.element.ElementClassAttribute;
|
import org.x4o.xml.element.ElementClassAttribute;
|
||||||
|
|
@ -44,8 +43,6 @@ import org.x4o.xml.element.ElementNamespace;
|
||||||
import org.x4o.xml.lang.X4OLanguageModule;
|
import org.x4o.xml.lang.X4OLanguageModule;
|
||||||
import org.x4o.xml.lang.X4OLanguageSession;
|
import org.x4o.xml.lang.X4OLanguageSession;
|
||||||
import org.x4o.xml.lang.X4OLanguageClassLoader;
|
import org.x4o.xml.lang.X4OLanguageClassLoader;
|
||||||
import org.xml.sax.SAXException;
|
|
||||||
import org.xml.sax.helpers.AttributesImpl;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Factory which can create X4OPhaseHandlers for all the predefined phases used in default x4o language parsing.
|
* Factory which can create X4OPhaseHandlers for all the predefined phases used in default x4o language parsing.
|
||||||
|
|
@ -113,16 +110,6 @@ public class X4OPhaseLanguageRead {
|
||||||
// We are done
|
// We are done
|
||||||
}
|
}
|
||||||
|
|
||||||
private void debugPhaseMessage(String message,X4OPhase phaseHandler,X4OLanguageSession languageSession) throws X4OPhaseException {
|
|
||||||
if (languageSession.hasX4ODebugWriter()) {
|
|
||||||
try {
|
|
||||||
languageSession.getX4ODebugWriter().debugPhaseMessage(message,phaseHandler.getClass());
|
|
||||||
} catch (ElementException ee) {
|
|
||||||
throw new X4OPhaseException(phaseHandler,ee);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates the startX4OPhase which is a empty meta phase.
|
* Creates the startX4OPhase which is a empty meta phase.
|
||||||
*/
|
*/
|
||||||
|
|
@ -431,7 +418,7 @@ public class X4OPhaseLanguageRead {
|
||||||
class X4OPhaseReadRunDirty extends AbstractX4OPhase {
|
class X4OPhaseReadRunDirty extends AbstractX4OPhase {
|
||||||
private X4OPhaseManager phaseManager = null;
|
private X4OPhaseManager phaseManager = null;
|
||||||
public X4OPhaseReadRunDirty(X4OPhaseManager phaseManager) {
|
public X4OPhaseReadRunDirty(X4OPhaseManager phaseManager) {
|
||||||
this.phaseManager=phaseManager;
|
this.phaseManager = phaseManager;
|
||||||
}
|
}
|
||||||
public X4OPhaseType getType() {
|
public X4OPhaseType getType() {
|
||||||
return X4OPhaseType.XML_READ;
|
return X4OPhaseType.XML_READ;
|
||||||
|
|
@ -447,9 +434,9 @@ public class X4OPhaseLanguageRead {
|
||||||
if (dirtyElements.isEmpty()) {
|
if (dirtyElements.isEmpty()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
debugPhaseMessage("Dirty elements: "+dirtyElements.size(), this,element.getLanguageSession());
|
debugPhaseMessage(element.getLanguageSession(), "Dirty elements: " + dirtyElements.size());
|
||||||
X4OPhase p = phaseManager.getPhase(READ_BEGIN);
|
X4OPhase p = phaseManager.getPhase(READ_BEGIN);
|
||||||
for (Element e:dirtyElements) {
|
for (Element e : dirtyElements) {
|
||||||
phaseManager.runPhasesForElement(e,getType(), p);
|
phaseManager.runPhasesForElement(e,getType(), p);
|
||||||
}
|
}
|
||||||
element.getLanguageSession().getDirtyElements().clear();
|
element.getLanguageSession().getDirtyElements().clear();
|
||||||
|
|
@ -462,7 +449,7 @@ public class X4OPhaseLanguageRead {
|
||||||
class X4OPhaseReadRunDirtyLast extends AbstractX4OPhase {
|
class X4OPhaseReadRunDirtyLast extends AbstractX4OPhase {
|
||||||
private X4OPhaseManager phaseManager = null;
|
private X4OPhaseManager phaseManager = null;
|
||||||
public X4OPhaseReadRunDirtyLast(X4OPhaseManager phaseManager) {
|
public X4OPhaseReadRunDirtyLast(X4OPhaseManager phaseManager) {
|
||||||
this.phaseManager=phaseManager;
|
this.phaseManager = phaseManager;
|
||||||
}
|
}
|
||||||
public X4OPhaseType getType() {
|
public X4OPhaseType getType() {
|
||||||
return X4OPhaseType.XML_READ;
|
return X4OPhaseType.XML_READ;
|
||||||
|
|
@ -478,9 +465,9 @@ public class X4OPhaseLanguageRead {
|
||||||
if (dirtyElements.isEmpty()) {
|
if (dirtyElements.isEmpty()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
debugPhaseMessage("Dirty elements last: "+dirtyElements.size(), this,element.getLanguageSession());
|
debugPhaseMessage(element.getLanguageSession(), "Dirty elements last: " + dirtyElements.size());
|
||||||
X4OPhase p = phaseManager.getPhase(READ_BEGIN);
|
X4OPhase p = phaseManager.getPhase(READ_BEGIN);
|
||||||
for (Element e:dirtyElements) {
|
for (Element e : dirtyElements) {
|
||||||
phaseManager.runPhasesForElement(e,getType(), p);
|
phaseManager.runPhasesForElement(e,getType(), p);
|
||||||
}
|
}
|
||||||
element.getLanguageSession().getDirtyElements().clear();
|
element.getLanguageSession().getDirtyElements().clear();
|
||||||
|
|
@ -644,7 +631,6 @@ public class X4OPhaseLanguageRead {
|
||||||
// print the properties and classes for this language/config
|
// print the properties and classes for this language/config
|
||||||
if (languageSession.hasX4ODebugWriter()) {
|
if (languageSession.hasX4ODebugWriter()) {
|
||||||
try {
|
try {
|
||||||
//languageSession.getX4ODebugWriter().debugLanguageProperties(languageSession);
|
|
||||||
languageSession.getX4ODebugWriter().debugLanguageDefaultClasses(languageSession);
|
languageSession.getX4ODebugWriter().debugLanguageDefaultClasses(languageSession);
|
||||||
} catch (ElementException e) {
|
} catch (ElementException e) {
|
||||||
throw new X4OPhaseException(this,e);
|
throw new X4OPhaseException(this,e);
|
||||||
|
|
@ -659,18 +645,13 @@ public class X4OPhaseLanguageRead {
|
||||||
*/
|
*/
|
||||||
public X4OPhase releasePhase() {
|
public X4OPhase releasePhase() {
|
||||||
|
|
||||||
// for debug output
|
// for debug output TODO: redo release counters
|
||||||
|
/*
|
||||||
class ReleasePhaseListener implements X4OPhaseListener {
|
class ReleasePhaseListener implements X4OPhaseListener {
|
||||||
private int elementsReleased = 0;
|
private int elementsReleased = 0;
|
||||||
/**
|
|
||||||
* @see org.x4o.xml.lang.phase.X4OPhaseListener#preRunPhase(org.x4o.xml.lang.phase.X4OPhase, org.x4o.xml.lang.X4OLanguageSession)
|
|
||||||
*/
|
|
||||||
public void preRunPhase(X4OPhase phase,X4OLanguageSession languageSession) throws X4OPhaseException {
|
public void preRunPhase(X4OPhase phase,X4OLanguageSession languageSession) throws X4OPhaseException {
|
||||||
elementsReleased=0;
|
elementsReleased=0;
|
||||||
}
|
}
|
||||||
/**
|
|
||||||
* @see org.x4o.xml.lang.phase.X4OPhaseListener#endRunPhase(org.x4o.xml.lang.phase.X4OPhase, org.x4o.xml.lang.X4OLanguageSession)
|
|
||||||
*/
|
|
||||||
public void endRunPhase(X4OPhase phase,X4OLanguageSession languageSession) throws X4OPhaseException {
|
public void endRunPhase(X4OPhase phase,X4OLanguageSession languageSession) throws X4OPhaseException {
|
||||||
if (languageSession.hasX4ODebugWriter()==false) {
|
if (languageSession.hasX4ODebugWriter()==false) {
|
||||||
return;
|
return;
|
||||||
|
|
@ -689,8 +670,9 @@ public class X4OPhaseLanguageRead {
|
||||||
elementsReleased++;
|
elementsReleased++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
final ReleasePhaseListener releaseCounter = new ReleasePhaseListener();
|
//final ReleasePhaseListener releaseCounter = new ReleasePhaseListener();
|
||||||
X4OPhase result = new AbstractX4OPhase() {
|
X4OPhase result = new AbstractX4OPhase() {
|
||||||
public X4OPhaseType getType() {
|
public X4OPhaseType getType() {
|
||||||
return X4OPhaseType.XML_READ;
|
return X4OPhaseType.XML_READ;
|
||||||
|
|
@ -708,12 +690,12 @@ public class X4OPhaseLanguageRead {
|
||||||
element.release();
|
element.release();
|
||||||
} catch (ElementException e) {
|
} catch (ElementException e) {
|
||||||
throw new X4OPhaseException(this,e);
|
throw new X4OPhaseException(this,e);
|
||||||
} finally {
|
}// finally {
|
||||||
releaseCounter.addReleasedElement();
|
// releaseCounter.addReleasedElement();
|
||||||
}
|
//}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
result.addPhaseListener(releaseCounter);
|
//result.addPhaseListener(releaseCounter);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,6 @@ import org.x4o.xml.X4ODriverManager;
|
||||||
import org.x4o.xml.lang.X4OLanguage;
|
import org.x4o.xml.lang.X4OLanguage;
|
||||||
import org.x4o.xml.lang.task.X4OLanguageTask;
|
import org.x4o.xml.lang.task.X4OLanguageTask;
|
||||||
import org.x4o.xml.lang.task.X4OLanguageTaskException;
|
import org.x4o.xml.lang.task.X4OLanguageTaskException;
|
||||||
import org.x4o.xml.lang.task.X4OLanguageTaskExecutor;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* X4OLanguageTaskCommandLine runs a language task from the command line.
|
* X4OLanguageTaskCommandLine runs a language task from the command line.
|
||||||
|
|
@ -87,9 +86,8 @@ public class X4OTaskCommandLine {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void executeLanguageTask() throws X4OLanguageTaskException {
|
private void executeLanguageTask() throws X4OLanguageTaskException {
|
||||||
X4OLanguageTaskExecutor taskExecutor = task.createTaskExecutor(config);
|
X4OLanguage language = driver.createLanguage(); // TODO: also add support for version select
|
||||||
X4OLanguage language = driver.createLanguage();
|
X4OTaskRunner.runTaskLanguage(task, language, config);
|
||||||
taskExecutor.execute(language);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void systemErrExit(String message) {
|
private void systemErrExit(String message) {
|
||||||
|
|
|
||||||
|
|
@ -27,38 +27,53 @@ import java.util.List;
|
||||||
import org.x4o.sax3.io.SAX3PropertyConfig;
|
import org.x4o.sax3.io.SAX3PropertyConfig;
|
||||||
import org.x4o.xml.X4ODriver;
|
import org.x4o.xml.X4ODriver;
|
||||||
import org.x4o.xml.X4ODriverManager;
|
import org.x4o.xml.X4ODriverManager;
|
||||||
|
import org.x4o.xml.io.X4OConnectionException;
|
||||||
import org.x4o.xml.lang.X4OLanguage;
|
import org.x4o.xml.lang.X4OLanguage;
|
||||||
|
import org.x4o.xml.lang.X4OLanguageLocal;
|
||||||
|
import org.x4o.xml.lang.X4OLanguageSession;
|
||||||
|
import org.x4o.xml.lang.phase.X4OPhaseException;
|
||||||
import org.x4o.xml.lang.task.X4OLanguageTask;
|
import org.x4o.xml.lang.task.X4OLanguageTask;
|
||||||
import org.x4o.xml.lang.task.X4OLanguageTaskException;
|
import org.x4o.xml.lang.task.X4OLanguageTaskException;
|
||||||
import org.x4o.xml.lang.task.X4OLanguageTaskExecutor;
|
import org.x4o.xml.lang.task.X4OLanguageTaskExecutor;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* X4OTaskRunner finds all x4o objects and configs and then run the x4o langauge task.
|
* X4OTaskRunner finds all x4o objects and configs and then run the x4o langauge
|
||||||
|
* task.
|
||||||
*
|
*
|
||||||
* @author Willem Cazander
|
* @author Willem Cazander
|
||||||
* @version 1.0 Aug 30, 2013
|
* @version 1.0 Aug 30, 2013
|
||||||
*/
|
*/
|
||||||
public final class X4OTaskRunner {
|
public final class X4OTaskRunner {
|
||||||
|
|
||||||
static public void runTask(String languageName,String languageVersion,String taskId,List<X4OTaskProperty> props) throws X4OLanguageTaskException {
|
static public void runTask(String languageName, String languageVersion, String taskId, List<X4OTaskProperty> props) throws X4OLanguageTaskException {
|
||||||
X4ODriver<?> driver = X4ODriverManager.getX4ODriver(languageName);
|
X4ODriver<?> driver = X4ODriverManager.getX4ODriver(languageName);
|
||||||
X4OLanguageTask task = driver.getLanguageTask(taskId);
|
X4OLanguageTask task = driver.getLanguageTask(taskId);
|
||||||
if (task==null) {
|
if (task == null) {
|
||||||
throw new NullPointerException("Could not find x4o task with id; "+taskId);
|
throw new NullPointerException("Could not find x4o task with id; " + taskId);
|
||||||
}
|
}
|
||||||
SAX3PropertyConfig config = task.createTaskConfig();
|
SAX3PropertyConfig config = task.createTaskConfig();
|
||||||
for (X4OTaskProperty prop:props) {
|
for (X4OTaskProperty prop : props) {
|
||||||
String key = prop.getKey();
|
String key = prop.getKey();
|
||||||
String value = prop.getValue();
|
String value = prop.getValue();
|
||||||
config.setPropertyParsedValue(key, value);
|
config.setPropertyParsedValue(key, value);
|
||||||
}
|
}
|
||||||
X4OLanguageTaskExecutor taskExecutor = task.createTaskExecutor(config);
|
|
||||||
X4OLanguage language = null;
|
X4OLanguage language = null;
|
||||||
if (languageVersion==null) {
|
if (languageVersion == null) {
|
||||||
language = driver.createLanguage();
|
language = driver.createLanguage();
|
||||||
} else {
|
} else {
|
||||||
language = driver.createLanguage(languageVersion);
|
language = driver.createLanguage(languageVersion);
|
||||||
}
|
}
|
||||||
|
runTaskLanguage(task, language, config);
|
||||||
|
}
|
||||||
|
|
||||||
|
static public void runTaskLanguage(X4OLanguageTask task, X4OLanguage language, SAX3PropertyConfig config) throws X4OLanguageTaskException {
|
||||||
|
X4OLanguageTaskExecutor taskExecutor = task.createTaskExecutor(config);
|
||||||
|
// Run init to load the language, which is 'normally' in read or write for deep recursief debugging support.
|
||||||
|
try (X4OLanguageSession session = language.createLanguageSession()) {
|
||||||
|
X4OLanguageLocal.class.cast(language).init(session);
|
||||||
|
} catch (X4OConnectionException | X4OPhaseException e) {
|
||||||
|
throw new X4OLanguageTaskException(config, e.getMessage(), e);
|
||||||
|
}
|
||||||
taskExecutor.execute(language);
|
taskExecutor.execute(language);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,10 @@ import java.util.List;
|
||||||
|
|
||||||
import org.junit.jupiter.api.Assertions;
|
import org.junit.jupiter.api.Assertions;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.x4o.xml.lang.X4OLanguage;
|
||||||
|
import org.x4o.xml.lang.X4OLanguageLocal;
|
||||||
|
import org.x4o.xml.lang.X4OLanguageSession;
|
||||||
|
import org.x4o.xml.lang.X4OLanguageSessionLocal;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* X4ODriverManager
|
* X4ODriverManager
|
||||||
|
|
@ -86,12 +90,13 @@ public class X4ODriverManagerTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLanguageVersionNonExcisting() throws Exception {
|
public void testLanguageVersionNonExcisting() throws Exception {
|
||||||
String language = "test";
|
String languageTest = "test";
|
||||||
String version = "99.9";
|
String versionTest = "99.9";
|
||||||
Throwable e = null;
|
Throwable e = null;
|
||||||
try {
|
try {
|
||||||
X4ODriver<?> driver = X4ODriverManager.getX4ODriver(language);
|
X4ODriver<?> driver = X4ODriverManager.getX4ODriver(languageTest);
|
||||||
driver.createLanguage(version).createLanguageSession();
|
X4OLanguage language = driver.createLanguage(versionTest);
|
||||||
|
X4OLanguageLocal.class.cast(language).init(language.createLanguageSession());
|
||||||
} catch (Throwable catchE) {
|
} catch (Throwable catchE) {
|
||||||
e = catchE;
|
e = catchE;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -28,13 +28,18 @@ import java.io.FileInputStream;
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.OutputStream;
|
||||||
import java.nio.charset.Charset;
|
import java.nio.charset.Charset;
|
||||||
|
|
||||||
import org.junit.jupiter.api.Assertions;
|
import org.junit.jupiter.api.Assertions;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.x4o.sax3.SAX3WriterXml;
|
||||||
|
import org.x4o.sax3.io.ContentCloseable;
|
||||||
|
import org.x4o.sax3.io.ContentWriter;
|
||||||
import org.x4o.xml.X4ODriver;
|
import org.x4o.xml.X4ODriver;
|
||||||
import org.x4o.xml.io.DefaultX4OReader;
|
import org.x4o.xml.io.DefaultX4OReader;
|
||||||
import org.x4o.xml.io.DefaultX4OWriter;
|
import org.x4o.xml.io.DefaultX4OWriter;
|
||||||
|
import org.x4o.xml.io.X4ODebugWriter;
|
||||||
import org.x4o.xml.io.X4OReader;
|
import org.x4o.xml.io.X4OReader;
|
||||||
import org.x4o.xml.io.X4OWriter;
|
import org.x4o.xml.io.X4OWriter;
|
||||||
import org.x4o.xml.test.TestDriver;
|
import org.x4o.xml.test.TestDriver;
|
||||||
|
|
@ -77,8 +82,13 @@ public class X4ODebugWriterTest {
|
||||||
File debugFile = createDebugFile();
|
File debugFile = createDebugFile();
|
||||||
X4ODriver<TestObjectRoot> driver = TestDriver.getInstance();
|
X4ODriver<TestObjectRoot> driver = TestDriver.getInstance();
|
||||||
X4OReader<TestObjectRoot> reader = driver.createReader();
|
X4OReader<TestObjectRoot> reader = driver.createReader();
|
||||||
reader.setProperty(DefaultX4OReader.DEBUG_OUTPUT_STREAM, new FileOutputStream(debugFile));
|
try (ContentWriter debugHandler = new SAX3WriterXml(new FileOutputStream(debugFile))) {
|
||||||
reader.readResource("tests/attributes/test-bean.xml");
|
try (ContentCloseable docClosure = debugHandler.startDocumentClosure()) {
|
||||||
|
debugHandler.startPrefixMapping(X4ODebugWriter.DEBUG_URI_NS, X4ODebugWriter.DEBUG_URI);
|
||||||
|
reader.setProperty(DefaultX4OReader.DEBUG_OUTPUT_HANDLER, debugHandler);
|
||||||
|
reader.readResource("tests/attributes/test-bean.xml");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Assertions.assertTrue(debugFile.exists(), "Debug file does not exists.");
|
Assertions.assertTrue(debugFile.exists(), "Debug file does not exists.");
|
||||||
String debug = readFile(debugFile);
|
String debug = readFile(debugFile);
|
||||||
|
|
@ -86,8 +96,8 @@ public class X4ODebugWriterTest {
|
||||||
Assertions.assertFalse(debug.length()==0, "no debug content");
|
Assertions.assertFalse(debug.length()==0, "no debug content");
|
||||||
Assertions.assertTrue(debug.length()>20, "debug content to small");
|
Assertions.assertTrue(debug.length()>20, "debug content to small");
|
||||||
|
|
||||||
System.out.println("=================== Reader Output ======================");
|
//System.out.println("=================== Reader Output ======================");
|
||||||
System.out.println(debug);
|
//System.out.println(debug);
|
||||||
debugFile.delete();
|
debugFile.delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -100,8 +110,10 @@ public class X4ODebugWriterTest {
|
||||||
X4OWriter<TestObjectRoot> writer = driver.createWriter();
|
X4OWriter<TestObjectRoot> writer = driver.createWriter();
|
||||||
TestObjectRoot object = reader.readResource("tests/attributes/test-bean.xml");
|
TestObjectRoot object = reader.readResource("tests/attributes/test-bean.xml");
|
||||||
|
|
||||||
writer.setProperty(DefaultX4OWriter.DEBUG_OUTPUT_STREAM, new FileOutputStream(debugFile));
|
try (OutputStream out = new FileOutputStream(debugFile)) {
|
||||||
writer.writeFile(object, writeFile);
|
writer.setProperty(DefaultX4OWriter.DEBUG_OUTPUT_STREAM, out);
|
||||||
|
writer.writeFile(object, writeFile);
|
||||||
|
}
|
||||||
|
|
||||||
Assertions.assertTrue(debugFile.exists(), "Debug file does not exists.");
|
Assertions.assertTrue(debugFile.exists(), "Debug file does not exists.");
|
||||||
String debug = readFile(debugFile);
|
String debug = readFile(debugFile);
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,8 @@ import org.x4o.xml.X4ODriver;
|
||||||
import org.x4o.xml.eld.CelDriver;
|
import org.x4o.xml.eld.CelDriver;
|
||||||
import org.x4o.xml.io.DefaultX4OReader;
|
import org.x4o.xml.io.DefaultX4OReader;
|
||||||
import org.x4o.xml.io.X4OEntityResolver;
|
import org.x4o.xml.io.X4OEntityResolver;
|
||||||
|
import org.x4o.xml.lang.X4OLanguage;
|
||||||
|
import org.x4o.xml.lang.X4OLanguageLocal;
|
||||||
import org.x4o.xml.lang.X4OLanguageSession;
|
import org.x4o.xml.lang.X4OLanguageSession;
|
||||||
import org.x4o.xml.test.TestDriver;
|
import org.x4o.xml.test.TestDriver;
|
||||||
import org.x4o.xml.test.models.TestObjectRoot;
|
import org.x4o.xml.test.models.TestObjectRoot;
|
||||||
|
|
@ -62,14 +64,19 @@ public class X4OEntityResolverTest {
|
||||||
@Test
|
@Test
|
||||||
public void testResolve() throws Exception {
|
public void testResolve() throws Exception {
|
||||||
X4ODriver<?> driver = new CelDriver();
|
X4ODriver<?> driver = new CelDriver();
|
||||||
X4OEntityResolver resolver = new X4OEntityResolver(driver.createLanguage().createLanguageSession(),DefaultX4OReader.DEFAULT_PROPERTY_CONFIG);
|
X4OLanguage language = driver.createLanguage();
|
||||||
InputSource input = resolver.resolveEntity("","http://cel.x4o.org/xml/ns/cel-root-1.0.xsd");
|
try (X4OLanguageSession session = language.createLanguageSession()) {
|
||||||
Assertions.assertNotNull(input);
|
X4OLanguageLocal.class.cast(language).init(session);
|
||||||
|
X4OEntityResolver resolver = new X4OEntityResolver(session, DefaultX4OReader.DEFAULT_PROPERTY_CONFIG);
|
||||||
|
InputSource input = resolver.resolveEntity("","http://cel.x4o.org/xml/ns/cel-root-1.0.xsd");
|
||||||
|
Assertions.assertNotNull(input);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testResolveMissing() throws Exception {
|
public void testResolveMissing() throws Exception {
|
||||||
X4ODriver<TestObjectRoot> driver = new TestDriver();
|
X4ODriver<TestObjectRoot> driver = new TestDriver();
|
||||||
|
// NOTE: this session is not inited, see fix code above.
|
||||||
X4OEntityResolver resolver = new X4OEntityResolver(driver.createLanguage().createLanguageSession(),DefaultX4OReader.DEFAULT_PROPERTY_CONFIG);
|
X4OEntityResolver resolver = new X4OEntityResolver(driver.createLanguage().createLanguageSession(),DefaultX4OReader.DEFAULT_PROPERTY_CONFIG);
|
||||||
Exception e = null;
|
Exception e = null;
|
||||||
try {
|
try {
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,7 @@ import org.x4o.xml.X4ODriverManager;
|
||||||
import org.x4o.xml.eld.CelDriver;
|
import org.x4o.xml.eld.CelDriver;
|
||||||
import org.x4o.xml.eld.EldDriver;
|
import org.x4o.xml.eld.EldDriver;
|
||||||
import org.x4o.xml.lang.task.X4OLanguageTask;
|
import org.x4o.xml.lang.task.X4OLanguageTask;
|
||||||
|
import org.x4o.xml.lang.task.run.X4OTaskRunner;
|
||||||
import org.x4o.xml.test.TestDriver;
|
import org.x4o.xml.test.TestDriver;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -56,7 +57,7 @@ public class X4OWriteLanguageDocExecutorTest {
|
||||||
SAX3PropertyConfig config = task.createTaskConfig();
|
SAX3PropertyConfig config = task.createTaskConfig();
|
||||||
File outputPath = createOutputPath(outputPostfix);
|
File outputPath = createOutputPath(outputPostfix);
|
||||||
config.setProperty(EldDocWriter.OUTPUT_PATH,outputPath);
|
config.setProperty(EldDocWriter.OUTPUT_PATH,outputPath);
|
||||||
task.createTaskExecutor(config).execute(driver.createLanguage());
|
X4OTaskRunner.runTaskLanguage(task, driver.createLanguage(), config);
|
||||||
Assertions.assertTrue(outputPath.exists());
|
Assertions.assertTrue(outputPath.exists());
|
||||||
Assertions.assertTrue(outputPath.list()!=null);
|
Assertions.assertTrue(outputPath.list()!=null);
|
||||||
Assertions.assertTrue(outputPath.list().length>2);
|
Assertions.assertTrue(outputPath.list().length>2);
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,7 @@ import org.x4o.xml.eld.EldDriver;
|
||||||
import org.x4o.xml.eld.EldModuleLoaderCore;
|
import org.x4o.xml.eld.EldModuleLoaderCore;
|
||||||
import org.x4o.xml.io.X4OWriterTest;
|
import org.x4o.xml.io.X4OWriterTest;
|
||||||
import org.x4o.xml.lang.task.X4OLanguageTask;
|
import org.x4o.xml.lang.task.X4OLanguageTask;
|
||||||
|
import org.x4o.xml.lang.task.run.X4OTaskRunner;
|
||||||
import org.x4o.xml.test.swixml.SwiXmlDriver;
|
import org.x4o.xml.test.swixml.SwiXmlDriver;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -71,7 +72,7 @@ public class EldXsdLanguageTaskTest {
|
||||||
config.setProperty(key, value);
|
config.setProperty(key, value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
task.createTaskExecutor(config).execute(driver.createLanguage());
|
X4OTaskRunner.runTaskLanguage(task, driver.createLanguage(), config);
|
||||||
Assertions.assertTrue(outputPath.exists());
|
Assertions.assertTrue(outputPath.exists());
|
||||||
Assertions.assertTrue(outputPath.list()!=null);
|
Assertions.assertTrue(outputPath.list()!=null);
|
||||||
return outputPath;
|
return outputPath;
|
||||||
|
|
|
||||||
|
|
@ -42,13 +42,16 @@ import org.x4o.xml.test.models.TestObjectRoot;
|
||||||
public class DefaultX4OLanguageLoaderTest {
|
public class DefaultX4OLanguageLoaderTest {
|
||||||
|
|
||||||
static X4ODriver<TestObjectRoot> driver;
|
static X4ODriver<TestObjectRoot> driver;
|
||||||
static X4OLanguage language;
|
static X4OLanguageLocal language;
|
||||||
|
static X4OLanguageSession session;
|
||||||
static DefaultX4OLanguageLoader loader;
|
static DefaultX4OLanguageLoader loader;
|
||||||
|
|
||||||
@BeforeAll
|
@BeforeAll
|
||||||
public static void setUp() throws Exception {
|
public static void setUp() throws Exception {
|
||||||
driver = TestDriver.getInstance();
|
driver = TestDriver.getInstance();
|
||||||
language = driver.createLanguage();
|
language = (X4OLanguageLocal)driver.createLanguage();
|
||||||
|
session = language.createLanguageSession();
|
||||||
|
language.init(session);
|
||||||
loader = (DefaultX4OLanguageLoader)language.getLanguageConfiguration().getDefaultLanguageLoader().newInstance();
|
loader = (DefaultX4OLanguageLoader)language.getLanguageConfiguration().getDefaultLanguageLoader().newInstance();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -56,7 +59,7 @@ public class DefaultX4OLanguageLoaderTest {
|
||||||
public void testLoadingDuplicate() throws Exception {
|
public void testLoadingDuplicate() throws Exception {
|
||||||
Exception e = null;
|
Exception e = null;
|
||||||
try {
|
try {
|
||||||
loader.loadLanguage((X4OLanguageLocal)language, "test", "1.0");
|
loader.loadLanguage(session, language, "test", "1.0");
|
||||||
} catch (Exception ee) {
|
} catch (Exception ee) {
|
||||||
e = ee;
|
e = ee;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -57,6 +57,7 @@ public class AbstractContentWriterHandler implements ContentHandler, Closeable {
|
||||||
|
|
||||||
private final SAX3PropertyConfig propertyConfig;
|
private final SAX3PropertyConfig propertyConfig;
|
||||||
private final Writer out;
|
private final Writer out;
|
||||||
|
private boolean started = false;
|
||||||
private int indent = 0;
|
private int indent = 0;
|
||||||
private Map<String,String> prefixMapping = null;
|
private Map<String,String> prefixMapping = null;
|
||||||
private List<String> printedMappings = null;
|
private List<String> printedMappings = null;
|
||||||
|
|
@ -130,6 +131,10 @@ public class AbstractContentWriterHandler implements ContentHandler, Closeable {
|
||||||
* @see org.xml.sax.ContentHandler#startDocument()
|
* @see org.xml.sax.ContentHandler#startDocument()
|
||||||
*/
|
*/
|
||||||
public void startDocument() throws SAXException {
|
public void startDocument() throws SAXException {
|
||||||
|
if (started) {
|
||||||
|
throw new SAXException("Can start document only once.");
|
||||||
|
}
|
||||||
|
started = true;
|
||||||
indent = 0;
|
indent = 0;
|
||||||
write(SAX3XMLConstants.getDocumentDeclaration(getPropertyConfig().getPropertyString(OUTPUT_ENCODING)));
|
write(SAX3XMLConstants.getDocumentDeclaration(getPropertyConfig().getPropertyString(OUTPUT_ENCODING)));
|
||||||
prologWriteLicence();
|
prologWriteLicence();
|
||||||
|
|
@ -479,7 +484,7 @@ public class AbstractContentWriterHandler implements ContentHandler, Closeable {
|
||||||
public void endPrefixMapping(String prefix) throws SAXException {
|
public void endPrefixMapping(String prefix) throws SAXException {
|
||||||
Set<Map.Entry<String,String>> s = prefixMapping.entrySet();
|
Set<Map.Entry<String,String>> s = prefixMapping.entrySet();
|
||||||
String uri = null;
|
String uri = null;
|
||||||
for (Map.Entry<String,String> e:s) {
|
for (Map.Entry<String,String> e : s) {
|
||||||
if (e.getValue() == null) {
|
if (e.getValue() == null) {
|
||||||
continue; // way ?
|
continue; // way ?
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@
|
||||||
package org.x4o.sax3.io;
|
package org.x4o.sax3.io;
|
||||||
|
|
||||||
import java.io.Closeable;
|
import java.io.Closeable;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
import org.xml.sax.Attributes;
|
import org.xml.sax.Attributes;
|
||||||
import org.xml.sax.ContentHandler;
|
import org.xml.sax.ContentHandler;
|
||||||
|
|
@ -38,6 +39,23 @@ import org.xml.sax.ext.LexicalHandler;
|
||||||
*/
|
*/
|
||||||
public interface ContentWriter extends ContentHandler, LexicalHandler, Closeable {
|
public interface ContentWriter extends ContentHandler, LexicalHandler, Closeable {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wrap startDocument and endDocument in a body closable code block.
|
||||||
|
*
|
||||||
|
* @return An closable resource block reference.
|
||||||
|
* @throws SAXException When IOException is thrown.
|
||||||
|
*/
|
||||||
|
default ContentCloseable startDocumentClosure() throws SAXException {
|
||||||
|
startDocument();
|
||||||
|
return () -> {
|
||||||
|
try {
|
||||||
|
endDocument();
|
||||||
|
} catch (SAXException e) {
|
||||||
|
throw new IOException(e);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Starts and ends an element in one call.
|
* Starts and ends an element in one call.
|
||||||
* @param uri The uri of the element.
|
* @param uri The uri of the element.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue