Merge "Bug 509: Fixed incorrect merging of Data Store Writes / Events"
authorEd Warnicke <eaw@cisco.com>
Wed, 16 Apr 2014 16:44:35 +0000 (16:44 +0000)
committerGerrit Code Review <gerrit@opendaylight.org>
Wed, 16 Apr 2014 16:44:35 +0000 (16:44 +0000)
312 files changed:
opendaylight/commons/opendaylight/pom.xml
opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/ConfigRegistryImpl.java
opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/ConfigTransactionControllerImpl.java
opendaylight/config/config-persister-directory-xml-adapter/pom.xml
opendaylight/config/config-persister-directory-xml-adapter/src/test/java/org/opendaylight/controller/config/persist/storage/directory/xml/DirectoryStorageAdapterTest.java
opendaylight/config/config-persister-file-xml-adapter/pom.xml
opendaylight/config/config-persister-file-xml-adapter/src/test/java/org/opendaylight/controller/config/persist/storage/file/xml/FileStorageAdapterTest.java
opendaylight/config/threadpool-config-impl/src/test/java/org/opendaylight/controller/config/threadpool/async/AsyncEventBusConfigBeanTest.java
opendaylight/config/threadpool-config-impl/src/test/java/org/opendaylight/controller/config/threadpool/eventbus/TestingEventBusModule.java
opendaylight/config/threadpool-config-impl/src/test/java/org/opendaylight/controller/config/threadpool/fixed/FixedThreadPoolConfigBeanTest.java
opendaylight/config/threadpool-config-impl/src/test/java/org/opendaylight/controller/config/threadpool/fixed/TestingFixedThreadPoolModule.java
opendaylight/config/threadpool-config-impl/src/test/java/org/opendaylight/controller/config/threadpool/flexible/FlexibleThreadPoolConfigBeanTest.java
opendaylight/config/threadpool-config-impl/src/test/java/org/opendaylight/controller/config/threadpool/naming/NamingThreadPoolFactoryConfigBeanTest.java
opendaylight/config/threadpool-config-impl/src/test/java/org/opendaylight/controller/config/threadpool/naming/TestingNamingThreadPoolFactoryModule.java
opendaylight/config/threadpool-config-impl/src/test/java/org/opendaylight/controller/config/threadpool/scheduled/ScheduledThreadPoolConfigBeanTest.java
opendaylight/config/threadpool-config-impl/src/test/java/org/opendaylight/controller/config/threadpool/scheduled/TestingScheduledThreadPoolModule.java
opendaylight/config/yang-jmx-generator-plugin/pom.xml
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/CodeWriter.java
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/FreeMarkerCodeWriterImpl.java [deleted file]
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/JMXGenerator.java
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/AbstractFactoryTemplate.java
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/AbstractFtlTemplate.java
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/AbstractModuleTemplate.java
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/FtlFilePersister.java [deleted file]
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/FtlTemplate.java
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/StubFactoryTemplate.java
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/StubModuleTemplate.java [deleted file]
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/TemplateFactory.java
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/directives/AnnotationsDirective.java [deleted file]
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/directives/ConstructorsDirective.java [deleted file]
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/directives/FieldsDirectiveProg.java [deleted file]
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/directives/FieldsDirectiveTemplate.java [deleted file]
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/directives/HeaderDirective.java [deleted file]
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/directives/JavadocDirective.java [deleted file]
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/directives/MethodsDirective.java [deleted file]
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/directives/ModuleFieldsDirective.java [deleted file]
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/directives/TypeDeclarationDirective.java [deleted file]
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/directives/UnimplementedExceptionDirective.java [deleted file]
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/model/Annotation.java
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/model/AnnotationSerializer.java [new file with mode: 0644]
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/model/Constructor.java
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/model/ConstructorSerializer.java [new file with mode: 0644]
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/model/Field.java
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/model/FieldSerializer.java [new file with mode: 0644]
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/model/Header.java
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/model/HeaderSerializer.java [new file with mode: 0644]
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/model/MethodDeclaration.java
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/model/MethodDefinition.java
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/model/MethodSerializer.java [new file with mode: 0644]
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/model/ModuleField.java
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/model/ModuleFieldSerializer.java [new file with mode: 0644]
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/model/TypeDeclaration.java
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/gofactory/AbsFactoryGeneratedObjectFactory.groovy [new file with mode: 0644]
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/gofactory/AbsModuleGeneratedObjectFactory.groovy [new file with mode: 0644]
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/gofactory/ConcreteModuleGeneratedObjectFactory.java [new file with mode: 0644]
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/gofactory/GenericGeneratedObjectFactory.groovy [new file with mode: 0644]
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/java/FullyQualifiedName.java [new file with mode: 0644]
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/java/GeneratedObject.java [new file with mode: 0644]
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/java/GeneratedObjectBuilder.java [new file with mode: 0644]
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/java/JavaFileInput.java [new file with mode: 0644]
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/java/JavaFileInputBuilder.java [new file with mode: 0644]
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/java/TypeName.java [new file with mode: 0644]
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/util/StringUtil.java [new file with mode: 0644]
opendaylight/config/yang-jmx-generator-plugin/src/main/resources/copyright.txt [new file with mode: 0644]
opendaylight/config/yang-jmx-generator-plugin/src/main/resources/freeMarker/abstract_ftl_file.ftl [deleted file]
opendaylight/config/yang-jmx-generator-plugin/src/main/resources/freeMarker/factory_abs_template.ftl [deleted file]
opendaylight/config/yang-jmx-generator-plugin/src/main/resources/freeMarker/module_abs_template_new.ftl [deleted file]
opendaylight/config/yang-jmx-generator-plugin/src/main/resources/freeMarker/module_stub_template.ftl [deleted file]
opendaylight/config/yang-jmx-generator-plugin/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/AbstractGeneratorTest.java
opendaylight/config/yang-jmx-generator-plugin/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/JMXGeneratorTest.java
opendaylight/config/yang-jmx-generator-plugin/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ModuleMXBeanEntryTemplatesTest.java
opendaylight/config/yang-jmx-generator-plugin/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/RuntimeRegistratorFtlFileTest.java
opendaylight/config/yang-jmx-generator-plugin/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/FtlFilePersisterTest.java [deleted file]
opendaylight/config/yang-jmx-generator-plugin/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/module/AbstractGeneratedObjectTest.java [new file with mode: 0644]
opendaylight/config/yang-jmx-generator-plugin/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/module/abs/AbsModuleGeneratedObjectFactoryTest.java [new file with mode: 0644]
opendaylight/config/yang-jmx-generator-plugin/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/module/concrete/ConcreteModuleGeneratedObjectFactoryTest.java [new file with mode: 0644]
opendaylight/config/yang-jmx-generator-plugin/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/util/FormattingUtil.java [deleted file]
opendaylight/config/yang-jmx-generator-plugin/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/util/StringUtilTest.java [new file with mode: 0644]
opendaylight/config/yang-jmx-generator/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/AbstractYangTest.java
opendaylight/config/yang-jmx-generator/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/ModuleMXBeanEntryTest.java
opendaylight/config/yang-test-plugin/pom.xml
opendaylight/config/yang-test-plugin/src/main/java/org/opendaylight/controller/config/yang/test/plugin/ProcessSources.java
opendaylight/config/yang-test-plugin/src/main/java/org/opendaylight/controller/config/yang/test/plugin/Util.java
opendaylight/config/yang-test/pom.xml
opendaylight/config/yang-test/src/main/java/org/opendaylight/controller/config/yang/test/impl/DepTestImplModule.java
opendaylight/config/yang-test/src/main/java/org/opendaylight/controller/config/yang/test/impl/DepTestImplModuleFactory.java
opendaylight/config/yang-test/src/main/java/org/opendaylight/controller/config/yang/test/impl/IdentityTestModule.java
opendaylight/config/yang-test/src/main/java/org/opendaylight/controller/config/yang/test/impl/IdentityTestModuleFactory.java
opendaylight/config/yang-test/src/main/java/org/opendaylight/controller/config/yang/test/impl/NetconfTestImplModule.java
opendaylight/config/yang-test/src/main/java/org/opendaylight/controller/config/yang/test/impl/NetconfTestImplModuleFactory.java
opendaylight/config/yang-test/src/main/java/org/opendaylight/controller/config/yang/test/impl/TestImplModule.java
opendaylight/config/yang-test/src/main/java/org/opendaylight/controller/config/yang/test/impl/TestImplModuleFactory.java
opendaylight/distribution/opendaylight/pom.xml
opendaylight/md-sal/pom.xml
opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/RuntimeCodeHelper.java [new file with mode: 0644]
opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/RuntimeCodeHelper.xtend [deleted file]
opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/YangtoolsMappingHelper.java [new file with mode: 0644]
opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/YangtoolsMappingHelper.xtend [deleted file]
opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/BrokerImplClassLoader.java [new file with mode: 0644]
opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/BrokerImplClassLoader.xtend [deleted file]
opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/RpcProxyContext.java [new file with mode: 0644]
opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/RpcProxyContext.xtend [deleted file]
opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/connect/dom/BindingIndependentConnector.java
opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/util/BindingAwareDataReaderRouter.java [new file with mode: 0644]
opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/util/BindingAwareDataReaderRouter.xtend [deleted file]
opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/util/MapUtils.java [new file with mode: 0644]
opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/util/MapUtils.xtend [deleted file]
opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/sal/binding/test/util/BindingTestContext.java
opendaylight/md-sal/sal-binding-dom-it/src/test/java/org/opendaylight/controller/md/sal/binding/data/WildcardedDataChangeListenerTest.java
opendaylight/md-sal/sal-binding-dom-it/src/test/java/org/opendaylight/controller/sal/binding/test/connect/dom/CrossBrokerRpcTest.java
opendaylight/md-sal/sal-binding-it/pom.xml
opendaylight/md-sal/sal-binding-it/src/test/java/org/opendaylight/controller/test/sal/binding/it/AbstractTest.java
opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/RoutedRpcDefaultImplementation.java
opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/RpcImplementation.java
opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/ResolveDataChangeEventsTask.java
opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/BrokerImpl.xtend
opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/MountPointImpl.java
opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/impl/SchemaAwareRpcBroker.java
opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/osgi/RpcProvisionRegistryProxy.java
opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/spi/RoutedRpcProcessor.java
opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/spi/RpcRouter.java
opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/InventoryUtils.java
opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/NetconfDevice.xtend
opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/NetconfDeviceListener.java
opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/NetconfDeviceTwoPhaseCommitTransaction.java
opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/NetconfInventoryUtils.java
opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/NetconfMapping.xtend
opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/NetconfRemoteSchemaSourceProvider.java
opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/UncancellableFuture.java [new file with mode: 0644]
opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/YangModelInputStreamAdapter.java [deleted file]
opendaylight/md-sal/sal-remoterpc-connector/implementation/src/main/java/org/opendaylight/controller/sal/connector/remoterpc/ClientImpl.java
opendaylight/md-sal/sal-remoterpc-connector/implementation/src/main/java/org/opendaylight/controller/sal/connector/remoterpc/RemoteRpcProvider.java
opendaylight/md-sal/sal-remoterpc-connector/implementation/src/main/java/org/opendaylight/controller/sal/connector/remoterpc/ServerImpl.java
opendaylight/md-sal/sal-remoterpc-connector/implementation/src/test/java/org/opendaylight/controller/sal/connector/remoterpc/ClientImplTest.java
opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/ControllerContext.xtend
opendaylight/md-sal/samples/toaster-it/pom.xml
opendaylight/md-sal/samples/toaster-it/src/test/java/org/opendaylight/controller/sample/toaster/it/ToasterTest.java
opendaylight/netconf/config-netconf-connector/pom.xml
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/toxml/CompositeAttributeWritingStrategy.java
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/toxml/ObjectNameAttributeWritingStrategy.java
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/toxml/RuntimeBeanEntryWritingStrategy.java
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/toxml/SimpleAttributeWritingStrategy.java
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/toxml/SimpleIdentityRefAttributeWritingStrategy.java
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/config/Config.java
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/config/ModuleConfig.java
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/config/Services.java
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/runtime/InstanceRuntime.java
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/runtime/Runtime.java
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/Commit.java
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/DiscardChanges.java
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/Validate.java
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/editconfig/EditConfig.java
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/getconfig/GetConfig.java
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/runtimerpc/RuntimeRpc.java
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/osgi/NetconfOperationServiceImpl.java
opendaylight/netconf/config-netconf-connector/src/test/java/org/opendaylight/controller/netconf/confignetconfconnector/NetconfMappingTest.java
opendaylight/netconf/config-persister-impl/src/main/java/org/opendaylight/controller/netconf/persist/impl/osgi/ConfigPersisterActivator.java
opendaylight/netconf/config-persister-impl/src/test/java/org/opendaylight/controller/netconf/persist/impl/osgi/ConfigPersisterTest.java
opendaylight/netconf/config-persister-impl/src/test/java/org/opendaylight/controller/netconf/persist/impl/osgi/MockedBundleContext.java
opendaylight/netconf/netconf-api/src/main/java/org/opendaylight/controller/netconf/api/AbstractNetconfSession.java [deleted file]
opendaylight/netconf/netconf-api/src/main/java/org/opendaylight/controller/netconf/api/NetconfClientSessionPreferences.java [new file with mode: 0644]
opendaylight/netconf/netconf-api/src/main/java/org/opendaylight/controller/netconf/api/NetconfServerSessionPreferences.java
opendaylight/netconf/netconf-api/src/main/java/org/opendaylight/controller/netconf/api/NetconfSession.java
opendaylight/netconf/netconf-api/src/main/java/org/opendaylight/controller/netconf/api/NetconfSessionPreferences.java
opendaylight/netconf/netconf-api/src/main/java/org/opendaylight/controller/netconf/api/NetconfTerminationReason.java
opendaylight/netconf/netconf-client/pom.xml
opendaylight/netconf/netconf-client/src/main/java/org/opendaylight/controller/netconf/client/AbstractNetconfClientNotifySessionListener.java [deleted file]
opendaylight/netconf/netconf-client/src/main/java/org/opendaylight/controller/netconf/client/NetconfClient.java [deleted file]
opendaylight/netconf/netconf-client/src/main/java/org/opendaylight/controller/netconf/client/NetconfClientDispatcher.java
opendaylight/netconf/netconf-client/src/main/java/org/opendaylight/controller/netconf/client/NetconfClientSession.java
opendaylight/netconf/netconf-client/src/main/java/org/opendaylight/controller/netconf/client/NetconfClientSessionNegotiator.java
opendaylight/netconf/netconf-client/src/main/java/org/opendaylight/controller/netconf/client/NetconfClientSessionNegotiatorFactory.java
opendaylight/netconf/netconf-client/src/main/java/org/opendaylight/controller/netconf/client/SimpleNetconfClientSessionListener.java
opendaylight/netconf/netconf-client/src/main/resources/client_hello.xml [deleted file]
opendaylight/netconf/netconf-client/src/test/java/org/opendaylight/controller/netconf/client/SSHNetconfClientLiveTest.java [deleted file]
opendaylight/netconf/netconf-client/src/test/java/org/opendaylight/controller/netconf/client/test/TestingNetconfClient.java [new file with mode: 0644]
opendaylight/netconf/netconf-impl/pom.xml
opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/CapabilityProviderImpl.java
opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/NetconfServerDispatcher.java
opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/NetconfServerSession.java
opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/NetconfServerSessionListener.java
opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/NetconfServerSessionListenerFactory.java
opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/NetconfServerSessionNegotiator.java
opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/NetconfServerSessionNegotiatorFactory.java
opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/mapping/operations/DefaultCloseSession.java
opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/mapping/operations/DefaultCommit.java
opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/mapping/operations/DefaultGetSchema.java
opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/mapping/operations/DefaultNetconfOperation.java [moved from opendaylight/config/yang-test-plugin/src/main/resources/Header.txt with 54% similarity]
opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/mapping/operations/DefaultStartExi.java
opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/mapping/operations/DefaultStopExi.java
opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/osgi/NetconfImplActivator.java
opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/osgi/NetconfMonitoringServiceImpl.java
opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/osgi/NetconfOperationRouter.java [moved from opendaylight/netconf/netconf-api/src/main/java/org/opendaylight/controller/netconf/api/NetconfOperationRouter.java with 62% similarity]
opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/osgi/NetconfOperationRouterImpl.java
opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/osgi/NetconfOperationServiceFactoryListener.java
opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/osgi/NetconfOperationServiceFactoryListenerImpl.java
opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/osgi/NetconfOperationServiceSnapshotImpl.java [moved from opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/osgi/NetconfOperationServiceSnapshot.java with 51% similarity]
opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/util/DeserializerExceptionHandler.java
opendaylight/netconf/netconf-impl/src/main/resources/server_hello.xml [deleted file]
opendaylight/netconf/netconf-impl/src/test/java/org/opendaylight/controller/netconf/impl/ConcurrentClientsTest.java
opendaylight/netconf/netconf-impl/src/test/java/org/opendaylight/controller/netconf/impl/ExiEncodeDecodeTest.java
opendaylight/netconf/netconf-impl/src/test/java/org/opendaylight/controller/netconf/impl/MessageParserTest.java
opendaylight/netconf/netconf-impl/src/test/java/org/opendaylight/controller/netconf/impl/NetconfDispatcherImplTest.java
opendaylight/netconf/netconf-impl/src/test/resources/testConfigs/input.json
opendaylight/netconf/netconf-impl/src/test/resources/testConfigs/input.xml
opendaylight/netconf/netconf-impl/src/test/resources/testConfigs/inputList.xml
opendaylight/netconf/netconf-impl/src/test/resources/testConfigs/inputMap.xml
opendaylight/netconf/netconf-impl/src/test/resources/testConfigs/inputMultiple.xml
opendaylight/netconf/netconf-impl/src/test/resources/testConfigs/inputSetter.xml
opendaylight/netconf/netconf-impl/src/test/resources/testConfigs/inputSetterList.xml
opendaylight/netconf/netconf-impl/src/test/resources/testConfigs/inputSetterMap.xml
opendaylight/netconf/netconf-impl/src/test/resources/testConfigs/map.json
opendaylight/netconf/netconf-it/pom.xml
opendaylight/netconf/netconf-it/src/test/java/org/opendaylight/controller/netconf/it/AbstractNetconfConfigTest.java
opendaylight/netconf/netconf-it/src/test/java/org/opendaylight/controller/netconf/it/NetconfConfigPersisterITTest.java
opendaylight/netconf/netconf-it/src/test/java/org/opendaylight/controller/netconf/it/NetconfITSecureTest.java
opendaylight/netconf/netconf-it/src/test/java/org/opendaylight/controller/netconf/it/NetconfITTest.java
opendaylight/netconf/netconf-it/src/test/java/org/opendaylight/controller/netconf/it/NetconfMonitoringITTest.java
opendaylight/netconf/netconf-it/src/test/java/org/opendaylight/controller/netconf/it/pax/IdentityRefNetconfTest.java
opendaylight/netconf/netconf-it/src/test/resources/controller.xml
opendaylight/netconf/netconf-mapping-api/src/main/java/org/opendaylight/controller/netconf/mapping/api/NetconfOperationProvider.java [new file with mode: 0644]
opendaylight/netconf/netconf-mapping-api/src/main/java/org/opendaylight/controller/netconf/mapping/api/NetconfOperationServiceSnapshot.java [moved from opendaylight/netconf/netconf-mapping-api/src/main/java/org/opendaylight/controller/netconf/mapping/api/DefaultNetconfOperation.java with 65% similarity]
opendaylight/netconf/netconf-util/pom.xml
opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/AbstractNetconfSession.java [new file with mode: 0644]
opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/AbstractNetconfSessionNegotiator.java
opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/CloseableUtil.java [new file with mode: 0644]
opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/NetconfExiSession.java [new file with mode: 0644]
opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/handler/NetconfEXICodec.java [new file with mode: 0644]
opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/handler/NetconfEXIToMessageDecoder.java [new file with mode: 0644]
opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/handler/NetconfMessageToEXIEncoder.java [new file with mode: 0644]
opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/handler/NetconfMessageToXMLEncoder.java
opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/mapping/AbstractNetconfOperation.java
opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/messages/NetconfHelloMessage.java
opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/messages/NetconfMessageUtil.java
opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/messages/NetconfStartExiMessage.java [new file with mode: 0644]
opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/xml/EXIParameters.java [new file with mode: 0644]
opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/xml/XmlNetconfConstants.java
opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/xml/XmlUtil.java
opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/EXILibTest.java [new file with mode: 0644]
opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/test/XmlUnitUtil.java [new file with mode: 0644]
opendaylight/netconf/netconf-util/src/test/resources/netconfMessages/rpc-reply_ok.xml [new file with mode: 0644]
opendaylight/netconf/netconf-util/src/test/resources/netconfMessages/startExi.xml
opendaylight/netconf/netconf-util/src/test/resources/netconfMessages/stopExi.xml
opendaylight/netconf/pom.xml
third-party/org.openexi/nagasena-rta/nagasena-rta-0000.0002.0035.0.jar [new file with mode: 0644]
third-party/org.openexi/nagasena-rta/pom.xml [new file with mode: 0644]
third-party/org.openexi/nagasena/nagasena-0000.0002.0035.0.jar [new file with mode: 0644]
third-party/org.openexi/nagasena/pom.xml [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/allclasses-frame.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/allclasses-noframe.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/constant-values.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/deprecated-list.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/help-doc.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/index-all.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/index.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/EXIDecoder.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/EXISchemaResolver.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/HeaderOptionsOutputType.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/common/AlignmentType.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/common/BinaryDataSource.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/common/EXIOptions.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/common/EventDescription.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/common/EventType.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/common/GrammarOptions.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/common/QName.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/common/package-frame.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/common/package-summary.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/common/package-tree.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/grammars/GrammarCache.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/grammars/package-frame.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/grammars/package-summary.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/grammars/package-tree.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/io/BinaryDataSink.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/io/CharacterBuffer.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/io/Scanner.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/io/package-frame.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/io/package-summary.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/io/package-tree.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/package-frame.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/package-summary.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/package-tree.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/sax/BinaryDataHandler.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/sax/EXIReader.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/sax/ReaderSupport.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/sax/SAXTransmogrifier.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/sax/Transmogrifier.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/sax/TransmogrifierException.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/sax/package-frame.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/sax/package-summary.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/sax/package-tree.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/schema/Characters.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/schema/EXISchema.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/schema/EmptySchema.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/schema/package-frame.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/schema/package-summary.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/schema/package-tree.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/scomp/EXISchemaFactory.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/scomp/EXISchemaFactoryErrorHandler.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/scomp/EXISchemaFactoryException.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/scomp/EXISchemaReader.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/scomp/EntityResolverEx.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/scomp/package-frame.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/scomp/package-summary.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/scomp/package-tree.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/overview-frame.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/overview-summary.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/overview-tree.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/package-list [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/resources/inherit.gif [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/serialized-form.html [new file with mode: 0644]
third-party/org.openexi/nagasena/src/main/resources/doc/stylesheet.css [new file with mode: 0644]
third-party/org.openexi/pom.xml [new file with mode: 0644]

index d5d7e8e5c468cac180549eb76248cc1a010ae3c5..f4b2dee84835eb0287e22785374979183f79538e 100644 (file)
     <xtend.dstdir>src/main/xtend-gen</xtend.dstdir>
     <jmxGeneratorPath>src/main/yang-gen-config</jmxGeneratorPath>
     <salGeneratorPath>src/main/yang-gen-sal</salGeneratorPath>
+
+    <!-- OpenEXI third party lib for netconf-->
+    <exi.nagasena.version>0000.0002.0035.0-SNAPSHOT</exi.nagasena.version>
   </properties>
 
   <dependencyManagement>
         <artifactId>org.eclipse.equinox.launcher</artifactId>
         <version>1.3.0.v20120522-1813</version>
       </dependency>
+      <dependency>
+        <groupId>xmlunit</groupId>
+        <artifactId>xmlunit</artifactId>
+        <version>1.5</version>
+        <scope>test</scope>
+      </dependency>
       <!-- Gemini Web -->
       <dependency>
         <groupId>geminiweb</groupId>
         <artifactId>ganymed</artifactId>
         <version>1.1-SNAPSHOT</version>
       </dependency>
+      <dependency>
+        <groupId>org.opendaylight.controller.thirdparty</groupId>
+        <artifactId>nagasena</artifactId>
+        <version>${exi.nagasena.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.opendaylight.controller.thirdparty</groupId>
+        <artifactId>nagasena-rta</artifactId>
+        <version>${exi.nagasena.version}</version>
+      </dependency>
       <dependency>
         <groupId>com.google.code.findbugs</groupId>
         <artifactId>jsr305</artifactId>
index fb0718a721f15a6f702fdd0134acab5a5f3f3da6..e914162671e811682271d42bcbccbe4e89c47947 100644 (file)
@@ -283,6 +283,7 @@ public class ConfigRegistryImpl implements AutoCloseable, ConfigRegistryImplMXBe
 
         int orderingIdx = 0;
         for (ModuleIdentifier moduleIdentifier : orderedModuleIdentifiers) {
+            logger.trace("Registering {}", moduleIdentifier);
             ModuleInternalTransactionalInfo entry = commitInfo.getCommitted()
                     .get(moduleIdentifier);
             if (entry == null) {
index 6b7251c302975911c598ccbc0dce4fd09678403e..bc4de5cc156580741caf9e5abcbfbd32e07556ce 100644 (file)
@@ -44,6 +44,7 @@ import java.util.Map.Entry;
 import java.util.Set;
 import java.util.concurrent.atomic.AtomicBoolean;
 
+import static com.google.common.base.Preconditions.checkNotNull;
 import static java.lang.String.format;
 
 /**
@@ -380,7 +381,8 @@ class ConfigTransactionControllerImpl implements
             try {
                 logger.debug("About to commit {} in transaction {}",
                         name, getTransactionIdentifier());
-                module.getInstance();
+                AutoCloseable instance = module.getInstance();
+                checkNotNull(instance, "Instance is null:{} in transaction {}", name, getTransactionIdentifier());
             } catch (Exception e) {
                 logger.error("Commit failed on {} in transaction {}", name,
                         getTransactionIdentifier(), e);
index 75188fe9b37aa44632158d9e1f3f456e4be2af37..2b98f4137689163acd0c147eca75ce15c9aa3a44 100644 (file)
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>xmlunit</groupId>
+            <artifactId>xmlunit</artifactId>
+        </dependency>
 
     </dependencies>
 
     <build>
         <plugins>
-            <!-- workaround for creating version according to OSGi specification (major.minor.micro[.qualifier] -->
-            <plugin>
-                <groupId>org.codehaus.groovy.maven</groupId>
-                <artifactId>gmaven-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <phase>generate-sources</phase>
-                        <goals>
-                            <goal>execute</goal>
-                        </goals>
-                        <configuration>
-                            <source>
-                                System.setProperty("osgiversion", "${project.version}".replace('-', '.'))
-                            </source>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
             <plugin>
                 <groupId>org.apache.felix</groupId>
                 <artifactId>maven-bundle-plugin</artifactId>
                 <configuration>
                     <instructions>
-                        <Fragment-Host>${project.groupId}.config-persister-impl;bundle-version=${osgiversion}
+                        <Fragment-Host>${project.groupId}.config-persister-impl
                         </Fragment-Host>
                         <Provide-Capability>org.opendaylight.controller.config.persister.storage.adapter
                         </Provide-Capability>
             </plugin>
         </plugins>
     </build>
-
 </project>
index da442ef4b2fb669b5b1bd0e9a389616cc6755b97..7af06bd3e39cdd341e917779961150b21af4a6f9 100644 (file)
@@ -8,21 +8,26 @@
 
 package org.opendaylight.controller.config.persist.storage.directory.xml;
 
+import static org.custommonkey.xmlunit.XMLAssert.assertXMLEqual;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
 import java.io.File;
+import java.io.IOException;
 import java.util.Collections;
 import java.util.List;
 import java.util.SortedSet;
 
-import com.google.common.base.Optional;
 import org.junit.Test;
 import org.opendaylight.controller.config.persist.api.ConfigSnapshotHolder;
 import org.opendaylight.controller.config.persist.api.Persister;
 import org.opendaylight.controller.config.persist.test.PropertiesProviderTest;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import org.xml.sax.SAXException;
+
+import com.google.common.base.Optional;
 
 public class DirectoryStorageAdapterTest {
     Persister tested;
@@ -95,8 +100,8 @@ public class DirectoryStorageAdapterTest {
         logger.info("Testing : " + tested.toString());
     }
 
-    private void assertResult(ConfigSnapshotHolder result, String s, String... caps) {
-        assertEquals(s, result.getConfigSnapshot().replaceAll("\\s", ""));
+    private void assertResult(ConfigSnapshotHolder result, String s, String... caps) throws SAXException, IOException {
+        assertXMLEqual(s, result.getConfigSnapshot());
         int i = 0;
         for (String capFromSnapshot : result.getCapabilities()) {
             assertEquals(capFromSnapshot, caps[i++]);
index dd2079550e1203714c369f83f596616ee806fc96..a5010f0464f7d5bc1f3df38d8a2c2e41cd714d15 100644 (file)
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>xmlunit</groupId>
+            <artifactId>xmlunit</artifactId>
+        </dependency>
     </dependencies>
 
     <build>
         <plugins>
-            <!-- workaround for creating version according to OSGi specification (major.minor.micro[.qualifier] -->
-            <plugin>
-                <groupId>org.codehaus.groovy.maven</groupId>
-                <artifactId>gmaven-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <phase>generate-sources</phase>
-                        <goals>
-                            <goal>execute</goal>
-                        </goals>
-                        <configuration>
-                            <source>
-                                System.setProperty("osgiversion", "${project.version}".replace('-', '.'))
-                            </source>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
             <plugin>
                 <groupId>org.apache.felix</groupId>
                 <artifactId>maven-bundle-plugin</artifactId>
                 <configuration>
                     <instructions>
-                        <Fragment-Host>${project.groupId}.config-persister-impl;bundle-version=${osgiversion}
+                        <Fragment-Host>${project.groupId}.config-persister-impl
                         </Fragment-Host>
-                        <Provide-Capability>org.opendaylight.controller.config.persister.storage.adapter
-                        </Provide-Capability>
+                        <Provide-Capability>org.opendaylight.controller.config.persister.storage.adapter</Provide-Capability>
                     </instructions>
                 </configuration>
             </plugin>
index 5322f6357a01b0a3e01e1d58a8d943113b942562..2bfe70adb811d2c5575663540e4a194179f78dae 100644 (file)
@@ -8,7 +8,12 @@
 
 package org.opendaylight.controller.config.persist.storage.file.xml;
 
-import com.google.common.base.Charsets;
+import static junit.framework.Assert.assertFalse;
+import static org.custommonkey.xmlunit.XMLAssert.assertXMLEqual;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertThat;
+
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.IOException;
@@ -16,16 +21,16 @@ import java.nio.file.Files;
 import java.util.List;
 import java.util.SortedSet;
 import java.util.TreeSet;
+
 import junit.framework.Assert;
+
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mockito;
 import org.opendaylight.controller.config.persist.api.ConfigSnapshotHolder;
 import org.opendaylight.controller.config.persist.test.PropertiesProviderTest;
-import static junit.framework.Assert.assertFalse;
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
+
+import com.google.common.base.Charsets;
 
 public class FileStorageAdapterTest {
 
@@ -96,8 +101,7 @@ public class FileStorageAdapterTest {
         List<ConfigSnapshotHolder> lastConf = storage.loadLastConfigs();
         assertEquals(1, lastConf.size());
         ConfigSnapshotHolder configSnapshotHolder = lastConf.get(0);
-        assertEquals("<config>2</config>",
-                configSnapshotHolder.getConfigSnapshot().replaceAll("\\s", ""));
+        assertXMLEqual("<config>2</config>", configSnapshotHolder.getConfigSnapshot());
         assertEquals(createCaps(), configSnapshotHolder.getCapabilities());
 
         storage = new XmlFileStorageAdapter();
@@ -147,8 +151,7 @@ public class FileStorageAdapterTest {
         List<ConfigSnapshotHolder> lastConf = storage.loadLastConfigs();
         assertEquals(1, lastConf.size());
         ConfigSnapshotHolder configSnapshotHolder = lastConf.get(0);
-        assertEquals("<config>2</config>",
-                configSnapshotHolder.getConfigSnapshot().replaceAll("\\s", ""));
+        assertXMLEqual("<config>2</config>", configSnapshotHolder.getConfigSnapshot());
     }
 
     @Test
@@ -178,8 +181,7 @@ public class FileStorageAdapterTest {
         List<ConfigSnapshotHolder> lastConf = storage.loadLastConfigs();
         assertEquals(1, lastConf.size());
         ConfigSnapshotHolder configSnapshotHolder = lastConf.get(0);
-        assertEquals("<config>3</config>",
-                configSnapshotHolder.getConfigSnapshot().replaceAll("\\s", ""));
+        assertXMLEqual("<config>3</config>", configSnapshotHolder.getConfigSnapshot());
         assertFalse(readLines.contains(holder.getConfigSnapshot()));
     }
 
index b9731cd46d1abc560009ffeeddbe0a3c306bf1b3..177adc1588d0ce2697a010ce37eb747f5879d7ff 100644 (file)
-/*\r
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.\r
- *\r
- * This program and the accompanying materials are made available under the\r
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
- * and is available at http://www.eclipse.org/legal/epl-v10.html\r
- */\r
-package org.opendaylight.controller.config.threadpool.async;\r
-\r
-import static org.junit.Assert.assertThat;\r
-import static org.junit.Assert.fail;\r
-import static org.junit.matchers.JUnitMatchers.containsString;\r
-\r
-import javax.management.InstanceAlreadyExistsException;\r
-import javax.management.ObjectName;\r
-\r
-import org.junit.Before;\r
-import org.junit.Test;\r
-import org.opendaylight.controller.config.api.ConflictingVersionException;\r
-import org.opendaylight.controller.config.api.ValidationException;\r
-import org.opendaylight.controller.config.api.jmx.CommitStatus;\r
-import org.opendaylight.controller.config.manager.impl.AbstractConfigTest;\r
-import org.opendaylight.controller.config.manager.impl.ClassBasedModuleFactory;\r
-import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;\r
-import org.opendaylight.controller.config.threadpool.scheduled.TestingScheduledThreadPoolModule;\r
-import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;\r
-import org.opendaylight.controller.config.yang.threadpool.impl.AsyncEventBusModuleFactory;\r
-import org.opendaylight.controller.config.yang.threadpool.impl.AsyncEventBusModuleMXBean;\r
-\r
-public class AsyncEventBusConfigBeanTest extends AbstractConfigTest {\r
-\r
-    private AsyncEventBusModuleFactory factory;\r
-    private final String instanceName = "async1";\r
-    private final String poolImplName = "fixed1";\r
-\r
-    @Before\r
-    public void setUp() {\r
-\r
-        ClassBasedModuleFactory scheduledThreadPoolConfigFactory = createClassBasedCBF(\r
-                TestingScheduledThreadPoolModule.class, poolImplName);\r
-\r
-        factory = new AsyncEventBusModuleFactory();\r
-        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(factory,\r
-                scheduledThreadPoolConfigFactory));\r
-    }\r
-\r
-    @Test\r
-    public void testCreateBean() throws InstanceAlreadyExistsException, ValidationException,\r
-            ConflictingVersionException {\r
-        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
-\r
-        createAsynced(transaction, instanceName, transaction.createModule(poolImplName, "pool-test"));\r
-        transaction.validateConfig();\r
-        CommitStatus status = transaction.commit();\r
-\r
-        assertBeanCount(1, factory.getImplementationName());\r
-        assertStatus(status, 2, 0, 0);\r
-    }\r
-\r
-    @Test\r
-    public void testReusingOldInstance() throws InstanceAlreadyExistsException, ConflictingVersionException,\r
-            ValidationException {\r
-\r
-        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
-        createAsynced(transaction, instanceName, transaction.createModule(poolImplName, "pool-test"));\r
-\r
-        transaction.commit();\r
-\r
-        assertBeanCount(1, factory.getImplementationName());\r
-\r
-        transaction = configRegistryClient.createTransaction();\r
-        CommitStatus status = transaction.commit();\r
-\r
-        assertBeanCount(1, factory.getImplementationName());\r
-        assertStatus(status, 0, 0, 2);\r
-\r
-    }\r
-\r
-    @Test\r
-    public void testInstanceAlreadyExistsException() throws ConflictingVersionException, ValidationException,\r
-            InstanceAlreadyExistsException {\r
-        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
-\r
-        ObjectName poolCB = transaction.createModule(poolImplName, "pool-test");\r
-        createAsynced(transaction, instanceName, poolCB);\r
-        transaction.commit();\r
-\r
-        transaction = configRegistryClient.createTransaction();\r
-        try {\r
-            createAsynced(transaction, instanceName, poolCB);\r
-            fail();\r
-        } catch (InstanceAlreadyExistsException e) {\r
-            assertThat(\r
-                    e.getMessage(),\r
-                    containsString("There is an instance registered with name ModuleIdentifier{factoryName='async-eventbus', instanceName='async1'}"));\r
-        }\r
-    }\r
-\r
-    private ObjectName createAsynced(ConfigTransactionJMXClient transaction, String instanceName, ObjectName threadPool)\r
-            throws InstanceAlreadyExistsException {\r
-        ObjectName nameCreated = transaction.createModule(factory.getImplementationName(), instanceName);\r
-        AsyncEventBusModuleMXBean mxBean = transaction.newMBeanProxy(nameCreated, AsyncEventBusModuleMXBean.class);\r
-        mxBean.setThreadpool(threadPool);\r
-        return nameCreated;\r
-    }\r
-\r
-}\r
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.controller.config.threadpool.async;
+
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.fail;
+import static org.junit.matchers.JUnitMatchers.containsString;
+
+import javax.management.InstanceAlreadyExistsException;
+import javax.management.ObjectName;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.opendaylight.controller.config.api.ConflictingVersionException;
+import org.opendaylight.controller.config.api.ValidationException;
+import org.opendaylight.controller.config.api.jmx.CommitStatus;
+import org.opendaylight.controller.config.manager.impl.AbstractConfigTest;
+import org.opendaylight.controller.config.manager.impl.ClassBasedModuleFactory;
+import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;
+import org.opendaylight.controller.config.threadpool.scheduled.TestingScheduledThreadPoolModule;
+import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;
+import org.opendaylight.controller.config.yang.threadpool.impl.AsyncEventBusModuleFactory;
+import org.opendaylight.controller.config.yang.threadpool.impl.AsyncEventBusModuleMXBean;
+
+public class AsyncEventBusConfigBeanTest extends AbstractConfigTest {
+
+    private AsyncEventBusModuleFactory factory;
+    private final String instanceName = "async1";
+    private final String poolImplName = "fixed1";
+
+    @Before
+    public void setUp() {
+
+        ClassBasedModuleFactory scheduledThreadPoolConfigFactory = createClassBasedCBF(
+                TestingScheduledThreadPoolModule.class, poolImplName);
+
+        factory = new AsyncEventBusModuleFactory();
+        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(factory,
+                scheduledThreadPoolConfigFactory));
+    }
+
+    @Test
+    public void testCreateBean() throws InstanceAlreadyExistsException, ValidationException,
+            ConflictingVersionException {
+        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
+
+        createAsynced(transaction, instanceName, transaction.createModule(poolImplName, "pool-test"));
+        transaction.validateConfig();
+        CommitStatus status = transaction.commit();
+
+        assertBeanCount(1, factory.getImplementationName());
+        assertStatus(status, 2, 0, 0);
+    }
+
+    @Test
+    public void testReusingOldInstance() throws InstanceAlreadyExistsException, ConflictingVersionException,
+            ValidationException {
+
+        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
+        createAsynced(transaction, instanceName, transaction.createModule(poolImplName, "pool-test"));
+
+        transaction.commit();
+
+        assertBeanCount(1, factory.getImplementationName());
+
+        transaction = configRegistryClient.createTransaction();
+        CommitStatus status = transaction.commit();
+
+        assertBeanCount(1, factory.getImplementationName());
+        assertStatus(status, 0, 0, 2);
+
+    }
+
+    @Test
+    public void testInstanceAlreadyExistsException() throws ConflictingVersionException, ValidationException,
+            InstanceAlreadyExistsException {
+        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
+
+        ObjectName poolCB = transaction.createModule(poolImplName, "pool-test");
+        createAsynced(transaction, instanceName, poolCB);
+        transaction.commit();
+
+        transaction = configRegistryClient.createTransaction();
+        try {
+            createAsynced(transaction, instanceName, poolCB);
+            fail();
+        } catch (InstanceAlreadyExistsException e) {
+            assertThat(
+                    e.getMessage(),
+                    containsString("There is an instance registered with name ModuleIdentifier{factoryName='async-eventbus', instanceName='async1'}"));
+        }
+    }
+
+    private ObjectName createAsynced(ConfigTransactionJMXClient transaction, String instanceName, ObjectName threadPool)
+            throws InstanceAlreadyExistsException {
+        ObjectName nameCreated = transaction.createModule(factory.getImplementationName(), instanceName);
+        AsyncEventBusModuleMXBean mxBean = transaction.newMBeanProxy(nameCreated, AsyncEventBusModuleMXBean.class);
+        mxBean.setThreadpool(threadPool);
+        return nameCreated;
+    }
+
+}
index 01a89a987b9c19ea83a979812901140da11ed404..4431f78edbc2048cd767e221dc05d647aac0a9d0 100644 (file)
@@ -1,35 +1,35 @@
-/*\r
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.\r
- *\r
- * This program and the accompanying materials are made available under the\r
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
- * and is available at http://www.eclipse.org/legal/epl-v10.html\r
- */\r
-package org.opendaylight.controller.config.threadpool.eventbus;\r
-\r
-import static org.mockito.Mockito.doNothing;\r
-import static org.mockito.Mockito.mock;\r
-\r
-import org.opendaylight.controller.config.api.DynamicMBeanWithInstance;\r
-import org.opendaylight.controller.config.api.ModuleIdentifier;\r
-import org.opendaylight.controller.config.manager.impl.AbstractMockedModule;\r
-import org.opendaylight.controller.config.spi.Module;\r
-import org.opendaylight.controller.config.threadpool.util.CloseableEventBus;\r
-import org.opendaylight.controller.config.yang.threadpool.EventBusServiceInterface;\r
-import org.opendaylight.controller.config.yang.threadpool.impl.EventBusModuleMXBean;\r
-\r
-public class TestingEventBusModule extends AbstractMockedModule implements Module, EventBusServiceInterface,\r
-        EventBusModuleMXBean {\r
-\r
-    public TestingEventBusModule(DynamicMBeanWithInstance old, ModuleIdentifier id) {\r
-        super(old, id);\r
-    }\r
-\r
-    @Override\r
-    protected AutoCloseable prepareMockedInstance() throws Exception {\r
-        CloseableEventBus bus = mock(CloseableEventBus.class);\r
-        doNothing().when(bus).close();\r
-        return bus;\r
-    }\r
-\r
-}\r
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.controller.config.threadpool.eventbus;
+
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.mock;
+
+import org.opendaylight.controller.config.api.DynamicMBeanWithInstance;
+import org.opendaylight.controller.config.api.ModuleIdentifier;
+import org.opendaylight.controller.config.manager.impl.AbstractMockedModule;
+import org.opendaylight.controller.config.spi.Module;
+import org.opendaylight.controller.config.threadpool.util.CloseableEventBus;
+import org.opendaylight.controller.config.yang.threadpool.EventBusServiceInterface;
+import org.opendaylight.controller.config.yang.threadpool.impl.EventBusModuleMXBean;
+
+public class TestingEventBusModule extends AbstractMockedModule implements Module, EventBusServiceInterface,
+        EventBusModuleMXBean {
+
+    public TestingEventBusModule(DynamicMBeanWithInstance old, ModuleIdentifier id) {
+        super(old, id);
+    }
+
+    @Override
+    protected AutoCloseable prepareMockedInstance() throws Exception {
+        CloseableEventBus bus = mock(CloseableEventBus.class);
+        doNothing().when(bus).close();
+        return bus;
+    }
+
+}
index 8bfd049b4b2ca028400a78ad23e987e99400df14..781215da43ef18063a2408a1478234b03df3fad2 100644 (file)
-/*\r
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.\r
- *\r
- * This program and the accompanying materials are made available under the\r
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
- * and is available at http://www.eclipse.org/legal/epl-v10.html\r
- */\r
-package org.opendaylight.controller.config.threadpool.fixed;\r
-\r
-import org.junit.Before;\r
-import org.junit.Test;\r
-import org.opendaylight.controller.config.api.ConflictingVersionException;\r
-import org.opendaylight.controller.config.api.ValidationException;\r
-import org.opendaylight.controller.config.api.jmx.CommitStatus;\r
-import org.opendaylight.controller.config.manager.impl.AbstractConfigTest;\r
-import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;\r
-import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;\r
-import org.opendaylight.controller.config.yang.threadpool.impl.NamingThreadFactoryModuleFactory;\r
-import org.opendaylight.controller.config.yang.threadpool.impl.NamingThreadFactoryModuleMXBean;\r
-import org.opendaylight.controller.config.yang.threadpool.impl.fixed.FixedThreadPoolModuleFactory;\r
-import org.opendaylight.controller.config.yang.threadpool.impl.fixed.FixedThreadPoolModuleMXBean;\r
-\r
-import javax.management.InstanceAlreadyExistsException;\r
-import javax.management.InstanceNotFoundException;\r
-import javax.management.ObjectName;\r
-\r
-import static org.junit.Assert.assertThat;\r
-import static org.junit.Assert.fail;\r
-import static org.junit.matchers.JUnitMatchers.containsString;\r
-\r
-public class FixedThreadPoolConfigBeanTest extends AbstractConfigTest {\r
-\r
-    private FixedThreadPoolModuleFactory factory;\r
-    private final String nameInstance = "fixedInstance";\r
-\r
-    @Before\r
-    public void setUp() {\r
-        factory = new FixedThreadPoolModuleFactory();\r
-        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(factory,\r
-                new NamingThreadFactoryModuleFactory()));\r
-    }\r
-\r
-    @Test\r
-    public void testCreateBean() throws InstanceAlreadyExistsException, ValidationException,\r
-            ConflictingVersionException {\r
-        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
-        createFixed(transaction, nameInstance, 2);\r
-\r
-        transaction.validateConfig();\r
-        CommitStatus status = transaction.commit();\r
-\r
-        assertBeanCount(1, factory.getImplementationName());\r
-        assertStatus(status, 2, 0, 0);\r
-    }\r
-\r
-    @Test\r
-    public void testReusingOldInstance() throws InstanceAlreadyExistsException, ConflictingVersionException,\r
-            ValidationException {\r
-        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
-        createFixed(transaction, nameInstance, 4);\r
-\r
-        transaction.validateConfig();\r
-        transaction.commit();\r
-\r
-        assertBeanCount(1, factory.getImplementationName());\r
-\r
-        transaction = configRegistryClient.createTransaction();\r
-        CommitStatus status = transaction.commit();\r
-\r
-        assertBeanCount(1, factory.getImplementationName());\r
-        assertStatus(status, 0, 0, 2);\r
-    }\r
-\r
-    @Test\r
-    public void testNegative() throws ConflictingVersionException, ValidationException, InstanceAlreadyExistsException {\r
-        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
-\r
-        createFixed(transaction, nameInstance, 5);\r
-        transaction.commit();\r
-\r
-        transaction = configRegistryClient.createTransaction();\r
-        try {\r
-            createFixed(transaction, nameInstance, 0);\r
-            fail();\r
-        } catch (InstanceAlreadyExistsException e) {\r
-            assertThat(\r
-                    e.getMessage(),\r
-                    containsString("There is an instance registered with name ModuleIdentifier{factoryName='threadpool-fixed', instanceName='fixedInstance'}"));\r
-        }\r
-    }\r
-\r
-    @Test\r
-    public void testDestroy() throws InstanceAlreadyExistsException, ValidationException, ConflictingVersionException,\r
-            InstanceNotFoundException {\r
-        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
-        createFixed(transaction, nameInstance, 1);\r
-\r
-        transaction.commit();\r
-\r
-        transaction = configRegistryClient.createTransaction();\r
-        transaction.destroyConfigBean(factory.getImplementationName(), nameInstance);\r
-        CommitStatus status = transaction.commit();\r
-\r
-        assertBeanCount(0, factory.getImplementationName());\r
-        assertStatus(status, 0, 0, 1);\r
-    }\r
-\r
-    @Test\r
-    public void testValidationException() throws InstanceAlreadyExistsException {\r
-        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
-        createFixed(transaction, nameInstance, -1);\r
-        try {\r
-            transaction.validateConfig();\r
-            fail();\r
-        } catch (ValidationException e) {\r
-            assertThat(e.getMessage(), containsString("MaxThreadCount must be greater than zero"));\r
-        }\r
-    }\r
-\r
-    private ObjectName createFixed(ConfigTransactionJMXClient transaction, String name, int numberOfThreads)\r
-            throws InstanceAlreadyExistsException {\r
-        ObjectName nameCreated = transaction.createModule(factory.getImplementationName(), name);\r
-        FixedThreadPoolModuleMXBean mxBean = transaction.newMXBeanProxy(nameCreated, FixedThreadPoolModuleMXBean.class);\r
-        mxBean.setMaxThreadCount(numberOfThreads);\r
-\r
-        ObjectName threadFactoryON = transaction.createModule(NamingThreadFactoryModuleFactory.NAME, "naming");\r
-        NamingThreadFactoryModuleMXBean namingThreadFactoryModuleMXBean = transaction.newMXBeanProxy(threadFactoryON,\r
-                NamingThreadFactoryModuleMXBean.class);\r
-        namingThreadFactoryModuleMXBean.setNamePrefix("prefix");\r
-\r
-        mxBean.setThreadFactory(threadFactoryON);\r
-\r
-        return nameCreated;\r
-    }\r
-\r
-}\r
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.controller.config.threadpool.fixed;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.opendaylight.controller.config.api.ConflictingVersionException;
+import org.opendaylight.controller.config.api.ValidationException;
+import org.opendaylight.controller.config.api.jmx.CommitStatus;
+import org.opendaylight.controller.config.manager.impl.AbstractConfigTest;
+import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;
+import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;
+import org.opendaylight.controller.config.yang.threadpool.impl.NamingThreadFactoryModuleFactory;
+import org.opendaylight.controller.config.yang.threadpool.impl.NamingThreadFactoryModuleMXBean;
+import org.opendaylight.controller.config.yang.threadpool.impl.fixed.FixedThreadPoolModuleFactory;
+import org.opendaylight.controller.config.yang.threadpool.impl.fixed.FixedThreadPoolModuleMXBean;
+
+import javax.management.InstanceAlreadyExistsException;
+import javax.management.InstanceNotFoundException;
+import javax.management.ObjectName;
+
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.fail;
+import static org.junit.matchers.JUnitMatchers.containsString;
+
+public class FixedThreadPoolConfigBeanTest extends AbstractConfigTest {
+
+    private FixedThreadPoolModuleFactory factory;
+    private final String nameInstance = "fixedInstance";
+
+    @Before
+    public void setUp() {
+        factory = new FixedThreadPoolModuleFactory();
+        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(factory,
+                new NamingThreadFactoryModuleFactory()));
+    }
+
+    @Test
+    public void testCreateBean() throws InstanceAlreadyExistsException, ValidationException,
+            ConflictingVersionException {
+        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
+        createFixed(transaction, nameInstance, 2);
+
+        transaction.validateConfig();
+        CommitStatus status = transaction.commit();
+
+        assertBeanCount(1, factory.getImplementationName());
+        assertStatus(status, 2, 0, 0);
+    }
+
+    @Test
+    public void testReusingOldInstance() throws InstanceAlreadyExistsException, ConflictingVersionException,
+            ValidationException {
+        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
+        createFixed(transaction, nameInstance, 4);
+
+        transaction.validateConfig();
+        transaction.commit();
+
+        assertBeanCount(1, factory.getImplementationName());
+
+        transaction = configRegistryClient.createTransaction();
+        CommitStatus status = transaction.commit();
+
+        assertBeanCount(1, factory.getImplementationName());
+        assertStatus(status, 0, 0, 2);
+    }
+
+    @Test
+    public void testNegative() throws ConflictingVersionException, ValidationException, InstanceAlreadyExistsException {
+        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
+
+        createFixed(transaction, nameInstance, 5);
+        transaction.commit();
+
+        transaction = configRegistryClient.createTransaction();
+        try {
+            createFixed(transaction, nameInstance, 0);
+            fail();
+        } catch (InstanceAlreadyExistsException e) {
+            assertThat(
+                    e.getMessage(),
+                    containsString("There is an instance registered with name ModuleIdentifier{factoryName='threadpool-fixed', instanceName='fixedInstance'}"));
+        }
+    }
+
+    @Test
+    public void testDestroy() throws InstanceAlreadyExistsException, ValidationException, ConflictingVersionException,
+            InstanceNotFoundException {
+        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
+        createFixed(transaction, nameInstance, 1);
+
+        transaction.commit();
+
+        transaction = configRegistryClient.createTransaction();
+        transaction.destroyConfigBean(factory.getImplementationName(), nameInstance);
+        CommitStatus status = transaction.commit();
+
+        assertBeanCount(0, factory.getImplementationName());
+        assertStatus(status, 0, 0, 1);
+    }
+
+    @Test
+    public void testValidationException() throws InstanceAlreadyExistsException {
+        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
+        createFixed(transaction, nameInstance, -1);
+        try {
+            transaction.validateConfig();
+            fail();
+        } catch (ValidationException e) {
+            assertThat(e.getMessage(), containsString("MaxThreadCount must be greater than zero"));
+        }
+    }
+
+    private ObjectName createFixed(ConfigTransactionJMXClient transaction, String name, int numberOfThreads)
+            throws InstanceAlreadyExistsException {
+        ObjectName nameCreated = transaction.createModule(factory.getImplementationName(), name);
+        FixedThreadPoolModuleMXBean mxBean = transaction.newMXBeanProxy(nameCreated, FixedThreadPoolModuleMXBean.class);
+        mxBean.setMaxThreadCount(numberOfThreads);
+
+        ObjectName threadFactoryON = transaction.createModule(NamingThreadFactoryModuleFactory.NAME, "naming");
+        NamingThreadFactoryModuleMXBean namingThreadFactoryModuleMXBean = transaction.newMXBeanProxy(threadFactoryON,
+                NamingThreadFactoryModuleMXBean.class);
+        namingThreadFactoryModuleMXBean.setNamePrefix("prefix");
+
+        mxBean.setThreadFactory(threadFactoryON);
+
+        return nameCreated;
+    }
+
+}
index 1fc0821405081a0c3a2d6766f91f6c2dfe4010d8..03cf9d63a25cedcf705c1c2449711a1f973c2a68 100644 (file)
@@ -1,37 +1,37 @@
-/*\r
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.\r
- *\r
- * This program and the accompanying materials are made available under the\r
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
- * and is available at http://www.eclipse.org/legal/epl-v10.html\r
- */\r
-package org.opendaylight.controller.config.threadpool.fixed;\r
-\r
-import static org.mockito.Mockito.doNothing;\r
-import static org.mockito.Mockito.doReturn;\r
-import static org.mockito.Mockito.mock;\r
-\r
-import java.util.concurrent.ExecutorService;\r
-\r
-import org.opendaylight.controller.config.api.DynamicMBeanWithInstance;\r
-import org.opendaylight.controller.config.api.ModuleIdentifier;\r
-import org.opendaylight.controller.config.manager.impl.AbstractMockedModule;\r
-import org.opendaylight.controller.config.spi.Module;\r
-import org.opendaylight.controller.config.threadpool.util.FixedThreadPoolWrapper;\r
-import org.opendaylight.controller.config.yang.threadpool.ThreadPoolServiceInterface;\r
-\r
-public class TestingFixedThreadPoolModule extends AbstractMockedModule implements ThreadPoolServiceInterface, Module {\r
-\r
-    public TestingFixedThreadPoolModule(DynamicMBeanWithInstance old, ModuleIdentifier id) {\r
-        super(old, id);\r
-    }\r
-\r
-    @Override\r
-    protected AutoCloseable prepareMockedInstance() throws Exception {\r
-        FixedThreadPoolWrapper pool = mock(FixedThreadPoolWrapper.class);\r
-        doNothing().when(pool).close();\r
-        doReturn(mock(ExecutorService.class)).when(pool).getExecutor();\r
-        return pool;\r
-    }\r
-\r
-}\r
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.controller.config.threadpool.fixed;
+
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+
+import java.util.concurrent.ExecutorService;
+
+import org.opendaylight.controller.config.api.DynamicMBeanWithInstance;
+import org.opendaylight.controller.config.api.ModuleIdentifier;
+import org.opendaylight.controller.config.manager.impl.AbstractMockedModule;
+import org.opendaylight.controller.config.spi.Module;
+import org.opendaylight.controller.config.threadpool.util.FixedThreadPoolWrapper;
+import org.opendaylight.controller.config.yang.threadpool.ThreadPoolServiceInterface;
+
+public class TestingFixedThreadPoolModule extends AbstractMockedModule implements ThreadPoolServiceInterface, Module {
+
+    public TestingFixedThreadPoolModule(DynamicMBeanWithInstance old, ModuleIdentifier id) {
+        super(old, id);
+    }
+
+    @Override
+    protected AutoCloseable prepareMockedInstance() throws Exception {
+        FixedThreadPoolWrapper pool = mock(FixedThreadPoolWrapper.class);
+        doNothing().when(pool).close();
+        doReturn(mock(ExecutorService.class)).when(pool).getExecutor();
+        return pool;
+    }
+
+}
index 43cb7e1bcbf3307259d6fd165105931f783a8c44..f0e8a108e74c76c43b14dfee998c60faee9fdd98 100644 (file)
-/*\r
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.\r
- *\r
- * This program and the accompanying materials are made available under the\r
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
- * and is available at http://www.eclipse.org/legal/epl-v10.html\r
- */\r
-package org.opendaylight.controller.config.threadpool.flexible;\r
-\r
-import org.junit.Before;\r
-import org.junit.Test;\r
-import org.opendaylight.controller.config.api.ConflictingVersionException;\r
-import org.opendaylight.controller.config.api.ValidationException;\r
-import org.opendaylight.controller.config.api.jmx.CommitStatus;\r
-import org.opendaylight.controller.config.manager.impl.AbstractConfigTest;\r
-import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;\r
-import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;\r
-import org.opendaylight.controller.config.yang.threadpool.impl.NamingThreadFactoryModuleFactory;\r
-import org.opendaylight.controller.config.yang.threadpool.impl.NamingThreadFactoryModuleMXBean;\r
-import org.opendaylight.controller.config.yang.threadpool.impl.flexible.FlexibleThreadPoolModuleFactory;\r
-import org.opendaylight.controller.config.yang.threadpool.impl.flexible.FlexibleThreadPoolModuleMXBean;\r
-\r
-import javax.management.InstanceAlreadyExistsException;\r
-import javax.management.InstanceNotFoundException;\r
-import javax.management.ObjectName;\r
-\r
-import static org.junit.Assert.assertThat;\r
-import static org.junit.Assert.fail;\r
-import static org.junit.matchers.JUnitMatchers.containsString;\r
-\r
-public class FlexibleThreadPoolConfigBeanTest extends AbstractConfigTest {\r
-\r
-    private FlexibleThreadPoolModuleFactory flexibleFactory;\r
-    private final String instanceName = "flexible1";\r
-    private final String threadFactoryName = "threadFactoryName";\r
-\r
-    @Before\r
-    public void setUp() {\r
-\r
-        flexibleFactory = new FlexibleThreadPoolModuleFactory();\r
-        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(flexibleFactory,\r
-                new NamingThreadFactoryModuleFactory()));\r
-    }\r
-\r
-    @Test\r
-    public void testCreateBean() throws InstanceAlreadyExistsException, ValidationException,\r
-            ConflictingVersionException {\r
-        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
-\r
-        createFlexible(transaction, instanceName, threadFactoryName, 1, 20, 20);\r
-        transaction.validateConfig();\r
-        CommitStatus status = transaction.commit();\r
-\r
-        assertBeanCount(1, flexibleFactory.getImplementationName());\r
-        assertStatus(status, 2, 0, 0);\r
-    }\r
-\r
-    @Test\r
-    public void testReusingOldInstance() throws InstanceAlreadyExistsException, ConflictingVersionException,\r
-            ValidationException {\r
-\r
-        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
-        createFlexible(transaction, instanceName, threadFactoryName, 1, 20, 10);\r
-\r
-        transaction.commit();\r
-\r
-        assertBeanCount(1, flexibleFactory.getImplementationName());\r
-\r
-        transaction = configRegistryClient.createTransaction();\r
-        CommitStatus status = transaction.commit();\r
-\r
-        assertBeanCount(1, flexibleFactory.getImplementationName());\r
-        assertStatus(status, 0, 0, 2);\r
-\r
-    }\r
-\r
-    @Test\r
-    public void testInstanceAlreadyExistsException() throws ConflictingVersionException, ValidationException {\r
-        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
-\r
-        try {\r
-            createFlexible(transaction, instanceName, threadFactoryName, 1, 1, 2);\r
-            transaction.commit();\r
-        } catch (InstanceAlreadyExistsException e1) {\r
-            fail();\r
-        }\r
-\r
-        transaction = configRegistryClient.createTransaction();\r
-        try {\r
-            createFlexible(transaction, instanceName, "threadFactoryName1", 2, 2, 2);\r
-            fail();\r
-        } catch (InstanceAlreadyExistsException e) {\r
-            assertThat(\r
-                    e.getMessage(),\r
-                    containsString("There is an instance registered with name ModuleIdentifier{factoryName='threadpool-flexible', instanceName='flexible1'}"));\r
-        }\r
-    }\r
-\r
-    @Test\r
-    public void testValidationException() throws InstanceAlreadyExistsException {\r
-        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
-\r
-        createFlexible(transaction, instanceName, threadFactoryName, 0, 10, 10);\r
-\r
-        try {\r
-            transaction.validateConfig();\r
-            fail();\r
-        } catch (ValidationException e) {\r
-            assertThat(e.getMessage(), containsString("MinThreadCount must be greater than zero"));\r
-        }\r
-    }\r
-\r
-    @Test\r
-    public void testValidationException2() throws InstanceAlreadyExistsException {\r
-        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
-\r
-        createFlexible(transaction, instanceName, threadFactoryName, 0, 0, 10);\r
-\r
-        try {\r
-            transaction.validateConfig();\r
-            fail();\r
-        } catch (ValidationException e) {\r
-            assertThat(e.getMessage(), containsString("KeepAliveMillis must be greater than zero"));\r
-        }\r
-    }\r
-\r
-    @Test\r
-    public void testValidationException3() throws InstanceAlreadyExistsException {\r
-        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
-\r
-        createFlexible(transaction, instanceName, threadFactoryName, 10, 50, 0);\r
-\r
-        try {\r
-            transaction.validateConfig();\r
-            fail();\r
-        } catch (ValidationException e) {\r
-            assertThat(e.getMessage(), containsString("MaxThreadCount must be greater than zero"));\r
-        }\r
-    }\r
-\r
-    private ObjectName createFlexible(ConfigTransactionJMXClient transaction, String instanceName,\r
-            String threadFactoryName, int minThreadCount, long keepAliveMillis, int maxThreadCount)\r
-            throws InstanceAlreadyExistsException {\r
-\r
-        ObjectName threadFactoryON = transaction.createModule(NamingThreadFactoryModuleFactory.NAME, threadFactoryName);\r
-        NamingThreadFactoryModuleMXBean namingThreadFactoryModuleMXBean = transaction.newMXBeanProxy(threadFactoryON,\r
-                NamingThreadFactoryModuleMXBean.class);\r
-        namingThreadFactoryModuleMXBean.setNamePrefix("prefix");\r
-\r
-        ObjectName flexibleON = transaction.createModule(flexibleFactory.getImplementationName(), instanceName);\r
-        FlexibleThreadPoolModuleMXBean mxBean = transaction.newMBeanProxy(flexibleON,\r
-                FlexibleThreadPoolModuleMXBean.class);\r
-        mxBean.setKeepAliveMillis(keepAliveMillis);\r
-        mxBean.setMaxThreadCount(maxThreadCount);\r
-        mxBean.setMinThreadCount(minThreadCount);\r
-        mxBean.setThreadFactory(threadFactoryON);\r
-        return flexibleON;\r
-    }\r
-\r
-    @Test\r
-    public void testReconfigurationInstance() throws InstanceAlreadyExistsException, ValidationException,\r
-            ConflictingVersionException, InstanceNotFoundException {\r
-        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
-        createFlexible(transaction, instanceName, threadFactoryName, 2, 2, 2);\r
-\r
-        transaction.commit();\r
-\r
-        transaction = configRegistryClient.createTransaction();\r
-        ObjectName databaseNew = transaction.lookupConfigBean(flexibleFactory.getImplementationName(), instanceName);\r
-        FlexibleThreadPoolModuleMXBean proxy = transaction.newMXBeanProxy(databaseNew,\r
-                FlexibleThreadPoolModuleMXBean.class);\r
-        proxy.setMaxThreadCount(99);\r
-\r
-        CommitStatus status = transaction.commit();\r
-\r
-        assertBeanCount(1, flexibleFactory.getImplementationName());\r
-        assertStatus(status, 0, 1, 1);\r
-    }\r
-\r
-}\r
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.controller.config.threadpool.flexible;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.opendaylight.controller.config.api.ConflictingVersionException;
+import org.opendaylight.controller.config.api.ValidationException;
+import org.opendaylight.controller.config.api.jmx.CommitStatus;
+import org.opendaylight.controller.config.manager.impl.AbstractConfigTest;
+import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;
+import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;
+import org.opendaylight.controller.config.yang.threadpool.impl.NamingThreadFactoryModuleFactory;
+import org.opendaylight.controller.config.yang.threadpool.impl.NamingThreadFactoryModuleMXBean;
+import org.opendaylight.controller.config.yang.threadpool.impl.flexible.FlexibleThreadPoolModuleFactory;
+import org.opendaylight.controller.config.yang.threadpool.impl.flexible.FlexibleThreadPoolModuleMXBean;
+
+import javax.management.InstanceAlreadyExistsException;
+import javax.management.InstanceNotFoundException;
+import javax.management.ObjectName;
+
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.fail;
+import static org.junit.matchers.JUnitMatchers.containsString;
+
+public class FlexibleThreadPoolConfigBeanTest extends AbstractConfigTest {
+
+    private FlexibleThreadPoolModuleFactory flexibleFactory;
+    private final String instanceName = "flexible1";
+    private final String threadFactoryName = "threadFactoryName";
+
+    @Before
+    public void setUp() {
+
+        flexibleFactory = new FlexibleThreadPoolModuleFactory();
+        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(flexibleFactory,
+                new NamingThreadFactoryModuleFactory()));
+    }
+
+    @Test
+    public void testCreateBean() throws InstanceAlreadyExistsException, ValidationException,
+            ConflictingVersionException {
+        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
+
+        createFlexible(transaction, instanceName, threadFactoryName, 1, 20, 20);
+        transaction.validateConfig();
+        CommitStatus status = transaction.commit();
+
+        assertBeanCount(1, flexibleFactory.getImplementationName());
+        assertStatus(status, 2, 0, 0);
+    }
+
+    @Test
+    public void testReusingOldInstance() throws InstanceAlreadyExistsException, ConflictingVersionException,
+            ValidationException {
+
+        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
+        createFlexible(transaction, instanceName, threadFactoryName, 1, 20, 10);
+
+        transaction.commit();
+
+        assertBeanCount(1, flexibleFactory.getImplementationName());
+
+        transaction = configRegistryClient.createTransaction();
+        CommitStatus status = transaction.commit();
+
+        assertBeanCount(1, flexibleFactory.getImplementationName());
+        assertStatus(status, 0, 0, 2);
+
+    }
+
+    @Test
+    public void testInstanceAlreadyExistsException() throws ConflictingVersionException, ValidationException {
+        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
+
+        try {
+            createFlexible(transaction, instanceName, threadFactoryName, 1, 1, 2);
+            transaction.commit();
+        } catch (InstanceAlreadyExistsException e1) {
+            fail();
+        }
+
+        transaction = configRegistryClient.createTransaction();
+        try {
+            createFlexible(transaction, instanceName, "threadFactoryName1", 2, 2, 2);
+            fail();
+        } catch (InstanceAlreadyExistsException e) {
+            assertThat(
+                    e.getMessage(),
+                    containsString("There is an instance registered with name ModuleIdentifier{factoryName='threadpool-flexible', instanceName='flexible1'}"));
+        }
+    }
+
+    @Test
+    public void testValidationException() throws InstanceAlreadyExistsException {
+        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
+
+        createFlexible(transaction, instanceName, threadFactoryName, 0, 10, 10);
+
+        try {
+            transaction.validateConfig();
+            fail();
+        } catch (ValidationException e) {
+            assertThat(e.getMessage(), containsString("MinThreadCount must be greater than zero"));
+        }
+    }
+
+    @Test
+    public void testValidationException2() throws InstanceAlreadyExistsException {
+        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
+
+        createFlexible(transaction, instanceName, threadFactoryName, 0, 0, 10);
+
+        try {
+            transaction.validateConfig();
+            fail();
+        } catch (ValidationException e) {
+            assertThat(e.getMessage(), containsString("KeepAliveMillis must be greater than zero"));
+        }
+    }
+
+    @Test
+    public void testValidationException3() throws InstanceAlreadyExistsException {
+        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
+
+        createFlexible(transaction, instanceName, threadFactoryName, 10, 50, 0);
+
+        try {
+            transaction.validateConfig();
+            fail();
+        } catch (ValidationException e) {
+            assertThat(e.getMessage(), containsString("MaxThreadCount must be greater than zero"));
+        }
+    }
+
+    private ObjectName createFlexible(ConfigTransactionJMXClient transaction, String instanceName,
+            String threadFactoryName, int minThreadCount, long keepAliveMillis, int maxThreadCount)
+            throws InstanceAlreadyExistsException {
+
+        ObjectName threadFactoryON = transaction.createModule(NamingThreadFactoryModuleFactory.NAME, threadFactoryName);
+        NamingThreadFactoryModuleMXBean namingThreadFactoryModuleMXBean = transaction.newMXBeanProxy(threadFactoryON,
+                NamingThreadFactoryModuleMXBean.class);
+        namingThreadFactoryModuleMXBean.setNamePrefix("prefix");
+
+        ObjectName flexibleON = transaction.createModule(flexibleFactory.getImplementationName(), instanceName);
+        FlexibleThreadPoolModuleMXBean mxBean = transaction.newMBeanProxy(flexibleON,
+                FlexibleThreadPoolModuleMXBean.class);
+        mxBean.setKeepAliveMillis(keepAliveMillis);
+        mxBean.setMaxThreadCount(maxThreadCount);
+        mxBean.setMinThreadCount(minThreadCount);
+        mxBean.setThreadFactory(threadFactoryON);
+        return flexibleON;
+    }
+
+    @Test
+    public void testReconfigurationInstance() throws InstanceAlreadyExistsException, ValidationException,
+            ConflictingVersionException, InstanceNotFoundException {
+        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
+        createFlexible(transaction, instanceName, threadFactoryName, 2, 2, 2);
+
+        transaction.commit();
+
+        transaction = configRegistryClient.createTransaction();
+        ObjectName databaseNew = transaction.lookupConfigBean(flexibleFactory.getImplementationName(), instanceName);
+        FlexibleThreadPoolModuleMXBean proxy = transaction.newMXBeanProxy(databaseNew,
+                FlexibleThreadPoolModuleMXBean.class);
+        proxy.setMaxThreadCount(99);
+
+        CommitStatus status = transaction.commit();
+
+        assertBeanCount(1, flexibleFactory.getImplementationName());
+        assertStatus(status, 0, 1, 1);
+    }
+
+}
index 7280b0410394b7ec11666cd94d30a7c6eb8559b0..6dea96e21f3cf42d64f5ab1ed17b8981a61f5e2d 100644 (file)
-/*\r
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.\r
- *\r
- * This program and the accompanying materials are made available under the\r
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
- * and is available at http://www.eclipse.org/legal/epl-v10.html\r
- */\r
-package org.opendaylight.controller.config.threadpool.naming;\r
-\r
-import static org.junit.Assert.assertEquals;\r
-import static org.junit.Assert.assertThat;\r
-import static org.junit.Assert.assertTrue;\r
-import static org.junit.Assert.fail;\r
-import static org.junit.matchers.JUnitMatchers.containsString;\r
-\r
-import javax.management.InstanceAlreadyExistsException;\r
-import javax.management.InstanceNotFoundException;\r
-import javax.management.ObjectName;\r
-\r
-import org.junit.Before;\r
-import org.junit.Test;\r
-import org.opendaylight.controller.config.api.ConflictingVersionException;\r
-import org.opendaylight.controller.config.api.ValidationException;\r
-import org.opendaylight.controller.config.api.jmx.CommitStatus;\r
-import org.opendaylight.controller.config.manager.impl.AbstractConfigTest;\r
-import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;\r
-import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;\r
-import org.opendaylight.controller.config.yang.threadpool.ThreadFactoryServiceInterface;\r
-import org.opendaylight.controller.config.yang.threadpool.impl.NamingThreadFactoryModuleFactory;\r
-import org.opendaylight.controller.config.yang.threadpool.impl.NamingThreadFactoryModuleMXBean;\r
-\r
-public class NamingThreadPoolFactoryConfigBeanTest extends AbstractConfigTest {\r
-\r
-    private NamingThreadFactoryModuleFactory factory;\r
-    private final String instanceName = "named";\r
-\r
-    @Before\r
-    public void setUp() {\r
-\r
-        factory = new NamingThreadFactoryModuleFactory();\r
-        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(factory));\r
-    }\r
-\r
-    @Test\r
-    public void testCreateBean() throws InstanceAlreadyExistsException, ValidationException,\r
-            ConflictingVersionException {\r
-        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
-\r
-        createNamed(transaction, instanceName, "prefixes");\r
-        transaction.validateConfig();\r
-        CommitStatus status = transaction.commit();\r
-\r
-        assertEquals(1, configRegistry.lookupConfigBeans(factory.getImplementationName()).size());\r
-        assertEquals(1, status.getNewInstances().size());\r
-        assertEquals(0, status.getRecreatedInstances().size());\r
-        assertEquals(0, status.getReusedInstances().size());\r
-    }\r
-\r
-    @Test\r
-    public void testReusingOldInstance() throws InstanceAlreadyExistsException, ConflictingVersionException,\r
-            ValidationException {\r
-\r
-        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
-        createNamed(transaction, instanceName, "prefixes");\r
-\r
-        transaction.commit();\r
-\r
-        assertEquals(1, configRegistry.lookupConfigBeans(factory.getImplementationName()).size());\r
-\r
-        transaction = configRegistryClient.createTransaction();\r
-        CommitStatus status = transaction.commit();\r
-\r
-        assertEquals(1, configRegistry.lookupConfigBeans(factory.getImplementationName()).size());\r
-        assertEquals(0, status.getNewInstances().size());\r
-        assertEquals(0, status.getRecreatedInstances().size());\r
-        assertEquals(1, status.getReusedInstances().size());\r
-\r
-    }\r
-\r
-    @Test\r
-    public void testInstanceAlreadyExistsException() throws ConflictingVersionException, ValidationException,\r
-            InstanceAlreadyExistsException {\r
-        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
-\r
-        createNamed(transaction, instanceName, "prefixes");\r
-        transaction.commit();\r
-\r
-        transaction = configRegistryClient.createTransaction();\r
-        try {\r
-            createNamed(transaction, instanceName, "prefixes1");\r
-            fail();\r
-        } catch (InstanceAlreadyExistsException e) {\r
-            assertThat(\r
-                    e.getMessage(),\r
-                    containsString("There is an instance registered with name ModuleIdentifier{factoryName='threadfactory-naming', instanceName='named'}"));\r
-        }\r
-    }\r
-\r
-    @Test\r
-    public void testValidationException() throws InstanceAlreadyExistsException {\r
-        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
-\r
-        ObjectName nameCreated = transaction.createModule(factory.getImplementationName(), instanceName);\r
-        transaction.newMXBeanProxy(nameCreated, ThreadFactoryServiceInterface.class);\r
-        try {\r
-            transaction.validateConfig();\r
-            fail();\r
-        } catch (ValidationException e) {\r
-            assertTrue(e.getFailedValidations().containsKey(factory.getImplementationName()));\r
-            assertEquals(1, e.getFailedValidations().get(factory.getImplementationName()).keySet().size());\r
-        }\r
-    }\r
-\r
-    @Test\r
-    public void testReconfigurationInstance() throws InstanceAlreadyExistsException, ValidationException,\r
-            ConflictingVersionException, InstanceNotFoundException {\r
-        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
-        createNamed(transaction, instanceName, "pref");\r
-\r
-        transaction.commit();\r
-\r
-        transaction = configRegistryClient.createTransaction();\r
-        ObjectName databaseNew = transaction.lookupConfigBean(factory.getImplementationName(), instanceName);\r
-        NamingThreadFactoryModuleMXBean proxy = transaction.newMXBeanProxy(databaseNew,\r
-                NamingThreadFactoryModuleMXBean.class);\r
-        proxy.setNamePrefix("pref1");\r
-\r
-        CommitStatus status = transaction.commit();\r
-\r
-        assertBeanCount(1, factory.getImplementationName());\r
-        assertStatus(status, 0, 1, 0);\r
-    }\r
-\r
-    private ObjectName createNamed(ConfigTransactionJMXClient transaction, String instanceName, String prefixes)\r
-            throws InstanceAlreadyExistsException {\r
-        ObjectName nameCreated = transaction.createModule(factory.getImplementationName(), instanceName);\r
-        NamingThreadFactoryModuleMXBean mxBean = transaction.newMBeanProxy(nameCreated,\r
-                NamingThreadFactoryModuleMXBean.class);\r
-        mxBean.setNamePrefix(prefixes);\r
-        return nameCreated;\r
-    }\r
-\r
-}\r
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.controller.config.threadpool.naming;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import static org.junit.matchers.JUnitMatchers.containsString;
+
+import javax.management.InstanceAlreadyExistsException;
+import javax.management.InstanceNotFoundException;
+import javax.management.ObjectName;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.opendaylight.controller.config.api.ConflictingVersionException;
+import org.opendaylight.controller.config.api.ValidationException;
+import org.opendaylight.controller.config.api.jmx.CommitStatus;
+import org.opendaylight.controller.config.manager.impl.AbstractConfigTest;
+import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;
+import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;
+import org.opendaylight.controller.config.yang.threadpool.ThreadFactoryServiceInterface;
+import org.opendaylight.controller.config.yang.threadpool.impl.NamingThreadFactoryModuleFactory;
+import org.opendaylight.controller.config.yang.threadpool.impl.NamingThreadFactoryModuleMXBean;
+
+public class NamingThreadPoolFactoryConfigBeanTest extends AbstractConfigTest {
+
+    private NamingThreadFactoryModuleFactory factory;
+    private final String instanceName = "named";
+
+    @Before
+    public void setUp() {
+
+        factory = new NamingThreadFactoryModuleFactory();
+        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(factory));
+    }
+
+    @Test
+    public void testCreateBean() throws InstanceAlreadyExistsException, ValidationException,
+            ConflictingVersionException {
+        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
+
+        createNamed(transaction, instanceName, "prefixes");
+        transaction.validateConfig();
+        CommitStatus status = transaction.commit();
+
+        assertEquals(1, configRegistry.lookupConfigBeans(factory.getImplementationName()).size());
+        assertEquals(1, status.getNewInstances().size());
+        assertEquals(0, status.getRecreatedInstances().size());
+        assertEquals(0, status.getReusedInstances().size());
+    }
+
+    @Test
+    public void testReusingOldInstance() throws InstanceAlreadyExistsException, ConflictingVersionException,
+            ValidationException {
+
+        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
+        createNamed(transaction, instanceName, "prefixes");
+
+        transaction.commit();
+
+        assertEquals(1, configRegistry.lookupConfigBeans(factory.getImplementationName()).size());
+
+        transaction = configRegistryClient.createTransaction();
+        CommitStatus status = transaction.commit();
+
+        assertEquals(1, configRegistry.lookupConfigBeans(factory.getImplementationName()).size());
+        assertEquals(0, status.getNewInstances().size());
+        assertEquals(0, status.getRecreatedInstances().size());
+        assertEquals(1, status.getReusedInstances().size());
+
+    }
+
+    @Test
+    public void testInstanceAlreadyExistsException() throws ConflictingVersionException, ValidationException,
+            InstanceAlreadyExistsException {
+        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
+
+        createNamed(transaction, instanceName, "prefixes");
+        transaction.commit();
+
+        transaction = configRegistryClient.createTransaction();
+        try {
+            createNamed(transaction, instanceName, "prefixes1");
+            fail();
+        } catch (InstanceAlreadyExistsException e) {
+            assertThat(
+                    e.getMessage(),
+                    containsString("There is an instance registered with name ModuleIdentifier{factoryName='threadfactory-naming', instanceName='named'}"));
+        }
+    }
+
+    @Test
+    public void testValidationException() throws InstanceAlreadyExistsException {
+        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
+
+        ObjectName nameCreated = transaction.createModule(factory.getImplementationName(), instanceName);
+        transaction.newMXBeanProxy(nameCreated, ThreadFactoryServiceInterface.class);
+        try {
+            transaction.validateConfig();
+            fail();
+        } catch (ValidationException e) {
+            assertTrue(e.getFailedValidations().containsKey(factory.getImplementationName()));
+            assertEquals(1, e.getFailedValidations().get(factory.getImplementationName()).keySet().size());
+        }
+    }
+
+    @Test
+    public void testReconfigurationInstance() throws InstanceAlreadyExistsException, ValidationException,
+            ConflictingVersionException, InstanceNotFoundException {
+        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
+        createNamed(transaction, instanceName, "pref");
+
+        transaction.commit();
+
+        transaction = configRegistryClient.createTransaction();
+        ObjectName databaseNew = transaction.lookupConfigBean(factory.getImplementationName(), instanceName);
+        NamingThreadFactoryModuleMXBean proxy = transaction.newMXBeanProxy(databaseNew,
+                NamingThreadFactoryModuleMXBean.class);
+        proxy.setNamePrefix("pref1");
+
+        CommitStatus status = transaction.commit();
+
+        assertBeanCount(1, factory.getImplementationName());
+        assertStatus(status, 0, 1, 0);
+    }
+
+    private ObjectName createNamed(ConfigTransactionJMXClient transaction, String instanceName, String prefixes)
+            throws InstanceAlreadyExistsException {
+        ObjectName nameCreated = transaction.createModule(factory.getImplementationName(), instanceName);
+        NamingThreadFactoryModuleMXBean mxBean = transaction.newMBeanProxy(nameCreated,
+                NamingThreadFactoryModuleMXBean.class);
+        mxBean.setNamePrefix(prefixes);
+        return nameCreated;
+    }
+
+}
index f22da34d76f3e5ff39f603f69e672f51eda568f2..47613bfb1b1458df8871c1fdb84dab777319ff8b 100644 (file)
@@ -1,66 +1,66 @@
-/*\r
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.\r
- *\r
- * This program and the accompanying materials are made available under the\r
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
- * and is available at http://www.eclipse.org/legal/epl-v10.html\r
- */\r
-package org.opendaylight.controller.config.threadpool.naming;\r
-\r
-import static org.mockito.Matchers.any;\r
-import static org.mockito.Mockito.doNothing;\r
-import static org.mockito.Mockito.doReturn;\r
-import static org.mockito.Mockito.mock;\r
-\r
-import java.io.Closeable;\r
-import java.io.IOException;\r
-\r
-import org.opendaylight.controller.config.api.DynamicMBeanWithInstance;\r
-import org.opendaylight.controller.config.api.ModuleIdentifier;\r
-import org.opendaylight.controller.config.spi.Module;\r
-import org.opendaylight.controller.config.threadpool.util.NamingThreadPoolFactory;\r
-import org.opendaylight.controller.config.yang.threadpool.ThreadFactoryServiceInterface;\r
-import org.opendaylight.controller.config.yang.threadpool.impl.NamingThreadFactoryModuleMXBean;\r
-\r
-public class TestingNamingThreadPoolFactoryModule implements Module, ThreadFactoryServiceInterface,\r
-        NamingThreadFactoryModuleMXBean {\r
-\r
-    private final NamingThreadPoolFactory fact;\r
-\r
-    public TestingNamingThreadPoolFactoryModule() throws IOException {\r
-        fact = mock(NamingThreadPoolFactory.class);\r
-        Thread thread = mock(Thread.class);\r
-        doNothing().when(thread).start();\r
-        doReturn(thread).when(fact).newThread(any(Runnable.class));\r
-        doNothing().when(fact).close();\r
-    }\r
-\r
-    public TestingNamingThreadPoolFactoryModule(DynamicMBeanWithInstance old) {\r
-        fact = (NamingThreadPoolFactory) old.getInstance();\r
-    }\r
-\r
-    @Override\r
-    public ModuleIdentifier getIdentifier() {\r
-        return new ModuleIdentifier(TestingNamingThreadPoolFactoryModule.class.getCanonicalName(), "mock");\r
-    }\r
-\r
-    @Override\r
-    public String getNamePrefix() {\r
-        return null;\r
-    }\r
-\r
-    @Override\r
-    public void setNamePrefix(String arg) {\r
-        throw new UnsupportedOperationException();\r
-    }\r
-\r
-    @Override\r
-    public void validate() {\r
-    }\r
-\r
-    @Override\r
-    public Closeable getInstance() {\r
-        return fact;\r
-    }\r
-\r
-}\r
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.controller.config.threadpool.naming;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+
+import java.io.Closeable;
+import java.io.IOException;
+
+import org.opendaylight.controller.config.api.DynamicMBeanWithInstance;
+import org.opendaylight.controller.config.api.ModuleIdentifier;
+import org.opendaylight.controller.config.spi.Module;
+import org.opendaylight.controller.config.threadpool.util.NamingThreadPoolFactory;
+import org.opendaylight.controller.config.yang.threadpool.ThreadFactoryServiceInterface;
+import org.opendaylight.controller.config.yang.threadpool.impl.NamingThreadFactoryModuleMXBean;
+
+public class TestingNamingThreadPoolFactoryModule implements Module, ThreadFactoryServiceInterface,
+        NamingThreadFactoryModuleMXBean {
+
+    private final NamingThreadPoolFactory fact;
+
+    public TestingNamingThreadPoolFactoryModule() throws IOException {
+        fact = mock(NamingThreadPoolFactory.class);
+        Thread thread = mock(Thread.class);
+        doNothing().when(thread).start();
+        doReturn(thread).when(fact).newThread(any(Runnable.class));
+        doNothing().when(fact).close();
+    }
+
+    public TestingNamingThreadPoolFactoryModule(DynamicMBeanWithInstance old) {
+        fact = (NamingThreadPoolFactory) old.getInstance();
+    }
+
+    @Override
+    public ModuleIdentifier getIdentifier() {
+        return new ModuleIdentifier(TestingNamingThreadPoolFactoryModule.class.getCanonicalName(), "mock");
+    }
+
+    @Override
+    public String getNamePrefix() {
+        return null;
+    }
+
+    @Override
+    public void setNamePrefix(String arg) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void validate() {
+    }
+
+    @Override
+    public Closeable getInstance() {
+        return fact;
+    }
+
+}
index 6183cb56c172edb3b5c635e75d81e8bc6cdc0cec..538d43726b1119f7a913da4a328ddbc2c5b08011 100644 (file)
-/*\r
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.\r
- *\r
- * This program and the accompanying materials are made available under the\r
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
- * and is available at http://www.eclipse.org/legal/epl-v10.html\r
- */\r
-package org.opendaylight.controller.config.threadpool.scheduled;\r
-\r
-import org.junit.Before;\r
-import org.junit.Test;\r
-import org.opendaylight.controller.config.api.ConflictingVersionException;\r
-import org.opendaylight.controller.config.api.ValidationException;\r
-import org.opendaylight.controller.config.api.jmx.CommitStatus;\r
-import org.opendaylight.controller.config.manager.impl.AbstractConfigTest;\r
-import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;\r
-import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;\r
-import org.opendaylight.controller.config.yang.threadpool.impl.NamingThreadFactoryModuleFactory;\r
-import org.opendaylight.controller.config.yang.threadpool.impl.NamingThreadFactoryModuleMXBean;\r
-import org.opendaylight.controller.config.yang.threadpool.impl.scheduled.ScheduledThreadPoolModuleFactory;\r
-import org.opendaylight.controller.config.yang.threadpool.impl.scheduled.ScheduledThreadPoolModuleMXBean;\r
-\r
-import javax.management.InstanceAlreadyExistsException;\r
-import javax.management.InstanceNotFoundException;\r
-import javax.management.ObjectName;\r
-\r
-import static org.junit.Assert.assertEquals;\r
-import static org.junit.Assert.assertThat;\r
-import static org.junit.Assert.assertTrue;\r
-import static org.junit.Assert.fail;\r
-import static org.junit.matchers.JUnitMatchers.containsString;\r
-\r
-public class ScheduledThreadPoolConfigBeanTest extends AbstractConfigTest {\r
-\r
-    private ScheduledThreadPoolModuleFactory factory;\r
-    private final String instanceName = "scheduled1";\r
-\r
-    @Before\r
-    public void setUp() {\r
-\r
-        factory = new ScheduledThreadPoolModuleFactory();\r
-        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(factory,\r
-                new NamingThreadFactoryModuleFactory()));\r
-    }\r
-\r
-    @Test\r
-    public void testCreateBean() throws InstanceAlreadyExistsException, ValidationException,\r
-            ConflictingVersionException {\r
-        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
-\r
-        createScheduled(transaction, instanceName, 1);\r
-        transaction.validateConfig();\r
-        CommitStatus status = transaction.commit();\r
-\r
-        assertBeanCount(1, factory.getImplementationName());\r
-        assertStatus(status, 2, 0, 0);\r
-    }\r
-\r
-    @Test\r
-    public void testReusingOldInstance() throws InstanceAlreadyExistsException, ConflictingVersionException,\r
-            ValidationException {\r
-\r
-        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
-        createScheduled(transaction, instanceName, 1);\r
-\r
-        transaction.commit();\r
-\r
-        assertBeanCount(1, factory.getImplementationName());\r
-\r
-        transaction = configRegistryClient.createTransaction();\r
-        CommitStatus status = transaction.commit();\r
-\r
-        assertBeanCount(1, factory.getImplementationName());\r
-        assertStatus(status, 0, 0, 2);\r
-    }\r
-\r
-    @Test\r
-    public void testReconfigurationInstance() throws InstanceAlreadyExistsException, ValidationException,\r
-            ConflictingVersionException, InstanceNotFoundException {\r
-        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
-        createScheduled(transaction, instanceName, 1);\r
-\r
-        transaction.commit();\r
-\r
-        transaction = configRegistryClient.createTransaction();\r
-        ObjectName databaseNew = transaction.lookupConfigBean(factory.getImplementationName(), instanceName);\r
-        ScheduledThreadPoolModuleMXBean proxy = transaction.newMXBeanProxy(databaseNew,\r
-                ScheduledThreadPoolModuleMXBean.class);\r
-        proxy.setMaxThreadCount(99);\r
-\r
-        CommitStatus status = transaction.commit();\r
-\r
-        assertBeanCount(1, factory.getImplementationName());\r
-        assertStatus(status, 0, 1, 1);\r
-    }\r
-\r
-    @Test\r
-    public void testDestroy() throws InstanceAlreadyExistsException, ValidationException, ConflictingVersionException,\r
-            InstanceNotFoundException {\r
-        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
-        createScheduled(transaction, instanceName, 1);\r
-\r
-        transaction.commit();\r
-\r
-        transaction = configRegistryClient.createTransaction();\r
-        transaction.destroyConfigBean(factory.getImplementationName(), instanceName);\r
-        CommitStatus status = transaction.commit();\r
-\r
-        assertBeanCount(0, factory.getImplementationName());\r
-        assertStatus(status, 0, 0, 1);\r
-    }\r
-\r
-    @Test\r
-    public void testInstanceAlreadyExistsException() throws ConflictingVersionException, ValidationException,\r
-            InstanceAlreadyExistsException {\r
-        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
-        createScheduled(transaction, instanceName, 1);\r
-        transaction.commit();\r
-        transaction = configRegistryClient.createTransaction();\r
-        try {\r
-            createScheduled(transaction, instanceName, 2);\r
-            fail();\r
-        } catch (InstanceAlreadyExistsException e) {\r
-            assertThat(\r
-                    e.getMessage(),\r
-                    containsString("There is an instance registered with name ModuleIdentifier{factoryName='threadpool-scheduled', instanceName='scheduled1'}"));\r
-        }\r
-    }\r
-\r
-    @Test\r
-    public void testValidationException() throws InstanceAlreadyExistsException {\r
-        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
-        createScheduled(transaction, instanceName, 0);\r
-\r
-        try {\r
-            transaction.validateConfig();\r
-            fail();\r
-        } catch (ValidationException e) {\r
-            assertTrue(e.getFailedValidations().containsKey(factory.getImplementationName()));\r
-            assertEquals(1, e.getFailedValidations().get(factory.getImplementationName()).keySet().size());\r
-        }\r
-    }\r
-\r
-    private ObjectName createScheduled(ConfigTransactionJMXClient transaction, String instanceName, int maxThreadCount)\r
-            throws InstanceAlreadyExistsException {\r
-        ObjectName nameCreated = transaction.createModule(factory.getImplementationName(), instanceName);\r
-        ScheduledThreadPoolModuleMXBean mxBean = transaction.newMBeanProxy(nameCreated,\r
-                ScheduledThreadPoolModuleMXBean.class);\r
-        mxBean.setMaxThreadCount(maxThreadCount);\r
-\r
-        ObjectName threadFactoryON = transaction.createModule(NamingThreadFactoryModuleFactory.NAME, "naming");\r
-        NamingThreadFactoryModuleMXBean namingThreadFactoryModuleMXBean = transaction.newMXBeanProxy(threadFactoryON,\r
-                NamingThreadFactoryModuleMXBean.class);\r
-        namingThreadFactoryModuleMXBean.setNamePrefix("prefix");\r
-\r
-        mxBean.setThreadFactory(threadFactoryON);\r
-\r
-        return nameCreated;\r
-    }\r
-\r
-}\r
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.controller.config.threadpool.scheduled;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.opendaylight.controller.config.api.ConflictingVersionException;
+import org.opendaylight.controller.config.api.ValidationException;
+import org.opendaylight.controller.config.api.jmx.CommitStatus;
+import org.opendaylight.controller.config.manager.impl.AbstractConfigTest;
+import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;
+import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;
+import org.opendaylight.controller.config.yang.threadpool.impl.NamingThreadFactoryModuleFactory;
+import org.opendaylight.controller.config.yang.threadpool.impl.NamingThreadFactoryModuleMXBean;
+import org.opendaylight.controller.config.yang.threadpool.impl.scheduled.ScheduledThreadPoolModuleFactory;
+import org.opendaylight.controller.config.yang.threadpool.impl.scheduled.ScheduledThreadPoolModuleMXBean;
+
+import javax.management.InstanceAlreadyExistsException;
+import javax.management.InstanceNotFoundException;
+import javax.management.ObjectName;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import static org.junit.matchers.JUnitMatchers.containsString;
+
+public class ScheduledThreadPoolConfigBeanTest extends AbstractConfigTest {
+
+    private ScheduledThreadPoolModuleFactory factory;
+    private final String instanceName = "scheduled1";
+
+    @Before
+    public void setUp() {
+
+        factory = new ScheduledThreadPoolModuleFactory();
+        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(factory,
+                new NamingThreadFactoryModuleFactory()));
+    }
+
+    @Test
+    public void testCreateBean() throws InstanceAlreadyExistsException, ValidationException,
+            ConflictingVersionException {
+        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
+
+        createScheduled(transaction, instanceName, 1);
+        transaction.validateConfig();
+        CommitStatus status = transaction.commit();
+
+        assertBeanCount(1, factory.getImplementationName());
+        assertStatus(status, 2, 0, 0);
+    }
+
+    @Test
+    public void testReusingOldInstance() throws InstanceAlreadyExistsException, ConflictingVersionException,
+            ValidationException {
+
+        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
+        createScheduled(transaction, instanceName, 1);
+
+        transaction.commit();
+
+        assertBeanCount(1, factory.getImplementationName());
+
+        transaction = configRegistryClient.createTransaction();
+        CommitStatus status = transaction.commit();
+
+        assertBeanCount(1, factory.getImplementationName());
+        assertStatus(status, 0, 0, 2);
+    }
+
+    @Test
+    public void testReconfigurationInstance() throws InstanceAlreadyExistsException, ValidationException,
+            ConflictingVersionException, InstanceNotFoundException {
+        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
+        createScheduled(transaction, instanceName, 1);
+
+        transaction.commit();
+
+        transaction = configRegistryClient.createTransaction();
+        ObjectName databaseNew = transaction.lookupConfigBean(factory.getImplementationName(), instanceName);
+        ScheduledThreadPoolModuleMXBean proxy = transaction.newMXBeanProxy(databaseNew,
+                ScheduledThreadPoolModuleMXBean.class);
+        proxy.setMaxThreadCount(99);
+
+        CommitStatus status = transaction.commit();
+
+        assertBeanCount(1, factory.getImplementationName());
+        assertStatus(status, 0, 1, 1);
+    }
+
+    @Test
+    public void testDestroy() throws InstanceAlreadyExistsException, ValidationException, ConflictingVersionException,
+            InstanceNotFoundException {
+        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
+        createScheduled(transaction, instanceName, 1);
+
+        transaction.commit();
+
+        transaction = configRegistryClient.createTransaction();
+        transaction.destroyConfigBean(factory.getImplementationName(), instanceName);
+        CommitStatus status = transaction.commit();
+
+        assertBeanCount(0, factory.getImplementationName());
+        assertStatus(status, 0, 0, 1);
+    }
+
+    @Test
+    public void testInstanceAlreadyExistsException() throws ConflictingVersionException, ValidationException,
+            InstanceAlreadyExistsException {
+        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
+        createScheduled(transaction, instanceName, 1);
+        transaction.commit();
+        transaction = configRegistryClient.createTransaction();
+        try {
+            createScheduled(transaction, instanceName, 2);
+            fail();
+        } catch (InstanceAlreadyExistsException e) {
+            assertThat(
+                    e.getMessage(),
+                    containsString("There is an instance registered with name ModuleIdentifier{factoryName='threadpool-scheduled', instanceName='scheduled1'}"));
+        }
+    }
+
+    @Test
+    public void testValidationException() throws InstanceAlreadyExistsException {
+        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
+        createScheduled(transaction, instanceName, 0);
+
+        try {
+            transaction.validateConfig();
+            fail();
+        } catch (ValidationException e) {
+            assertTrue(e.getFailedValidations().containsKey(factory.getImplementationName()));
+            assertEquals(1, e.getFailedValidations().get(factory.getImplementationName()).keySet().size());
+        }
+    }
+
+    private ObjectName createScheduled(ConfigTransactionJMXClient transaction, String instanceName, int maxThreadCount)
+            throws InstanceAlreadyExistsException {
+        ObjectName nameCreated = transaction.createModule(factory.getImplementationName(), instanceName);
+        ScheduledThreadPoolModuleMXBean mxBean = transaction.newMBeanProxy(nameCreated,
+                ScheduledThreadPoolModuleMXBean.class);
+        mxBean.setMaxThreadCount(maxThreadCount);
+
+        ObjectName threadFactoryON = transaction.createModule(NamingThreadFactoryModuleFactory.NAME, "naming");
+        NamingThreadFactoryModuleMXBean namingThreadFactoryModuleMXBean = transaction.newMXBeanProxy(threadFactoryON,
+                NamingThreadFactoryModuleMXBean.class);
+        namingThreadFactoryModuleMXBean.setNamePrefix("prefix");
+
+        mxBean.setThreadFactory(threadFactoryON);
+
+        return nameCreated;
+    }
+
+}
index 0fe5b0d1834cd78f2e17804fa1e759805d22ced8..2ba1b3b20da023be13004a65c07fcae21474687b 100644 (file)
@@ -1,82 +1,82 @@
-/*\r
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.\r
- *\r
- * This program and the accompanying materials are made available under the\r
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
- * and is available at http://www.eclipse.org/legal/epl-v10.html\r
- */\r
-package org.opendaylight.controller.config.threadpool.scheduled;\r
-\r
-import com.google.common.util.concurrent.ListenableFutureTask;\r
-import org.opendaylight.controller.config.api.DynamicMBeanWithInstance;\r
-import org.opendaylight.controller.config.api.ModuleIdentifier;\r
-import org.opendaylight.controller.config.manager.impl.AbstractMockedModule;\r
-import org.opendaylight.controller.config.spi.Module;\r
-import org.opendaylight.controller.config.threadpool.util.ScheduledThreadPoolWrapper;\r
-import org.opendaylight.controller.config.yang.threadpool.ScheduledThreadPoolServiceInterface;\r
-import org.opendaylight.controller.config.yang.threadpool.impl.scheduled.ScheduledThreadPoolModuleMXBean;\r
-\r
-import javax.management.ObjectName;\r
-import java.util.concurrent.ScheduledExecutorService;\r
-import java.util.concurrent.ScheduledFuture;\r
-import java.util.concurrent.TimeUnit;\r
-\r
-import static org.mockito.Matchers.any;\r
-import static org.mockito.Matchers.anyBoolean;\r
-import static org.mockito.Matchers.anyLong;\r
-import static org.mockito.Mockito.doNothing;\r
-import static org.mockito.Mockito.doReturn;\r
-import static org.mockito.Mockito.mock;\r
-\r
-public class TestingScheduledThreadPoolModule extends AbstractMockedModule implements\r
-        ScheduledThreadPoolServiceInterface, Module, ScheduledThreadPoolModuleMXBean {\r
-\r
-    public TestingScheduledThreadPoolModule(DynamicMBeanWithInstance old, ModuleIdentifier id) {\r
-        super(old, id);\r
-    }\r
-\r
-    @Override\r
-    protected AutoCloseable prepareMockedInstance() throws Exception {\r
-        ScheduledThreadPoolWrapper instance = mock(ScheduledThreadPoolWrapper.class);\r
-        ScheduledExecutorService ses = mock(ScheduledExecutorService.class);\r
-        {// mockFuture\r
-            ScheduledFuture<?> future = mock(ScheduledFuture.class);\r
-            doReturn(false).when(future).cancel(anyBoolean());\r
-            try {\r
-                doReturn(mock(Object.class)).when(future).get();\r
-            } catch (Exception e) {\r
-                throw new RuntimeException(e);\r
-            }\r
-            doReturn(future).when(ses).schedule(any(Runnable.class), any(Long.class), any(TimeUnit.class));\r
-            doReturn(future).when(ses).scheduleWithFixedDelay(any(Runnable.class), anyLong(), anyLong(),\r
-                    any(TimeUnit.class));\r
-\r
-        }\r
-        doNothing().when(ses).execute(any(Runnable.class));\r
-        doNothing().when(ses).execute(any(ListenableFutureTask.class));\r
-        doReturn(ses).when(instance).getExecutor();\r
-        doNothing().when(instance).close();\r
-\r
-        doReturn(1).when(instance).getMaxThreadCount();\r
-        return instance;\r
-    }\r
-\r
-    @Override\r
-    public ObjectName getThreadFactory() {\r
-        return any(ObjectName.class);\r
-    }\r
-\r
-    @Override\r
-    public void setThreadFactory(ObjectName threadFactory) {\r
-    }\r
-\r
-    @Override\r
-    public Integer getMaxThreadCount() {\r
-        return 1;\r
-    }\r
-\r
-    @Override\r
-    public void setMaxThreadCount(Integer maxThreadCount) {\r
-    }\r
-\r
-}\r
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.controller.config.threadpool.scheduled;
+
+import com.google.common.util.concurrent.ListenableFutureTask;
+import org.opendaylight.controller.config.api.DynamicMBeanWithInstance;
+import org.opendaylight.controller.config.api.ModuleIdentifier;
+import org.opendaylight.controller.config.manager.impl.AbstractMockedModule;
+import org.opendaylight.controller.config.spi.Module;
+import org.opendaylight.controller.config.threadpool.util.ScheduledThreadPoolWrapper;
+import org.opendaylight.controller.config.yang.threadpool.ScheduledThreadPoolServiceInterface;
+import org.opendaylight.controller.config.yang.threadpool.impl.scheduled.ScheduledThreadPoolModuleMXBean;
+
+import javax.management.ObjectName;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.TimeUnit;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyBoolean;
+import static org.mockito.Matchers.anyLong;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+
+public class TestingScheduledThreadPoolModule extends AbstractMockedModule implements
+        ScheduledThreadPoolServiceInterface, Module, ScheduledThreadPoolModuleMXBean {
+
+    public TestingScheduledThreadPoolModule(DynamicMBeanWithInstance old, ModuleIdentifier id) {
+        super(old, id);
+    }
+
+    @Override
+    protected AutoCloseable prepareMockedInstance() throws Exception {
+        ScheduledThreadPoolWrapper instance = mock(ScheduledThreadPoolWrapper.class);
+        ScheduledExecutorService ses = mock(ScheduledExecutorService.class);
+        {// mockFuture
+            ScheduledFuture<?> future = mock(ScheduledFuture.class);
+            doReturn(false).when(future).cancel(anyBoolean());
+            try {
+                doReturn(mock(Object.class)).when(future).get();
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+            doReturn(future).when(ses).schedule(any(Runnable.class), any(Long.class), any(TimeUnit.class));
+            doReturn(future).when(ses).scheduleWithFixedDelay(any(Runnable.class), anyLong(), anyLong(),
+                    any(TimeUnit.class));
+
+        }
+        doNothing().when(ses).execute(any(Runnable.class));
+        doNothing().when(ses).execute(any(ListenableFutureTask.class));
+        doReturn(ses).when(instance).getExecutor();
+        doNothing().when(instance).close();
+
+        doReturn(1).when(instance).getMaxThreadCount();
+        return instance;
+    }
+
+    @Override
+    public ObjectName getThreadFactory() {
+        return any(ObjectName.class);
+    }
+
+    @Override
+    public void setThreadFactory(ObjectName threadFactory) {
+    }
+
+    @Override
+    public Integer getMaxThreadCount() {
+        return 1;
+    }
+
+    @Override
+    public void setMaxThreadCount(Integer maxThreadCount) {
+    }
+
+}
index a8119b81ae21361d657e845d9fb2bc8a95b5c242..c934530067f128b986787277a181e62ccfbc9fdb 100644 (file)
@@ -1,4 +1,5 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <artifactId>config-subsystem</artifactId>
             <artifactId>binding-type-provider</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>net.sourceforge.pmd</groupId>
+            <artifactId>pmd</artifactId>
+            <version>5.1.0</version>
+            <scope>test</scope>
+        </dependency>
+
+
         <dependency>
             <groupId>org.eclipse.jdt</groupId>
             <artifactId>core</artifactId>
         </dependency>
 
 
-        <dependency>
-            <groupId>org.freemarker</groupId>
-            <artifactId>freemarker</artifactId>
-            <version>2.3.20</version>
-        </dependency>
-
         <dependency>
             <groupId>${project.groupId}</groupId>
             <artifactId>config-api</artifactId>
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-lang3</artifactId>
         </dependency>
+
+        <dependency>
+            <groupId>org.codehaus.gmaven.runtime</groupId>
+            <artifactId>gmaven-runtime-2.0</artifactId>
+            <version>1.5</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.sonatype.gossip</groupId>
+                    <artifactId>gossip</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+
     </dependencies>
 
     <build>
         <plugins>
             <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-jar-plugin</artifactId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.1</version>
+                <configuration>
+                    <compilerId>groovy-eclipse-compiler</compilerId>
+                    <verbose>false</verbose>
+                </configuration>
+                <dependencies>
+                    <dependency>
+                        <groupId>org.codehaus.groovy</groupId>
+                        <artifactId>groovy-eclipse-compiler</artifactId>
+                        <version>2.8.0-01</version>
+                    </dependency>
+
+                    <dependency>
+                        <groupId>org.codehaus.groovy</groupId>
+                        <artifactId>groovy-eclipse-batch</artifactId>
+                        <version>2.1.8-01</version>
+                    </dependency>
+                </dependencies>
             </plugin>
+
         </plugins>
     </build>
 </project>
index 13d828a430b3a530a6c09aab7ffc7954b176f79b..dd2b504da9a03ab6807efc22adef2c1cf16c990b 100644 (file)
  */
 package org.opendaylight.controller.config.yangjmxgenerator.plugin;
 
+import com.google.common.base.Optional;
+import com.google.common.collect.Lists;
+import org.opendaylight.controller.config.yangjmxgenerator.ModuleMXBeanEntry;
+import org.opendaylight.controller.config.yangjmxgenerator.RuntimeBeanEntry;
+import org.opendaylight.controller.config.yangjmxgenerator.ServiceInterfaceEntry;
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.FtlTemplate;
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.GeneralClassTemplate;
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.GeneralInterfaceTemplate;
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.RuntimeRegistratorFtlTemplate;
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.StubFactoryTemplate;
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.TemplateFactory;
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.gofactory.AbsFactoryGeneratedObjectFactory;
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.gofactory.AbsModuleGeneratedObjectFactory;
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.gofactory.ConcreteModuleGeneratedObjectFactory;
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.gofactory.GenericGeneratedObjectFactory;
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.java.FullyQualifiedName;
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.java.GeneratedObject;
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.util.StringUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
 
-import org.opendaylight.controller.config.yangjmxgenerator.ModuleMXBeanEntry;
-import org.opendaylight.controller.config.yangjmxgenerator.ServiceInterfaceEntry;
+final class CodeWriter {
+
+    private static final Logger logger = LoggerFactory.getLogger(CodeWriter.class);
+    private static final Optional<String> copyright = StringUtil.loadCopyright();
+
+    public File writeSie(ServiceInterfaceEntry sie, File outputBaseDir) {
+        try {
+            GeneralInterfaceTemplate generalInterfaceTemplate = TemplateFactory.serviceInterfaceFromSie(sie);
+            GeneratedObject go = new GenericGeneratedObjectFactory().toGeneratedObject(generalInterfaceTemplate, copyright);
+            return go.persist(outputBaseDir).get().getValue();
+        } catch (Exception e) {
+            String message = "An error occurred during Service interface generating, sie:"
+                    + sie.getTypeName() + ", " + sie.getFullyQualifiedName();
+            logger.error(message, e);
+            throw new RuntimeException(message, e);
+        }
+    }
+
+    public List<File> writeMbe(ModuleMXBeanEntry mbe, File targetBaseDir,
+                               File mainBaseDir) {
+        try {
+            List<File> generatedFiles = Lists.newArrayList();
+
+
+            Map<GeneratedObject, Boolean /*overwrite*/> gos = new HashMap<>();
+
+            // generate mx interface and abstract factory
+
+            // TOs
+            Map<String,GeneralClassTemplate> tosFromMbe = TemplateFactory.tOsFromMbe(mbe);
+            for(GeneralClassTemplate template: tosFromMbe.values()) {
+                gos.put(new GenericGeneratedObjectFactory().toGeneratedObject(template, copyright), true);
+            }
+
+            // MXBean interface
+            GeneralInterfaceTemplate ifcTemplate = TemplateFactory.mXBeanInterfaceTemplateFromMbe(mbe);
+            gos.put(new GenericGeneratedObjectFactory().toGeneratedObject(ifcTemplate, copyright), true);
+
+
+            // generate abstract factory
+            gos.put(new AbsFactoryGeneratedObjectFactory().toGeneratedObject(mbe, copyright), true);
+
+            // generate abstract module
+            gos.put(new AbsModuleGeneratedObjectFactory().toGeneratedObject(mbe, copyright), true);
+
+            // generate concrete factory
+            StubFactoryTemplate concreteFactory = TemplateFactory.stubFactoryTemplateFromMbe(mbe);
+            gos.put(new GenericGeneratedObjectFactory().toGeneratedObject(concreteFactory, copyright), false);
+
+
+            // generate concrete module
+
+            gos.put(new ConcreteModuleGeneratedObjectFactory().toGeneratedObject(mbe, copyright, Optional.<String>absent()), false);
+
+            // write runtime bean MXBeans and registrators
+            List<FtlTemplate> allFtlFiles = getRuntimeBeanFtlTemplates(mbe.getRuntimeBeans());
+            for(FtlTemplate template: allFtlFiles) {
+                gos.put(new GenericGeneratedObjectFactory().toGeneratedObject(template, copyright), true);
+            }
+
+            generatedFiles.addAll(persistGeneratedObjects(targetBaseDir, mainBaseDir, gos));
+
+            // purge nulls
+            for (Iterator<File> it = generatedFiles.iterator(); it.hasNext(); ) {
+                if (it.next() == null) {
+                    it.remove();
+                }
+            }
+
+            return generatedFiles;
+
+        } catch (Exception e) {
+            String message = "An error occurred during Module generating, mbe:"
+                    + mbe.getJavaNamePrefix();
+            logger.error(message, e);
+            throw new RuntimeException(message, e);
+        }
+    }
 
-public interface CodeWriter {
+    private List<File> persistGeneratedObjects(File targetBaseDir, File mainBaseDir, Map<GeneratedObject, Boolean> gos) throws IOException {
+        List<File> generatedFiles = new ArrayList<>();
+        for (Entry<GeneratedObject, Boolean> entry : gos.entrySet()) {
+            boolean overwrite = entry.getValue();
+            File dst;
+            if (overwrite) {
+                dst = targetBaseDir;
+            } else {
+                dst = mainBaseDir;
+            }
+            Optional<Entry<FullyQualifiedName, File>> maybePersistEntry = entry.getKey().persist(dst, overwrite);
 
-    File writeSie(ServiceInterfaceEntry sie, File targetBaseDir);
+            if (maybePersistEntry.isPresent()) {
+                generatedFiles.add(maybePersistEntry.get().getValue());
+            }
+        }
+        return generatedFiles;
+    }
 
-    List<File> writeMbe(ModuleMXBeanEntry mbe, File targetBaseDir,
-            File mainBaseDir, File resourceBaseDir);
+    private List<FtlTemplate> getRuntimeBeanFtlTemplates(Collection<RuntimeBeanEntry> runtimeBeans) {
+        if (runtimeBeans.isEmpty()) {
+            return Collections.emptyList();
+        }
+        List<FtlTemplate> allFtlFiles = new ArrayList<>();
+        { // registrators
+            Map<String, FtlTemplate> registratorNamesToFtls = RuntimeRegistratorFtlTemplate
+                    .create(RuntimeRegistratorFtlTemplate.findRoot(runtimeBeans));
 
+            allFtlFiles.addAll(registratorNamesToFtls.values());
+        }
+        { // TOs, MXBean interfaces
+            for (RuntimeBeanEntry runtimeBeanEntry : runtimeBeans) {
+                Collection<FtlTemplate> ftlFiles = TemplateFactory
+                        .getTOAndMXInterfaceFtlFiles(runtimeBeanEntry)
+                        .values();
+                allFtlFiles.addAll(ftlFiles);
+            }
+        }
+        return allFtlFiles;
+    }
 }
diff --git a/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/FreeMarkerCodeWriterImpl.java b/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/FreeMarkerCodeWriterImpl.java
deleted file mode 100644 (file)
index 2b84ed1..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.config.yangjmxgenerator.plugin;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.opendaylight.controller.config.yangjmxgenerator.ModuleMXBeanEntry;
-import org.opendaylight.controller.config.yangjmxgenerator.RuntimeBeanEntry;
-import org.opendaylight.controller.config.yangjmxgenerator.ServiceInterfaceEntry;
-import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.FtlFilePersister;
-import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.FtlTemplate;
-import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.RuntimeRegistratorFtlTemplate;
-import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.TemplateFactory;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.collect.Lists;
-
-final class FreeMarkerCodeWriterImpl implements CodeWriter {
-
-    private static final Logger logger = LoggerFactory
-            .getLogger(FreeMarkerCodeWriterImpl.class);
-
-    private final FtlFilePersister ftlFilePersister = new FtlFilePersister();
-
-    public FreeMarkerCodeWriterImpl() {
-    }
-
-    @Override
-    public File writeSie(ServiceInterfaceEntry sie, File outputBaseDir) {
-        try {
-            Collection<FtlTemplate> values = TemplateFactory.getFtlTemplates(
-                    sie).values();
-            return ftlFilePersister.persist(values, outputBaseDir, true).get(0);
-        } catch (Exception e) {
-            String message = "An error occurred during Service interface generating, sie:"
-                    + sie.getTypeName() + ", " + sie.getFullyQualifiedName();
-            logger.error(message, e);
-            throw new RuntimeException(message, e);
-        }
-    }
-
-    @Override
-    public List<File> writeMbe(ModuleMXBeanEntry mbe, File targetBaseDir,
-            File mainBaseDir, File resourceBaseDir) {
-        try {
-            List<File> generatedFiles = Lists.newArrayList();
-
-            generatedFiles.addAll(ftlFilePersister.persist(TemplateFactory
-                    .getFtlTemplates(mbe).values(), targetBaseDir, true));
-            generatedFiles.addAll(ftlFilePersister.persist(TemplateFactory
-                    .getFtlStubTemplates(mbe).values(), mainBaseDir, false));
-
-            // write runtime bean MXBeans and registrators
-            Collection<RuntimeBeanEntry> runtimeBeans = mbe.getRuntimeBeans();
-            if (runtimeBeans.size() > 0) {
-                List<FtlTemplate> allFtlFiles = new ArrayList<>();
-                { // registrators
-                    Map<String, FtlTemplate> registratorNamesToFtls = RuntimeRegistratorFtlTemplate
-                            .create(RuntimeRegistratorFtlTemplate.findRoot(runtimeBeans));
-
-                    allFtlFiles.addAll(registratorNamesToFtls.values());
-                }
-                { // TOs, MXBean interfaces
-                    for (RuntimeBeanEntry runtimeBeanEntry : runtimeBeans) {
-                        Collection<FtlTemplate> ftlFiles = TemplateFactory
-                                .getTOAndMXInterfaceFtlFiles(runtimeBeanEntry)
-                                .values();
-                        allFtlFiles.addAll(ftlFiles);
-                    }
-                }
-                boolean overwrite = true;
-
-                FtlFilePersister ftlFilePersister = new FtlFilePersister();
-                List<File> persisted = ftlFilePersister.persist(allFtlFiles,
-                        targetBaseDir, overwrite);
-                // FIXME: check for intersection
-                generatedFiles.addAll(persisted);
-            }
-
-            // purge nulls
-            for (Iterator<File> it = generatedFiles.iterator(); it.hasNext();) {
-                if (it.next() == null) {
-                    it.remove();
-                }
-            }
-
-            return generatedFiles;
-
-        } catch (Exception e) {
-            String message = "An error occurred during Module generating, mbe:"
-                    + mbe.getJavaNamePrefix();
-            logger.error(message, e);
-            throw new RuntimeException(message, e);
-        }
-    }
-
-}
index e41ac66952f889e60387b9c8adab0704432988b7..1b8905b9871c0a1334ebacbc28a1f6dd52d41492 100644 (file)
@@ -12,16 +12,6 @@ import com.google.common.base.Preconditions;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
-import java.io.File;
-import java.io.IOException;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
 import org.apache.commons.io.FileUtils;
 import org.apache.maven.plugin.logging.Log;
 import org.apache.maven.project.MavenProject;
@@ -40,6 +30,17 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.impl.StaticLoggerBinder;
 
+import java.io.File;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
 /**
  * This class interfaces with yang-maven-plugin. Gets parsed yang modules in
  * {@link SchemaContext}, and parameters form the plugin configuration, and
@@ -61,7 +62,7 @@ public class JMXGenerator implements CodeGenerator {
     private boolean generateModuleFactoryFile = true;
 
     public JMXGenerator() {
-        this.codeWriter = new FreeMarkerCodeWriterImpl();
+        this.codeWriter = new CodeWriter();
     }
 
     public JMXGenerator(CodeWriter codeWriter) {
@@ -139,7 +140,7 @@ public class JMXGenerator implements CodeGenerator {
                 ModuleMXBeanEntry mbe = mbeEntry.getValue();
                 try {
                     List<File> files1 = codeWriter.writeMbe(mbe, outputBaseDir,
-                            mainBaseDir, resourceBaseDir);
+                            mainBaseDir);
                     generatedFiles.addFile(files1);
                 } catch (Exception e) {
                     throw new RuntimeException(
index 35dc7a36007c8fb31a0ecc05239b1b8986335c07..c3e51d6550e50344ed8fc1c9ad5c46f6282af7cc 100644 (file)
@@ -8,94 +8,26 @@
 package org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl;
 
 import com.google.common.collect.Lists;
-import org.opendaylight.controller.config.api.DependencyResolver;
-import org.opendaylight.controller.config.api.DynamicMBeanWithInstance;
-import org.opendaylight.controller.config.api.ModuleIdentifier;
-import org.opendaylight.controller.config.api.annotations.AbstractServiceInterface;
-import org.opendaylight.controller.config.spi.Module;
 import org.opendaylight.controller.config.spi.ModuleFactory;
-import org.opendaylight.controller.config.yangjmxgenerator.ModuleMXBeanEntry;
 import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.Constructor;
 import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.Field;
 import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.Header;
 import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.MethodDefinition;
-import org.osgi.framework.BundleContext;
 
 import java.util.Collections;
 import java.util.List;
 
-/**
- *
- */
 public class AbstractFactoryTemplate extends GeneralClassTemplate {
 
     private static final List<String> implementedIfcs = Lists
             .newArrayList(ModuleFactory.class.getCanonicalName());
 
-    private final String globallyUniqueName, moduleInstanceType;
-    private final List<String> providedServices;
-    private final ModuleMXBeanEntry mbe;
-
     public AbstractFactoryTemplate(Header header, String packageName,
-                                   String abstractFactoryName, String globallyUniqueName,
-                                   String moduleInstanceType, List<Field> fields,
-                                   List<String> providedServices, ModuleMXBeanEntry mbe) {
+                                   String abstractFactoryName,
+                                   List<Field> fields) {
         super(header, packageName, abstractFactoryName, Collections
                 .<String> emptyList(), implementedIfcs, fields, Collections
                 .<MethodDefinition> emptyList(), true, false, Collections
                 .<Constructor> emptyList());
-        this.globallyUniqueName = globallyUniqueName;
-        this.moduleInstanceType = moduleInstanceType;
-        this.providedServices = providedServices;
-        this.mbe = mbe;
-    }
-
-    public String getGloballyUniqueName() {
-        return globallyUniqueName;
-    }
-
-    public String getInstanceType() {
-        return AutoCloseable.class.getCanonicalName();
-    }
-
-    public String getModuleNameType() {
-        return ModuleIdentifier.class.getCanonicalName();
-    }
-
-    public String getModuleInstanceType() {
-        return moduleInstanceType;
-    }
-
-    public String getAbstractServiceInterfaceType() {
-        return AbstractServiceInterface.class.getCanonicalName();
-    }
-
-    public List<String> getProvidedServices() {
-        return providedServices;
-    }
-
-    public String getModuleType() {
-        return Module.class.getCanonicalName();
-    }
-
-    public String getDependencyResolverType() {
-        return DependencyResolver.class.getCanonicalName();
-    }
-
-    public String getDynamicMBeanWithInstanceType() {
-        return DynamicMBeanWithInstance.class.getCanonicalName();
-    }
-
-    public String getBundleContextType() {
-        return BundleContext.class.getCanonicalName();
-    }
-
-    @Override
-    public String getFtlTempleteLocation() {
-        return "factory_abs_template.ftl";
-    }
-
-    public ModuleMXBeanEntry getMbe() {
-        return mbe;
     }
 }
index 7f80299f009e04da625adc6cab1d4315eaf8e494..a9599783e609ad50432456ba3887768fe1581379 100644 (file)
@@ -7,17 +7,18 @@
  */
 package org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl;
 
-import java.io.File;
-import java.util.List;
-
+import com.google.common.base.Optional;
+import com.google.common.collect.Lists;
 import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.Annotation;
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.Constructor;
 import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.Field;
 import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.Header;
 import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.Method;
 import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.TypeDeclaration;
 import org.opendaylight.controller.config.yangjmxgenerator.plugin.util.FullyQualifiedNameHelper;
 
-import com.google.common.collect.Lists;
+import java.util.Collections;
+import java.util.List;
 
 public abstract class AbstractFtlTemplate implements FtlTemplate {
     private final String packageName;
@@ -44,6 +45,15 @@ public abstract class AbstractFtlTemplate implements FtlTemplate {
         return header;
     }
 
+    @Override
+    public Optional<String> getHeaderString() {
+        if (header == null) {
+            return Optional.absent();
+        } else {
+            return Optional.of(header.toString());
+        }
+    }
+
     @Override
     public String getFullyQualifiedName() {
         return FullyQualifiedNameHelper.getFullyQualifiedName(getPackageName(),
@@ -60,9 +70,14 @@ public abstract class AbstractFtlTemplate implements FtlTemplate {
         return typeDeclaration;
     }
 
+
     @Override
-    public String getJavadoc() {
-        return javadoc;
+    public Optional<String> getMaybeJavadoc() {
+        if (javadoc == null) {
+            return Optional.absent();
+        } else {
+            return Optional.of(javadoc);
+        }
     }
 
     public void setJavadoc(String javadoc) {
@@ -84,15 +99,10 @@ public abstract class AbstractFtlTemplate implements FtlTemplate {
         return methods;
     }
 
-    @Override
-    public File getRelativeFile() {
-        return new File(packageName.replace(".", File.separator),
-                getTypeDeclaration().getName() + ".java");
-    }
 
     @Override
-    public String getFtlTempleteLocation() {
-        return "abstract_ftl_file.ftl";
+    public List<Constructor> getConstructors() {
+        return Collections.emptyList();
     }
 
     @Override
index c40bfdfb9f2307bc233e79e578b41230c2cb22ab..92a71c2530186b014a1f085897579efe41ac8a7b 100644 (file)
@@ -7,26 +7,15 @@
  */
 package org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl;
 
-import java.util.Collections;
-import java.util.List;
-
-import org.opendaylight.controller.config.api.DependencyResolver;
-import org.opendaylight.controller.config.api.DynamicMBeanWithInstance;
-import org.opendaylight.controller.config.api.ModuleIdentifier;
-import org.opendaylight.controller.config.api.annotations.AbstractServiceInterface;
-import org.opendaylight.controller.config.api.runtime.RootRuntimeBeanRegistrator;
-import org.opendaylight.controller.config.spi.Module;
 import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.Constructor;
 import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.Field;
 import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.Header;
 import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.MethodDefinition;
 import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.ModuleField;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
-/**
- *
- */
+import java.util.Collections;
+import java.util.List;
+
 public class AbstractModuleTemplate extends GeneralClassTemplate {
 
     private final List<ModuleField> moduleFields;
@@ -50,22 +39,6 @@ public class AbstractModuleTemplate extends GeneralClassTemplate {
         return moduleFields;
     }
 
-    public String getInstanceType() {
-        return AutoCloseable.class.getCanonicalName();
-    }
-
-    public String getModuleNameType() {
-        return ModuleIdentifier.class.getCanonicalName();
-    }
-
-    public String getAbstractServiceInterfaceType() {
-        return AbstractServiceInterface.class.getCanonicalName();
-    }
-
-    public String getModuleType() {
-        return Module.class.getCanonicalName();
-    }
-
     public String getRegistratorType() {
         return registratorType;
     }
@@ -74,29 +47,4 @@ public class AbstractModuleTemplate extends GeneralClassTemplate {
         return runtime;
     }
 
-    public String getDependencyResolverType() {
-        return DependencyResolver.class.getCanonicalName();
-    }
-
-    public String getDynamicMBeanWithInstanceType() {
-        return DynamicMBeanWithInstance.class.getCanonicalName();
-    }
-
-    public String getRootRuntimeRegistratorType() {
-        return RootRuntimeBeanRegistrator.class.getCanonicalName();
-    }
-
-    @Override
-    public String getFtlTempleteLocation() {
-        return "module_abs_template_new.ftl";
-    }
-
-    public String getLoggerType() {
-        return Logger.class.getCanonicalName();
-    }
-
-    public String getLoggerFactoryType() {
-        return LoggerFactory.class.getCanonicalName();
-    }
-
 }
diff --git a/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/FtlFilePersister.java b/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/FtlFilePersister.java
deleted file mode 100644 (file)
index 37d5e6b..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl;
-
-import com.google.common.annotations.VisibleForTesting;
-import freemarker.template.Configuration;
-import freemarker.template.Template;
-import org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator;
-import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.directives.AnnotationsDirective;
-import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.directives.ConstructorsDirective;
-import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.directives.FieldsDirectiveProg;
-import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.directives.HeaderDirective;
-import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.directives.JavadocDirective;
-import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.directives.MethodsDirective;
-import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.directives.ModuleFieldsDirective;
-import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.directives.TypeDeclarationDirective;
-import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.directives.UnimplementedExceptionDirective;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.StringWriter;
-import java.io.Writer;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.regex.Pattern;
-
-public class FtlFilePersister {
-    private static final Logger logger = LoggerFactory
-            .getLogger(FtlFilePersister.class);
-
-    private static final Pattern TRAILING_WHITESPACES = Pattern.compile(" +$", Pattern.MULTILINE);
-
-    @VisibleForTesting
-    public Map<FtlTemplate, String> serializeFtls(
-            Collection<? extends FtlTemplate> ftlFiles) {
-        Map<FtlTemplate, String> result = new HashMap<>();
-        for (FtlTemplate ftlFile : ftlFiles) {
-
-            try (Writer writer = new StringWriter()) {
-                Template template = getCfg().getTemplate(
-                        ftlFile.getFtlTempleteLocation());
-                try {
-                    template.process(ftlFile, writer);
-                } catch (Exception e) {
-                    throw new IllegalStateException(
-                            "Template error while generating " + ftlFile, e);
-                }
-                String fileContent = writer.toString();
-                // remove trailing spaces
-                fileContent = TRAILING_WHITESPACES.matcher(fileContent).replaceAll("");
-                result.put(ftlFile, fileContent);
-            } catch (IOException e) {
-                throw new IllegalStateException(
-                        "Exception while processing template", e);
-            }
-        }
-
-        return result;
-    }
-
-    public List<File> persist(Collection<? extends FtlTemplate> ftlFiles,
-            File dstFolder, boolean overwrite) throws IOException {
-        Map<FtlTemplate, String> ftlFileStringMap = serializeFtls(ftlFiles);
-        List<File> result = new ArrayList<>();
-        for (Entry<FtlTemplate, String> entry : ftlFileStringMap.entrySet()) {
-            FtlTemplate ftlFile = entry.getKey();
-            File targetFile = new File(dstFolder, ftlFile.getRelativeFile()
-                    .getPath());
-            File pathToFile = targetFile.getParentFile();
-            if (pathToFile.exists() == false) {
-                pathToFile.mkdirs();
-            }
-            if (targetFile.exists() && overwrite == false) {
-                logger.trace("Skipping {} since it already exists", targetFile);
-            } else {
-                try (Writer fileWriter = new FileWriter(targetFile)) {
-                    fileWriter.write(entry.getValue());
-                }
-                logger.trace("{}: File {} generated successfully",
-                        JMXGenerator.class.getCanonicalName(), targetFile);
-                result.add(targetFile);
-            }
-        }
-        return result;
-    }
-
-    private Configuration getCfg() {
-        Configuration cfg = new Configuration();
-        cfg.setClassForTemplateLoading(getClass(), "/freeMarker/");
-        cfg.setSharedVariable("javadocD", new JavadocDirective());
-        cfg.setSharedVariable("annotationsD", new AnnotationsDirective());
-        cfg.setSharedVariable("typeDeclarationD",
-                new TypeDeclarationDirective());
-        cfg.setSharedVariable("constructorsD", new ConstructorsDirective());
-        cfg.setSharedVariable("fieldsD", new FieldsDirectiveProg());
-        cfg.setSharedVariable("moduleFieldsD", new ModuleFieldsDirective());
-        cfg.setSharedVariable("methodsD", new MethodsDirective());
-        cfg.setSharedVariable("headerD", new HeaderDirective());
-        cfg.setSharedVariable("unimplementedExceptionD",
-                new UnimplementedExceptionDirective());
-        return cfg;
-    }
-
-}
index 8172a58af6e6567020679968fe38d9f0eed7d362..d01f3f92239867cbc47689f3d69cf363004f35a8 100644 (file)
@@ -7,22 +7,24 @@
  */
 package org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl;
 
-import java.io.File;
-import java.util.List;
-
+import com.google.common.base.Optional;
 import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.Annotation;
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.Constructor;
 import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.Field;
 import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.Header;
 import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.Method;
 import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.TypeDeclaration;
 
+import java.util.List;
+
 public interface FtlTemplate {
 
     Header getHeader();
+    Optional<String> getHeaderString();
 
     String getPackageName();
 
-    String getJavadoc();
+    Optional<String> getMaybeJavadoc();
 
     public List<Annotation> getAnnotations();
 
@@ -34,14 +36,5 @@ public interface FtlTemplate {
 
     List<? extends Method> getMethods();
 
-    /**
-     * @return relative path to file to be created.
-     */
-    public File getRelativeFile();
-
-    /**
-     *
-     * @return ftl template location
-     */
-    public String getFtlTempleteLocation();
+    List<Constructor> getConstructors();
 }
index be49f93bca7c13fb0a5e97ca1d4824e9a8730082..5d2d6644b0cfee7308d69dc3b721c0d26fc5e0c6 100644 (file)
@@ -7,33 +7,21 @@
  */
 package org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl;
 
-import java.util.Collections;
-
-import org.opendaylight.controller.config.api.DynamicMBeanWithInstance;
+import com.google.common.collect.Lists;
 import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.Field;
 import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.Header;
 import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.MethodDefinition;
 
-import com.google.common.collect.Lists;
+import java.util.Collections;
 
 public class StubFactoryTemplate extends GeneralClassTemplate {
 
-    private final String moduleInstanceType;
-
     public StubFactoryTemplate(Header header, String packageName, String name,
-            String extendedClass, String moduleInstanceType) {
+                               String extendedClass) {
         super(header, packageName, name, Lists.newArrayList(extendedClass),
                 Collections.<String> emptyList(), Collections
                         .<Field> emptyList(), Collections
                         .<MethodDefinition> emptyList());
-        this.moduleInstanceType = moduleInstanceType;
-    }
-
-    public String getModuleInstanceType() {
-        return moduleInstanceType;
     }
 
-    public String getDynamicMBeanWithInstanceType() {
-        return DynamicMBeanWithInstance.class.getCanonicalName();
-    }
 }
diff --git a/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/StubModuleTemplate.java b/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/StubModuleTemplate.java
deleted file mode 100644 (file)
index f49bbba..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl;
-
-import java.util.Collections;
-
-import org.opendaylight.controller.config.api.DependencyResolver;
-import org.opendaylight.controller.config.api.DynamicMBeanWithInstance;
-import org.opendaylight.controller.config.api.ModuleIdentifier;
-import org.opendaylight.controller.config.api.annotations.AbstractServiceInterface;
-import org.opendaylight.controller.config.spi.Module;
-import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.Constructor;
-import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.Field;
-import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.Header;
-import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.MethodDefinition;
-
-import com.google.common.collect.Lists;
-
-/**
- *
- */
-public class StubModuleTemplate extends GeneralClassTemplate {
-
-    private final String extendedClass;
-
-    public StubModuleTemplate(Header header, String packageName,
-            String stubModuleName, String extendedClass) {
-        super(header, packageName, stubModuleName, Lists
-                .newArrayList(extendedClass), Collections.<String> emptyList(),
-                Collections.<Field> emptyList(), Collections
-                        .<MethodDefinition> emptyList(), false, true,
-                Collections.<Constructor> emptyList());
-        this.extendedClass = extendedClass;
-    }
-
-    public String getExtendedClass() {
-        return extendedClass;
-    }
-
-    public String getInstanceType() {
-        return AutoCloseable.class.getCanonicalName();
-    }
-
-    public String getModuleNameType() {
-        return ModuleIdentifier.class.getCanonicalName();
-    }
-
-    public String getAbstractServiceInterfaceType() {
-        return AbstractServiceInterface.class.getCanonicalName();
-    }
-
-    public String getModuleType() {
-        return Module.class.getCanonicalName();
-    }
-
-    public String getDependencyResolverType() {
-        return DependencyResolver.class.getCanonicalName();
-    }
-
-    public String getDynamicMBeanWithInstanceType() {
-        return DynamicMBeanWithInstance.class.getCanonicalName();
-    }
-
-    @Override
-    public String getFtlTempleteLocation() {
-        return "module_stub_template.ftl";
-    }
-}
index fea9a796168dddd4d335236dbd410c0ac3cd2195..7b7aab85597eafbd4fcb113abfea20dfe19c49d1 100644 (file)
@@ -7,9 +7,7 @@
  */
 package org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl;
 
-import com.google.common.base.Function;
 import com.google.common.base.Preconditions;
-import com.google.common.collect.Collections2;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import org.opendaylight.controller.config.api.DependencyResolver;
@@ -45,12 +43,10 @@ import org.opendaylight.controller.config.yangjmxgenerator.plugin.util.FullyQual
 import org.opendaylight.yangtools.binding.generator.util.BindingGeneratorUtil;
 import org.opendaylight.yangtools.sal.binding.model.api.ParameterizedType;
 import org.opendaylight.yangtools.sal.binding.model.api.Type;
-import org.opendaylight.yangtools.yang.model.api.type.IdentityrefTypeDefinition;
 
 import javax.management.openmbean.SimpleType;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
@@ -59,49 +55,6 @@ import java.util.Map.Entry;
 
 public class TemplateFactory {
 
-    public static Map<String, FtlTemplate> getFtlTemplates(
-            ModuleMXBeanEntry entry) {
-        Map<String, FtlTemplate> result = new HashMap<>();
-
-        result.putAll(TemplateFactory.tOsFromMbe(entry));
-
-        // IFC
-        result.put(entry.getMXBeanInterfaceName() + ".java",
-                TemplateFactory.mXBeanInterfaceTemplateFromMbe(entry));
-
-        // ABS fact
-        result.put(entry.getAbstractFactoryName() + ".java",
-                TemplateFactory.abstractFactoryTemplateFromMbe(entry));
-
-        // ABS module
-        result.put(entry.getAbstractModuleName() + ".java",
-                TemplateFactory.abstractModuleTemplateFromMbe(entry));
-
-        return result;
-    }
-
-    public static Map<String, FtlTemplate> getFtlStubTemplates(
-            ModuleMXBeanEntry entry) {
-        Map<String, FtlTemplate> result = new HashMap<>();
-        // STUB fact
-        result.put(entry.getStubFactoryName() + ".java",
-                TemplateFactory.stubFactoryTemplateFromMbe(entry));
-
-        result.put(entry.getStubModuleName() + ".java",
-                TemplateFactory.stubModuleTemplateFromMbe(entry));
-        return result;
-    }
-
-    public static Map<String, FtlTemplate> getFtlTemplates(
-            ServiceInterfaceEntry entry) {
-
-        Map<String, FtlTemplate> result = new HashMap<>();
-        result.put(entry.getTypeName() + ".java",
-                TemplateFactory.serviceInterfaceFromSie(entry));
-
-        return result;
-    }
-
     /**
      * Get map of file name as key, FtlFile instance representing runtime mx
      * bean as value that should be persisted from this instance.
@@ -183,11 +136,6 @@ public class TemplateFactory {
         return serializeType(type, false);
     }
 
-    private static boolean isIdentityRefType(Type type) {
-        return type instanceof IdentityrefTypeDefinition;
-    }
-
-
     private static String getReturnType(AttributeIfc attributeIfc) {
         String returnType;
         if (attributeIfc instanceof TypedAttribute) {
@@ -234,28 +182,17 @@ public class TemplateFactory {
         attrProcessor.processAttributes(mbe.getAttributes(),
                 mbe.getPackageName());
 
-        Collection<String> transformed = Collections2.transform(mbe
-                .getProvidedServices().keySet(),
-                new Function<String, String>() {
 
-                    @Override
-                    public String apply(String input) {
-                        return input + ".class";
-                    }
-                });
 
         return new AbstractFactoryTemplate(getHeaderFromEntry(mbe),
                 mbe.getPackageName(), mbe.getAbstractFactoryName(),
-                mbe.getGloballyUniqueName(), mbe.getFullyQualifiedName(mbe
-                        .getStubModuleName()), attrProcessor.getFields(),
-                Lists.newArrayList(transformed), mbe);
+                attrProcessor.getFields()
+        );
     }
 
     public static AbstractModuleTemplate abstractModuleTemplateFromMbe(
             ModuleMXBeanEntry mbe) {
-        AbstractModuleAttributesProcessor attrProcessor = new AbstractModuleAttributesProcessor();
-        attrProcessor.processAttributes(mbe.getAttributes(),
-                mbe.getPackageName());
+        AbstractModuleAttributesProcessor attrProcessor = new AbstractModuleAttributesProcessor(mbe.getAttributes());
 
         List<ModuleField> moduleFields = attrProcessor.getModuleFields();
         List<String> implementedIfcs = Lists.newArrayList(
@@ -298,15 +235,8 @@ public class TemplateFactory {
             ModuleMXBeanEntry mbe) {
         return new StubFactoryTemplate(getHeaderFromEntry(mbe),
                 mbe.getPackageName(), mbe.getStubFactoryName(),
-                mbe.getFullyQualifiedName(mbe.getAbstractFactoryName()),
-                mbe.getStubModuleName());
-    }
-
-    public static StubModuleTemplate stubModuleTemplateFromMbe(
-            ModuleMXBeanEntry mbe) {
-        return new StubModuleTemplate(getHeaderFromEntry(mbe),
-                mbe.getPackageName(), mbe.getStubModuleName(),
-                mbe.getFullyQualifiedName(mbe.getAbstractModuleName()));
+                mbe.getFullyQualifiedName(mbe.getAbstractFactoryName())
+        );
     }
 
     public static GeneralInterfaceTemplate mXBeanInterfaceTemplateFromMbe(
@@ -612,12 +542,26 @@ public class TemplateFactory {
     }
 
     private static class AbstractModuleAttributesProcessor {
+        private static class Holder {
+            private final List<ModuleField> moduleFields;
+            private final List<MethodDefinition> methods;
+
+            private Holder(List<ModuleField> moduleFields, List<MethodDefinition> methods) {
+                this.moduleFields = Collections.unmodifiableList(moduleFields);
+                this.methods = Collections.unmodifiableList(methods);
+            }
+        }
 
-        private final List<ModuleField> moduleFields = Lists.newArrayList();
-        private final List<MethodDefinition> methods = Lists.newArrayList();
+        private final Holder holder;
 
-        void processAttributes(Map<String, AttributeIfc> attributes,
-                String packageName) {
+
+        private AbstractModuleAttributesProcessor(Map<String, AttributeIfc> attributes) {
+            this.holder = processAttributes(attributes);
+        }
+
+        private static Holder processAttributes(Map<String, AttributeIfc> attributes) {
+            List<ModuleField> moduleFields = new ArrayList<>();
+            List<MethodDefinition> methods = new ArrayList<>();
             for (Entry<String, AttributeIfc> attrEntry : attributes.entrySet()) {
                 String type, nullableDefaultWrapped = null;
                 AttributeIfc attributeIfc = attrEntry.getValue();
@@ -661,7 +605,7 @@ public class TemplateFactory {
 
                 String varName = BindingGeneratorUtil
                         .parseToValidParamName(attrEntry.getKey());
-
+                {
                 ModuleField field;
 
                 if (isIdentity) {
@@ -695,7 +639,7 @@ public class TemplateFactory {
                             nullableDefaultWrapped, isDependency, dependency, isListOfDependencies, needsDepResolver);
                 }
                 moduleFields.add(field);
-
+                }
                 String getterName = "get"
                         + attributeIfc.getUpperCaseCammelCase();
                 MethodDefinition getter = new MethodDefinition(type,
@@ -727,14 +671,15 @@ public class TemplateFactory {
 
                 methods.add(setter);
             }
+            return new Holder(moduleFields, methods);
         }
 
         List<ModuleField> getModuleFields() {
-            return moduleFields;
+            return holder.moduleFields;
         }
 
         List<MethodDefinition> getMethods() {
-            return methods;
+            return holder.methods;
         }
 
     }
diff --git a/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/directives/AnnotationsDirective.java b/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/directives/AnnotationsDirective.java
deleted file mode 100644 (file)
index 4a34a1f..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.directives;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.List;
-import java.util.Map;
-
-import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.FtlTemplate;
-import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.Annotation;
-import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.Annotation.Parameter;
-
-import com.google.common.collect.Lists;
-
-import freemarker.core.Environment;
-import freemarker.template.SimpleSequence;
-import freemarker.template.TemplateDirectiveBody;
-import freemarker.template.TemplateDirectiveModel;
-import freemarker.template.TemplateException;
-import freemarker.template.TemplateModel;
-
-/**
- * Add annotations to freemarker template.
- */
-public class AnnotationsDirective implements TemplateDirectiveModel {
-
-    private static final String OBJECT = "object";
-
-    @Override
-    public void execute(Environment env, Map params, TemplateModel[] loopVars,
-            TemplateDirectiveBody body) throws TemplateException, IOException {
-        Object object = params.get(OBJECT);
-        List<Annotation> annotations = Lists.newArrayList();
-
-        if (object != null) {
-            if (object instanceof SimpleSequence)
-                annotations = ((SimpleSequence) object).toList();
-            else if (object instanceof FtlTemplate) {
-                annotations = ((FtlTemplate) object).getAnnotations();
-            } else
-                throw new IllegalArgumentException(
-                        "Object must be a SimpleSequence or instance of "
-                                + FtlTemplate.class + "but was "
-                                + object.getClass());
-        }
-
-        Writer out = env.getOut();
-        StringBuilder build = new StringBuilder();
-        writeAnnotations(annotations, build, "");
-
-        if (!annotations.isEmpty())
-            out.write(build.toString().toCharArray());
-    }
-
-    static void writeAnnotations(List<Annotation> annotations,
-            StringBuilder build, String linePrefix) {
-        for (Annotation annotation : annotations) {
-            build.append(linePrefix + "@");
-            build.append(annotation.getName());
-            if (!annotation.getParams().isEmpty()) {
-                build.append("(");
-                for (Parameter param : annotation.getParams()) {
-                    build.append(param.getKey());
-                    build.append(" = ");
-                    build.append(fixString(param.getValue()));
-                    build.append(", ");
-                }
-                build.setCharAt(build.length() - 2, ')');
-            }
-            build.append(System.lineSeparator());
-        }
-    }
-
-    private static String fixString(String value) {
-        // TODO replace with compress single line if possible
-        return value.replaceAll("\\r\\n|\\r|\\n", " ").replaceAll(" +", " ");
-    }
-
-}
diff --git a/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/directives/ConstructorsDirective.java b/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/directives/ConstructorsDirective.java
deleted file mode 100644 (file)
index 56b7286..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.directives;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.List;
-import java.util.Map;
-
-import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.GeneralClassTemplate;
-import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.Constructor;
-
-import com.google.common.collect.Lists;
-
-import freemarker.core.Environment;
-import freemarker.template.SimpleSequence;
-import freemarker.template.TemplateDirectiveBody;
-import freemarker.template.TemplateDirectiveModel;
-import freemarker.template.TemplateException;
-import freemarker.template.TemplateModel;
-
-/**
- * Add annotations to freemarker template.
- */
-public class ConstructorsDirective implements TemplateDirectiveModel {
-
-    private static final String OBJECT = "object";
-
-    @Override
-    public void execute(Environment env, Map params, TemplateModel[] loopVars,
-            TemplateDirectiveBody body) throws TemplateException, IOException {
-        Object object = params.get(OBJECT);
-        List<Constructor> constructors = Lists.newArrayList();
-
-        if (object != null) {
-            if (object instanceof SimpleSequence)
-                constructors = ((SimpleSequence) object).toList();
-            else if (object instanceof GeneralClassTemplate) {
-                constructors = ((GeneralClassTemplate) object)
-                        .getConstructors();
-            } else
-                throw new IllegalArgumentException(
-                        "Object must be a SimpleSequence or instance of "
-                                + GeneralClassTemplate.class + "but was "
-                                + object.getClass());
-        }
-
-        Writer out = env.getOut();
-        StringBuilder build = new StringBuilder();
-        for (Constructor constr : constructors) {
-            build.append("    ");
-            if (constr.isPublic())
-                build.append("public ");
-            build.append(constr.getTypeName() + " ");
-            build.append("() {");
-            build.append(System.lineSeparator());
-            build.append("    ");
-            build.append("    ");
-            build.append(constr.getBody());
-            build.append(System.lineSeparator());
-            build.append("    ");
-            build.append("}");
-            build.append(System.lineSeparator());
-            build.append(System.lineSeparator());
-        }
-
-        if (!constructors.isEmpty())
-            out.write(build.toString().toCharArray());
-    }
-
-}
diff --git a/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/directives/FieldsDirectiveProg.java b/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/directives/FieldsDirectiveProg.java
deleted file mode 100644 (file)
index 7dd0f8e..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.directives;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.List;
-import java.util.Map;
-
-import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.FtlTemplate;
-import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.Field;
-
-import com.google.common.collect.Lists;
-
-import freemarker.core.Environment;
-import freemarker.template.SimpleSequence;
-import freemarker.template.TemplateDirectiveBody;
-import freemarker.template.TemplateDirectiveModel;
-import freemarker.template.TemplateException;
-import freemarker.template.TemplateModel;
-
-/**
- * Add fields to freemarker template.
- */
-public class FieldsDirectiveProg implements TemplateDirectiveModel {
-
-    private static final String OBJECT = "object";
-
-    @Override
-    public void execute(Environment env, Map params, TemplateModel[] loopVars,
-            TemplateDirectiveBody body) throws TemplateException, IOException {
-        Object object = params.get(OBJECT);
-        List<Field> fields = Lists.newArrayList();
-
-        if (object != null) {
-            if (object instanceof SimpleSequence)
-                fields = ((SimpleSequence) object).toList();
-            else if (object instanceof FtlTemplate) {
-                fields = ((FtlTemplate) object).getFields();
-            } else
-                throw new IllegalArgumentException(
-                        "Object must be a SimpleSequence or instance of "
-                                + FtlTemplate.class + "but was "
-                                + object.getClass());
-        }
-
-        Writer out = env.getOut();
-        StringBuilder build = new StringBuilder();
-        for (Field field : fields) {
-            build.append("     private ");
-            for (String mod : field.getModifiers()) {
-                build.append(mod + " ");
-            }
-            build.append(field.getType() + " ");
-            build.append(field.getName());
-            if (field.getDefinition() != null)
-                build.append(" = " + field.getDefinition());
-            build.append(";");
-            build.append(System.lineSeparator());
-        }
-
-        if (!fields.isEmpty())
-            out.write(build.toString().toCharArray());
-    }
-
-    // String templateStr = "Hello ${user}";
-    // Template t = new Template("name", new StringReader(templateStr), new
-    // Configuration());
-}
diff --git a/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/directives/FieldsDirectiveTemplate.java b/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/directives/FieldsDirectiveTemplate.java
deleted file mode 100644 (file)
index 268d898..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.directives;
-
-import java.io.IOException;
-import java.io.StringReader;
-import java.io.Writer;
-import java.util.Map;
-
-import com.google.common.collect.Maps;
-
-import freemarker.core.Environment;
-import freemarker.template.Configuration;
-import freemarker.template.Template;
-import freemarker.template.TemplateDirectiveBody;
-import freemarker.template.TemplateDirectiveModel;
-import freemarker.template.TemplateException;
-import freemarker.template.TemplateModel;
-
-/**
- * Add fields to freemarker template.
- */
-public class FieldsDirectiveTemplate implements TemplateDirectiveModel {
-
-    private static final String OBJECT = "object";
-
-    @Override
-    public void execute(Environment env, Map params, TemplateModel[] loopVars,
-            TemplateDirectiveBody body) throws TemplateException, IOException {
-        Object object = params.get(OBJECT);
-
-        // TODO check type
-
-        String templateStr = "    <#list fields as field>"
-                + "private <#if field.final==true>final </#if> <#if field.static==true>static </#if>"
-                + "${field.type} ${field.name}<#if field.definition??> = ${field.definition}</#if>;"
-                + System.lineSeparator() + " </#list>";
-        Template t = new Template("name", new StringReader(templateStr),
-                new Configuration());
-
-        try {
-            Map<String, Object> map = Maps.newHashMap();
-            map.put("fields", object);
-            Writer out = env.getOut();
-            t.process(map, out);
-        } catch (TemplateException e) {
-            throw new IllegalStateException(
-                    "Template error while generating fields" + e);
-        }
-    }
-
-}
diff --git a/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/directives/HeaderDirective.java b/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/directives/HeaderDirective.java
deleted file mode 100644 (file)
index 93fde59..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.directives;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.Date;
-import java.util.Map;
-
-import org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator;
-import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.Header;
-
-import com.google.common.base.Preconditions;
-
-import freemarker.core.Environment;
-import freemarker.ext.beans.StringModel;
-import freemarker.template.TemplateDirectiveBody;
-import freemarker.template.TemplateDirectiveModel;
-import freemarker.template.TemplateException;
-import freemarker.template.TemplateModel;
-
-/**
- * Add annotations to freemarker template.
- */
-public class HeaderDirective implements TemplateDirectiveModel {
-
-    private static final String GENERATOR_CLASS = JMXGenerator.class
-            .getCanonicalName();
-    private static final String OBJECT = "header";
-
-    @Override
-    public void execute(Environment env, Map params, TemplateModel[] loopVars,
-            TemplateDirectiveBody body) throws TemplateException, IOException {
-
-        // FIXME do not allow null header
-        // Preconditions.checkNotNull(object, "Null type declaration");
-        Object object = params.get(OBJECT);
-        Header header = null;
-        if (object != null) {
-            object = ((StringModel) object).getWrappedObject();
-            Preconditions.checkArgument(object instanceof Header,
-                    "Template header should be instance of " + Header.class
-                            + " but was " + object.getClass());
-
-            header = (Header) object;
-        }
-
-        Writer out = env.getOut();
-        StringBuilder build = new StringBuilder();
-        build.append("/**");
-        build.append(System.lineSeparator());
-        build.append("* ");
-        build.append("Generated file");
-        build.append(System.lineSeparator());
-        build.append(System.lineSeparator());
-        build.append("* ");
-        build.append("Generated from: ");
-        build.append(header != null ? header.toString() : "");
-        build.append(System.lineSeparator());
-        build.append("* ");
-        build.append("Generated by: " + GENERATOR_CLASS);
-        build.append(System.lineSeparator());
-        build.append("* ");
-        build.append("Generated at: " + new Date());
-        build.append(System.lineSeparator());
-        build.append("* ");
-        build.append(System.lineSeparator());
-        build.append("* ");
-        build.append("Do not modify this file unless it is present under src/main directory ");
-        build.append(System.lineSeparator());
-        build.append("*/");
-        build.append(System.lineSeparator());
-
-        out.write(build.toString().toCharArray());
-    }
-}
diff --git a/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/directives/JavadocDirective.java b/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/directives/JavadocDirective.java
deleted file mode 100644 (file)
index 9817be3..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.directives;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.Map;
-
-import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.FtlTemplate;
-
-import freemarker.core.Environment;
-import freemarker.template.SimpleScalar;
-import freemarker.template.TemplateDirectiveBody;
-import freemarker.template.TemplateDirectiveModel;
-import freemarker.template.TemplateException;
-import freemarker.template.TemplateModel;
-
-/**
- * Add javadoc to freemarker template as String.
- */
-public class JavadocDirective implements TemplateDirectiveModel {
-
-    private static final String OBJECT = "object";
-
-    @Override
-    public void execute(Environment env, Map params, TemplateModel[] loopVars,
-            TemplateDirectiveBody body) throws TemplateException, IOException {
-        Object object = params.get(OBJECT);
-        String javadoc = "";
-
-        if (object != null) {
-            if (object instanceof SimpleScalar)
-                javadoc = ((SimpleScalar) object).getAsString();
-            else if (object instanceof FtlTemplate) {
-                javadoc = ((FtlTemplate) object).getJavadoc();
-            } else
-                throw new IllegalArgumentException(
-                        "Object must be a String or instance of "
-                                + FtlTemplate.class + "but was "
-                                + object.getClass());
-        }
-
-        Writer out = env.getOut();
-        StringBuilder build = new StringBuilder();
-        writeJavadoc(build, javadoc, "");
-        out.write(build.toString().toCharArray());
-    }
-
-    static void writeJavadoc(StringBuilder build, String javadoc,
-            String linePrefix) {
-        build.append(linePrefix + "/**");
-        build.append(System.lineSeparator());
-        build.append(linePrefix + "* ");
-        build.append(javadoc == null ? "" : javadoc);
-        build.append(System.lineSeparator());
-        build.append(linePrefix + "*/");
-        build.append(System.lineSeparator());
-    }
-
-}
diff --git a/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/directives/MethodsDirective.java b/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/directives/MethodsDirective.java
deleted file mode 100644 (file)
index 975d8fd..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.directives;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.List;
-import java.util.Map;
-
-import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.FtlTemplate;
-import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.Field;
-import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.Method;
-import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.MethodDeclaration;
-import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.MethodDefinition;
-
-import com.google.common.collect.Lists;
-
-import freemarker.core.Environment;
-import freemarker.template.SimpleSequence;
-import freemarker.template.TemplateDirectiveBody;
-import freemarker.template.TemplateDirectiveModel;
-import freemarker.template.TemplateException;
-import freemarker.template.TemplateModel;
-
-/**
- * Add annotations to freemarker template.
- */
-public class MethodsDirective implements TemplateDirectiveModel {
-
-    private static final String OBJECT = "object";
-
-    @Override
-    public void execute(Environment env, Map params, TemplateModel[] loopVars,
-            TemplateDirectiveBody body) throws TemplateException, IOException {
-        Object object = params.get(OBJECT);
-        List<? extends Method> methods = Lists.newArrayList();
-
-        if (object != null) {
-            if (object instanceof SimpleSequence)
-                methods = ((SimpleSequence) object).toList();
-            else if (object instanceof FtlTemplate) {
-                methods = ((FtlTemplate) object).getMethods();
-            } else
-                throw new IllegalArgumentException(
-                        "Object must be a SimpleSequence or instance of "
-                                + FtlTemplate.class + "but was "
-                                + object.getClass());
-        }
-
-        Writer out = env.getOut();
-        StringBuilder build = new StringBuilder();
-        for (Method method : methods) {
-            if (method.getJavadoc() != null)
-                JavadocDirective.writeJavadoc(build, method.getJavadoc(), "    ");
-
-            if (!method.getAnnotations().isEmpty()) {
-                AnnotationsDirective.writeAnnotations(method.getAnnotations(),
-                        build, "    ");
-            }
-
-            build.append("    " + "public ");
-            for (String mod : method.getModifiers()) {
-                build.append(mod + " ");
-            }
-            build.append(method.getReturnType() + " ");
-
-            build.append(method.getName() + "(");
-            for (Field param : method.getParameters()) {
-                for (String mod : param.getModifiers()) {
-                    build.append(mod + " ");
-                }
-                build.append(param.getType() + " ");
-                build.append(param.getName() + ", ");
-            }
-            if (method.getParameters().isEmpty())
-                build.append(")");
-            else {
-                build.deleteCharAt(build.length() - 1);
-                build.deleteCharAt(build.length() - 1);
-                build.append(')');
-            }
-
-            if (method instanceof MethodDeclaration) {
-                build.append(";");
-                build.append(System.lineSeparator());
-            } else if (method instanceof MethodDefinition) {
-                if (!((MethodDefinition) method).getThrowsExceptions()
-                        .isEmpty())
-                    build.append(" throws ");
-                for (String ex : ((MethodDefinition) method)
-                        .getThrowsExceptions()) {
-                    build.append(ex + " ");
-                }
-                build.append(" {");
-                build.append(System.lineSeparator());
-                build.append("        ");
-                build.append(((MethodDefinition) method).getBody());
-                build.append(System.lineSeparator());
-                build.append("    ");
-                build.append("}");
-                build.append(System.lineSeparator());
-            }
-            build.append(System.lineSeparator());
-
-        }
-
-        if (!methods.isEmpty())
-            out.write(build.toString().toCharArray());
-    }
-}
diff --git a/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/directives/ModuleFieldsDirective.java b/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/directives/ModuleFieldsDirective.java
deleted file mode 100644 (file)
index 144419e..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.directives;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.List;
-import java.util.Map;
-
-import org.opendaylight.controller.config.api.JmxAttribute;
-import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.AbstractModuleTemplate;
-import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.ModuleField;
-
-import com.google.common.collect.Lists;
-
-import freemarker.core.Environment;
-import freemarker.template.SimpleSequence;
-import freemarker.template.TemplateDirectiveBody;
-import freemarker.template.TemplateDirectiveModel;
-import freemarker.template.TemplateException;
-import freemarker.template.TemplateModel;
-
-/**
- * Add annotations to freemarker template.
- */
-public class ModuleFieldsDirective implements TemplateDirectiveModel {
-
-    private static final String OBJECT = "moduleFields";
-
-    @Override
-    public void execute(Environment env, Map params, TemplateModel[] loopVars,
-            TemplateDirectiveBody body) throws TemplateException, IOException {
-        Object object = params.get(OBJECT);
-        List<ModuleField> fields = Lists.newArrayList();
-
-        if (object != null) {
-            if (object instanceof SimpleSequence)
-                fields = ((SimpleSequence) object).toList();
-            else if (object instanceof AbstractModuleTemplate) {
-                fields = ((AbstractModuleTemplate) object).getModuleFields();
-            } else
-                throw new IllegalArgumentException(
-                        "Object must be a SimpleSequence or instance of "
-                                + AbstractModuleTemplate.class + "but was "
-                                + object.getClass());
-        }
-
-        Writer out = env.getOut();
-        StringBuilder build = new StringBuilder();
-        for (ModuleField field : fields) {
-            build.append("    ");
-            build.append("protected final "
-                    + JmxAttribute.class.getCanonicalName() + " "
-                    + field.getName() + "JmxAttribute = new "
-                    + JmxAttribute.class.getCanonicalName() + "(\""
-                    + field.getAttributeName() + "\");");
-            build.append(System.lineSeparator());
-
-            build.append("     private ");
-            for (String mod : field.getModifiers()) {
-                build.append(mod + " ");
-            }
-            build.append(field.getType() + " ");
-            build.append(field.getName());
-            if (field.getNullableDefault() != null)
-                build.append(" = " + field.getNullableDefault());
-            build.append(";");
-
-            if (field.isDependent()) {
-                String comment = field.getDependency().isMandatory() ? "mandatory"
-                        : "optional";
-                build.append(" // " + comment);
-            }
-            build.append(System.lineSeparator());
-
-            build.append(System.lineSeparator());
-
-        }
-
-        if (!fields.isEmpty())
-            out.write(build.toString().toCharArray());
-    }
-}
diff --git a/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/directives/TypeDeclarationDirective.java b/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/directives/TypeDeclarationDirective.java
deleted file mode 100644 (file)
index 42556c2..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.directives;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.Collection;
-import java.util.Map;
-
-import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.TypeDeclaration;
-
-import com.google.common.base.Preconditions;
-
-import freemarker.core.Environment;
-import freemarker.ext.beans.StringModel;
-import freemarker.template.TemplateDirectiveBody;
-import freemarker.template.TemplateDirectiveModel;
-import freemarker.template.TemplateException;
-import freemarker.template.TemplateModel;
-
-/**
- * Add type declaration to freemarker template.
- */
-public class TypeDeclarationDirective implements TemplateDirectiveModel {
-
-    private static final String OBJECT = "object";
-
-    @Override
-    public void execute(Environment env, Map params, TemplateModel[] loopVars,
-            TemplateDirectiveBody body) throws TemplateException, IOException {
-        Object object = params.get(OBJECT);
-        Preconditions.checkNotNull(object, "Null type declaration");
-
-        object = ((StringModel) object).getWrappedObject();
-        Preconditions.checkArgument(
-                object instanceof TypeDeclaration,
-                "Type declaration should be instance of "
-                        + TypeDeclaration.class + " but was "
-                        + object.getClass());
-
-        TypeDeclaration type = (TypeDeclaration) object;
-
-        Writer out = env.getOut();
-        StringBuilder build = new StringBuilder("public ");
-        if (type.isAbstract())
-            build.append("abstract ");
-        if (type.isFinal())
-            build.append("final ");
-        build.append(type.getType() + " ");
-        build.append(type.getName() + " ");
-
-        generateExtendOrImplement(build, "extends", type.getExtended());
-
-        generateExtendOrImplement(build, "implements", type.getImplemented());
-
-        build.append(System.lineSeparator());
-        out.write(build.toString().toCharArray());
-    }
-
-    private void generateExtendOrImplement(StringBuilder build, String prefix,
-            Collection<String> elements) {
-        if (elements.isEmpty())
-            return;
-
-        build.append(prefix + " ");
-
-        for (String extended : elements) {
-            build.append(extended);
-            build.append(", ");
-        }
-        build.deleteCharAt(build.length() - 1);
-        build.deleteCharAt(build.length() - 1);
-    }
-
-}
diff --git a/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/directives/UnimplementedExceptionDirective.java b/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/directives/UnimplementedExceptionDirective.java
deleted file mode 100644 (file)
index 5175ade..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.directives;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.Map;
-
-import freemarker.core.Environment;
-import freemarker.template.TemplateDirectiveBody;
-import freemarker.template.TemplateDirectiveModel;
-import freemarker.template.TemplateException;
-import freemarker.template.TemplateModel;
-
-/**
- * Add annotations to freemarker template.
- */
-public class UnimplementedExceptionDirective implements TemplateDirectiveModel {
-
-    @Override
-    public void execute(Environment env, Map params, TemplateModel[] loopVars,
-            TemplateDirectiveBody body) throws TemplateException, IOException {
-
-        Writer out = env.getOut();
-        StringBuilder build = new StringBuilder();
-        build.append("        ");
-        build.append("throw new "
-                + UnsupportedOperationException.class.getCanonicalName()
-                + "(\"Unimplemented stub method\");");
-        build.append(System.lineSeparator());
-
-        out.write(build.toString().toCharArray());
-    }
-}
index 7cf241725d78674cd6f7ca9e16aa3cebcc0f7be4..a8ddabc4cf01086b4634538b53d2747c88f319c8 100644 (file)
@@ -7,18 +7,21 @@
  */
 package org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model;
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
+import com.google.common.base.Preconditions;
+import com.google.common.collect.Lists;
 import org.opendaylight.controller.config.api.annotations.Description;
 import org.opendaylight.controller.config.api.annotations.RequireInterface;
 import org.opendaylight.controller.config.api.annotations.ServiceInterfaceAnnotation;
-import org.opendaylight.yangtools.yang.binding.annotations.ModuleQName;
 import org.opendaylight.controller.config.yangjmxgenerator.ServiceInterfaceEntry;
+import org.opendaylight.yangtools.yang.binding.annotations.ModuleQName;
+import org.opendaylight.yangtools.yang.common.QName;
 
-import com.google.common.base.Preconditions;
-import com.google.common.collect.Lists;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
 
 public class Annotation {
     final String name;
@@ -37,6 +40,14 @@ public class Annotation {
         return params;
     }
 
+    public static Annotation createFromMap(Class<?> annotationClass, Map<String, String> parameters) {
+        List<Parameter> parameterList = new ArrayList<>();
+        for(Entry<String, String> entry: parameters.entrySet()) {
+            parameterList.add(new Parameter(entry.getKey(), entry.getValue()));
+        }
+        return new Annotation(annotationClass.getCanonicalName(), parameterList);
+    }
+
     public static Annotation createDescriptionAnnotation(String description) {
         Preconditions.checkNotNull(description,
                 "Cannot create annotation from null description");
@@ -44,6 +55,14 @@ public class Annotation {
                 Lists.newArrayList(new Parameter("value", q(description))));
     }
 
+    public static Annotation createModuleQNameANnotation(QName qName) {
+        Map<String, String> parameters = new HashMap<>();
+        parameters.put("namespace", q(qName.getNamespace().toString()));
+        parameters.put("revision", q(qName.getFormattedRevision()));
+        parameters.put("name", q(qName.getLocalName()));
+        return Annotation.createFromMap(ModuleQName.class, parameters);
+    }
+
     public static Collection<Annotation> createSieAnnotations(ServiceInterfaceEntry sie){
 
         String exportedClassName = sie.getExportedOsgiClassName();
@@ -85,7 +104,7 @@ public class Annotation {
 
     private static final String quote = "\"";
 
-    private static String q(String nullableDescription) {
+    public static String q(String nullableDescription) {
         return nullableDescription == null ? null : quote + nullableDescription
                 + quote;
     }
@@ -107,4 +126,8 @@ public class Annotation {
         }
     }
 
+    @Override
+    public String toString() {
+        return AnnotationSerializer.toString(this);
+    }
 }
diff --git a/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/model/AnnotationSerializer.java b/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/model/AnnotationSerializer.java
new file mode 100644 (file)
index 0000000..6b4ce38
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model;
+
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.Annotation.Parameter;
+
+class AnnotationSerializer {
+
+    static String toString(Annotation annotation) {
+        StringBuilder builder = new StringBuilder();
+        builder.append("@");
+        builder.append(annotation.getName());
+        if (!annotation.getParams().isEmpty()) {
+            builder.append("(");
+            for (Parameter param : annotation.getParams()) {
+                builder.append(param.getKey());
+                builder.append(" = ");
+                builder.append(fixString(param.getValue()));
+                builder.append(", ");
+            }
+            builder.setCharAt(builder.length() - 2, ')');
+        }
+        builder.append("\n");
+        return builder.toString();
+    }
+
+    private static String fixString(String value) {
+        // TODO replace with compress single line if possible
+        return value.replaceAll("\\r\\n|\\r|\\n", " ").replaceAll(" +", " ");
+    }
+
+}
diff --git a/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/model/ConstructorSerializer.java b/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/model/ConstructorSerializer.java
new file mode 100644 (file)
index 0000000..c257aa6
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model;
+
+public class ConstructorSerializer {
+
+    public static String toString(Constructor constr) {
+        StringBuilder build = new StringBuilder();
+        build.append("    ");
+        if (constr.isPublic()) {
+            build.append("public ");
+        }
+        build.append(constr.getTypeName() + " ");
+        build.append("() {");
+        build.append("\n");
+        build.append("    ");
+        build.append("    ");
+        build.append(constr.getBody());
+        build.append("\n");
+        build.append("    ");
+        build.append("}");
+        build.append("\n");
+        build.append("\n");
+        return build.toString();
+    }
+}
index ad5cbb287c73a4aef2cafebce6afb442f57fd1ed..3639b6d727274d9656c24a04cd62e09a7a3ae62a 100644 (file)
@@ -11,6 +11,8 @@ import com.google.common.collect.Lists;
 
 import java.util.List;
 
+import static com.google.common.base.Preconditions.checkNotNull;
+
 public class Field {
     private final String type;
     private final String name;
@@ -36,11 +38,11 @@ public class Field {
     }
 
     public Field(List<String> modifiers, String type, String name,
-            String definition, boolean needsDepResolver) {
-        this.modifiers = modifiers;
-        this.type = type;
-        this.name = name;
-        this.definition = definition;
+            String nullableDefinition, boolean needsDepResolver) {
+        this.modifiers = checkNotNull(modifiers);
+        this.type = checkNotNull(type);
+        this.name = checkNotNull(name);
+        this.definition = nullableDefinition;
         this.needsDepResolver = needsDepResolver;
     }
 
@@ -56,6 +58,10 @@ public class Field {
         return type;
     }
 
+    public String getGenericInnerType() {
+        return type.substring(type.indexOf("<") + 1, type.indexOf(">"));
+    }
+
     public List<String> getModifiers() {
         return modifiers;
     }
@@ -71,4 +77,9 @@ public class Field {
     public boolean isArray() {
         return type.endsWith("[]");
     }
+
+    @Override
+    public String toString() {
+        return FieldSerializer.toString(this);
+    }
 }
diff --git a/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/model/FieldSerializer.java b/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/model/FieldSerializer.java
new file mode 100644 (file)
index 0000000..90a2b56
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model;
+
+public class FieldSerializer {
+
+    public static String toString(Field field) {
+        StringBuilder build = new StringBuilder();
+        build.append("private ");
+        for (String mod : field.getModifiers()) {
+            build.append(mod + " ");
+        }
+        build.append(field.getType() + " ");
+        build.append(field.getName());
+        if (field.getDefinition() != null) {
+            build.append(" = " + field.getDefinition());
+        }
+        build.append(";");
+        build.append("\n");
+        return build.toString();
+    }
+}
index 047e87a3dc7f58bac0046bcfb6673374d1a1fa9b..b9a628495d71f8a8f2210d1178aa4ed85badf8ac 100644 (file)
@@ -26,8 +26,7 @@ public class Header {
 
     @Override
     public String toString() {
-        return "yang module name: " + yangModuleName + " "
-                + " yang module local name: " + yangModuleLocalName;
+        return HeaderSerializer.toString(this);
     }
 
 }
diff --git a/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/model/HeaderSerializer.java b/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/model/HeaderSerializer.java
new file mode 100644 (file)
index 0000000..eb07c80
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model;
+
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator;
+
+import java.util.Date;
+
+public class HeaderSerializer {
+    private static final String GENERATOR_CLASS = JMXGenerator.class.getCanonicalName();
+
+    public static String toString(Header header) {
+        StringBuilder build = new StringBuilder();
+
+
+        build.append("Generated file");
+        build.append("\n");
+        build.append("\n");
+        build.append("Generated from: ");
+        //build.append(header.toString());
+
+        build.append("yang module name: ");
+        build.append(header.getYangModuleName());
+        build.append(" yang module local name: ");
+        build.append(header.getYangModuleLocalName());
+
+        build.append("\n");
+        build.append("Generated by: " + GENERATOR_CLASS);
+        build.append("\n");
+        build.append("Generated at: " + new Date());
+        build.append("\n");
+        build.append("\n");
+        build.append("Do not modify this file unless it is present under src/main directory ");
+
+        return build.toString();
+    }
+
+}
index bd4e22e084cb115142ebde865ac82a9074604383..be6b23e879e36de82bb1a2abf5f82107a161ea11 100644 (file)
@@ -63,4 +63,9 @@ public class MethodDeclaration implements Method {
     public List<String> getModifiers() {
         return Collections.emptyList();
     }
+
+    @Override
+    public String toString() {
+        return MethodSerializer.toString(this);
+    }
 }
index bf453ac135fa9fd230ec5fcb0a4ccd411076874b..9af011fe7199230d03f7e00a93bcca10e0b96b9b 100644 (file)
@@ -93,4 +93,9 @@ public class MethodDefinition implements Method {
     public List<String> getModifiers() {
         return modifiers;
     }
+
+    @Override
+    public String toString() {
+        return MethodSerializer.toString(this);
+    }
 }
diff --git a/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/model/MethodSerializer.java b/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/model/MethodSerializer.java
new file mode 100644 (file)
index 0000000..7d2b9fc
--- /dev/null
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model;
+
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.util.StringUtil;
+
+class MethodSerializer {
+
+    static String toString(Method method) {
+        StringBuilder build = new StringBuilder();
+        if (method.getJavadoc() != null) {
+            build.append(StringUtil.writeComment(method.getJavadoc(), true));
+        }
+
+        for(Annotation a: method.getAnnotations()) {
+            build.append(a);
+        }
+
+        build.append("    " + "public ");
+        for (String mod : method.getModifiers()) {
+            build.append(mod + " ");
+        }
+        build.append(method.getReturnType() + " ");
+
+        build.append(method.getName() + "(");
+        for (Field param : method.getParameters()) {
+            for (String mod : param.getModifiers()) {
+                build.append(mod + " ");
+            }
+            build.append(param.getType() + " ");
+            build.append(param.getName() + ", ");
+        }
+        if (method.getParameters().isEmpty()) {
+            build.append(")");
+        } else {
+            build.deleteCharAt(build.length() - 1);
+            build.deleteCharAt(build.length() - 1);
+            build.append(')');
+        }
+
+        if (method instanceof MethodDeclaration) {
+            build.append(";");
+            build.append("\n");
+        } else if (method instanceof MethodDefinition) {
+            if (!((MethodDefinition) method).getThrowsExceptions()
+                    .isEmpty()) {
+                build.append(" throws ");
+            }
+            for (String ex : ((MethodDefinition) method)
+                    .getThrowsExceptions()) {
+                build.append(ex + " ");
+            }
+            build.append(" {");
+            build.append("\n");
+            build.append("        ");
+            build.append(((MethodDefinition) method).getBody());
+            build.append("\n");
+            build.append("    ");
+            build.append("}");
+            build.append("\n");
+        }
+        build.append("\n");
+        return build.toString();
+    }
+}
index 74e5bb0490c5de483a357476ecf3bde7b3aeb790..37d660353f55d1a5a418b8dac0213f6e630ba3e2 100644 (file)
@@ -44,6 +44,11 @@ public class ModuleField extends Field {
         return false;
     }
 
+    @Override
+    public String toString() {
+        return ModuleFieldSerializer.toString(this);
+    }
+
     public Dependency getDependency() {
         return dependency;
     }
@@ -64,4 +69,9 @@ public class ModuleField extends Field {
         return attributeName;
     }
 
+
+    public boolean isList() {
+        return getType().startsWith("java.util.List");
+    }
+
 }
diff --git a/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/model/ModuleFieldSerializer.java b/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/model/ModuleFieldSerializer.java
new file mode 100644 (file)
index 0000000..c0e3bc1
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model;
+
+import org.opendaylight.controller.config.api.JmxAttribute;
+
+public class ModuleFieldSerializer {
+
+
+    public static String toString(ModuleField moduleField) {
+        StringBuilder builder = new StringBuilder();
+        builder.append("    ");
+        builder.append("protected final "
+                + JmxAttribute.class.getCanonicalName() + " "
+                + moduleField.getName() + "JmxAttribute = new "
+                + JmxAttribute.class.getCanonicalName() + "(\""
+                + moduleField.getAttributeName() + "\");");
+        builder.append("\n");
+
+        builder.append("     private ");
+        for (String mod : moduleField.getModifiers()) {
+            builder.append(mod + " ");
+        }
+        builder.append(moduleField.getType() + " ");
+        builder.append(moduleField.getName());
+        if (moduleField.getNullableDefault() != null) {
+            builder.append(" = " + moduleField.getNullableDefault());
+        }
+        builder.append(";");
+
+        if (moduleField.isDependent()) {
+            String comment = moduleField.getDependency().isMandatory() ? "mandatory"
+                    : "optional";
+            builder.append(" // " + comment);
+        }
+        builder.append("\n");
+
+        builder.append("\n");
+
+        return builder.toString();
+    }
+}
index ee0aa2ff5c22a7e054a931b7a36a6d0b89569c94..a5bb987fd33d4adc52d66daa707fb0fe1877c3dc 100644 (file)
@@ -7,6 +7,8 @@
  */
 package org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model;
 
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.java.TypeName;
+
 import java.util.List;
 
 public class TypeDeclaration {
@@ -54,6 +56,24 @@ public class TypeDeclaration {
         return implemented;
     }
 
+    public TypeName toTypeName() {
+        if ("interface".equals(type)) {
+            return TypeName.interfaceType;
+        } else if ("class".equals(type)) {
+            if (isAbstract) {
+                return TypeName.absClassType;
+            } else if (isFinal) {
+                return TypeName.finalClassType;
+            } else {
+                return TypeName.classType;
+            }
+        } else if ("enum".equals(type)) {
+            return TypeName.enumType;
+        } else {
+            throw new IllegalStateException("Type not supported: " + type);
+        }
+    }
+
     @Override
     public String toString() {
         return "TypeDeclaration{" + "type='" + type + '\'' + ", name='" + name
diff --git a/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/gofactory/AbsFactoryGeneratedObjectFactory.groovy b/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/gofactory/AbsFactoryGeneratedObjectFactory.groovy
new file mode 100644 (file)
index 0000000..baff88c
--- /dev/null
@@ -0,0 +1,168 @@
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.controller.config.yangjmxgenerator.plugin.gofactory
+import com.google.common.base.Optional
+import org.opendaylight.controller.config.api.DependencyResolver
+import org.opendaylight.controller.config.api.DynamicMBeanWithInstance
+import org.opendaylight.controller.config.api.ModuleIdentifier
+import org.opendaylight.controller.config.api.annotations.AbstractServiceInterface
+import org.opendaylight.controller.config.api.annotations.Description
+import org.opendaylight.controller.config.spi.Module
+import org.opendaylight.controller.config.spi.ModuleFactory
+import org.opendaylight.controller.config.yangjmxgenerator.ModuleMXBeanEntry
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.AbstractFactoryTemplate
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.TemplateFactory
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.Annotation
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.Field
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.java.*
+import org.opendaylight.yangtools.yang.common.QName
+import org.osgi.framework.BundleContext
+
+public class AbsFactoryGeneratedObjectFactory {
+
+    public GeneratedObject toGeneratedObject(ModuleMXBeanEntry mbe, Optional<String> copyright) {
+        FullyQualifiedName absFactoryFQN = new FullyQualifiedName(mbe.packageName, mbe.abstractFactoryName)
+        FullyQualifiedName moduleFQN = new FullyQualifiedName(mbe.packageName, mbe.stubModuleName)
+        Optional<String> classJavaDoc = Optional.fromNullable(mbe.getNullableDescription())
+
+        AbstractFactoryTemplate abstractFactoryTemplate = TemplateFactory.abstractFactoryTemplateFromMbe(mbe)
+        Optional<String> header = abstractFactoryTemplate.headerString;
+        List<FullyQualifiedName> providedServices = mbe.providedServices.keySet().collect {
+            FullyQualifiedName.fromString(it)
+        }
+
+
+        return toGeneratedObject(absFactoryFQN, copyright,
+                header, classJavaDoc, mbe.yangModuleQName,
+                mbe.globallyUniqueName,
+                providedServices,
+                moduleFQN,
+                abstractFactoryTemplate.fields)
+    }
+
+    public GeneratedObject toGeneratedObject(FullyQualifiedName absFactoryFQN, Optional<String> copyright,
+                                             Optional<String> header, Optional<String> classJavaDoc, QName yangModuleQName,
+                                             String globallyUniqueName,
+                                             List<FullyQualifiedName> providedServices,
+                                             FullyQualifiedName moduleFQN,
+                                             List<Field> moduleFields) {
+        JavaFileInputBuilder b = new JavaFileInputBuilder()
+        Annotation moduleQNameAnnotation = Annotation.createModuleQNameANnotation(yangModuleQName)
+        b.addClassAnnotation(moduleQNameAnnotation)
+
+        b.setFqn(absFactoryFQN)
+        b.setTypeName(TypeName.absClassType)
+
+        b.setCopyright(copyright);
+        b.setHeader(header);
+        b.setClassJavaDoc(classJavaDoc);
+        b.addImplementsFQN(new FullyQualifiedName(ModuleFactory))
+        if (classJavaDoc.isPresent()) {
+            b.addClassAnnotation("@${Description.canonicalName}(value=\"${classJavaDoc.get()}\")")
+        }
+
+        b.addToBody("public static final java.lang.String NAME = \"${globallyUniqueName}\";")
+        b.addToBody("private static final java.util.Set<Class<? extends ${AbstractServiceInterface.canonicalName}>> serviceIfcs;")
+
+        b.addToBody("@Override\n public final String getImplementationName() { \n return NAME; \n}")
+
+        b.addToBody(getServiceIfcsInitialization(providedServices))
+
+        // createModule
+        b.addToBody("""
+            @Override
+            public ${Module.canonicalName} createModule(String instanceName, ${DependencyResolver.canonicalName} dependencyResolver, ${BundleContext.canonicalName} bundleContext) {
+                return instantiateModule(instanceName, dependencyResolver, bundleContext);
+            }
+            """)
+
+        b.addToBody(getCreateModule(moduleFQN, moduleFields))
+
+        b.addToBody("""
+            public ${moduleFQN} instantiateModule(String instanceName, ${DependencyResolver.canonicalName} dependencyResolver, ${moduleFQN} oldModule, ${AutoCloseable.canonicalName} oldInstance, ${BundleContext.canonicalName} bundleContext) {
+                return new ${moduleFQN}(new ${ModuleIdentifier.canonicalName}(NAME, instanceName), dependencyResolver, oldModule, oldInstance);
+            }
+            """)
+
+        b.addToBody("""
+            public ${moduleFQN} instantiateModule(String instanceName, ${DependencyResolver.canonicalName} dependencyResolver, ${BundleContext.canonicalName} bundleContext) {
+                return new ${moduleFQN}(new ${ModuleIdentifier.canonicalName}(NAME, instanceName), dependencyResolver);
+            }
+            """)
+
+        b.addToBody("""
+            public ${moduleFQN} handleChangedClass(${DynamicMBeanWithInstance.canonicalName} old) throws Exception {
+                throw new UnsupportedOperationException("Class reloading is not supported");
+            }
+            """)
+
+        b.addToBody("""
+            @Override
+            public java.util.Set<${moduleFQN}> getDefaultModules(org.opendaylight.controller.config.api.DependencyResolverFactory dependencyResolverFactory, ${BundleContext.canonicalName} bundleContext) {
+                return new java.util.HashSet<${moduleFQN}>();
+            }
+            """)
+
+        return new GeneratedObjectBuilder(b.build()).toGeneratedObject()
+    }
+
+    private static String getCreateModule(FullyQualifiedName moduleFQN, List<Field> moduleFields) {
+        String result = """
+            @Override
+            public ${Module.canonicalName} createModule(String instanceName, ${DependencyResolver.canonicalName} dependencyResolver, ${DynamicMBeanWithInstance.canonicalName} old, ${BundleContext.canonicalName} bundleContext) throws Exception {
+                ${moduleFQN} oldModule = null;
+                try {
+                    oldModule = (${moduleFQN}) old.getModule();
+                } catch(Exception e) {
+                    return handleChangedClass(old);
+                }
+                ${moduleFQN} module = instantiateModule(instanceName, dependencyResolver, oldModule, old.getInstance(), bundleContext);
+            """
+        result += moduleFields.collect{"module.set${it.name}(oldModule.get${it.name}());"}.join("\n")
+        result += """
+                return module;
+            }
+            """
+        return result
+    }
+
+    private static String getServiceIfcsInitialization(List<FullyQualifiedName> providedServices) {
+        String generic = "Class<? extends ${AbstractServiceInterface.canonicalName}>"
+
+        String result = """static {
+            java.util.Set<${generic}> serviceIfcs2 = new java.util.HashSet<${generic}>();
+            """
+        result += providedServices.collect{"serviceIfcs2.add(${it}.class);"}.join("\n")
+        result += """serviceIfcs = java.util.Collections.unmodifiableSet(serviceIfcs2);
+            }
+            """
+
+        // add isModuleImplementingServiceInterface and getImplementedServiceIntefaces methods
+
+        result += """
+            @Override
+            public final boolean isModuleImplementingServiceInterface(Class<? extends ${AbstractServiceInterface.canonicalName}> serviceInterface) {
+                for (Class<?> ifc: serviceIfcs) {
+                    if (serviceInterface.isAssignableFrom(ifc)){
+                        return true;
+                    }
+                }
+                return false;
+            }
+
+            @Override
+            public java.util.Set<Class<? extends ${AbstractServiceInterface.canonicalName}>> getImplementedServiceIntefaces() {
+                return serviceIfcs;
+            }
+            """
+
+        return result
+    }
+
+}
diff --git a/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/gofactory/AbsModuleGeneratedObjectFactory.groovy b/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/gofactory/AbsModuleGeneratedObjectFactory.groovy
new file mode 100644 (file)
index 0000000..930acff
--- /dev/null
@@ -0,0 +1,400 @@
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.controller.config.yangjmxgenerator.plugin.gofactory
+import com.google.common.base.Optional
+import org.opendaylight.controller.config.api.DependencyResolver
+import org.opendaylight.controller.config.api.ModuleIdentifier
+import org.opendaylight.controller.config.api.annotations.Description
+import org.opendaylight.controller.config.api.runtime.RootRuntimeBeanRegistrator
+import org.opendaylight.controller.config.yangjmxgenerator.ModuleMXBeanEntry
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.AbstractModuleTemplate
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.TemplateFactory
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.Annotation
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.IdentityRefModuleField
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.Method
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.ModuleField
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.java.*
+import org.opendaylight.yangtools.yang.common.QName
+import org.slf4j.Logger
+import org.slf4j.LoggerFactory
+
+public class AbsModuleGeneratedObjectFactory {
+
+    public GeneratedObject toGeneratedObject(ModuleMXBeanEntry mbe, Optional<String> copyright) {
+        FullyQualifiedName abstractFQN = new FullyQualifiedName(mbe.getPackageName(), mbe.getAbstractModuleName())
+        Optional<String> classJavaDoc = Optional.fromNullable(mbe.getNullableDescription())
+        AbstractModuleTemplate abstractModuleTemplate = TemplateFactory.abstractModuleTemplateFromMbe(mbe)
+        Optional<String> header = abstractModuleTemplate.headerString;
+        List<FullyQualifiedName> implementedInterfaces = abstractModuleTemplate.getTypeDeclaration().getImplemented().collect {
+            FullyQualifiedName.fromString(it)
+        }
+        Optional<FullyQualifiedName> maybeRegistratorType
+        if (abstractModuleTemplate.isRuntime()) {
+            maybeRegistratorType = Optional.of(FullyQualifiedName.fromString(abstractModuleTemplate.getRegistratorType()))
+        } else {
+            maybeRegistratorType = Optional.absent()
+        }
+
+        return toGeneratedObject(abstractFQN, copyright, header, classJavaDoc, implementedInterfaces,
+                abstractModuleTemplate.getModuleFields(), maybeRegistratorType, abstractModuleTemplate.getMethods(),
+                mbe.yangModuleQName
+        )
+    }
+
+    public GeneratedObject toGeneratedObject(FullyQualifiedName abstractFQN,
+                                             Optional<String> copyright,
+                                             Optional<String> header,
+                                             Optional<String> classJavaDoc,
+                                             List<FullyQualifiedName> implementedInterfaces,
+                                             List<ModuleField> moduleFields,
+                                             Optional<FullyQualifiedName> maybeRegistratorType,
+                                             List<Method> methods,
+                                             QName yangModuleQName) {
+        JavaFileInputBuilder b = new JavaFileInputBuilder()
+
+        Annotation moduleQNameAnnotation = Annotation.createModuleQNameANnotation(yangModuleQName)
+        b.addClassAnnotation(moduleQNameAnnotation)
+
+        b.setFqn(abstractFQN)
+        b.setTypeName(TypeName.absClassType)
+
+        b.setCopyright(copyright);
+        b.setHeader(header);
+        b.setClassJavaDoc(classJavaDoc);
+        implementedInterfaces.each { b.addImplementsFQN(it) }
+        if (classJavaDoc.isPresent()) {
+            b.addClassAnnotation("@${Description.canonicalName}(value=\"${classJavaDoc.get()}\")")
+        }
+
+        // add logger:
+        b.addToBody(getLogger(abstractFQN));
+
+        b.addToBody("//attributes start");
+
+        b.addToBody(moduleFields.collect { it.toString() }.join("\n"))
+
+        b.addToBody("//attributes end");
+
+
+        b.addToBody(getCommonFields(abstractFQN));
+
+
+        b.addToBody(getNewConstructor(abstractFQN))
+        b.addToBody(getCopyFromOldConstructor(abstractFQN))
+
+        b.addToBody(getRuntimeRegistratorCode(maybeRegistratorType))
+        b.addToBody(getValidationMethods(moduleFields))
+
+        b.addToBody(getCachesOfResolvedDependencies(moduleFields))
+        b.addToBody(getCachesOfResolvedIdentityRefs(moduleFields))
+        b.addToBody(getGetInstance(moduleFields))
+        b.addToBody(getReuseLogic(moduleFields, abstractFQN))
+        b.addToBody(getEqualsAndHashCode(abstractFQN))
+
+        b.addToBody(getMethods(methods))
+
+        return new GeneratedObjectBuilder(b.build()).toGeneratedObject()
+    }
+
+    private static String getMethods(List<Method> methods) {
+        String result = """
+            // getters and setters
+        """
+        result += methods.collect{it.toString()}.join("\n")
+        return result
+    }
+
+    private static String getEqualsAndHashCode(FullyQualifiedName abstractFQN) {
+        return """
+            @Override
+            public boolean equals(Object o) {
+                if (this == o) return true;
+                if (o == null || getClass() != o.getClass()) return false;
+                ${abstractFQN.typeName} that = (${abstractFQN.typeName}) o;
+                return identifier.equals(that.identifier);
+            }
+
+            @Override
+            public int hashCode() {
+                return identifier.hashCode();
+            }
+        """
+    }
+
+    private static String getReuseLogic(List<ModuleField> moduleFields, FullyQualifiedName abstractFQN) {
+        String result = """
+            public boolean canReuseInstance(${abstractFQN.typeName} oldModule){
+                // allow reusing of old instance if no parameters was changed
+                return isSame(oldModule);
+            }
+
+            public ${AutoCloseable.canonicalName} reuseInstance(${AutoCloseable.canonicalName} oldInstance){
+                // implement if instance reuse should be supported. Override canReuseInstance to change the criteria.
+                return oldInstance;
+            }
+            """
+        // isSame method that detects changed fields
+        result += """
+            public boolean isSame(${abstractFQN.typeName} other) {
+                if (other == null) {
+                    throw new IllegalArgumentException("Parameter 'other' is null");
+                }
+            """
+        // loop through fields, do deep equals on each field
+        result += moduleFields.collect { field ->
+            if (field.isListOfDependencies()) {
+                return """
+                    if (${field.name}Dependency.equals(other.${field.name}Dependency) == false) {
+                        return false;
+                    }
+                    for (int idx = 0; idx < ${field.name}Dependency.size(); idx++) {
+                        if (${field.name}Dependency.get(idx) != other.${field.name}Dependency.get(idx)) {
+                            return false;
+                        }
+                    }
+                """
+            } else if (field.isDependent()) {
+                return """
+                    if (${field.name}Dependency != other.${field.name}Dependency) { // reference to dependency must be same
+                        return false;
+                    }
+                """
+            } else {
+                return """
+                    if (java.util.Objects.deepEquals(${field.name}, other.${field.name}) == false) {
+                        return false;
+                    }
+                """
+            }
+        }.join("\n")
+
+
+        result += """
+                return true;
+            }
+            """
+
+        return result
+    }
+
+    private static String getGetInstance(List<ModuleField> moduleFields) {
+        String result = """
+            @Override
+            public final ${AutoCloseable.canonicalName} getInstance() {
+                if(instance==null) {
+            """
+        // create instance start
+
+        // loop through dependent fields, use dependency resolver to instantiate dependencies. Do it in loop in case field represents list of dependencies.
+        Map<ModuleField, String> resolveDependenciesMap = moduleFields.findAll {
+            it.isDependent()
+        }.collectEntries { ModuleField field ->
+            [field, field.isList() ?
+                    """
+                ${field.name}Dependency = new java.util.ArrayList<${field.dependency.sie.exportedOsgiClassName}>();
+                for(javax.management.ObjectName dep : ${field.name}) {
+                    ${field.name}Dependency.add(dependencyResolver.resolveInstance(${
+                        field.dependency.sie.exportedOsgiClassName
+                    }.class, dep, ${field.name}JmxAttribute));
+                }
+                """
+                    :
+                    """
+                ${field.name}Dependency = dependencyResolver.resolveInstance(${
+                        field.dependency.sie.exportedOsgiClassName
+                    }.class, ${field.name}, ${field.name}JmxAttribute);
+                """
+            ]
+        }
+        // wrap each field resolvation statement with if !=null when dependency is not mandatory
+        def wrapWithNullCheckClosure = {Map<ModuleField, String> map, predicate -> map.collect { ModuleField key, String value ->
+            predicate(key) ? """
+                if(${key.name}!=null) {
+                    ${value}
+                }
+                """ : value
+            }.join("\n")
+        }
+
+        result += wrapWithNullCheckClosure(resolveDependenciesMap, {ModuleField key ->
+            key.getDependency().isMandatory() == false} )
+
+        // add code to inject dependency resolver to fields that support it
+        Map<ModuleField, String> injectDepsMap = moduleFields.findAll { it.needsDepResolver }.collectEntries { field ->
+            if (field.isList()) {
+                return [field,"""
+                for(${field.genericInnerType} candidate : ${field.name}) {
+                    candidate.injectDependencyResolver(dependencyResolver);
+                }
+                """]
+            } else {
+                return [field, "${field.name}.injectDependencyResolver(dependencyResolver);"]
+            }
+        }
+
+        result += wrapWithNullCheckClosure(injectDepsMap, {true})
+
+        // identity refs need to be injected with dependencyResolver and base class
+        Map<ModuleField, String> resolveIdentityMap = moduleFields.findAll { it.isIdentityRef() }.collectEntries { IdentityRefModuleField field ->
+            [field,
+            "set${field.attributeName}(${field.name}.resolveIdentity(dependencyResolver, ${field.identityBaseClass}.class));"]
+        }
+
+        result += wrapWithNullCheckClosure(resolveIdentityMap, {true})
+
+        // create instance end: reuse and recreate logic
+        result += """
+                    if(oldInstance!=null && canReuseInstance(oldModule)) {
+                        instance = reuseInstance(oldInstance);
+                    } else {
+                        if(oldInstance!=null) {
+                            try {
+                                oldInstance.close();
+                            } catch(Exception e) {
+                                logger.error("An error occurred while closing old instance " + oldInstance, e);
+                            }
+                        }
+                        instance = createInstance();
+                        if (instance == null) {
+                            throw new IllegalStateException("Error in createInstance - null is not allowed as return value");
+                        }
+                    }
+                }
+                return instance;
+            }
+            public abstract ${AutoCloseable.canonicalName} createInstance();
+            """
+        return result
+    }
+
+    private static String getCommonFields(FullyQualifiedName abstractFQN) {
+        return """
+            private final ${abstractFQN.typeName} oldModule;
+            private final ${AutoCloseable.canonicalName} oldInstance;
+            private ${AutoCloseable.canonicalName} instance;
+            private final ${DependencyResolver.canonicalName} dependencyResolver;
+            private final ${ModuleIdentifier.canonicalName} identifier;
+            @Override
+            public ${ModuleIdentifier.canonicalName} getIdentifier() {
+                return identifier;
+            }
+            """
+    }
+
+    private static String getCachesOfResolvedIdentityRefs(List<ModuleField> moduleFields) {
+        return moduleFields.findAll { it.isIdentityRef() }.collect { IdentityRefModuleField field ->
+            "private ${field.identityClassType} ${field.identityClassName};"
+        }.join("\n")
+    }
+
+    private static String getCachesOfResolvedDependencies(List<ModuleField> moduleFields) {
+        return moduleFields.findAll { it.dependent }.collect { field ->
+            if (field.isList()) {
+                return """
+                    private java.util.List<${field.dependency.sie.exportedOsgiClassName}> ${
+                    field.name
+                }Dependency = new java.util.ArrayList<${field.dependency.sie.exportedOsgiClassName}>();
+                    protected final java.util.List<${field.dependency.sie.exportedOsgiClassName}> get${
+                    field.attributeName
+                }Dependency(){
+                        return ${field.name}Dependency;
+                    }
+                    """
+            } else {
+                return """
+                    private ${field.dependency.sie.exportedOsgiClassName} ${field.name}Dependency;
+                    protected final ${field.dependency.sie.exportedOsgiClassName} get${field.attributeName}Dependency(){
+                        return ${field.name}Dependency;
+                    }
+                    """
+            }
+        }.join("\n")
+    }
+
+    private static String getRuntimeRegistratorCode(Optional<FullyQualifiedName> maybeRegistratorType) {
+        if (maybeRegistratorType.isPresent()) {
+            String registratorType = maybeRegistratorType.get()
+
+            return """
+                private ${registratorType} rootRuntimeBeanRegistratorWrapper;
+
+                public ${registratorType} getRootRuntimeBeanRegistratorWrapper(){
+                    return rootRuntimeBeanRegistratorWrapper;
+                }
+
+                @Override
+                public void setRuntimeBeanRegistrator(${RootRuntimeBeanRegistrator.canonicalName} rootRuntimeRegistrator){
+                    this.rootRuntimeBeanRegistratorWrapper = new ${registratorType}(rootRuntimeRegistrator);
+                }
+                """
+        } else {
+            return ""
+        }
+    }
+
+    private static String getValidationMethods(List<ModuleField> moduleFields) {
+        String result = """
+            @Override
+            public void validate() {
+            """
+        // validate each mandatory dependency
+        List<String> lines = moduleFields.findAll{(it.dependent && it.dependency.mandatory)}.collect { field ->
+            if (field.isList()) {
+                return "" +
+                        "for(javax.management.ObjectName dep : ${field.name}) {\n" +
+                        "    dependencyResolver.validateDependency(${field.dependency.sie.fullyQualifiedName}.class, dep, ${field.name}JmxAttribute);\n" +
+                        "}\n"
+            } else {
+                return "dependencyResolver.validateDependency(${field.dependency.sie.fullyQualifiedName}.class, ${field.name}, ${field.name}JmxAttribute);"
+            }
+        }
+        result += lines.findAll { it.isEmpty() == false }.join("\n")
+        result += """
+                customValidation();
+            }
+
+            protected void customValidation(){
+            }
+        """
+        return result
+    }
+
+    private static String getLogger(FullyQualifiedName fqn) {
+        return "private static final ${Logger.canonicalName} logger = ${LoggerFactory.canonicalName}.getLogger(${fqn.toString()}.class);"
+    }
+
+    // assumes that each parameter name corresponds to an field in this class, constructs lines setting this.field = field;
+    private static String getConstructorStart(FullyQualifiedName fqn,
+                                              LinkedHashMap<String, String> parameters, String after) {
+        return "public ${fqn.typeName}(" +
+                parameters.collect { it.key + " " + it.value }.join(",") +
+                ") {\n" +
+                parameters.values().collect { "this.${it}=${it};\n" }.join() +
+                after +
+                "}\n"
+    }
+
+    private static String getNewConstructor(FullyQualifiedName abstractFQN) {
+        LinkedHashMap<String, String> parameters = [
+                (ModuleIdentifier.canonicalName): "identifier",
+                (DependencyResolver.canonicalName): "dependencyResolver"
+        ]
+        String setToNulls = ["oldInstance", "oldModule"].collect { "this.${it}=null;\n" }.join()
+        return getConstructorStart(abstractFQN, parameters, setToNulls)
+    }
+
+    private static String getCopyFromOldConstructor(FullyQualifiedName abstractFQN) {
+        LinkedHashMap<String, String> parameters = [
+                (ModuleIdentifier.canonicalName): "identifier",
+                (DependencyResolver.canonicalName): "dependencyResolver",
+                (abstractFQN.typeName): "oldModule",
+                (AutoCloseable.canonicalName): "oldInstance"
+        ]
+        return getConstructorStart(abstractFQN, parameters, "")
+    }
+}
diff --git a/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/gofactory/ConcreteModuleGeneratedObjectFactory.java b/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/gofactory/ConcreteModuleGeneratedObjectFactory.java
new file mode 100644 (file)
index 0000000..fbc507d
--- /dev/null
@@ -0,0 +1,101 @@
+package org.opendaylight.controller.config.yangjmxgenerator.plugin.gofactory;
+
+import com.google.common.base.Joiner;
+import com.google.common.base.Optional;
+import org.opendaylight.controller.config.api.DependencyResolver;
+import org.opendaylight.controller.config.api.ModuleIdentifier;
+import org.opendaylight.controller.config.yangjmxgenerator.ModuleMXBeanEntry;
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.java.FullyQualifiedName;
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.java.GeneratedObject;
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.java.GeneratedObjectBuilder;
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.java.JavaFileInputBuilder;
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.java.TypeName;
+
+import java.util.LinkedHashMap;
+
+public class ConcreteModuleGeneratedObjectFactory {
+
+    public GeneratedObject toGeneratedObject(ModuleMXBeanEntry mbe, Optional<String> copyright, Optional<String> header) {
+        FullyQualifiedName concreteFQN = new FullyQualifiedName(mbe.getPackageName(), mbe.getStubModuleName());
+        FullyQualifiedName abstractFQN = new FullyQualifiedName(mbe.getPackageName(), mbe.getAbstractModuleName());
+        Optional<String> classJavaDoc = Optional.fromNullable(mbe.getNullableDescription());
+        return toGeneratedObject(concreteFQN, abstractFQN, copyright, header, classJavaDoc);
+    }
+
+    GeneratedObject toGeneratedObject(FullyQualifiedName concreteFQN,
+                                             FullyQualifiedName abstractFQN,
+                                             Optional<String> copyright,
+                                             Optional<String> header,
+                                             Optional<String> classJavaDoc) {
+        // there are two constructors and two methods
+        JavaFileInputBuilder builder = new JavaFileInputBuilder();
+        builder.setTypeName(TypeName.classType);
+        builder.setFqn(concreteFQN);
+        builder.addExtendsFQN(abstractFQN);
+
+        builder.setCopyright(copyright);
+        builder.setHeader(header);
+        builder.setClassJavaDoc(classJavaDoc);
+
+        builder.addToBody(getNewCtor(concreteFQN));
+        builder.addToBody(getCopyCtor(concreteFQN));
+        builder.addToBody(getCustomValidationStub());
+        builder.addToBody(getCreateInstanceStub());
+
+        return new GeneratedObjectBuilder(builder.build()).toGeneratedObject();
+    }
+
+    private static String getNewCtor(FullyQualifiedName fqn) {
+        LinkedHashMap<String, String> parameters = new LinkedHashMap<String, String>(){
+            {
+                put(ModuleIdentifier.class.getCanonicalName(), "identifier");
+                put(DependencyResolver.class.getCanonicalName(), "dependencyResolver");
+            }
+        };
+        StringBuilder stringBuilder = getCtor(fqn, parameters);
+        return stringBuilder.toString();
+    }
+
+    private static StringBuilder getCtor(FullyQualifiedName fqn , LinkedHashMap<String, String> parameters) {
+        StringBuilder stringBuilder = new StringBuilder();
+        stringBuilder.append("public ").append(fqn.getTypeName()).append("(");
+        // parameters
+        stringBuilder.append(Joiner.on(", ").withKeyValueSeparator(" ").join(parameters));
+        stringBuilder.append(") {\n");
+        if (parameters.isEmpty() == false) {
+            stringBuilder.append("super(");
+            stringBuilder.append(Joiner.on(", ").join(parameters.values()));
+            stringBuilder.append(");\n");
+        }
+        stringBuilder.append("}");
+        return stringBuilder;
+    }
+
+    private static String getCopyCtor(final FullyQualifiedName fqn) {
+        LinkedHashMap<String, String> parameters = new LinkedHashMap<String, String>(){
+            {
+                put(ModuleIdentifier.class.getCanonicalName(), "identifier");
+                put(DependencyResolver.class.getCanonicalName(), "dependencyResolver");
+                put(fqn.toString(), "oldModule");
+                put(AutoCloseable.class.getCanonicalName(), "oldInstance");
+            }
+        };
+        StringBuilder stringBuilder = getCtor(fqn, parameters);
+        return stringBuilder.toString();
+    }
+
+    private static String getCustomValidationStub() {
+        return "@Override\n" +
+                "public void customValidation() {\n" +
+                "// add custom validation form module attributes here.\n" +
+                "}";
+    }
+
+    private static String getCreateInstanceStub() {
+        return "@Override\n" +
+                "public " + AutoCloseable.class.getCanonicalName() + " createInstance() {\n" +
+                "// TODO:implement\n" +
+                "throw new " + UnsupportedOperationException.class.getCanonicalName() + "();\n"+
+                "}";
+    }
+}
diff --git a/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/gofactory/GenericGeneratedObjectFactory.groovy b/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/gofactory/GenericGeneratedObjectFactory.groovy
new file mode 100644 (file)
index 0000000..6504aac
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.controller.config.yangjmxgenerator.plugin.gofactory
+
+import com.google.common.base.Optional
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.FtlTemplate
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.java.FullyQualifiedName
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.java.GeneratedObject
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.java.GeneratedObjectBuilder
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.java.JavaFileInputBuilder
+
+public class GenericGeneratedObjectFactory {
+
+    public GeneratedObject toGeneratedObject(FtlTemplate template, Optional<String> copyright) {
+        JavaFileInputBuilder b = new JavaFileInputBuilder();
+        b.setHeader(template.headerString)
+        b.setFqn(new FullyQualifiedName(template.packageName, template.typeDeclaration.name))
+        b.setClassJavaDoc(template.maybeJavadoc)
+        template.annotations.each { b.addClassAnnotation(it) }
+        // type declaration
+        template.typeDeclaration.extended.each { b.addExtendsFQN(FullyQualifiedName.fromString(it)) }
+        template.typeDeclaration.implemented.each { b.addImplementsFQN(FullyQualifiedName.fromString(it)) }
+        b.setCopyright(copyright);
+        b.setTypeName(template.typeDeclaration.toTypeName())
+        // fields
+        template.fields.each { b.addToBody(it.toString()) }
+        // constructors
+        template.constructors.each { b.addToBody(it.toString()) }
+        // methods
+        template.methods.each { b.addToBody(it.toString()) }
+
+        return new GeneratedObjectBuilder(b.build()).toGeneratedObject();
+    }
+}
diff --git a/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/java/FullyQualifiedName.java b/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/java/FullyQualifiedName.java
new file mode 100644 (file)
index 0000000..f72551a
--- /dev/null
@@ -0,0 +1,81 @@
+package org.opendaylight.controller.config.yangjmxgenerator.plugin.java;
+
+import java.io.File;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+public class FullyQualifiedName {
+
+    private final String packageName;
+    private final String typeName;
+
+    public FullyQualifiedName(String packageName, String typeName) {
+        this.packageName = checkNotNull(packageName);
+        this.typeName = checkNotNull(typeName);
+    }
+
+    public FullyQualifiedName(Class<?> clazz) {
+        this(clazz.getPackage().getName(), clazz.getSimpleName());
+    }
+
+    public static FullyQualifiedName fromString(String fqn) {
+        Matcher m = Pattern.compile("(.*)\\.([^\\.]+)$").matcher(fqn);
+        if (m.matches()) {
+            return new FullyQualifiedName(m.group(1), m.group(2));
+        } else {
+            return new FullyQualifiedName("", fqn);
+        }
+    }
+
+    public String getPackageName() {
+        return packageName;
+    }
+
+    public String getTypeName() {
+        return typeName;
+    }
+
+    public File toFile(File srcDirectory) {
+        String directory = packageName.replace(".", File.separator);
+        return new File(srcDirectory, directory + File.separator + typeName + ".java");
+    }
+
+
+    @Override
+    public String toString() {
+        if (packageName.isEmpty()){
+            return typeName;
+        }
+        return packageName + "." + typeName;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+
+        FullyQualifiedName that = (FullyQualifiedName) o;
+
+        if (!packageName.equals(that.packageName)) {
+            return false;
+        }
+        if (!typeName.equals(that.typeName)) {
+            return false;
+        }
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = packageName.hashCode();
+        result = 31 * result + typeName.hashCode();
+        return result;
+    }
+}
diff --git a/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/java/GeneratedObject.java b/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/java/GeneratedObject.java
new file mode 100644 (file)
index 0000000..4ad080c
--- /dev/null
@@ -0,0 +1,75 @@
+package org.opendaylight.controller.config.yangjmxgenerator.plugin.java;
+
+import com.google.common.base.Optional;
+import com.google.common.collect.Maps;
+import org.apache.commons.io.FileUtils;
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.util.StringUtil;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Map.Entry;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+public class GeneratedObject {
+
+    private final FullyQualifiedName fqn;
+    private final String content;
+
+    public GeneratedObject(FullyQualifiedName fqn, String content) {
+        this.fqn = checkNotNull(fqn);
+        this.content = StringUtil.formatJavaSource(checkNotNull(content));
+    }
+
+    public FullyQualifiedName getFQN(){
+        return fqn;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public Optional<Entry<FullyQualifiedName,File>> persist(File srcDirectory, boolean overwrite) throws IOException {
+        File dstFile = fqn.toFile(srcDirectory);
+        if (overwrite == true || dstFile.exists() == false) {
+            FileUtils.write(dstFile, content);
+            return Optional.of(Maps.immutableEntry(fqn, dstFile));
+        } else {
+            return Optional.absent();
+        }
+    }
+
+    public Optional<Entry<FullyQualifiedName,File>> persist(File srcDirectory) throws IOException {
+        return persist(srcDirectory, true);
+    }
+
+    @Override
+    public String toString() {
+        return getClass().getSimpleName() + "{" +
+                "fqn=" + fqn +
+                '}';
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+
+        GeneratedObject that = (GeneratedObject) o;
+
+        if (!fqn.equals(that.fqn)) {
+            return false;
+        }
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        return fqn.hashCode();
+    }
+}
diff --git a/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/java/GeneratedObjectBuilder.java b/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/java/GeneratedObjectBuilder.java
new file mode 100644 (file)
index 0000000..72819db
--- /dev/null
@@ -0,0 +1,68 @@
+package org.opendaylight.controller.config.yangjmxgenerator.plugin.java;
+
+import com.google.common.base.Optional;
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.util.StringUtil;
+
+import static org.opendaylight.controller.config.yangjmxgenerator.plugin.util.StringUtil.prefixAndJoin;
+
+public class GeneratedObjectBuilder {
+    private final JavaFileInput input;
+
+    public GeneratedObjectBuilder(JavaFileInput input) {
+        this.input = input;
+    }
+
+
+    public GeneratedObject toGeneratedObject() {
+        FullyQualifiedName fqn = input.getFQN();
+        StringBuilder content = new StringBuilder();
+
+
+        content.append(maybeAddComment(input.getCopyright()));
+        content.append(maybeAddComment(input.getHeader()));
+
+        if (input.getFQN().getPackageName().isEmpty() == false) {
+            content.append("package ");
+            content.append(input.getFQN().getPackageName());
+            content.append(";\n");
+        }
+        content.append(maybeAddComment(input.getClassJavaDoc(), true));
+
+        for (String classAnnotation : input.getClassAnnotations()) {
+            content.append(classAnnotation);
+            content.append("\n");
+        }
+
+        content.append("public ");
+        content.append(input.getType());
+        content.append(" ");
+        content.append(input.getFQN().getTypeName());
+        content.append(prefixAndJoin(input.getExtends(), "extends"));
+        content.append(prefixAndJoin(input.getImplements(), "implements"));
+        content.append(" {\n");
+
+        for (String method : input.getBodyElements()) {
+            content.append(method);
+            content.append("\n");
+        }
+
+        content.append("\n}\n");
+
+        return new GeneratedObject(fqn, content.toString());
+    }
+
+    private static String maybeAddComment(Optional<String> comment) {
+        return maybeAddComment(comment, false);
+    }
+
+    private static String maybeAddComment(Optional<String> comment, boolean isJavadoc) {
+
+        if (comment.isPresent()) {
+            String input = comment.get();
+            return StringUtil.writeComment(input, isJavadoc);
+        } else {
+            return "";
+        }
+    }
+
+}
diff --git a/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/java/JavaFileInput.java b/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/java/JavaFileInput.java
new file mode 100644 (file)
index 0000000..ba8537b
--- /dev/null
@@ -0,0 +1,27 @@
+package org.opendaylight.controller.config.yangjmxgenerator.plugin.java;
+
+import com.google.common.base.Optional;
+
+import java.util.List;
+
+public interface JavaFileInput {
+
+    FullyQualifiedName getFQN();
+
+    Optional<String> getCopyright();
+
+    Optional<String> getHeader();
+
+    TypeName getType();
+
+    Optional<String> getClassJavaDoc();
+
+    List<String> getClassAnnotations();
+
+    List<FullyQualifiedName> getExtends();
+
+    List<FullyQualifiedName> getImplements();
+
+    List<String> getBodyElements();
+
+}
diff --git a/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/java/JavaFileInputBuilder.java b/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/java/JavaFileInputBuilder.java
new file mode 100644 (file)
index 0000000..c739f57
--- /dev/null
@@ -0,0 +1,164 @@
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.controller.config.yangjmxgenerator.plugin.java;
+
+import com.google.common.base.Optional;
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.Annotation;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+public class JavaFileInputBuilder {
+
+    private Optional<String> copyright = Optional.absent(), header = Optional.absent(), classJavaDoc = Optional.absent();
+
+    private TypeName typeName = TypeName.classType;
+
+    private FullyQualifiedName fqn;
+
+    private final List<String> classAnnotations = new ArrayList<>();
+
+    private final List<FullyQualifiedName> extendsFQNs = new ArrayList<>();
+
+    private final List<FullyQualifiedName> implementsFQNs = new ArrayList<>();
+
+    private final List<String> bodyElements = new ArrayList<>();
+
+    public void addToBody(String element) {
+        bodyElements.add(element + "\n");
+    }
+
+    public void addClassAnnotation(Annotation annotation) {
+        addClassAnnotation(annotation.toString());
+    }
+
+    public void addClassAnnotation(String annotation) {
+        classAnnotations.add(checkNotNull(annotation));
+    }
+
+    public void addExtendsFQN(FullyQualifiedName fqn) {
+        extendsFQNs.add(fqn);
+    }
+
+    public void addImplementsFQN(FullyQualifiedName fqn) {
+        implementsFQNs.add(fqn);
+    }
+
+    public Optional<String> getCopyright() {
+        return copyright;
+    }
+
+    public void setCopyright(Optional<String> copyright) {
+        this.copyright = checkNotNull(copyright);
+    }
+
+    public Optional<String> getHeader() {
+        return header;
+    }
+
+    public void setHeader(Optional<String> header) {
+        this.header = checkNotNull(header);
+    }
+
+
+    public Optional<String> getClassJavaDoc() {
+        return classJavaDoc;
+    }
+
+    public void setClassJavaDoc(Optional<String> classJavaDoc) {
+        this.classJavaDoc = checkNotNull(classJavaDoc);
+    }
+
+
+    public FullyQualifiedName getFqn() {
+        return fqn;
+    }
+
+    public void setFqn(FullyQualifiedName fqn) {
+        this.fqn = fqn;
+    }
+
+    public List<FullyQualifiedName> getExtendsFQNs() {
+        return extendsFQNs;
+    }
+
+
+    public List<FullyQualifiedName> getImplementsFQNs() {
+        return implementsFQNs;
+    }
+
+
+    public TypeName getTypeName() {
+        return typeName;
+    }
+
+    public void setTypeName(TypeName typeName) {
+        this.typeName = typeName;
+    }
+
+
+    public JavaFileInput build() {
+        checkNotNull(copyright);
+        checkNotNull(header);
+        checkNotNull(classJavaDoc);
+        checkNotNull(typeName);
+        checkNotNull(fqn);
+
+        return new JavaFileInput() {
+
+            @Override
+            public FullyQualifiedName getFQN() {
+                return fqn;
+            }
+
+            @Override
+            public Optional<String> getCopyright() {
+                return copyright;
+            }
+
+            @Override
+            public Optional<String> getHeader() {
+                return header;
+            }
+
+            @Override
+            public Optional<String> getClassJavaDoc() {
+                return classJavaDoc;
+            }
+
+            @Override
+            public TypeName getType() {
+                return typeName;
+            }
+
+            @Override
+            public List<FullyQualifiedName> getExtends() {
+                return Collections.unmodifiableList(extendsFQNs);
+            }
+
+            @Override
+            public List<FullyQualifiedName> getImplements() {
+                return Collections.unmodifiableList(implementsFQNs);
+            }
+
+            @Override
+            public List<String> getClassAnnotations() {
+                return Collections.unmodifiableList(classAnnotations);
+            }
+
+            @Override
+            public List<String> getBodyElements() {
+                return Collections.unmodifiableList(bodyElements);
+            }
+        };
+    }
+}
diff --git a/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/java/TypeName.java b/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/java/TypeName.java
new file mode 100644 (file)
index 0000000..d6ed12d
--- /dev/null
@@ -0,0 +1,17 @@
+package org.opendaylight.controller.config.yangjmxgenerator.plugin.java;
+
+public enum TypeName {
+
+    classType("class"), interfaceType("interface"), enumType("enum"), absClassType("abstract class"), finalClassType("final class");
+
+    private final String value;
+
+    TypeName(String value) {
+        this.value = value;
+    }
+
+    @Override
+    public String toString() {
+        return value;
+    }
+}
diff --git a/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/util/StringUtil.java b/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/util/StringUtil.java
new file mode 100644 (file)
index 0000000..265aea1
--- /dev/null
@@ -0,0 +1,101 @@
+package org.opendaylight.controller.config.yangjmxgenerator.plugin.util;
+
+import com.google.common.base.Joiner;
+import com.google.common.base.Optional;
+import com.google.common.base.Splitter;
+import com.google.common.base.Strings;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.java.FullyQualifiedName;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.List;
+import java.util.regex.Pattern;
+
+public class StringUtil {
+    private static final Logger logger = LoggerFactory.getLogger(StringUtils.class);
+
+    /**
+     * @param list   of strings to be joined by ','
+     * @param prefix e.g. 'extends' or 'implements'
+     */
+    public static String prefixAndJoin(List<FullyQualifiedName> list, String prefix) {
+        if (list.isEmpty()) {
+            return "";
+        }
+        Joiner joiner = Joiner.on(",");
+        return " " + prefix + " " + joiner.join(list);
+    }
+
+    public static String addAsterixAtEachLineStart(String input) {
+        String s = Pattern.compile("^", Pattern.MULTILINE).matcher(input).replaceAll("* ");
+        // remove trailing spaces
+        s = Pattern.compile("\\s+$", Pattern.MULTILINE).matcher(s).replaceAll("");
+        s = ensureEndsWithSingleNewLine(s);
+        return s;
+    }
+
+    private static String ensureEndsWithSingleNewLine(String s) {
+        // .split Only trailing empty strings are skipped.
+        String[] split = s.split("\n");
+        s = Joiner.on("\n").join(split);
+        s = s + "\n";
+        return s;
+    }
+
+    public static String writeComment(String input, boolean isJavadoc) {
+        StringBuilder content = new StringBuilder();
+        content.append("/*");
+        if (isJavadoc) {
+            content.append("*");
+        }
+        content.append("\n");
+
+        content.append(addAsterixAtEachLineStart(input));
+        content.append("*/\n");
+        return content.toString();
+    }
+
+
+    public static Optional<String> loadCopyright() {
+        try (InputStream in = StringUtil.class.getResourceAsStream("/copyright.txt")) {
+            if (in != null) {
+                return Optional.of(IOUtils.toString(in));
+            }
+        } catch (IOException e) {
+            logger.warn("Cannot load copyright.txt", e);
+        }
+        return Optional.absent();
+    }
+
+    public static String formatJavaSource(String input) {
+        Iterable<String> split = Splitter.on("\n").trimResults().split(input);
+
+        int basicIndent = 4;
+        StringBuilder sb = new StringBuilder();
+        int intends = 0, empty = 0;
+        for (String line : split) {
+            intends -= StringUtils.countMatches(line, "}");
+            if (intends < 0) {
+                intends = 0;
+            }
+            if (line.isEmpty() == false) {
+                sb.append(Strings.repeat(" ", basicIndent * intends));
+                sb.append(line);
+                sb.append("\n");
+                empty = 0;
+            } else {
+                empty++; // one empty line is allowed
+                if (empty < 2) {
+                    sb.append("\n");
+                }
+            }
+            intends += StringUtils.countMatches(line, "{");
+        }
+        return ensureEndsWithSingleNewLine(sb.toString());
+    }
+
+}
diff --git a/opendaylight/config/yang-jmx-generator-plugin/src/main/resources/copyright.txt b/opendaylight/config/yang-jmx-generator-plugin/src/main/resources/copyright.txt
new file mode 100644 (file)
index 0000000..4a0c355
--- /dev/null
@@ -0,0 +1,5 @@
+Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+
+This program and the accompanying materials are made available under the
+terms of the Eclipse Public License v1.0 which accompanies this distribution,
+and is available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/opendaylight/config/yang-jmx-generator-plugin/src/main/resources/freeMarker/abstract_ftl_file.ftl b/opendaylight/config/yang-jmx-generator-plugin/src/main/resources/freeMarker/abstract_ftl_file.ftl
deleted file mode 100644 (file)
index 0c6bf83..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<@headerD header=header/>
-package ${packageName};
-
-<@javadocD object=javadoc/>
-<@annotationsD object=annotations/>
-<#-- class/interface -->
-<@typeDeclarationD object=typeDeclaration/>
-{
-<@constructorsD object=constructors>
-</@constructorsD>
-<@fieldsD object=fields/>
-
-<@methodsD object=methods/>
-}
diff --git a/opendaylight/config/yang-jmx-generator-plugin/src/main/resources/freeMarker/factory_abs_template.ftl b/opendaylight/config/yang-jmx-generator-plugin/src/main/resources/freeMarker/factory_abs_template.ftl
deleted file mode 100644 (file)
index b9bbf1f..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-<@headerD header=header/>
-package ${packageName};
-
-<@javadocD object=javadoc/>
-@org.opendaylight.yangtools.yang.binding.annotations.ModuleQName(namespace="${mbe.getYangModuleQName().getNamespace().toString()}",revision="${mbe.getYangModuleQName().getFormattedRevision()}",name="${mbe.getYangModuleQName().getLocalName()}")
-<@typeDeclarationD object=typeDeclaration/>
-{
-
-    public static final java.lang.String NAME = "${globallyUniqueName}";
-    private static final java.util.Set<Class<? extends ${abstractServiceInterfaceType}>> serviceIfcs;
-    <#if providedServices??>
-    static {
-        java.util.Set<Class<? extends ${abstractServiceInterfaceType}>> serviceIfcs2 = new java.util.HashSet<Class<? extends ${abstractServiceInterfaceType}>>();
-        <#list providedServices as refId>
-        serviceIfcs2.add(${refId});
-        </#list>
-        serviceIfcs = java.util.Collections.unmodifiableSet(serviceIfcs2);
-    }
-    </#if>
-
-    @Override
-    public final boolean isModuleImplementingServiceInterface(Class<? extends ${abstractServiceInterfaceType}> serviceInterface) {
-        for (Class<?> ifc: serviceIfcs) {
-            if (serviceInterface.isAssignableFrom(ifc)){
-                return true;
-            }
-        }
-        return false;
-    }
-
-    @Override
-    public java.util.Set<Class<? extends ${abstractServiceInterfaceType}>> getImplementedServiceIntefaces() {
-        return serviceIfcs;
-    }
-
-
-    @Override
-    public ${moduleType} createModule(String instanceName, ${dependencyResolverType} dependencyResolver, ${bundleContextType} bundleContext) {
-        return instantiateModule(instanceName, dependencyResolver, bundleContext);
-    }
-
-    @Override
-    public ${moduleType} createModule(String instanceName, ${dependencyResolverType} dependencyResolver, ${dynamicMBeanWithInstanceType} old, ${bundleContextType} bundleContext) throws Exception {
-        ${moduleInstanceType} oldModule = null;
-        try {
-            oldModule = (${moduleInstanceType}) old.getModule();
-        } catch(Exception e) {
-            return handleChangedClass(old);
-        }
-        ${moduleInstanceType} module = instantiateModule(instanceName, dependencyResolver, oldModule, old.getInstance(), bundleContext);
-
-        <#list fields as attr>
-        module.set${attr.name}(oldModule.get${attr.name}());
-        </#list>
-
-        return module;
-    }
-
-    public ${moduleInstanceType} instantiateModule(String instanceName, ${dependencyResolverType} dependencyResolver, ${moduleInstanceType} oldModule, ${instanceType} oldInstance, ${bundleContextType} bundleContext) {
-        return new ${moduleInstanceType}(new ${moduleNameType}(NAME, instanceName), dependencyResolver, oldModule, oldInstance);
-    }
-
-    public ${moduleInstanceType} instantiateModule(String instanceName, ${dependencyResolverType} dependencyResolver, ${bundleContextType} bundleContext) {
-        return new ${moduleInstanceType}(new ${moduleNameType}(NAME, instanceName), dependencyResolver);
-    }
-
-    @Override
-    public final String getImplementationName() {
-        return NAME;
-    }
-
-
-    public ${moduleInstanceType} handleChangedClass(${dynamicMBeanWithInstanceType} old) throws Exception {
-        throw new UnsupportedOperationException("Class reloading is not supported");
-    }
-
-    @Override
-    public java.util.Set<${moduleInstanceType}> getDefaultModules(org.opendaylight.controller.config.api.DependencyResolverFactory dependencyResolverFactory, ${bundleContextType} bundleContext) {
-        return new java.util.HashSet<${moduleInstanceType}>();
-    }
-
-}
diff --git a/opendaylight/config/yang-jmx-generator-plugin/src/main/resources/freeMarker/module_abs_template_new.ftl b/opendaylight/config/yang-jmx-generator-plugin/src/main/resources/freeMarker/module_abs_template_new.ftl
deleted file mode 100644 (file)
index 848fcfe..0000000
+++ /dev/null
@@ -1,223 +0,0 @@
-<@headerD header=header/>
-package ${packageName};
-
-<@javadocD object=javadoc/>
-<@annotationsD object=annotations/>
-<@typeDeclarationD object=typeDeclaration/>
-{
-    // attributes
-    <@moduleFieldsD moduleFields=moduleFields/>
-    //attributes end
-
-    private static final ${loggerType} logger = ${loggerFactoryType}.getLogger(${typeDeclaration.name}.class);
-
-    private final ${typeDeclaration.name} oldModule;
-    private final ${instanceType} oldInstance;
-    private ${instanceType} instance;
-    private final ${dependencyResolverType} dependencyResolver;
-    private final ${moduleNameType} identifier;
-    <#if runtime=true>
-    private ${registratorType} rootRuntimeBeanRegistratorWrapper;
-    </#if>
-
-    public ${typeDeclaration.name}(${moduleNameType} identifier, ${dependencyResolverType} dependencyResolver) {
-        this.identifier = identifier;
-        this.dependencyResolver = dependencyResolver;
-        this.oldInstance = null;
-        this.oldModule = null;
-    }
-
-    public ${typeDeclaration.name}(${moduleNameType} identifier, ${dependencyResolverType} dependencyResolver, ${typeDeclaration.name} oldModule, ${instanceType} oldInstance) {
-        this.identifier = identifier;
-        this.dependencyResolver = dependencyResolver;
-        this.oldInstance = oldInstance;
-        this.oldModule = oldModule;
-    }
-
-    // getters and setters exported into MXBean
-    <@methodsD object=methods/>
-
-    <#if runtime=true>
-    public ${registratorType} getRootRuntimeBeanRegistratorWrapper(){
-        return rootRuntimeBeanRegistratorWrapper;
-    }
-
-    @Override
-    public void setRuntimeBeanRegistrator(${rootRuntimeRegistratorType} rootRuntimeRegistrator){
-        this.rootRuntimeBeanRegistratorWrapper = new ${registratorType}(rootRuntimeRegistrator);
-    }
-    </#if>
-
-    @Override
-    public void validate(){
-    <#list moduleFields as field>
-        <#if field.dependent==true && field.dependency.mandatory==true>
-        <#if field.type?starts_with("java.util.List")>
-        for(javax.management.ObjectName dep : ${field.name}) {
-            dependencyResolver.validateDependency(${field.dependency.sie.fullyQualifiedName}.class, dep, ${field.name}JmxAttribute);
-        }
-        <#else>
-        dependencyResolver.validateDependency(${field.dependency.sie.fullyQualifiedName}.class, ${field.name}, ${field.name}JmxAttribute);
-        </#if>
-        </#if>
-    </#list>
-        customValidation();
-    }
-
-    protected void customValidation(){
-
-    }
-
-    // caches of resolved dependencies
-    <#list moduleFields as field>
-    <#if field.dependent==true>
-        <#if field.type?starts_with("java.util.List")>
-        private java.util.List<${field.dependency.sie.exportedOsgiClassName}> ${field.name}Dependency = new java.util.ArrayList<${field.dependency.sie.exportedOsgiClassName}>();
-        protected final java.util.List<${field.dependency.sie.exportedOsgiClassName}> get${field.attributeName}Dependency(){
-            return ${field.name}Dependency;
-        }
-        <#else>
-        private ${field.dependency.sie.exportedOsgiClassName} ${field.name}Dependency;
-        protected final ${field.dependency.sie.exportedOsgiClassName} get${field.attributeName}Dependency(){
-            return ${field.name}Dependency;
-        }
-        </#if>
-    </#if>
-    </#list>
-
-    // caches of resolved IdentityRefs
-    <#list moduleFields as field>
-    <#if field.identityRef==true>
-        private ${field.identityClassType} ${field.identityClassName};
-    </#if>
-    </#list>
-
-    @Override
-    public final ${instanceType} getInstance(){
-        if(instance==null) {
-
-            <#list moduleFields as field>
-                <#if field.dependent==true>
-                    <#if field.dependency.mandatory==false>
-                        if(${field.name}!=null) {
-                    </#if>
-
-                    <#if field.type?starts_with("java.util.List")>
-            ${field.name}Dependency = new java.util.ArrayList<${field.dependency.sie.exportedOsgiClassName}>();
-            for(javax.management.ObjectName dep : ${field.name}) {
-                ${field.name}Dependency.add(dependencyResolver.resolveInstance(${field.dependency.sie.exportedOsgiClassName}.class, dep, ${field.name}JmxAttribute));
-            }
-                    <#else>
-            ${field.name}Dependency = dependencyResolver.resolveInstance(${field.dependency.sie.exportedOsgiClassName}.class, ${field.name}, ${field.name}JmxAttribute);
-                    </#if>
-
-                    <#if field.dependency.mandatory==false>
-                        }
-                    </#if>
-                </#if>
-
-                <#if field.needsDepResolver==true>
-            if(${field.name} != null) {
-                    <#if field.type?starts_with("java.util.List")>
-                for(${field.type?substring(field.type?index_of("<") + 1, field.type?index_of(">"))} candidate : ${field.name}) {
-                    candidate.injectDependencyResolver(dependencyResolver);
-                }
-                    <#else>
-                ${field.name}.injectDependencyResolver(dependencyResolver);
-                    </#if>
-            }
-                </#if>
-
-                <#if field.identityRef==true>
-            if(${field.name} != null) {
-                set${field.attributeName}(${field.name}.resolveIdentity(dependencyResolver, ${field.identityBaseClass}.class));
-            }
-                </#if>
-            </#list>
-
-            if(oldInstance!=null && canReuseInstance(oldModule)) {
-                instance = reuseInstance(oldInstance);
-            } else {
-                if(oldInstance!=null) {
-                    try {
-                        oldInstance.close();
-                    } catch(Exception e) {
-                        logger.error("An error occurred while closing old instance " + oldInstance, e);
-                    }
-                }
-                instance = createInstance();
-            }
-        }
-        return instance;
-    }
-
-    @Override
-    public ${moduleNameType} getIdentifier() {
-        return identifier;
-    }
-
-    public boolean canReuseInstance(${typeDeclaration.name} oldModule){
-        // allow reusing of old instance if no parameters was changed
-        return isSame(oldModule);
-    }
-
-    public ${instanceType} reuseInstance(${instanceType} oldInstance){
-        // implement if instance reuse should be supported. Override canReuseInstance to change the criteria.
-        return oldInstance;
-    }
-
-    public abstract ${instanceType} createInstance();
-
-    public boolean isSame(${typeDeclaration.name} other) {
-        if (other == null) {
-            throw new IllegalArgumentException("Parameter 'other' is null");
-        }
-        <#list moduleFields as field>
-        <#if field.dependent==true && field.listOfDependencies == false>
-        if (${field.name}Dependency != other.${field.name}Dependency) { // reference to dependency must be same
-            return false;
-        }
-        <#elseif field.listOfDependencies>
-        if (${field.name}Dependency.equals(other.${field.name}Dependency) == false) {
-            return false;
-        }
-        for (int idx = 0; idx < ${field.name}Dependency.size(); idx++) {
-            if (${field.name}Dependency.get(idx) != other.${field.name}Dependency.get(idx)) {
-                return false;
-            }
-        }
-        <#else>
-        if (${field.name} == null) {
-            if (other.${field.name} != null) {
-                return false;
-            }
-        } else if
-            <#if field.array == false>
-                (${field.name}.equals(other.${field.name}) == false)
-            <#else>
-                (java.util.Arrays.equals(${field.name},other.${field.name}) == false)
-            </#if>
-                 {
-            return false;
-        }
-        </#if>
-        </#list>
-
-        return true;
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) return true;
-        if (o == null || getClass() != o.getClass()) return false;
-
-        ${typeDeclaration.name} that = (${typeDeclaration.name}) o;
-
-        return identifier.equals(that.identifier);
-    }
-
-    @Override
-    public int hashCode() {
-        return identifier.hashCode();
-    }
-}
diff --git a/opendaylight/config/yang-jmx-generator-plugin/src/main/resources/freeMarker/module_stub_template.ftl b/opendaylight/config/yang-jmx-generator-plugin/src/main/resources/freeMarker/module_stub_template.ftl
deleted file mode 100644 (file)
index 2db505e..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-<@headerD header=header/>
-package ${packageName};
-
-<@javadocD object=javadoc/>
-<@typeDeclarationD object=typeDeclaration/> {
-
-    public ${typeDeclaration.name}(${moduleNameType} identifier, ${dependencyResolverType} dependencyResolver) {
-        super(identifier, dependencyResolver);
-    }
-
-    public ${typeDeclaration.name}(${moduleNameType} identifier, ${dependencyResolverType} dependencyResolver,
-            ${typeDeclaration.name} oldModule, ${instanceType} oldInstance) {
-
-        super(identifier, dependencyResolver, oldModule, oldInstance);
-    }
-
-    @Override
-    protected void customValidation(){
-        // Add custom validation for module attributes here.
-    }
-
-    @Override
-    public ${instanceType} createInstance() {
-        //TODO:implement
-        <@unimplementedExceptionD/>
-    }
-}
index 9e2f334dac6eb22f647030ae8b6e776c9e6295d1..1dde94b48244fed6b8ca5867b874280f3aa425ee 100644 (file)
@@ -7,12 +7,12 @@
  */
 package org.opendaylight.controller.config.yangjmxgenerator.plugin;
 
-import java.io.File;
-
 import org.apache.commons.io.FileUtils;
 import org.junit.Before;
 import org.opendaylight.controller.config.yangjmxgenerator.AbstractYangTest;
 
+import java.io.File;
+
 public abstract class AbstractGeneratorTest extends AbstractYangTest {
     private static final File GENERATOR_OUTPUT_PATH_ROOT = new File(
             "target/testgen");
index 3ef406694a6b12b7825f860e0130fbf20a1075dd..0fd9720f79be60b0abab01dd60c651e1ed865ba6 100644 (file)
@@ -119,7 +119,7 @@ public class JMXGeneratorTest extends AbstractGeneratorTest {
                         + JMXGenerator.NAMESPACE_TO_PACKAGE_DIVIDER
                         + PackageTranslatorTest.EXPECTED_PACKAGE_PREFIX);
         map.put(JMXGenerator.MODULE_FACTORY_FILE_BOOLEAN, "false");
-        jmxGenerator = new JMXGenerator(new FreeMarkerCodeWriterImpl());
+        jmxGenerator = new JMXGenerator(new CodeWriter());
         jmxGenerator.setAdditionalConfig(map);
         File targetDir = new File(generatorOutputPath, "target");
         generatedResourcesDir = new File(targetDir, "generated-resources");
index 48d5b30eb282731bc7adabe46427384352272bf4..3c01cc00d46ef40bb0191560fcdc7cccf23f2697 100644 (file)
@@ -34,7 +34,7 @@ public class ModuleMXBeanEntryTemplatesTest {
         assertNotNull(template);
     }
 
-    private ModuleMXBeanEntry mockMbe(String packageName) {
+    public static ModuleMXBeanEntry mockMbe(String packageName) {
         ModuleMXBeanEntry mbe = mock(ModuleMXBeanEntry.class);
         Map<String, AttributeIfc> a = Maps.newHashMap();
         JavaAttribute attr = mockJavaAttr();
@@ -52,7 +52,7 @@ public class ModuleMXBeanEntryTemplatesTest {
         return mbe;
     }
 
-    private JavaAttribute mockJavaAttr() {
+    public static JavaAttribute mockJavaAttr() {
         JavaAttribute attr = mock(JavaAttribute.class);
         Type typeA = mock(Type.class);
         doReturn("package").when(typeA).getName();
index b12ee5023f237f8243468e6f4d0f665ba8380a63..f21765e536f9f5a4405323a8a048e0b561fd59d9 100644 (file)
@@ -7,26 +7,21 @@
  */
 package org.opendaylight.controller.config.yangjmxgenerator.plugin;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.not;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertThat;
-import static org.junit.internal.matchers.StringContains.containsString;
-
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Map;
-
 import org.junit.Test;
 import org.opendaylight.controller.config.yangjmxgenerator.RuntimeBeanEntry;
 import org.opendaylight.controller.config.yangjmxgenerator.RuntimeRegistratorTest;
-import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.FtlFilePersister;
 import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.FtlTemplate;
 import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.RuntimeRegistratorFtlTemplate;
-import org.opendaylight.controller.config.yangjmxgenerator.plugin.util.FormattingUtil;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Map;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertThat;
 
 public class RuntimeRegistratorFtlFileTest extends RuntimeRegistratorTest {
-    private final FtlFilePersister ftlFilePersister = new FtlFilePersister();
 
     @Test
     public void testRootWithoutAnything() {
@@ -40,9 +35,7 @@ public class RuntimeRegistratorFtlFileTest extends RuntimeRegistratorTest {
         FtlTemplate rootFtlFile = createdFtls.get(rootRegistratorName);
         assertNotNull(rootFtlFile);
 
-        Map<FtlTemplate, String> serializedFtls = ftlFilePersister
-                .serializeFtls(createdFtls.values());
-        assertThat(serializedFtls.size(), is(2));
+        assertThat(createdFtls.values().size(), is(2));
     }
 
     @Test
@@ -55,29 +48,6 @@ public class RuntimeRegistratorFtlFileTest extends RuntimeRegistratorTest {
 
         Map<String, FtlTemplate> createdFtls = RuntimeRegistratorFtlTemplate
                 .create(rootRB);
-        Map<FtlTemplate, String> serializedFtls = ftlFilePersister
-                .serializeFtls(createdFtls.values());
-        assertThat(serializedFtls.size(), is(4));
-
-        assertThat(
-                findRegistrationOutput(createdFtls, grandChildRB,
-                        serializedFtls), not(containsString(" register(")));
-
-        FtlTemplate registrator = createdFtls.get(RuntimeRegistratorFtlTemplate
-                .getJavaNameOfRuntimeRegistrator(rootRB));
-        FormattingUtil.cleanUpEmptyLinesAndIndent(serializedFtls
-                .get(registrator));
-
+        assertThat(createdFtls.values().size(), is(4));
     }
-
-    private String findRegistrationOutput(Map<String, FtlTemplate> createdFtls,
-            RuntimeBeanEntry rb, Map<FtlTemplate, String> serializedFtls) {
-        RuntimeRegistratorFtlTemplate rbFtlFile = (RuntimeRegistratorFtlTemplate) createdFtls
-                .get(RuntimeRegistratorFtlTemplate.getJavaNameOfRuntimeRegistration(rb.getJavaNamePrefix()));
-        assertNotNull(rbFtlFile);
-        String unformatted = serializedFtls.get(rbFtlFile);
-        assertNotNull(unformatted);
-        return FormattingUtil.cleanUpEmptyLinesAndIndent(unformatted);
-    }
-
 }
diff --git a/opendaylight/config/yang-jmx-generator-plugin/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/FtlFilePersisterTest.java b/opendaylight/config/yang-jmx-generator-plugin/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/FtlFilePersisterTest.java
deleted file mode 100644 (file)
index 2582a60..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl;
-
-import static org.junit.Assert.assertEquals;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.mockito.MockitoAnnotations;
-import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.Field;
-import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.MethodDeclaration;
-import org.opendaylight.controller.config.yangjmxgenerator.plugin.util.FormattingUtil;
-
-import com.google.common.collect.Lists;
-
-public class FtlFilePersisterTest {
-    private final FtlFilePersister tested = new FtlFilePersister();
-
-    @Before
-    public void setUp() {
-        MockitoAnnotations.initMocks(this);
-    }
-
-    @Test
-    public void testGeneralInterface() {
-        String packageName = "pa.cka.ge";
-        String name = "GeneralClassImpl";
-        List<String> extendedInterfaces = Arrays.asList("List", "Set");
-        List<MethodDeclaration> methods = new ArrayList<>();
-        methods.add(new MethodDeclaration("String", "executeOperation",
-                Collections.<Field> emptyList()));
-
-        List<String> mods = Lists.newArrayList();
-        List<String> mods2 = Lists.newArrayList("final");
-        methods.add(new MethodDeclaration("String", "executeOperation", Arrays
-                .asList(new Field(mods, "int", "param1"), new Field(mods2, "long", "param2"))));
-
-        GeneralInterfaceTemplate generalInterface = new GeneralInterfaceTemplate(
-                null, packageName, name, extendedInterfaces, methods);
-
-        Map<FtlTemplate, String> abstractFtlFileStringMap = tested
-                .serializeFtls(Arrays.asList(generalInterface));
-        String content = FormattingUtil
-                .cleanUpEmptyLinesAndIndent(abstractFtlFileStringMap.get(generalInterface));
-
-        // skip header
-        content = content.substring(content.indexOf("package"));
-
-        String expected = "package pa.cka.ge;\n"
-                + "/**\n"
-                + "*\n"
-                + "*/\n"
-                + "public interface GeneralClassImpl extends List, Set\n{\n"
-                + "public String executeOperation();\n"
-                + "public String executeOperation(int param1, final long param2);\n"
-                + "}\n";
-
-        assertEquals(expected, content);
-    }
-
-}
diff --git a/opendaylight/config/yang-jmx-generator-plugin/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/module/AbstractGeneratedObjectTest.java b/opendaylight/config/yang-jmx-generator-plugin/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/module/AbstractGeneratedObjectTest.java
new file mode 100644 (file)
index 0000000..957fbf5
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.controller.config.yangjmxgenerator.plugin.module;
+
+import net.sourceforge.pmd.lang.Parser;
+import net.sourceforge.pmd.lang.ParserOptions;
+import net.sourceforge.pmd.lang.ast.Node;
+import net.sourceforge.pmd.lang.java.Java17Parser;
+import org.apache.commons.io.FileUtils;
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.AbstractGeneratorTest;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+public class AbstractGeneratedObjectTest extends AbstractGeneratorTest {
+    private static final Logger logger = LoggerFactory.getLogger(AbstractGeneratedObjectTest.class);
+
+    protected void assertHasMethodNamed(Node c, String method) {
+        assertTrue(c.hasDescendantMatchingXPath("//MethodDeclaration[MethodDeclarator[@Image='" +
+                method +
+                "']]"));
+    }
+
+    protected Node parse(File dstFile) throws IOException {
+        assertNotNull(dstFile);
+        logger.debug(FileUtils.readFileToString(dstFile));
+        Parser parser = new Java17Parser(new ParserOptions());
+        return parser.parse(dstFile.toString(), new FileReader(dstFile));
+    }
+
+
+}
diff --git a/opendaylight/config/yang-jmx-generator-plugin/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/module/abs/AbsModuleGeneratedObjectFactoryTest.java b/opendaylight/config/yang-jmx-generator-plugin/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/module/abs/AbsModuleGeneratedObjectFactoryTest.java
new file mode 100644 (file)
index 0000000..164d1a5
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.controller.config.yangjmxgenerator.plugin.module.abs;
+
+import com.google.common.base.Optional;
+import org.junit.Test;
+import org.opendaylight.controller.config.yangjmxgenerator.ModuleMXBeanEntry;
+import org.opendaylight.controller.config.yangjmxgenerator.ServiceInterfaceEntry;
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.gofactory.AbsModuleGeneratedObjectFactory;
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.java.FullyQualifiedName;
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.java.GeneratedObject;
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.module.AbstractGeneratedObjectTest;
+import org.opendaylight.yangtools.yang.common.QName;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Map;
+import java.util.Map.Entry;
+
+public class AbsModuleGeneratedObjectFactoryTest extends AbstractGeneratedObjectTest {
+
+    @Test
+    public void test() throws IOException {
+        Map<QName,ServiceInterfaceEntry> serviceInterfaceEntryMap = loadThreadsServiceInterfaceEntries("packages.sis");
+        Map<String, ModuleMXBeanEntry> namesToMBEs = loadThreadsJava(serviceInterfaceEntryMap, "packages.pack2");
+        ModuleMXBeanEntry dynamicThreadPool = namesToMBEs.get(THREADPOOL_DYNAMIC_MXB_NAME);
+        parseGeneratedFile(dynamicThreadPool);
+
+    }
+
+    private void parseGeneratedFile(ModuleMXBeanEntry moduleMXBeanEntry) throws IOException {
+        Optional<String> copyright = Optional.absent();
+        GeneratedObject generatedObject = new AbsModuleGeneratedObjectFactory().toGeneratedObject(moduleMXBeanEntry, copyright);
+        Entry<FullyQualifiedName,File> entry = generatedObject.persist(generatorOutputPath).get();
+
+        File dstFile = entry.getValue();
+        parse(dstFile);
+    }
+}
diff --git a/opendaylight/config/yang-jmx-generator-plugin/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/module/concrete/ConcreteModuleGeneratedObjectFactoryTest.java b/opendaylight/config/yang-jmx-generator-plugin/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/module/concrete/ConcreteModuleGeneratedObjectFactoryTest.java
new file mode 100644 (file)
index 0000000..519b0ed
--- /dev/null
@@ -0,0 +1,52 @@
+package org.opendaylight.controller.config.yangjmxgenerator.plugin.module.concrete;
+
+import com.google.common.base.Optional;
+import net.sourceforge.pmd.lang.ast.Node;
+import net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceDeclaration;
+import net.sourceforge.pmd.lang.java.ast.ASTCompilationUnit;
+import org.junit.Test;
+import org.opendaylight.controller.config.yangjmxgenerator.ModuleMXBeanEntry;
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.gofactory.ConcreteModuleGeneratedObjectFactory;
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.java.FullyQualifiedName;
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.java.GeneratedObject;
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.module.AbstractGeneratedObjectTest;
+
+import java.io.File;
+import java.util.Map.Entry;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+
+public class ConcreteModuleGeneratedObjectFactoryTest extends AbstractGeneratedObjectTest {
+
+    @Test
+    public void test() throws Exception {
+        FullyQualifiedName fqn = new FullyQualifiedName("foo.bar", "Baz");
+        FullyQualifiedName abstractFQN = new FullyQualifiedName("foo.bar", "AbstractBaz");
+        String nullableDescription = null;
+
+        ModuleMXBeanEntry moduleMXBeanEntry = mockModuleMXBeanEntry(fqn, abstractFQN, nullableDescription);
+        Optional<String> copyright = Optional.absent();
+        Optional<String> header = Optional.absent();
+        GeneratedObject go = new ConcreteModuleGeneratedObjectFactory().toGeneratedObject(moduleMXBeanEntry, copyright, header);
+        Entry<FullyQualifiedName, File> entry = go.persist(generatorOutputPath).get();
+
+        File dstFile = entry.getValue();
+        Node c = parse(dstFile);
+        assertEquals(fqn.getPackageName(), ((ASTCompilationUnit) c).getPackageDeclaration().getPackageNameImage());
+        assertEquals(fqn.getTypeName(), c.getFirstDescendantOfType(ASTClassOrInterfaceDeclaration.class).getImage());
+        assertHasMethodNamed(c, "customValidation");
+        assertHasMethodNamed(c, "createInstance");
+    }
+
+    static ModuleMXBeanEntry mockModuleMXBeanEntry(FullyQualifiedName fqn, FullyQualifiedName abstractFQN, String nullableDescription) {
+        ModuleMXBeanEntry mock = mock(ModuleMXBeanEntry.class);
+        assertEquals(fqn.getPackageName(), abstractFQN.getPackageName());
+        doReturn(fqn.getPackageName()).when(mock).getPackageName();
+        doReturn(fqn.getTypeName()).when(mock).getStubModuleName();
+        doReturn(nullableDescription).when(mock).getNullableDescription();
+        doReturn(abstractFQN.getTypeName()).when(mock).getAbstractModuleName();
+        return mock;
+    }
+}
diff --git a/opendaylight/config/yang-jmx-generator-plugin/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/util/FormattingUtil.java b/opendaylight/config/yang-jmx-generator-plugin/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/util/FormattingUtil.java
deleted file mode 100644 (file)
index e62cb7c..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.config.yangjmxgenerator.plugin.util;
-
-import java.util.Scanner;
-
-public class FormattingUtil {
-
-    public static String cleanUpEmptyLinesAndIndent(String input) {
-        StringBuffer output = new StringBuffer();
-        Scanner scanner = new Scanner(input);
-        while (scanner.hasNextLine()) {
-            String line = scanner.nextLine();
-            line = line.replaceAll("\t", " ");
-            while (line.contains("  ")) {
-                line = line.replaceAll("  ", " ");
-            }
-            line = line.trim();
-            if (line.length() > 0) {
-                output.append(line);
-                output.append("\n");
-            }
-        }
-
-        return output.toString();
-    }
-}
diff --git a/opendaylight/config/yang-jmx-generator-plugin/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/util/StringUtilTest.java b/opendaylight/config/yang-jmx-generator-plugin/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/util/StringUtilTest.java
new file mode 100644 (file)
index 0000000..b0217a4
--- /dev/null
@@ -0,0 +1,60 @@
+package org.opendaylight.controller.config.yangjmxgenerator.plugin.util;
+
+import org.junit.Test;
+import org.opendaylight.controller.config.yangjmxgenerator.plugin.java.FullyQualifiedName;
+
+import java.io.IOException;
+
+import static java.util.Arrays.asList;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+public class StringUtilTest {
+    @Test
+    public void testPrefixAndJoin() {
+        assertEquals(" extends p1.Foo,Bar", StringUtil.prefixAndJoin(asList(
+                new FullyQualifiedName("p1", "Foo"), new FullyQualifiedName("", "Bar")), "extends"));
+    }
+
+    @Test
+    public void testAddAsterixAtEachLineStart() {
+        String input = "foo   \nbar";
+        String expectedOutput = "* foo\n* bar\n";
+        assertEquals(expectedOutput, StringUtil.addAsterixAtEachLineStart(input));
+    }
+
+    @Test
+    public void testCopyright() throws IOException {
+        assertTrue(StringUtil.loadCopyright().isPresent());
+    }
+
+    @Test
+    public void testFormatting() {
+        {
+        String input = "  \tpack;\n" +
+                "class Bar{ \n" +
+                " method() {\n" +
+                "  body\n" +
+                "}\n" +
+                "  }";
+        String expected = "pack;\n" +
+                "class Bar{\n" +
+                "    method() {\n" +
+                "        body\n" +
+                "    }\n" +
+                "}\n";
+        assertEquals(expected, StringUtil.formatJavaSource(input));
+        }
+        {
+            String input = "{\n" +
+                    "bar\n" +
+                    "}\n" +
+                    "\n\nbaz\n\n\n\n";
+            String expected = "{\n" +
+                    "    bar\n" +
+                    "}\n\n" +
+                    "baz\n";
+            assertEquals(expected, StringUtil.formatJavaSource(input));
+        }
+    }
+}
index 1100b3543748cc89b7f26d4d521b7bf09712286f..76d97703af3722142bf361db63960fac77364d3d 100644 (file)
@@ -7,25 +7,29 @@
  */
 package org.opendaylight.controller.config.yangjmxgenerator;
 
-import static junit.framework.Assert.assertNotNull;
-import static junit.framework.Assert.format;
-
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
+import com.google.common.base.Preconditions;
+import com.google.common.collect.Sets;
+import org.junit.Assert;
 import org.junit.Before;
 import org.opendaylight.controller.config.yangjmxgenerator.plugin.util.YangModelSearchUtils;
+import org.opendaylight.yangtools.sal.binding.yang.types.TypeProviderImpl;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode;
 import org.opendaylight.yangtools.yang.model.api.Module;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.parser.impl.YangParserImpl;
 
-import com.google.common.base.Preconditions;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import static junit.framework.Assert.assertNotNull;
+import static junit.framework.Assert.format;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
 
 public abstract class AbstractYangTest {
     protected SchemaContext context;
@@ -35,6 +39,14 @@ public abstract class AbstractYangTest {
             threadsJavaModule, bgpListenerJavaModule, ietfInetTypesModule,
             jmxModule, jmxImplModule, testFilesModule, testFiles1Module;
 
+    public static final String EVENTBUS_MXB_NAME = "eventbus";
+    public static final String ASYNC_EVENTBUS_MXB_NAME = "async-eventbus";
+    public static final String THREADFACTORY_NAMING_MXB_NAME = "threadfactory-naming";
+    public static final String THREADPOOL_DYNAMIC_MXB_NAME = "threadpool-dynamic";
+    public static final String THREADPOOL_REGISTRY_IMPL_NAME = "threadpool-registry-impl";
+
+    public static final String BGP_LISTENER_IMPL_MXB_NAME = "bgp-listener-impl";
+
     @Before
     public void loadYangFiles() throws Exception {
         List<InputStream> yangISs = new ArrayList<>();
@@ -97,4 +109,22 @@ public abstract class AbstractYangTest {
         }
         return result;
     }
+
+    protected Map<QName, ServiceInterfaceEntry>  loadThreadsServiceInterfaceEntries(String packageName) {
+        Map<IdentitySchemaNode, ServiceInterfaceEntry> identitiesToSIs = new HashMap<>();
+        return ServiceInterfaceEntry.create(threadsModule, packageName,identitiesToSIs);
+    }
+
+    protected Map<String /* identity local name */, ModuleMXBeanEntry> loadThreadsJava(Map<QName, ServiceInterfaceEntry> modulesToSIEs, String packageName) {
+        Map<String /* identity local name */, ModuleMXBeanEntry> namesToMBEs = ModuleMXBeanEntry
+                .create(threadsJavaModule, modulesToSIEs, context, new TypeProviderWrapper(new TypeProviderImpl
+                        (context)), packageName);
+        Assert.assertNotNull(namesToMBEs);
+        Set<String> expectedMXBeanNames = Sets.newHashSet(EVENTBUS_MXB_NAME,
+                ASYNC_EVENTBUS_MXB_NAME, THREADFACTORY_NAMING_MXB_NAME,
+                THREADPOOL_DYNAMIC_MXB_NAME, THREADPOOL_REGISTRY_IMPL_NAME);
+        assertThat(namesToMBEs.keySet(), is(expectedMXBeanNames));
+        return namesToMBEs;
+    }
+
 }
index 8ca2bb5bc98247198a405fe8cb75bd42561f642e..dd44246867abb9af1e51bfe1bc5dbd8ea8c63f91 100644 (file)
@@ -8,7 +8,6 @@
 package org.opendaylight.controller.config.yangjmxgenerator;
 
 import com.google.common.collect.Sets;
-import java.util.HashMap;
 import org.junit.Before;
 import org.junit.Test;
 import org.opendaylight.controller.config.yangjmxgenerator.attribute.AttributeIfc;
@@ -36,6 +35,7 @@ import java.text.SimpleDateFormat;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
@@ -52,13 +52,6 @@ import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
 
 public class ModuleMXBeanEntryTest extends AbstractYangTest {
-    public static final String EVENTBUS_MXB_NAME = "eventbus";
-    public static final String ASYNC_EVENTBUS_MXB_NAME = "async-eventbus";
-    public static final String THREADFACTORY_NAMING_MXB_NAME = "threadfactory-naming";
-    public static final String THREADPOOL_DYNAMIC_MXB_NAME = "threadpool-dynamic";
-    public static final String THREADPOOL_REGISTRY_IMPL_NAME = "threadpool-registry-impl";
-
-    public static final String BGP_LISTENER_IMPL_MXB_NAME = "bgp-listener-impl";
 
     public static final String PACKAGE_NAME = "pack2";
 
@@ -82,23 +75,15 @@ public class ModuleMXBeanEntryTest extends AbstractYangTest {
 
     protected Map<QName, ServiceInterfaceEntry> modulesToSIEs;
 
-    protected Map<String /* identity local name */, ModuleMXBeanEntry> loadThreadsJava() {
-        Map<String /* identity local name */, ModuleMXBeanEntry> namesToMBEs = ModuleMXBeanEntry
-                .create(threadsJavaModule, modulesToSIEs, context, new TypeProviderWrapper(new TypeProviderImpl
-                        (context)), PACKAGE_NAME);
-        assertNotNull(namesToMBEs);
-        Set<String> expectedMXBeanNames = Sets.newHashSet(EVENTBUS_MXB_NAME,
-                ASYNC_EVENTBUS_MXB_NAME, THREADFACTORY_NAMING_MXB_NAME,
-                THREADPOOL_DYNAMIC_MXB_NAME, THREADPOOL_REGISTRY_IMPL_NAME);
-        assertThat(namesToMBEs.keySet(), is(expectedMXBeanNames));
-        return namesToMBEs;
-    }
 
     @Before
     public void setUp() {
-        Map<IdentitySchemaNode, ServiceInterfaceEntry> identitiesToSIs = new HashMap<>();
-        modulesToSIEs = ServiceInterfaceEntry.create(threadsModule,
-                "packages.sis",identitiesToSIs);
+        modulesToSIEs = loadThreadsServiceInterfaceEntries("packages.sis");
+    }
+
+
+    protected Map<String /* identity local name */, ModuleMXBeanEntry> loadThreadsJava() {
+        return loadThreadsJava(modulesToSIEs, PACKAGE_NAME);
     }
 
     @Test
index 0b4fc8b1b534209f112faeacdd564c12ecc089ad..a4306c15c4cdd3401591b7fc99b269117828f71d 100644 (file)
@@ -22,5 +22,9 @@
             <artifactId>maven-plugin-api</artifactId>
             <version>3.0.5</version>
         </dependency>
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+        </dependency>
     </dependencies>
 </project>
\ No newline at end of file
index dbb9ddb363fb168ed820d06c30c1444f4db3b719..f2a56f2b1bfbe2a1e1066a90f3ef16ba6afef660 100644 (file)
@@ -7,18 +7,14 @@
  */
 package org.opendaylight.controller.config.yang.test.plugin;
 
+import org.apache.commons.io.FileUtils;
 import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
 
-import java.io.BufferedReader;
 import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
 import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
+import java.util.regex.Pattern;
 
 /**
  * Add implementation code from stub.txt
@@ -45,55 +41,25 @@ public class ProcessSources extends AbstractMojo{
         if (!sourceDirectory.exists()) {
             super.getLog().error("Source directory does not exists " + sourceDirectory.getPath());
         }
-        String header = "";
-        try {
-            header = Util.loadHeader();
-        } catch (IOException e) {
-           super.getLog().error("Header.txt not found.");
-        }
+
         File[] sourceFiles = sourceDirectory.listFiles();
         for (File sourceFile: sourceFiles) {
             if(sourceFile.getName().endsWith("Module.java") || sourceFile.getName().endsWith("ModuleFactory.java")) {
                 File stubFile = new File(sourceFile.getPath().replace(".java", "Stub.txt"));
-                String stubLines = null;
-                try {
-                    if (stubFile.exists()) {
-                        stubLines = Util.loadStubFile(stubFile.getPath());
-                    }
-
-                    InputStream javaIn = new FileInputStream(sourceFile.getPath());
-                    BufferedReader javaBuf = new BufferedReader(new InputStreamReader(javaIn));
-                    StringBuffer output = new StringBuffer();
-                    String line = javaBuf.readLine();
-                    boolean writeLine = false;
-                    while ((line = javaBuf.readLine()) != null) {
-                        if(!writeLine && line.contains("*/")) {
-                            line = header;
-                            writeLine = true;
-                        } else {
-                            if (line.contains("TODO")) {
-                                writeLine = false;
-                            } else {
-                                if (stubLines != null && line.contains("throw new")) {
-                                    line = stubLines.toString();
-                                    writeLine = true;
-                                }
-                            }
-                        }
-                        if(writeLine) {
-                            output.append(line).append(System.lineSeparator());
-                        }
+                if (stubFile.exists()) {
+                    try {
+                        rewrite(sourceFile, FileUtils.readFileToString(stubFile));
+                    } catch (IOException e) {
+                        getLog().error("Error while reading/writing to files.", e);
                     }
-                    javaBuf.close();
-
-                    OutputStream javaOut = new FileOutputStream(sourceFile.getPath());
-                    javaOut.write(output.toString().getBytes());
-                    javaOut.close();
-                } catch (IOException e) {
-                    getLog().error("Error while reading/writing to files.", e);
                 }
-
             }
         }
     }
+
+    private static void rewrite(File sourceFile, String replaceTODOWith) throws IOException {
+        String source = FileUtils.readFileToString(sourceFile);
+        String target = Pattern.compile("^.*TODO.*\n.*throw new java.lang.UnsupportedOperationException.*$", Pattern.MULTILINE).matcher(source).replaceFirst(replaceTODOWith);
+        FileUtils.write(sourceFile, target);
+    }
 }
index 16a41d9adb65c5786039bc3d7cf4615cfcfcc2e8..136733cbff138fcc292746baa9ccd152a3348683 100644 (file)
@@ -8,12 +8,7 @@
 
 package org.opendaylight.controller.config.yang.test.plugin;
 
-import java.io.BufferedReader;
 import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
 import java.util.regex.Matcher;
 
 public class Util {
@@ -22,29 +17,4 @@ public class Util {
         path = path.replace(".", Matcher.quoteReplacement(File.separator));
         return path;
     }
-
-    public static String loadHeader() throws IOException {
-        StringBuffer header = new StringBuffer();
-        InputStream headIn = Util.class.getClassLoader().getResourceAsStream("Header.txt");
-        BufferedReader headBuf = new BufferedReader(new InputStreamReader(headIn));
-        String line = null;
-        while ((line = headBuf.readLine()) != null) {
-            header.append(line).append(System.lineSeparator());
-        }
-        headBuf.close();
-        return header.toString();
-    }
-
-    public static String loadStubFile(String fileName) throws IOException {
-        InputStream stubIn = new FileInputStream(fileName);
-        BufferedReader stubBuf = new BufferedReader(new InputStreamReader(stubIn));
-
-        StringBuffer stubLines = new StringBuffer();
-        String stubLine = null;
-        while ((stubLine = stubBuf.readLine()) != null) {
-            stubLines.append(stubLine).append(System.lineSeparator());
-        }
-        stubBuf.close();
-        return stubLines.toString();
-    }
 }
index 3e75d00943dec03e12074ebc0c5aff04bdfa46a5..ecce3e33fc6feca62fcb180ae3bf42230fabfff2 100644 (file)
                 <groupId>org.opendaylight.yangtools</groupId>
                 <artifactId>yang-maven-plugin</artifactId>
             </plugin>
+
             <plugin>
                 <groupId>org.opendaylight.controller</groupId>
                 <artifactId>yang-test-plugin</artifactId>
                     <execution>
                         <goals>
                             <goal>delete-sources</goal>
+
                             <goal>process-sources</goal>
                         </goals>
                     </execution>
index c64f824b150f07c6f2179a6b8ab65909d9774454..07d7438a00b9758ccd28ee10b70f2059b37f77a8 100644 (file)
@@ -1,32 +1,23 @@
 /*
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-package org.opendaylight.controller.config.yang.test.impl;
-
-/**
+* Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
 *
+* This program and the accompanying materials are made available under the
+* terms of the Eclipse Public License v1.0 which accompanies this distribution,
+* and is available at http://www.eclipse.org/legal/epl-v10.html
 */
-public final class DepTestImplModule extends org.opendaylight.controller.config.yang.test.impl.AbstractDepTestImplModule
- {
-
+package org.opendaylight.controller.config.yang.test.impl;
+public class DepTestImplModule extends org.opendaylight.controller.config.yang.test.impl.AbstractDepTestImplModule {
     public DepTestImplModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
         super(identifier, dependencyResolver);
     }
 
-    public DepTestImplModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver,
-            DepTestImplModule oldModule, java.lang.AutoCloseable oldInstance) {
-
+    public DepTestImplModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver, org.opendaylight.controller.config.yang.test.impl.DepTestImplModule oldModule, java.lang.AutoCloseable oldInstance) {
         super(identifier, dependencyResolver, oldModule, oldInstance);
     }
 
     @Override
-    protected void customValidation(){
-        // Add custom validation for module attributes here.
+    public void customValidation() {
+        // add custom validation form module attributes here.
     }
 
     @Override
@@ -38,4 +29,5 @@ public final class DepTestImplModule extends org.opendaylight.controller.config.
         };
 
     }
+
 }
index c26c29ed60636f94b8dc73405cbaf7ecc948aa6b..849dd1464d1f5f756f0e82edc31ddad1adfe5746 100644 (file)
@@ -1,18 +1,20 @@
 /*
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-package org.opendaylight.controller.config.yang.test.impl;
-
-/**
+* Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
 *
+* This program and the accompanying materials are made available under the
+* terms of the Eclipse Public License v1.0 which accompanies this distribution,
+* and is available at http://www.eclipse.org/legal/epl-v10.html
 */
-public class DepTestImplModuleFactory extends org.opendaylight.controller.config.yang.test.impl.AbstractDepTestImplModuleFactory
-{
-
+/*
+* Generated file
+*
+* Generated from: yang module name: config-test-impl yang module local name: impl-dep
+* Generated by: org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator
+* Generated at: Mon Mar 17 14:04:38 CET 2014
+*
+* Do not modify this file unless it is present under src/main directory
+*/
+package org.opendaylight.controller.config.yang.test.impl;
+public class DepTestImplModuleFactory extends org.opendaylight.controller.config.yang.test.impl.AbstractDepTestImplModuleFactory {
 
 }
index 398bba99bde6b3923028f9e20d88582a33c96454..a5b7f55df382b4b403404f168a32bfd04c8a1976 100644 (file)
@@ -1,32 +1,23 @@
 /*
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-package org.opendaylight.controller.config.yang.test.impl;
-
-/**
+* Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
 *
+* This program and the accompanying materials are made available under the
+* terms of the Eclipse Public License v1.0 which accompanies this distribution,
+* and is available at http://www.eclipse.org/legal/epl-v10.html
 */
-public final class IdentityTestModule extends org.opendaylight.controller.config.yang.test.impl.AbstractIdentityTestModule
- {
-
+package org.opendaylight.controller.config.yang.test.impl;
+public class IdentityTestModule extends org.opendaylight.controller.config.yang.test.impl.AbstractIdentityTestModule {
     public IdentityTestModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
         super(identifier, dependencyResolver);
     }
 
-    public IdentityTestModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver,
-            IdentityTestModule oldModule, java.lang.AutoCloseable oldInstance) {
-
+    public IdentityTestModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver, org.opendaylight.controller.config.yang.test.impl.IdentityTestModule oldModule, java.lang.AutoCloseable oldInstance) {
         super(identifier, dependencyResolver, oldModule, oldInstance);
     }
 
     @Override
-    protected void customValidation(){
-        // Add custom validation for module attributes here.
+    public void customValidation() {
+        // add custom validation form module attributes here.
     }
 
     @Override
@@ -49,4 +40,5 @@ public final class IdentityTestModule extends org.opendaylight.controller.config
         };
 
     }
+
 }
index 9de3e0bb7449fb770082e3aa0cdabebdb35f8266..5560b6ec3f2f12504e86a8fd005d6ccff3bf90c9 100644 (file)
@@ -1,18 +1,20 @@
 /*
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-package org.opendaylight.controller.config.yang.test.impl;
-
-/**
+* Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
 *
+* This program and the accompanying materials are made available under the
+* terms of the Eclipse Public License v1.0 which accompanies this distribution,
+* and is available at http://www.eclipse.org/legal/epl-v10.html
 */
-public class IdentityTestModuleFactory extends org.opendaylight.controller.config.yang.test.impl.AbstractIdentityTestModuleFactory
-{
-
+/*
+* Generated file
+*
+* Generated from: yang module name: config-test-impl yang module local name: impl-identity-test
+* Generated by: org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator
+* Generated at: Mon Mar 17 14:04:38 CET 2014
+*
+* Do not modify this file unless it is present under src/main directory
+*/
+package org.opendaylight.controller.config.yang.test.impl;
+public class IdentityTestModuleFactory extends org.opendaylight.controller.config.yang.test.impl.AbstractIdentityTestModuleFactory {
 
 }
index 3594ee03538f4f2bb097f319cba13a679bc39960..ecbf4aba33c436b9354f4c4abe0a674de258745c 100644 (file)
@@ -1,32 +1,23 @@
 /*
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-package org.opendaylight.controller.config.yang.test.impl;
-
-/**
+* Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
 *
+* This program and the accompanying materials are made available under the
+* terms of the Eclipse Public License v1.0 which accompanies this distribution,
+* and is available at http://www.eclipse.org/legal/epl-v10.html
 */
-public final class NetconfTestImplModule extends org.opendaylight.controller.config.yang.test.impl.AbstractNetconfTestImplModule
- {
-
+package org.opendaylight.controller.config.yang.test.impl;
+public class NetconfTestImplModule extends org.opendaylight.controller.config.yang.test.impl.AbstractNetconfTestImplModule {
     public NetconfTestImplModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
         super(identifier, dependencyResolver);
     }
 
-    public NetconfTestImplModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver,
-            NetconfTestImplModule oldModule, java.lang.AutoCloseable oldInstance) {
-
+    public NetconfTestImplModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver, org.opendaylight.controller.config.yang.test.impl.NetconfTestImplModule oldModule, java.lang.AutoCloseable oldInstance) {
         super(identifier, dependencyResolver, oldModule, oldInstance);
     }
 
     @Override
-    protected void customValidation(){
-        // Add custom validation for module attributes here.
+    public void customValidation() {
+        // add custom validation form module attributes here.
     }
 
     @Override
@@ -34,4 +25,5 @@ public final class NetconfTestImplModule extends org.opendaylight.controller.con
 return NetconfTestImplModuleUtil.registerRuntimeBeans(this);
 
     }
+
 }
index accc1db76e72cf5292a8ece54cc31fb71644ead4..b857c6211d6f787ddd539b0eed08a90054a0ba2d 100644 (file)
@@ -1,18 +1,20 @@
 /*
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-package org.opendaylight.controller.config.yang.test.impl;
-
-/**
+* Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
 *
+* This program and the accompanying materials are made available under the
+* terms of the Eclipse Public License v1.0 which accompanies this distribution,
+* and is available at http://www.eclipse.org/legal/epl-v10.html
 */
-public class NetconfTestImplModuleFactory extends org.opendaylight.controller.config.yang.test.impl.AbstractNetconfTestImplModuleFactory
-{
-
+/*
+* Generated file
+*
+* Generated from: yang module name: config-test-impl yang module local name: impl-netconf
+* Generated by: org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator
+* Generated at: Mon Mar 17 14:04:38 CET 2014
+*
+* Do not modify this file unless it is present under src/main directory
+*/
+package org.opendaylight.controller.config.yang.test.impl;
+public class NetconfTestImplModuleFactory extends org.opendaylight.controller.config.yang.test.impl.AbstractNetconfTestImplModuleFactory {
 
 }
index 9ba1db4eedc7b690499704ff6da29cb7275438d5..9132407356e8b4c52ab23610079d1d189e029c8b 100644 (file)
@@ -1,32 +1,23 @@
 /*
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-package org.opendaylight.controller.config.yang.test.impl;
-
-/**
+* Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
 *
+* This program and the accompanying materials are made available under the
+* terms of the Eclipse Public License v1.0 which accompanies this distribution,
+* and is available at http://www.eclipse.org/legal/epl-v10.html
 */
-public final class TestImplModule extends org.opendaylight.controller.config.yang.test.impl.AbstractTestImplModule
- {
-
+package org.opendaylight.controller.config.yang.test.impl;
+public class TestImplModule extends org.opendaylight.controller.config.yang.test.impl.AbstractTestImplModule {
     public TestImplModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
         super(identifier, dependencyResolver);
     }
 
-    public TestImplModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver,
-            TestImplModule oldModule, java.lang.AutoCloseable oldInstance) {
-
+    public TestImplModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver, org.opendaylight.controller.config.yang.test.impl.TestImplModule oldModule, java.lang.AutoCloseable oldInstance) {
         super(identifier, dependencyResolver, oldModule, oldInstance);
     }
 
     @Override
-    protected void customValidation(){
-        // Add custom validation for module attributes here.
+    public void customValidation() {
+        // add custom validation form module attributes here.
     }
 
     @Override
@@ -38,4 +29,5 @@ public final class TestImplModule extends org.opendaylight.controller.config.yan
         };
 
     }
+
 }
index a6ce734f96ac83fe14c31d24b4b7e1e1b2094c5c..ae0ef6acf4841971ba1df575810a46d5e25840a5 100644 (file)
@@ -1,18 +1,20 @@
 /*
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-package org.opendaylight.controller.config.yang.test.impl;
-
-/**
+* Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
 *
+* This program and the accompanying materials are made available under the
+* terms of the Eclipse Public License v1.0 which accompanies this distribution,
+* and is available at http://www.eclipse.org/legal/epl-v10.html
 */
-public class TestImplModuleFactory extends org.opendaylight.controller.config.yang.test.impl.AbstractTestImplModuleFactory
-{
-
+/*
+* Generated file
+*
+* Generated from: yang module name: config-test-impl yang module local name: impl
+* Generated by: org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator
+* Generated at: Mon Mar 17 14:04:38 CET 2014
+*
+* Do not modify this file unless it is present under src/main directory
+*/
+package org.opendaylight.controller.config.yang.test.impl;
+public class TestImplModuleFactory extends org.opendaylight.controller.config.yang.test.impl.AbstractTestImplModuleFactory {
 
 }
index 776fb7a0f6816b7de10b41b087739a71f482bbd9..291fbdd4a783a7772e91bca874e3534a9df434fb 100644 (file)
                     <groupId>org.opendaylight.controller.thirdparty</groupId>
                     <artifactId>ganymed</artifactId>
                 </dependency>
+                <dependency>
+                    <groupId>org.opendaylight.controller.thirdparty</groupId>
+                    <artifactId>nagasena</artifactId>
+                </dependency>
+                <dependency>
+                    <groupId>org.opendaylight.controller.thirdparty</groupId>
+                    <artifactId>nagasena-rta</artifactId>
+                </dependency>
                 <dependency>
                     <groupId>org.zeromq</groupId>
                     <artifactId>jeromq</artifactId>
index 631f1118c5d756d5daa2760ad1e22a6ea2200a6c..43ea9f1621c285ed6a88136f2d46e195fa5287bc 100644 (file)
@@ -52,7 +52,7 @@
         <module>sal-rest-connector</module>
         <module>sal-netconf-connector</module>
 
-        
+
         <module>inventory-manager</module>
         <module>statistics-manager</module>
         <module>topology-manager</module>
@@ -67,7 +67,7 @@
         <module>sal-remoterpc-connector/implementation</module>
         <!--module>clustered-data-store/implementation</module>
         -->
-        
+
     </modules>
 
 
             <dependency>
                 <groupId>org.opendaylight.yangtools</groupId>
                 <artifactId>binding-generator-impl</artifactId>
-               <version>${yangtools.version}</version>
+                <version>${yangtools.version}</version>
             </dependency>
             <dependency>
                 <groupId>org.opendaylight.yangtools</groupId>
                 <artifactId>yang-parser-impl</artifactId>
-               <version>${yangtools.version}</version>
+                <version>${yangtools.version}</version>
             </dependency>
-
             <!-- Testing Dependencies -->
             <dependency>
                 <groupId>org.mockito</groupId>
diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/RuntimeCodeHelper.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/RuntimeCodeHelper.java
new file mode 100644 (file)
index 0000000..ea8b6c0
--- /dev/null
@@ -0,0 +1,157 @@
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.controller.sal.binding.codegen;
+
+import com.google.common.base.Objects;
+import java.lang.reflect.Field;
+import java.util.Map;
+import org.eclipse.xtext.xbase.lib.Exceptions;
+import org.opendaylight.controller.sal.binding.codegen.RuntimeCodeSpecification;
+import org.opendaylight.yangtools.yang.binding.BaseIdentity;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.binding.RpcService;
+
+@SuppressWarnings("all")
+public class RuntimeCodeHelper {
+  /**
+   * Helper method to return delegate from ManagedDirectedProxy with use of reflection.
+   *
+   * Note: This method uses reflection, but access to delegate field should be
+   * avoided and called only if neccessary.
+   */
+  public static <T extends RpcService> T getDelegate(final RpcService proxy) {
+    try {
+      Class<? extends RpcService> _class = proxy.getClass();
+      final Field field = _class.getField(RuntimeCodeSpecification.DELEGATE_FIELD);
+      boolean _equals = Objects.equal(field, null);
+      if (_equals) {
+        UnsupportedOperationException _unsupportedOperationException = new UnsupportedOperationException("Unable to get delegate from proxy");
+        throw _unsupportedOperationException;
+      }
+      try {
+        Object _get = field.get(proxy);
+        return ((T) _get);
+      } catch (Throwable _e) {
+        throw Exceptions.sneakyThrow(_e);
+      }
+    } catch (Throwable _e_1) {
+      throw Exceptions.sneakyThrow(_e_1);
+    }
+  }
+
+  /**
+   * Helper method to set delegate to ManagedDirectedProxy with use of reflection.
+   *
+   * Note: This method uses reflection, but setting delegate field should not occur too much
+   * to introduce any significant performance hits.
+   */
+  public static void setDelegate(final RpcService proxy, final RpcService delegate) {
+    try {
+      Class<? extends RpcService> _class = proxy.getClass();
+      final Field field = _class.getField(RuntimeCodeSpecification.DELEGATE_FIELD);
+      boolean _equals = Objects.equal(field, null);
+      if (_equals) {
+        UnsupportedOperationException _unsupportedOperationException = new UnsupportedOperationException("Unable to set delegate to proxy");
+        throw _unsupportedOperationException;
+      }
+      boolean _or = false;
+      boolean _equals_1 = Objects.equal(delegate, null);
+      if (_equals_1) {
+        _or = true;
+      } else {
+        Class<? extends Object> _type = field.getType();
+        Class<? extends RpcService> _class_1 = delegate.getClass();
+        boolean _isAssignableFrom = _type.isAssignableFrom(_class_1);
+        _or = (_equals_1 || _isAssignableFrom);
+      }
+      if (_or) {
+        field.set(proxy, delegate);
+      } else {
+        IllegalArgumentException _illegalArgumentException = new IllegalArgumentException("delegate class is not assignable to proxy");
+        throw _illegalArgumentException;
+      }
+    } catch (Throwable _e) {
+      throw Exceptions.sneakyThrow(_e);
+    }
+  }
+
+  /**
+   * Helper method to set delegate to ManagedDirectedProxy with use of reflection.
+   *
+   * Note: This method uses reflection, but setting delegate field should not occur too much
+   * to introduce any significant performance hits.
+   */
+  public static void setDelegate(final Object proxy, final Object delegate) {
+    try {
+      Class<? extends Object> _class = proxy.getClass();
+      final Field field = _class.getField(RuntimeCodeSpecification.DELEGATE_FIELD);
+      boolean _equals = Objects.equal(field, null);
+      if (_equals) {
+        UnsupportedOperationException _unsupportedOperationException = new UnsupportedOperationException("Unable to set delegate to proxy");
+        throw _unsupportedOperationException;
+      }
+      boolean _or = false;
+      boolean _equals_1 = Objects.equal(delegate, null);
+      if (_equals_1) {
+        _or = true;
+      } else {
+        Class<? extends Object> _type = field.getType();
+        Class<? extends Object> _class_1 = delegate.getClass();
+        boolean _isAssignableFrom = _type.isAssignableFrom(_class_1);
+        _or = (_equals_1 || _isAssignableFrom);
+      }
+      if (_or) {
+        field.set(proxy, delegate);
+      } else {
+        IllegalArgumentException _illegalArgumentException = new IllegalArgumentException("delegate class is not assignable to proxy");
+        throw _illegalArgumentException;
+      }
+    } catch (Throwable _e) {
+      throw Exceptions.sneakyThrow(_e);
+    }
+  }
+
+  public static Map<InstanceIdentifier<? extends Object>,? extends RpcService> getRoutingTable(final RpcService target, final Class<? extends BaseIdentity> tableClass) {
+    try {
+      Class<? extends RpcService> _class = target.getClass();
+      String _routingTableField = RuntimeCodeSpecification.getRoutingTableField(tableClass);
+      final Field field = _class.getField(_routingTableField);
+      boolean _equals = Objects.equal(field, null);
+      if (_equals) {
+        UnsupportedOperationException _unsupportedOperationException = new UnsupportedOperationException(
+          "Unable to get routing table. Table field does not exists");
+        throw _unsupportedOperationException;
+      }
+      try {
+        Object _get = field.get(target);
+        return ((Map<InstanceIdentifier<? extends Object>,? extends RpcService>) _get);
+      } catch (Throwable _e) {
+        throw Exceptions.sneakyThrow(_e);
+      }
+    } catch (Throwable _e_1) {
+      throw Exceptions.sneakyThrow(_e_1);
+    }
+  }
+
+  public static void setRoutingTable(final RpcService target, final Class<? extends BaseIdentity> tableClass, final Map<InstanceIdentifier<? extends Object>,? extends RpcService> routingTable) {
+    try {
+      Class<? extends RpcService> _class = target.getClass();
+      String _routingTableField = RuntimeCodeSpecification.getRoutingTableField(tableClass);
+      final Field field = _class.getField(_routingTableField);
+      boolean _equals = Objects.equal(field, null);
+      if (_equals) {
+        UnsupportedOperationException _unsupportedOperationException = new UnsupportedOperationException(
+          "Unable to set routing table. Table field does not exists");
+        throw _unsupportedOperationException;
+      }
+      field.set(target, routingTable);
+    } catch (Throwable _e) {
+      throw Exceptions.sneakyThrow(_e);
+    }
+  }
+}
\ No newline at end of file
diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/RuntimeCodeHelper.xtend b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/RuntimeCodeHelper.xtend
deleted file mode 100644 (file)
index dff0d21..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.sal.binding.codegen
-
-import java.util.Map
-
-import org.opendaylight.yangtools.yang.binding.BaseIdentity
-import org.opendaylight.yangtools.yang.binding.RpcService
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier
-
-import static extension org.opendaylight.controller.sal.binding.codegen.RuntimeCodeSpecification.*
-
-class RuntimeCodeHelper {
-    /**
-     * Helper method to return delegate from ManagedDirectedProxy with use of reflection.
-     * 
-     * Note: This method uses reflection, but access to delegate field should be 
-     * avoided and called only if neccessary.
-     * 
-     */
-    public static def <T extends RpcService> getDelegate(RpcService proxy) {
-        val field = proxy.class.getField(DELEGATE_FIELD)
-        if (field == null) throw new UnsupportedOperationException("Unable to get delegate from proxy");
-        return field.get(proxy) as T
-    }
-
-    /**
-     * Helper method to set delegate to ManagedDirectedProxy with use of reflection.
-     * 
-     * Note: This method uses reflection, but setting delegate field should not occur too much
-     * to introduce any significant performance hits.
-     * 
-     */
-    public static def void setDelegate(RpcService proxy, RpcService delegate) {
-        val field = proxy.class.getField(DELEGATE_FIELD)
-        if (field == null) throw new UnsupportedOperationException("Unable to set delegate to proxy");
-        if (delegate == null || field.type.isAssignableFrom(delegate.class)) {
-            field.set(proxy, delegate)
-        } else
-            throw new IllegalArgumentException("delegate class is not assignable to proxy");
-    }
-    
-        /**
-     * Helper method to set delegate to ManagedDirectedProxy with use of reflection.
-     * 
-     * Note: This method uses reflection, but setting delegate field should not occur too much
-     * to introduce any significant performance hits.
-     * 
-     */
-    public static def void setDelegate(Object proxy, Object delegate) {
-        val field = proxy.class.getField(DELEGATE_FIELD)
-        if (field == null) throw new UnsupportedOperationException("Unable to set delegate to proxy");
-        if (delegate == null || field.type.isAssignableFrom(delegate.class)) {
-            field.set(proxy, delegate)
-        } else
-            throw new IllegalArgumentException("delegate class is not assignable to proxy");
-    }
-    
-
-    public static def Map<InstanceIdentifier<?>, ? extends RpcService> getRoutingTable(RpcService target,
-        Class<? extends BaseIdentity> tableClass) {
-        val field = target.class.getField(tableClass.routingTableField)
-        if (field == null) throw new UnsupportedOperationException(
-            "Unable to get routing table. Table field does not exists");
-        return field.get(target) as Map<InstanceIdentifier<? extends Object>, ? extends RpcService>;
-    }
-
-    public static def void setRoutingTable(RpcService target, Class<? extends BaseIdentity> tableClass,
-        Map<InstanceIdentifier<?>, ? extends RpcService> routingTable) {
-         val field = target.class.getField(tableClass.routingTableField)
-        if (field == null) throw new UnsupportedOperationException(
-            "Unable to set routing table. Table field does not exists");
-        field.set(target,routingTable);
-    }
-
-}
diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/YangtoolsMappingHelper.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/YangtoolsMappingHelper.java
new file mode 100644 (file)
index 0000000..0bc11d9
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+
+package org.opendaylight.controller.sal.binding.codegen;
+
+import java.lang.reflect.Method;
+import org.opendaylight.yangtools.yang.binding.Notification;
+
+@SuppressWarnings("all")
+public class YangtoolsMappingHelper {
+  public static boolean isNotificationCallback(final Method it) {
+      return it.getName().startsWith("on") && (it.getParameterTypes().length == 1) &&
+              Notification.class.isAssignableFrom(it.getParameterTypes()[0]);
+  }
+
+}
\ No newline at end of file
diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/YangtoolsMappingHelper.xtend b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/YangtoolsMappingHelper.xtend
deleted file mode 100644 (file)
index 18d3e26..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.sal.binding.codegen
-
-import java.lang.reflect.Method
-import org.opendaylight.yangtools.yang.binding.Notification
-
-public static class YangtoolsMappingHelper {
-
-    public static def boolean isNotificationCallback(Method it) {
-        return name.startsWith("on") && parameterTypes.size === 1 &&
-            Notification.isAssignableFrom(parameterTypes.get(0))
-    }
-}
diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/BrokerImplClassLoader.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/BrokerImplClassLoader.java
new file mode 100644 (file)
index 0000000..cab4fe9
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+
+package org.opendaylight.controller.sal.binding.codegen.impl;
+
+import org.eclipse.xtext.xbase.lib.Exceptions;
+
+@SuppressWarnings("all")
+public class BrokerImplClassLoader extends ClassLoader {
+  private final ClassLoader spiClassLoader;
+
+  public BrokerImplClassLoader(final ClassLoader model, final ClassLoader spi) {
+    super(model);
+    this.spiClassLoader = spi;
+  }
+
+  public Class<? extends Object> loadClass(final String name) throws ClassNotFoundException {
+    try {
+      return super.loadClass(name);
+    } catch (ClassNotFoundException e) {
+        return this.spiClassLoader.loadClass(name);
+    }
+  }
+}
diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/BrokerImplClassLoader.xtend b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/BrokerImplClassLoader.xtend
deleted file mode 100644 (file)
index 6481c9d..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.sal.binding.codegen.impl
-
-import java.lang.ClassLoader
-
-class BrokerImplClassLoader extends ClassLoader {
-
-    val ClassLoader spiClassLoader
-    
-    public new(ClassLoader model, ClassLoader spi) {
-        super(model)
-        spiClassLoader = spi;
-    }
-
-    override public loadClass(String name) throws ClassNotFoundException {
-        try {
-            return super.loadClass(name);
-        } catch (ClassNotFoundException e) {
-            return spiClassLoader.loadClass(name);
-        }
-    }
-
-}
diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/RpcProxyContext.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/RpcProxyContext.java
new file mode 100644 (file)
index 0000000..3b6a253
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.controller.sal.binding.impl;
+
+import org.opendaylight.yangtools.yang.binding.RpcService;
+import org.osgi.framework.ServiceRegistration;
+
+@SuppressWarnings("all")
+public class RpcProxyContext {
+  public RpcProxyContext(final Class<? extends RpcService> proxyClass) {
+    this.proxyClass = proxyClass;
+  }
+
+  protected final Class<? extends RpcService> proxyClass;
+
+  protected RpcService _proxy;
+
+  public RpcService getProxy() {
+    return this._proxy;
+  }
+
+  public void setProxy(final RpcService proxy) {
+    this._proxy = proxy;
+  }
+
+  protected ServiceRegistration<? extends RpcService> _registration;
+
+  public ServiceRegistration<? extends RpcService> getRegistration() {
+    return this._registration;
+  }
+
+  public void setRegistration(final ServiceRegistration<? extends RpcService> registration) {
+    this._registration = registration;
+  }
+}
\ No newline at end of file
diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/RpcProxyContext.xtend b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/RpcProxyContext.xtend
deleted file mode 100644 (file)
index 0749459..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.sal.binding.impl
-
-import org.opendaylight.yangtools.yang.binding.RpcService
-import org.osgi.framework.ServiceRegistration
-
-class RpcProxyContext {
-       
-       new(Class<? extends RpcService> proxyClass) {
-               this.proxyClass = proxyClass
-       }
-       
-       protected val Class<? extends RpcService> proxyClass;
-       
-       @Property
-       protected var RpcService proxy;
-       
-       @Property
-       protected var ServiceRegistration<? extends RpcService> registration;
-}
\ No newline at end of file
index 9edea0c2fd59fb9f50b94551fbf5574a174a2a07..93849c2e91f47142f71d7cd1fb55cf3d1a506152 100644 (file)
@@ -91,6 +91,7 @@ import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.ImmutableSet.Builder;
 import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
 
 public class BindingIndependentConnector implements //
         RuntimeDataProvider, //
@@ -699,8 +700,9 @@ public class BindingIndependentConnector implements //
             }
         }
 
+
         @Override
-        public RpcResult<CompositeNode> invokeRpc(final QName rpc, final CompositeNode domInput) {
+        public ListenableFuture<RpcResult<CompositeNode>> invokeRpc(final QName rpc, final CompositeNode domInput) {
             checkArgument(rpc != null);
             checkArgument(domInput != null);
 
@@ -709,10 +711,11 @@ public class BindingIndependentConnector implements //
             RpcService rpcService = baRpcRegistry.getRpcService(rpcType);
             checkState(rpcService != null);
             CompositeNode domUnwrappedInput = domInput.getFirstCompositeByName(QName.create(rpc, "input"));
+
             try {
-                return resolveInvocationStrategy(rpc).invokeOn(rpcService, domUnwrappedInput);
+                return Futures.immediateFuture(resolveInvocationStrategy(rpc).invokeOn(rpcService, domUnwrappedInput));
             } catch (Exception e) {
-                throw new IllegalStateException(e);
+                return Futures.immediateFailedFuture(e);
             }
         }
 
@@ -813,21 +816,25 @@ public class BindingIndependentConnector implements //
         }
 
         @Override
-        public Future<RpcResult<?>> forwardToDomBroker(final DataObject input) {
-            if(biRpcRegistry != null) {
-                CompositeNode xml = mappingService.toDataDom(input);
-                CompositeNode wrappedXml = ImmutableCompositeNode.create(rpc, ImmutableList.<Node<?>> of(xml));
-                RpcResult<CompositeNode> result = biRpcRegistry.invokeRpc(rpc, wrappedXml);
-                Object baResultValue = null;
-                if (result.getResult() != null) {
-                    baResultValue = mappingService.dataObjectFromDataDom(outputClass.get(), result.getResult());
-                }
-                RpcResult<?> baResult = Rpcs.getRpcResult(result.isSuccessful(), baResultValue, result.getErrors());
-                return Futures.<RpcResult<?>> immediateFuture(baResult);
+        public ListenableFuture<RpcResult<?>> forwardToDomBroker(final DataObject input) {
+            if(biRpcRegistry == null) {
+                return Futures.<RpcResult<?>> immediateFuture(Rpcs.getRpcResult(false));
             }
-            return Futures.<RpcResult<?>> immediateFuture(Rpcs.getRpcResult(false));
-        }
 
+            CompositeNode xml = mappingService.toDataDom(input);
+            CompositeNode wrappedXml = ImmutableCompositeNode.create(rpc, ImmutableList.<Node<?>> of(xml));
+
+            return Futures.transform(biRpcRegistry.invokeRpc(rpc, wrappedXml), new Function<RpcResult<CompositeNode>, RpcResult<?>>() {
+                @Override
+                public RpcResult<?> apply(RpcResult<CompositeNode> input) {
+                    Object baResultValue = null;
+                    if (input.getResult() != null) {
+                        baResultValue = mappingService.dataObjectFromDataDom(outputClass.get(), input.getResult());
+                    }
+                    return Rpcs.getRpcResult(input.isSuccessful(), baResultValue, input.getErrors());
+                }
+            });
+        }
     }
 
     private class NoInputNoOutputInvocationStrategy extends RpcInvocationStrategy {
@@ -876,18 +883,21 @@ public class BindingIndependentConnector implements //
         }
 
         @Override
-        public Future<RpcResult<?>> forwardToDomBroker(final DataObject input) {
-            if(biRpcRegistry != null) {
-                CompositeNode xml = mappingService.toDataDom(input);
-                CompositeNode wrappedXml = ImmutableCompositeNode.create(rpc,ImmutableList.<Node<?>>of(xml));
-                RpcResult<CompositeNode> result = biRpcRegistry.invokeRpc(rpc, wrappedXml);
-                Object baResultValue = null;
-                RpcResult<?> baResult = Rpcs.<Void>getRpcResult(result.isSuccessful(), null, result.getErrors());
-                return Futures.<RpcResult<?>>immediateFuture(baResult);
+        public ListenableFuture<RpcResult<?>> forwardToDomBroker(final DataObject input) {
+            if(biRpcRegistry == null) {
+                return Futures.<RpcResult<?>> immediateFuture(Rpcs.getRpcResult(false));
             }
-            return Futures.<RpcResult<?>>immediateFuture(Rpcs.getRpcResult(false));
-        }
 
+            CompositeNode xml = mappingService.toDataDom(input);
+            CompositeNode wrappedXml = ImmutableCompositeNode.create(rpc,ImmutableList.<Node<?>>of(xml));
+
+            return Futures.transform(biRpcRegistry.invokeRpc(rpc, wrappedXml), new Function<RpcResult<CompositeNode>, RpcResult<?>>() {
+                @Override
+                public RpcResult<?> apply(RpcResult<CompositeNode> input) {
+                    return Rpcs.<Void>getRpcResult(input.isSuccessful(), null, input.getErrors());
+                }
+            });
+        }
     }
 
     public boolean isRpcForwarding() {
diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/util/BindingAwareDataReaderRouter.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/util/BindingAwareDataReaderRouter.java
new file mode 100644 (file)
index 0000000..b031663
--- /dev/null
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.controller.sal.binding.impl.util;
+
+import java.util.Iterator;
+import org.opendaylight.controller.md.sal.common.impl.routing.AbstractDataReadRouter;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+@SuppressWarnings("all")
+public class BindingAwareDataReaderRouter extends AbstractDataReadRouter<InstanceIdentifier<? extends DataObject>,DataObject> {
+  protected DataObject merge(final InstanceIdentifier<? extends DataObject> path, final Iterable<DataObject> data) {
+    return data.iterator().next();
+  }
+}
diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/util/BindingAwareDataReaderRouter.xtend b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/util/BindingAwareDataReaderRouter.xtend
deleted file mode 100644 (file)
index 5b77580..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.sal.binding.impl.util
-
-import org.opendaylight.controller.md.sal.common.impl.routing.AbstractDataReadRouter
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier
-import org.opendaylight.yangtools.yang.binding.DataObject
-
-class BindingAwareDataReaderRouter extends AbstractDataReadRouter<InstanceIdentifier<? extends DataObject>, DataObject> {
-    
-    override protected merge(InstanceIdentifier<? extends DataObject> path, Iterable<DataObject> data) {
-        return data.iterator.next;
-    }
-    
-}
diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/util/MapUtils.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/util/MapUtils.java
new file mode 100644 (file)
index 0000000..aa6a9a2
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.controller.sal.binding.impl.util;
+
+import com.google.common.collect.Multimap;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Map.Entry;
+import org.opendaylight.yangtools.concepts.Path;
+
+@SuppressWarnings("all")
+public class MapUtils {
+  public static <P extends Path<P>, V extends Object> Collection<Entry<? extends P,? extends V>> getAllChildren(final Multimap<? extends P,? extends V> map, final P path) {
+    HashSet<Entry<? extends P,? extends V>> _hashSet = new HashSet<Entry<? extends P, ? extends V>>();
+    final HashSet<Entry<? extends P,? extends V>> ret = _hashSet;
+    final Collection<? extends Entry<? extends P,? extends V>> entries = map.entries();
+    for (final Entry<? extends P,? extends V> entry : entries) {
+      {
+        final P currentPath = entry.getKey();
+        if (path.contains(currentPath)) {
+          ret.add(entry);
+        } else if (currentPath.contains(path)){
+            ret.add(entry);
+        }
+      }
+    }
+    return ret;
+  }
+}
+
diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/util/MapUtils.xtend b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/util/MapUtils.xtend
deleted file mode 100644 (file)
index c60686d..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.sal.binding.impl.util
-
-import com.google.common.collect.Multimap
-import java.util.Collection
-import java.util.HashSet
-import java.util.Map.Entry
-import org.opendaylight.yangtools.concepts.Path
-
-class MapUtils {
-
-    public static def <P extends Path<P>, V> Collection<Entry<? extends P, ? extends V>> getAllChildren(
-        Multimap<? extends P, ? extends V> map, P path) {
-        val ret = new HashSet();
-        val entries = map.entries;
-
-        for (entry : entries) {
-            val currentPath = entry.key;
-            // If the registered reader processes nested elements
-            if (path.contains(currentPath)) {
-                ret.add(entry);
-            } else if(currentPath.contains(path)) {
-                // If the registered reader is parent of entry
-                ret.add(entry);
-            }
-        }
-
-        return ret;
-    }
-}
index 4bad2bbb86140a5f04ac6a704b84e0b314cad76b..d6d87bac84b307d388147cc3bd44c0346b5afa77 100644 (file)
@@ -351,7 +351,6 @@ public class BindingTestContext implements AutoCloseable, SchemaContextProvider
     private void startDomBroker() {
         checkState(executor != null);
         biBrokerImpl = new BrokerImpl();
-        biBrokerImpl.setExecutor(executor);
         biBrokerImpl.setRouter(new SchemaAwareRpcBroker("/", this));
 
     }
index fc303e07eb1ed383fe518b422354963d2944b9b7..450ca1cb3b142d57a29969415f9e8ffeaa6d0d73 100644 (file)
@@ -1,3 +1,10 @@
+/*
+ * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
 package org.opendaylight.controller.md.sal.binding.data;
 
 import static org.junit.Assert.assertFalse;
index b1547b66a763d690aee4aee76226bf9659d7ac53..ca38ed0797e1f1d0433a2281a2763672d1d19300 100644 (file)
@@ -50,6 +50,7 @@ import org.opendaylight.yangtools.yang.data.impl.CompositeNodeTOImpl;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.MoreExecutors;
 
 public class CrossBrokerRpcTest {
@@ -64,7 +65,7 @@ public class CrossBrokerRpcTest {
     public static final NodeId NODE_B = new NodeId("b");
     public static final NodeId NODE_C = new NodeId("c");
     public static final NodeId NODE_D = new NodeId("d");
-    
+
     private static final QName NODE_ID_QNAME = QName.create(Node.QNAME, "id");
     private static final QName ADD_FLOW_QNAME = QName.create(NodeFlowRemoved.QNAME, "add-flow");
 
@@ -78,7 +79,7 @@ public class CrossBrokerRpcTest {
     public static final org.opendaylight.yangtools.yang.data.api.InstanceIdentifier BI_NODE_C_ID = createBINodeIdentifier(NODE_C);
     public static final org.opendaylight.yangtools.yang.data.api.InstanceIdentifier BI_NODE_D_ID = createBINodeIdentifier(NODE_D);
 
-    
+
 
     @Before
     public void setup() {
@@ -99,7 +100,7 @@ public class CrossBrokerRpcTest {
     }
 
     @Test
-    public void bindingRoutedRpcProvider_DomInvokerTest() {
+    public void bindingRoutedRpcProvider_DomInvokerTest() throws Exception {
 
         flowService//
                 .registerPath(NodeContext.class, BA_NODE_A_ID) //
@@ -114,7 +115,7 @@ public class CrossBrokerRpcTest {
 
         CompositeNode addFlowDom = toDomRpc(ADD_FLOW_QNAME, addFlowA);
         assertNotNull(addFlowDom);
-        RpcResult<CompositeNode> domResult = biRpcInvoker.invokeRpc(ADD_FLOW_QNAME, addFlowDom);
+        RpcResult<CompositeNode> domResult = biRpcInvoker.invokeRpc(ADD_FLOW_QNAME, addFlowDom).get();
         assertNotNull(domResult);
         assertTrue("DOM result is successful.", domResult.isSuccessful());
         assertTrue("Bidning Add Flow RPC was captured.", flowService.getReceivedAddFlows().containsKey(BA_NODE_A_ID));
@@ -128,18 +129,18 @@ public class CrossBrokerRpcTest {
         final AddFlowOutput output = builder.build();
         org.opendaylight.controller.sal.core.api.Broker.RoutedRpcRegistration registration = biRpcRegistry.addRoutedRpcImplementation(ADD_FLOW_QNAME, new RpcImplementation() {
             @Override
-            public RpcResult<CompositeNode> invokeRpc(QName rpc, CompositeNode input) {
-                CompositeNode result = testContext.getBindingToDomMappingService().toDataDom(output);
-                return Rpcs.getRpcResult(true, result, ImmutableList.<RpcError>of());
+            public Set<QName> getSupportedRpcs() {
+                return ImmutableSet.of(ADD_FLOW_QNAME);
             }
 
             @Override
-            public Set<QName> getSupportedRpcs() {
-                return ImmutableSet.of(ADD_FLOW_QNAME);
+            public ListenableFuture<RpcResult<CompositeNode>> invokeRpc(QName rpc, CompositeNode input) {
+                CompositeNode result = testContext.getBindingToDomMappingService().toDataDom(output);
+                return Futures.immediateFuture(Rpcs.getRpcResult(true, result, ImmutableList.<RpcError>of()));
             }
         });
         registration.registerPath(NodeContext.QNAME, BI_NODE_C_ID);
-        
+
         SalFlowService baFlowInvoker = baRpcRegistry.getRpcService(SalFlowService.class);
         Future<RpcResult<AddFlowOutput>> baResult = baFlowInvoker.addFlow(addFlow(BA_NODE_C_ID).setPriority(500).build());
         assertNotNull(baResult);
index 520935ca9052f89d1cc6ce1b9a6363764c4e91e8..654ad4a1ccd86f87ec562316f5f14888099b4d27 100644 (file)
             <artifactId>antlr4-runtime-osgi-nohead</artifactId>
             <version>4.0</version>
         </dependency>
+        <dependency>
+            <groupId>org.opendaylight.controller.thirdparty</groupId>
+            <artifactId>nagasena</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.opendaylight.controller.thirdparty</groupId>
+            <artifactId>nagasena-rta</artifactId>
+        </dependency>
     </dependencies>
 </project>
index 019fc0eb73949a55163c8ddd7b9dcc2bee065037..3d78f948615d2849862e0fee0c14bb3d028ca0b5 100644 (file)
@@ -69,7 +69,10 @@ public abstract class AbstractTest {
 //                                + "/src/test/resources/logback.xml"),
                 mavenBundle("org.slf4j", "log4j-over-slf4j").versionAsInProject(), //
                 mavenBundle("ch.qos.logback", "logback-core").versionAsInProject(), //
-                mavenBundle("ch.qos.logback", "logback-classic").versionAsInProject(), //
+                mavenBundle("ch.qos.logback", "logback-classic").versionAsInProject(),
+                mavenBundle("org.opendaylight.controller.thirdparty", "nagasena").versionAsInProject(),
+                mavenBundle("org.opendaylight.controller.thirdparty", "nagasena-rta").versionAsInProject(),
+                 //
                 systemProperty("osgi.bundles.defaultStartLevel").value("4"),
                 systemPackages("sun.nio.ch"),
 
index c8eb7fd56f1f68654a14785e5a5f81121e47a692..4f11ba066110be3f73d855a5c4871195fc47306c 100644 (file)
@@ -1,3 +1,10 @@
+/*
+ * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
 package org.opendaylight.controller.sal.core.api;
 
 import org.opendaylight.yangtools.yang.common.QName;
@@ -5,8 +12,10 @@ import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.data.api.CompositeNode;
 import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier;
 
+import com.google.common.util.concurrent.ListenableFuture;
+
 public interface RoutedRpcDefaultImplementation {
 
-  public RpcResult<CompositeNode> invokeRpc(QName rpc, InstanceIdentifier identifier, CompositeNode input);
+    ListenableFuture<RpcResult<CompositeNode>> invokeRpc(QName rpc, InstanceIdentifier identifier, CompositeNode input);
 
 }
index 6b1030a81500f5a909d6df30f69e52208025c482..38b33d5d2a509f228a3fcc88a28c3b4f64a11dad 100644 (file)
@@ -15,6 +15,8 @@ import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.data.api.CompositeNode;
 
+import com.google.common.util.concurrent.ListenableFuture;
+
 /**
  * {@link Provider}'s implementation of an RPC.
  *
@@ -42,8 +44,6 @@ import org.opendaylight.yangtools.yang.data.api.CompositeNode;
  * {@link RpcResult}
  * <li> {@link Broker} returns the {@link RpcResult} to {@link Consumer}
  * </ol>
- *
- *
  */
 public interface RpcImplementation extends Provider.ProviderFunctionality {
 
@@ -59,13 +59,12 @@ public interface RpcImplementation extends Provider.ProviderFunctionality {
     Set<QName> getSupportedRpcs();
 
     /**
-     * Invokes a implementation of specified rpc.
-     *
+     * Invokes a implementation of specified RPC asynchronously.
      *
      * @param rpc
-     *            Rpc to be invoked
+     *            RPC to be invoked
      * @param input
-     *            Input data for rpc.
+     *            Input data for the RPC.
      *
      * @throws IllegalArgumentException
      *             <ul>
@@ -73,9 +72,9 @@ public interface RpcImplementation extends Provider.ProviderFunctionality {
      *             <li>If input is not <code>null</code> and
      *             <code>false == rpc.equals(input.getNodeType)</code>
      *             </ul>
-     * @return RpcResult containing the output of rpc if was executed
-     *         successfully, the list of errors otherwise.
+     * @return Future promising an RpcResult containing the output of
+     *         the RPC if was executed successfully, the list of errors
+     *         otherwise.
      */
-    RpcResult<CompositeNode> invokeRpc(QName rpc, CompositeNode input);
-
+    ListenableFuture<RpcResult<CompositeNode>> invokeRpc(QName rpc, CompositeNode input);
 }
index befeaf4e1e808c672c1417d3a467fb373727c324..520bd1ba1de3d9407718db6a6df64ce128fd1509 100644 (file)
@@ -1,3 +1,10 @@
+/*
+ * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
 package org.opendaylight.controller.md.sal.dom.store.impl;
 
 import static org.opendaylight.controller.md.sal.dom.store.impl.DOMImmutableDataChangeEvent.builder;
index 64de8683d1d1a8a5c3854aa5f55e6b907852c448..0ed14c1027905f22fff667201d5a3294ed6afc56 100644 (file)
@@ -7,13 +7,11 @@
  */
 package org.opendaylight.controller.sal.dom.broker;
 
+import com.google.common.util.concurrent.ListenableFuture
 import java.util.Collections
 import java.util.HashSet
 import java.util.Set
-import java.util.concurrent.Callable
-import java.util.concurrent.ExecutorService
-import java.util.concurrent.Executors
-import java.util.concurrent.Future
+import org.opendaylight.controller.md.sal.common.api.routing.RouteChangeListener
 import org.opendaylight.controller.sal.core.api.Broker
 import org.opendaylight.controller.sal.core.api.Consumer
 import org.opendaylight.controller.sal.core.api.Provider
@@ -26,7 +24,6 @@ import org.opendaylight.controller.sal.dom.broker.spi.RpcRouter
 import org.opendaylight.controller.sal.core.api.RpcRegistrationListener
 import org.opendaylight.controller.sal.core.api.RpcProvisionRegistry
 import org.opendaylight.controller.sal.core.api.RpcImplementation
-import org.opendaylight.controller.md.sal.common.api.routing.RouteChangeListener
 import org.opendaylight.controller.sal.core.api.RpcRoutingContext
 import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier
 import org.opendaylight.controller.sal.core.api.RoutedRpcDefaultImplementation
@@ -39,12 +36,9 @@ public class BrokerImpl implements Broker, RpcProvisionRegistry, AutoCloseable {
     private val Set<ProviderContextImpl> providerSessions = Collections.synchronizedSet(
         new HashSet<ProviderContextImpl>());
 
-    // Implementation specific
-    @Property
-    private var ExecutorService executor = Executors.newFixedThreadPool(5);
     @Property
     private var BundleContext bundleContext;
-    
+
     @Property
     private var AutoCloseable deactivator;
 
@@ -69,9 +63,8 @@ public class BrokerImpl implements Broker, RpcProvisionRegistry, AutoCloseable {
         return session;
     }
 
-    protected def Future<RpcResult<CompositeNode>> invokeRpcAsync(QName rpc, CompositeNode input) {
-        val result = executor.submit([|router.invokeRpc(rpc, input)] as Callable<RpcResult<CompositeNode>>);
-        return result;
+    protected def ListenableFuture<RpcResult<CompositeNode>> invokeRpcAsync(QName rpc, CompositeNode input) {
+        return router.invokeRpc(rpc, input);
     }
 
     // Validation
@@ -111,15 +104,15 @@ public class BrokerImpl implements Broker, RpcProvisionRegistry, AutoCloseable {
         sessions.remove(consumerContextImpl);
         providerSessions.remove(consumerContextImpl);
     }
-    
+
     override close() throws Exception {
         deactivator?.close();
     }
-    
+
     override addRpcImplementation(QName rpcType, RpcImplementation implementation) throws IllegalArgumentException {
         router.addRpcImplementation(rpcType,implementation);
     }
-    
+
     override addRoutedRpcImplementation(QName rpcType, RpcImplementation implementation) {
         router.addRoutedRpcImplementation(rpcType,implementation);
     }
@@ -131,17 +124,17 @@ public class BrokerImpl implements Broker, RpcProvisionRegistry, AutoCloseable {
     override addRpcRegistrationListener(RpcRegistrationListener listener) {
         return router.addRpcRegistrationListener(listener);
     }
-    
+
     override <L extends RouteChangeListener<RpcRoutingContext, InstanceIdentifier>> registerRouteChangeListener(L listener) {
         return router.registerRouteChangeListener(listener);
     }
 
-    override invokeRpc(QName rpc,CompositeNode input){
-        return router.invokeRpc(rpc,input)
-    }
-
     override getSupportedRpcs() {
         return router.getSupportedRpcs();
     }
-    
+
+    override invokeRpc(QName rpc, CompositeNode input) {
+        return router.invokeRpc(rpc,input)
+    }
+
 }
index f9f977e3c24d67abe809ce2f3648df5f63960d83..263f0500fd1c280b470171352716c70b723c18c7 100644 (file)
@@ -123,9 +123,8 @@ public class MountPointImpl implements MountProvisionInstance, SchemaContextProv
         return rpcs.getSupportedRpcs();
     }
 
-
     @Override
-    public RpcResult<CompositeNode> invokeRpc(QName rpc, CompositeNode input) {
+    public ListenableFuture<RpcResult<CompositeNode>> invokeRpc(QName rpc, CompositeNode input) {
         return rpcs.invokeRpc(rpc, input);
     }
 
@@ -134,7 +133,6 @@ public class MountPointImpl implements MountProvisionInstance, SchemaContextProv
         return rpcs.addRpcRegistrationListener(listener);
     }
 
-
     @Override
     public ListenableFuture<RpcResult<CompositeNode>> rpc(QName type, CompositeNode input) {
         return null;
@@ -228,6 +226,4 @@ public class MountPointImpl implements MountProvisionInstance, SchemaContextProv
             L listener) {
         return rpcs.registerRouteChangeListener(listener);
     }
-
-
 }
index 598361c3ae3cbf7e41eed5a69ea9cf0d74727702..3e7b115f11e28667114c798062bd4737cda9f333 100644 (file)
@@ -46,6 +46,7 @@ import com.google.common.base.Optional;
 import com.google.common.collect.FluentIterable;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
+import com.google.common.util.concurrent.ListenableFuture;
 
 public class SchemaAwareRpcBroker implements RpcRouter, Identifiable<String>, RoutedRpcDefaultImplementation {
 
@@ -85,16 +86,16 @@ public class SchemaAwareRpcBroker implements RpcRouter, Identifiable<String>, Ro
         this.schemaProvider = schemaProvider;
     }
 
-  public RoutedRpcDefaultImplementation getRoutedRpcDefaultDelegate() {
-    return defaultDelegate;
-  }
+    public RoutedRpcDefaultImplementation getRoutedRpcDefaultDelegate() {
+        return defaultDelegate;
+    }
 
     @Override
-  public void setRoutedRpcDefaultDelegate(RoutedRpcDefaultImplementation defaultDelegate) {
-    this.defaultDelegate = defaultDelegate;
-  }
+    public void setRoutedRpcDefaultDelegate(RoutedRpcDefaultImplementation defaultDelegate) {
+        this.defaultDelegate = defaultDelegate;
+    }
 
-  @Override
+    @Override
     public RoutedRpcRegistration addRoutedRpcImplementation(QName rpcType, RpcImplementation implementation) {
         checkArgument(rpcType != null, "RPC Type should not be null");
         checkArgument(implementation != null, "RPC Implementatoin should not be null");
@@ -163,7 +164,7 @@ public class SchemaAwareRpcBroker implements RpcRouter, Identifiable<String>, Ro
     }
 
     @Override
-    public RpcResult<CompositeNode> invokeRpc(QName rpc, CompositeNode input) {
+    public ListenableFuture<RpcResult<CompositeNode>> invokeRpc(QName rpc, CompositeNode input) {
         return findRpcImplemention(rpc).invokeRpc(rpc, input);
     }
 
@@ -235,7 +236,7 @@ public class SchemaAwareRpcBroker implements RpcRouter, Identifiable<String>, Ro
     }
 
     @Override
-    public RpcResult<CompositeNode> invokeRpc(QName rpc, InstanceIdentifier identifier, CompositeNode input) {
+    public ListenableFuture<RpcResult<CompositeNode>> invokeRpc(QName rpc, InstanceIdentifier identifier, CompositeNode input) {
       checkState(defaultDelegate != null);
       return defaultDelegate.invokeRpc(rpc, identifier, input);
     }
@@ -319,7 +320,7 @@ public class SchemaAwareRpcBroker implements RpcRouter, Identifiable<String>, Ro
         }
 
         @Override
-        public RpcResult<CompositeNode> invokeRpc(QName rpc, CompositeNode input) {
+        public ListenableFuture<RpcResult<CompositeNode>> invokeRpc(QName rpc, CompositeNode input) {
             CompositeNode inputContainer = input.getFirstCompositeByName(QName.create(rpc,"input"));
             checkArgument(inputContainer != null, "Rpc payload must contain input element");
             SimpleNode<?> routeContainer = inputContainer.getFirstSimpleByName(strategy.getLeaf());
index 40842c004a2779ede0d231b2fef122920bc4ebc9..6e44cba494eda0d29d333ba89492aea18cba55f6 100644 (file)
@@ -8,6 +8,8 @@
 
 package org.opendaylight.controller.sal.dom.broker.osgi;
 
+import java.util.Set;
+
 import org.opendaylight.controller.md.sal.common.api.routing.RouteChangeListener;
 import org.opendaylight.controller.sal.core.api.*;
 import org.opendaylight.yangtools.concepts.ListenerRegistration;
@@ -17,7 +19,7 @@ import org.opendaylight.yangtools.yang.data.api.CompositeNode;
 import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier;
 import org.osgi.framework.ServiceReference;
 
-import java.util.Set;
+import com.google.common.util.concurrent.ListenableFuture;
 
 public class RpcProvisionRegistryProxy extends AbstractBrokerServiceProxy<RpcProvisionRegistry>
                                        implements RpcProvisionRegistry {
@@ -41,24 +43,23 @@ public class RpcProvisionRegistryProxy extends AbstractBrokerServiceProxy<RpcPro
         return getDelegate().addRoutedRpcImplementation(rpcType, implementation);
     }
 
-  @Override
-  public void setRoutedRpcDefaultDelegate(RoutedRpcDefaultImplementation defaultImplementation) {
-    getDelegate().setRoutedRpcDefaultDelegate(defaultImplementation);
-  }
+    @Override
+    public void setRoutedRpcDefaultDelegate(RoutedRpcDefaultImplementation defaultImplementation) {
+        getDelegate().setRoutedRpcDefaultDelegate(defaultImplementation);
+    }
 
-  @Override
+    @Override
     public <L extends RouteChangeListener<RpcRoutingContext, InstanceIdentifier>> ListenerRegistration<L> registerRouteChangeListener(L listener) {
         return getDelegate().registerRouteChangeListener(listener);
     }
 
+    @Override
+    public Set<QName> getSupportedRpcs() {
+        return getDelegate().getSupportedRpcs();
+    }
 
-  @Override
-  public Set<QName> getSupportedRpcs() {
-    return getDelegate().getSupportedRpcs();
-  }
-
-  @Override
-  public RpcResult<CompositeNode> invokeRpc(QName rpc, CompositeNode input) {
-    return getDelegate().invokeRpc(rpc,input);
-  }
+    @Override
+    public ListenableFuture<RpcResult<CompositeNode>> invokeRpc(QName rpc, CompositeNode input) {
+        return getDelegate().invokeRpc(rpc, input);
+    }
 }
index 02419ff529ac7627edf04c00320f9771b05b0b28..2976c76ffa0a8ea91679baa975ecf2e77efc14cf 100644 (file)
@@ -8,27 +8,20 @@
 package org.opendaylight.controller.sal.dom.broker.spi;
 
 import java.util.Map;
-import java.util.Set;
 
 import org.opendaylight.controller.sal.core.api.Broker.RoutedRpcRegistration;
 import org.opendaylight.controller.sal.core.api.RpcImplementation;
 import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.common.RpcResult;
-import org.opendaylight.yangtools.yang.data.api.CompositeNode;
 import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier;
 
 public interface RoutedRpcProcessor extends RpcImplementation {
 
-    public RoutedRpcRegistration addRoutedRpcImplementation(QName rpcType, RpcImplementation implementation);
+    RoutedRpcRegistration addRoutedRpcImplementation(QName rpcType, RpcImplementation implementation);
 
-    public Set<QName> getSupportedRpcs();
-
-    public QName getRpcType();
-    
-    public RpcResult<CompositeNode> invokeRpc(QName rpc, CompositeNode input);
+    QName getRpcType();
 
     Map<InstanceIdentifier,RpcImplementation> getRoutes();
-    
+
     RpcImplementation getDefaultRoute();
 
 }
index d1523a01d695f2033ee9bfa557b1aaf0ea4c592d..b19dac5535bbf3facbd72df32470bc719bb00ff8 100644 (file)
@@ -14,8 +14,6 @@ import org.opendaylight.controller.sal.core.api.Broker.RpcRegistration;
 import org.opendaylight.controller.sal.core.api.RpcImplementation;
 import org.opendaylight.controller.sal.core.api.RpcProvisionRegistry;
 import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.common.RpcResult;
-import org.opendaylight.yangtools.yang.data.api.CompositeNode;
 
 public interface RpcRouter extends RpcProvisionRegistry, RpcImplementation {
 
@@ -28,7 +26,4 @@ public interface RpcRouter extends RpcProvisionRegistry, RpcImplementation {
 
     @Override
     public Set<QName> getSupportedRpcs();
-
-    @Override
-    public RpcResult<CompositeNode> invokeRpc(QName rpc, CompositeNode input);
 }
index 5c6702ae640f66d412aae775e80d044f84d08df5..e6dc59cc107dafa859b3b2a5481d2ec3e12fff37 100644 (file)
@@ -14,9 +14,11 @@ import java.util.Date;
 
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class InventoryUtils {
-
+    private static final Logger LOG = LoggerFactory.getLogger(InventoryUtils.class);
     private static final URI INVENTORY_NAMESPACE = URI.create("urn:opendaylight:inventory");
     private static final URI NETCONF_INVENTORY_NAMESPACE = URI.create("urn:opendaylight:netconf-node-inventory");
     private static final Date INVENTORY_REVISION = dateFromString("2013-08-19");
@@ -33,18 +35,23 @@ public class InventoryUtils {
             .toInstance();
     public static final QName NETCONF_INVENTORY_MOUNT = null;
 
+    private InventoryUtils() {
+        throw new UnsupportedOperationException("Utility class cannot be instantiated");
+    }
+
     /**
      * Converts date in string format yyyy-MM-dd to java.util.Date.
-     * 
+     *
      * @return java.util.Date conformant to string formatted date yyyy-MM-dd.
      */
     private static Date dateFromString(final String date) {
+        // We do not reuse the formatter because it's not thread-safe
         SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
         try {
             return formatter.parse(date);
         } catch (ParseException e) {
-            e.printStackTrace();
+            LOG.error("Failed to parse date {}", date, e);
+            return null;
         }
-        return null;
     }
 }
index 4ae84c7d310c4c4d7b54c7dffa403ec2f8fff5ce..12e8b5587caa230cb693610d21f8135f61e9e2e9 100644 (file)
@@ -13,19 +13,18 @@ import io.netty.util.concurrent.EventExecutor
 import java.io.InputStream
 import java.net.InetSocketAddress
 import java.net.URI
+import java.util.ArrayList
+import java.util.Collection
 import java.util.Collections
 import java.util.List
 import java.util.Set
 import java.util.concurrent.ExecutorService
-import java.util.concurrent.Future
 import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandler
 import org.opendaylight.controller.md.sal.common.api.data.DataModification
 import org.opendaylight.controller.md.sal.common.api.data.DataReader
-import org.opendaylight.controller.netconf.api.NetconfMessage
-import org.opendaylight.controller.netconf.client.NetconfClient
 import org.opendaylight.controller.netconf.client.NetconfClientDispatcher
-import org.opendaylight.controller.netconf.util.xml.XmlUtil
 import org.opendaylight.controller.sal.core.api.Broker.ProviderSession
+import org.opendaylight.controller.sal.core.api.Broker.RpcRegistration
 import org.opendaylight.controller.sal.core.api.Provider
 import org.opendaylight.controller.sal.core.api.RpcImplementation
 import org.opendaylight.controller.sal.core.api.data.DataBrokerService
@@ -45,7 +44,6 @@ import org.opendaylight.yangtools.yang.data.impl.SimpleNodeTOImpl
 import org.opendaylight.yangtools.yang.model.api.SchemaContext
 import org.opendaylight.yangtools.yang.model.util.repo.AbstractCachingSchemaSourceProvider
 import org.opendaylight.yangtools.yang.model.util.repo.SchemaSourceProvider
-import org.opendaylight.yangtools.yang.model.util.repo.SchemaSourceProviders
 import org.opendaylight.yangtools.yang.parser.impl.YangParserImpl
 import org.opendaylight.yangtools.yang.parser.impl.util.YangSourceContext
 import org.slf4j.Logger
@@ -56,14 +54,12 @@ import static org.opendaylight.controller.sal.connect.netconf.InventoryUtils.*
 
 import static extension org.opendaylight.controller.sal.connect.netconf.NetconfMapping.*
 
-class NetconfDevice implements Provider, // 
+class NetconfDevice implements Provider, //
 DataReader<InstanceIdentifier, CompositeNode>, //
 DataCommitHandler<InstanceIdentifier, CompositeNode>, //
 RpcImplementation, //
 AutoCloseable {
 
-    var NetconfClient client;
-
     @Property
     var InetSocketAddress socketAddress;
 
@@ -93,15 +89,12 @@ AutoCloseable {
     Registration<DataReader<InstanceIdentifier, CompositeNode>> operReaderReg
     Registration<DataReader<InstanceIdentifier, CompositeNode>> confReaderReg
     Registration<DataCommitHandler<InstanceIdentifier, CompositeNode>> commitHandlerReg
+    List<RpcRegistration> rpcReg
 
+    @Property
     val String name
-    MountProvisionService mountService
 
-    int messegeRetryCount = 5;
-
-    int messageTimeoutCount = 5 * 1000;
-
-    Set<QName> cachedCapabilities
+    MountProvisionService mountService
 
     @Property
     var NetconfClientDispatcher dispatcher
@@ -110,11 +103,13 @@ AutoCloseable {
 
     @Property
     var SchemaSourceProvider<InputStream> remoteSourceProvider
-    
+
     DataBrokerService dataBroker
 
+    var NetconfDeviceListener listener;
+
     public new(String name) {
-        this.name = name;
+        this._name = name;
         this.logger = LoggerFactory.getLogger(NetconfDevice.name + "#" + name);
         this.path = InstanceIdentifier.builder(INVENTORY_PATH).nodeWithKey(INVENTORY_NODE,
             Collections.singletonMap(INVENTORY_ID, name)).toInstance;
@@ -125,10 +120,11 @@ AutoCloseable {
         checkState(schemaSourceProvider != null, "Schema Source Provider must be set.")
         checkState(eventExecutor != null, "Event executor must be set.");
 
-        val listener = new NetconfDeviceListener(this);
-        val task = startClientTask(dispatcher, listener)
-        return processingExecutor.submit(task) as Future<Void>;
+        listener = new NetconfDeviceListener(this);
+
+        logger.info("Starting NETCONF Client {} for address {}", name, socketAddress);
 
+        dispatcher.createClient(socketAddress, listener, reconnectStrategy);
     }
 
     def Optional<SchemaContext> getSchemaContext() {
@@ -138,59 +134,65 @@ AutoCloseable {
         return deviceContextProvider.currentContext;
     }
 
-    private def Runnable startClientTask(NetconfClientDispatcher dispatcher, NetconfDeviceListener listener) {
-        return [ |
-            try {
-                logger.info("Starting Netconf Client on: {}", socketAddress);
-                client = NetconfClient.clientFor(name, socketAddress, reconnectStrategy, dispatcher, listener);
-                logger.debug("Initial capabilities {}", initialCapabilities);
-                var SchemaSourceProvider<String> delegate;
-                if (NetconfRemoteSchemaSourceProvider.isSupportedFor(initialCapabilities)) {
-                    delegate = new NetconfRemoteSchemaSourceProvider(this);
-                }  else if(client.capabilities.contains(NetconfRemoteSchemaSourceProvider.IETF_NETCONF_MONITORING.namespace.toString)) {
-                    delegate = new NetconfRemoteSchemaSourceProvider(this);
-                } else {
-                    logger.info("Netconf server {} does not support IETF Netconf Monitoring", socketAddress);
-                    delegate = SchemaSourceProviders.<String>noopProvider();
-                }
-                remoteSourceProvider = schemaSourceProvider.createInstanceFor(delegate);
-                deviceContextProvider = new NetconfDeviceSchemaContextProvider(this, remoteSourceProvider);
-                deviceContextProvider.createContextFromCapabilities(initialCapabilities);
-                if (mountInstance != null && schemaContext.isPresent) {
-                    mountInstance.schemaContext = schemaContext.get();
-                    val operations = schemaContext.get().operations;
-                    for (rpc : operations) {
-                        mountInstance.addRpcImplementation(rpc.QName, this);
-                    }
-                }
-                updateDeviceState()
-                if (mountInstance != null && confReaderReg == null && operReaderReg == null) {
-                    confReaderReg = mountInstance.registerConfigurationReader(ROOT_PATH, this);
-                    operReaderReg = mountInstance.registerOperationalReader(ROOT_PATH, this);
-                    commitHandlerReg = mountInstance.registerCommitHandler(ROOT_PATH, this);
-                }
-            } catch (Exception e) {
-                logger.error("Netconf client NOT started. ", e)
+    def bringDown() {
+        if (rpcReg != null) {
+            for (reg : rpcReg) {
+                reg.close()
             }
-        ]
+            rpcReg = null
+        }
+        confReaderReg?.close()
+        confReaderReg = null
+        operReaderReg?.close()
+        operReaderReg = null
+        commitHandlerReg?.close()
+        commitHandlerReg = null
+
+        updateDeviceState(false, Collections.emptySet())
     }
 
-    private def updateDeviceState() {
+    def bringUp(SchemaSourceProvider<String> delegate, Set<QName> capabilities) {
+        remoteSourceProvider = schemaSourceProvider.createInstanceFor(delegate);
+        deviceContextProvider = new NetconfDeviceSchemaContextProvider(this, remoteSourceProvider);
+        deviceContextProvider.createContextFromCapabilities(capabilities);
+        if (mountInstance != null && schemaContext.isPresent) {
+            mountInstance.schemaContext = schemaContext.get();
+        }
+
+        updateDeviceState(true, capabilities)
+
+        if (mountInstance != null) {
+            confReaderReg = mountInstance.registerConfigurationReader(ROOT_PATH, this);
+            operReaderReg = mountInstance.registerOperationalReader(ROOT_PATH, this);
+            commitHandlerReg = mountInstance.registerCommitHandler(ROOT_PATH, this);
+
+            val rpcs = new ArrayList<RpcRegistration>();
+            for (rpc : mountInstance.schemaContext.operations) {
+                rpcs.add(mountInstance.addRpcImplementation(rpc.QName, this));
+            }
+            rpcReg = rpcs
+        }
+    }
+
+    private def updateDeviceState(boolean up, Set<QName> capabilities) {
         val transaction = dataBroker.beginTransaction
 
         val it = ImmutableCompositeNode.builder
         setQName(INVENTORY_NODE)
         addLeaf(INVENTORY_ID, name)
-        addLeaf(INVENTORY_CONNECTED, client.clientSession.up)
+        addLeaf(INVENTORY_CONNECTED, up)
 
-        logger.debug("Client capabilities {}", client.capabilities)
-        for (capability : client.capabilities) {
+        logger.debug("Client capabilities {}", capabilities)
+        for (capability : capabilities) {
             addLeaf(NETCONF_INVENTORY_INITIAL_CAPABILITY, capability)
         }
 
         logger.debug("Update device state transaction " + transaction.identifier + " putting operational data started.")
+        transaction.removeOperationalData(path)
         transaction.putOperationalData(path, it.toInstance)
         logger.debug("Update device state transaction " + transaction.identifier + " putting operational data ended.")
+
+        // FIXME: this has to be asynchronous
         val transactionStatus = transaction.commit.get;
 
         if (transactionStatus.successful) {
@@ -203,13 +205,13 @@ AutoCloseable {
 
     override readConfigurationData(InstanceIdentifier path) {
         val result = invokeRpc(NETCONF_GET_CONFIG_QNAME,
-            wrap(NETCONF_GET_CONFIG_QNAME, CONFIG_SOURCE_RUNNING, path.toFilterStructure()));
+            wrap(NETCONF_GET_CONFIG_QNAME, CONFIG_SOURCE_RUNNING, path.toFilterStructure())).get();
         val data = result.result.getFirstCompositeByName(NETCONF_DATA_QNAME);
         return data?.findNode(path) as CompositeNode;
     }
 
     override readOperationalData(InstanceIdentifier path) {
-        val result = invokeRpc(NETCONF_GET_QNAME, wrap(NETCONF_GET_QNAME, path.toFilterStructure()));
+        val result = invokeRpc(NETCONF_GET_QNAME, wrap(NETCONF_GET_QNAME, path.toFilterStructure())).get();
         val data = result.result.getFirstCompositeByName(NETCONF_DATA_QNAME);
         return data?.findNode(path) as CompositeNode;
     }
@@ -218,30 +220,8 @@ AutoCloseable {
         Collections.emptySet;
     }
 
-    def createSubscription(String streamName) {
-        val it = ImmutableCompositeNode.builder()
-        QName = NETCONF_CREATE_SUBSCRIPTION_QNAME
-        addLeaf("stream", streamName);
-        invokeRpc(QName, toInstance())
-    }
-
     override invokeRpc(QName rpc, CompositeNode input) {
-        try {
-            val message = rpc.toRpcMessage(input,schemaContext);
-            val result = sendMessageImpl(message, messegeRetryCount, messageTimeoutCount);
-            return result.toRpcResult(rpc, schemaContext);
-
-        } catch (Exception e) {
-            logger.error("Rpc was not processed correctly.", e)
-            throw e;
-        }
-    }
-
-    def NetconfMessage sendMessageImpl(NetconfMessage message, int retryCount, int timeout) {
-        logger.debug("Send message {}",XmlUtil.toString(message.document))
-        val result = client.sendMessage(message, retryCount, timeout);
-        NetconfMapping.checkValidReply(message, result)
-        return result;
+        return listener.sendRequest(rpc.toRpcMessage(input,schemaContext));
     }
 
     override getProviderFunctionality() {
@@ -284,7 +264,7 @@ AutoCloseable {
                 return null;
             } else if (current instanceof CompositeNode) {
                 val currentComposite = (current as CompositeNode);
-                
+
                 current = currentComposite.getFirstCompositeByName(arg.nodeType);
                 if(current == null) {
                     current = currentComposite.getFirstCompositeByName(arg.nodeType.withoutRevision());
@@ -303,18 +283,13 @@ AutoCloseable {
     }
 
     override requestCommit(DataModification<InstanceIdentifier, CompositeNode> modification) {
-        val twoPhaseCommit = new NetconfDeviceTwoPhaseCommitTransaction(this, modification);
+        val twoPhaseCommit = new NetconfDeviceTwoPhaseCommitTransaction(this, modification, true);
         twoPhaseCommit.prepare()
         return twoPhaseCommit;
     }
 
-    def getInitialCapabilities() {
-        val capabilities = client?.capabilities;
-        if (capabilities == null) {
-            return null;
-        }
-        if (cachedCapabilities == null) {
-            cachedCapabilities = FluentIterable.from(capabilities).filter[
+    def getCapabilities(Collection<String> capabilities) {
+        return FluentIterable.from(capabilities).filter[
                 contains("?") && contains("module=") && contains("revision=")].transform [
                 val parts = split("\\?");
                 val namespace = parts.get(0);
@@ -333,16 +308,11 @@ AutoCloseable {
                 }
                 return QName.create(namespace, revision, moduleName);
             ].toSet();
-        }
-        return cachedCapabilities;
     }
 
     override close() {
-        confReaderReg?.close()
-        operReaderReg?.close()
-        client?.close()
+        bringDown()
     }
-
 }
 
 package class NetconfDeviceSchemaContextProvider {
index 13cd5dbcf03a185ce99a5631684696bf74ef3ab5..d5e1d35d7d5721e06b9b515822813b54feac779f 100644 (file)
  */
 package org.opendaylight.controller.sal.connect.netconf;
 
+import io.netty.util.concurrent.Future;
+import io.netty.util.concurrent.FutureListener;
+
+import java.util.ArrayDeque;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.Queue;
+import java.util.Set;
+
 import org.opendaylight.controller.netconf.api.NetconfMessage;
-import org.opendaylight.controller.netconf.client.AbstractNetconfClientNotifySessionListener;
+import org.opendaylight.controller.netconf.api.NetconfTerminationReason;
 import org.opendaylight.controller.netconf.client.NetconfClientSession;
+import org.opendaylight.controller.netconf.client.NetconfClientSessionListener;
+import org.opendaylight.controller.netconf.util.xml.XmlElement;
+import org.opendaylight.controller.netconf.util.xml.XmlNetconfConstants;
+import org.opendaylight.controller.sal.common.util.Rpcs;
 import org.opendaylight.controller.sal.core.api.mount.MountProvisionInstance;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.common.RpcError;
+import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.data.api.CompositeNode;
+import org.opendaylight.yangtools.yang.model.util.repo.SchemaSourceProvider;
+import org.opendaylight.yangtools.yang.model.util.repo.SchemaSourceProviders;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import com.google.common.base.Preconditions;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+
+class NetconfDeviceListener implements NetconfClientSessionListener {
+    private static final class Request {
+        final UncancellableFuture<RpcResult<CompositeNode>> future;
+        final NetconfMessage request;
+
+        private Request(UncancellableFuture<RpcResult<CompositeNode>> future, NetconfMessage request) {
+            this.future = future;
+            this.request = request;
+        }
+    }
 
-class NetconfDeviceListener extends AbstractNetconfClientNotifySessionListener {
+    private static final Logger LOG = LoggerFactory.getLogger(NetconfDeviceListener.class);
+    private final Queue<Request> requests = new ArrayDeque<>();
     private final NetconfDevice device;
+    private NetconfClientSession session;
 
     public NetconfDeviceListener(final NetconfDevice device) {
         this.device = Preconditions.checkNotNull(device);
     }
 
-    /**
-     * Method intended to customize notification processing.
-     * 
-     * @param session
-     *            {@see
-     *            NetconfClientSessionListener#onMessage(NetconfClientSession,
-     *            NetconfMessage)}
-     * @param message
-     *            {@see
-     *            NetconfClientSessionListener#onMessage(NetconfClientSession,
-     *            NetconfMessage)}
-     */
     @Override
-    public void onNotification(final NetconfClientSession session, final NetconfMessage message) {
-        this.device.logger.debug("Received NETCONF notification.", message);
-        CompositeNode domNotification = null;
-        if (message != null) {
-            domNotification = NetconfMapping.toNotificationNode(message, device.getSchemaContext());
-        }
-        if (domNotification != null) {
-            MountProvisionInstance _mountInstance = null;
-            if (this.device != null) {
-                _mountInstance = this.device.getMountInstance();
+    public synchronized void onSessionUp(final NetconfClientSession session) {
+        LOG.debug("Session with {} established as address {} session-id {}",
+                device.getName(), device.getSocketAddress(), session.getSessionId());
+
+        final Set<QName> caps = device.getCapabilities(session.getServerCapabilities());
+        LOG.trace("Server {} advertized capabilities {}", device.getName(), caps);
+
+        // Select the appropriate provider
+        final SchemaSourceProvider<String> delegate;
+        if (NetconfRemoteSchemaSourceProvider.isSupportedFor(caps)) {
+            delegate = new NetconfRemoteSchemaSourceProvider(device);
+        } else if(caps.contains(NetconfRemoteSchemaSourceProvider.IETF_NETCONF_MONITORING.getNamespace().toString())) {
+            delegate = new NetconfRemoteSchemaSourceProvider(device);
+        } else {
+            LOG.info("Netconf server {} does not support IETF Netconf Monitoring", device.getName());
+            delegate = SchemaSourceProviders.<String>noopProvider();
+        }
+
+        device.bringUp(delegate, caps);
+
+        this.session = session;
+    }
+
+    private synchronized void tearDown(final Exception e) {
+        session = null;
+
+        /*
+         * Walk all requests, check if they have been executing
+         * or cancelled and remove them from the queue.
+         */
+        final Iterator<Request> it = requests.iterator();
+        while (it.hasNext()) {
+            final Request r = it.next();
+            if (r.future.isUncancellable()) {
+                // FIXME: add a RpcResult instead?
+                r.future.setException(e);
+                it.remove();
+            } else if (r.future.isCancelled()) {
+                // This just does some house-cleaning
+                it.remove();
             }
-            if (_mountInstance != null) {
-                _mountInstance.publish(domNotification);
+        }
+
+        device.bringDown();
+    }
+
+    @Override
+    public void onSessionDown(final NetconfClientSession session, final Exception e) {
+        LOG.debug("Session with {} went down", device.getName(), e);
+        tearDown(e);
+    }
+
+    @Override
+    public void onSessionTerminated(final NetconfClientSession session, final NetconfTerminationReason reason) {
+        LOG.debug("Session with {} terminated {}", session, reason);
+        tearDown(new RuntimeException(reason.getErrorMessage()));
+    }
+
+    @Override
+    public void onMessage(final NetconfClientSession session, final NetconfMessage message) {
+        /*
+         * Dispatch between notifications and messages. Messages need to be processed
+         * with lock held, notifications do not.
+         */
+        if (isNotification(message)) {
+            processNotification(message);
+        } else {
+            processMessage(message);
+        }
+    }
+
+    private synchronized void processMessage(final NetconfMessage message) {
+        final Request r = requests.peek();
+        if (r.future.isUncancellable()) {
+            requests.poll();
+            LOG.debug("Matched {} to {}", r.request, message);
+
+            // FIXME: this can throw exceptions, which should result
+            // in the future failing
+            NetconfMapping.checkValidReply(r.request, message);
+            r.future.set(Rpcs.getRpcResult(true, NetconfMapping.toNotificationNode(message, device.getSchemaContext()),
+                    Collections.<RpcError>emptyList()));
+        } else {
+            LOG.warn("Ignoring unsolicited message", message);
+        }
+    }
+
+    synchronized ListenableFuture<RpcResult<CompositeNode>> sendRequest(final NetconfMessage message) {
+        if (session == null) {
+            LOG.debug("Session to {} is disconnected, failing RPC request {}", device.getName(), message);
+            return Futures.<RpcResult<CompositeNode>>immediateFuture(new RpcResult<CompositeNode>() {
+                @Override
+                public boolean isSuccessful() {
+                    return false;
+                }
+
+                @Override
+                public CompositeNode getResult() {
+                    return null;
+                }
+
+                @Override
+                public Collection<RpcError> getErrors() {
+                    // FIXME: indicate that the session is down
+                    return Collections.emptySet();
+                }
+            });
+        }
+
+        final Request req = new Request(new UncancellableFuture<RpcResult<CompositeNode>>(true), message);
+        requests.add(req);
+
+        session.sendMessage(req.request).addListener(new FutureListener<Void>() {
+            @Override
+            public void operationComplete(final Future<Void> future) throws Exception {
+                if (!future.isSuccess()) {
+                    // We expect that a session down will occur at this point
+                    LOG.debug("Failed to send request {}", req.request, future.cause());
+                    req.future.setException(future.cause());
+                } else {
+                    LOG.trace("Finished sending request {}", req.request);
+                }
             }
+        });
+
+        return req.future;
+    }
+
+    /**
+     * Process an incoming notification.
+     *
+     * @param notification Notification message
+     */
+    private void processNotification(final NetconfMessage notification) {
+        this.device.logger.debug("Received NETCONF notification.", notification);
+        CompositeNode domNotification = NetconfMapping.toNotificationNode(notification, device.getSchemaContext());
+        if (domNotification == null) {
+            return;
+        }
+
+        MountProvisionInstance mountInstance =  this.device.getMountInstance();
+        if (mountInstance != null) {
+            mountInstance.publish(domNotification);
         }
     }
+
+    private static boolean isNotification(final NetconfMessage message) {
+        final XmlElement xmle = XmlElement.fromDomDocument(message.getDocument());
+        return XmlNetconfConstants.NOTIFICATION_ELEMENT_NAME.equals(xmle.getName()) ;
+    }
 }
index c5390e540911d23865b83d53aaf55c230f1098dd..5f14c264edb4cac6ab3dc1b81ccd8f2b1744a598 100644 (file)
@@ -15,14 +15,17 @@ import static org.opendaylight.controller.sal.connect.netconf.NetconfMapping.NET
 import static org.opendaylight.controller.sal.connect.netconf.NetconfMapping.NETCONF_RUNNING_QNAME;
 import static org.opendaylight.controller.sal.connect.netconf.NetconfMapping.NETCONF_TARGET_QNAME;
 
+import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.concurrent.ExecutionException;
 
 import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandler.DataCommitTransaction;
 import org.opendaylight.controller.md.sal.common.api.data.DataModification;
 import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.common.RpcError;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.data.api.CompositeNode;
 import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier;
@@ -31,51 +34,52 @@ import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.PathArgument;
 import org.opendaylight.yangtools.yang.data.api.Node;
 import org.opendaylight.yangtools.yang.data.impl.ImmutableCompositeNode;
 import org.opendaylight.yangtools.yang.data.impl.util.CompositeNodeBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
 
-public class NetconfDeviceTwoPhaseCommitTransaction implements DataCommitTransaction<InstanceIdentifier, CompositeNode> {
-
-    private final NetconfDevice device;
+class NetconfDeviceTwoPhaseCommitTransaction implements DataCommitTransaction<InstanceIdentifier, CompositeNode> {
+    private static final Logger LOG = LoggerFactory.getLogger(NetconfDeviceTwoPhaseCommitTransaction.class);
     private final DataModification<InstanceIdentifier, CompositeNode> modification;
-    private final boolean candidateSupported = true;
+    private final NetconfDevice device;
+    private final boolean candidateSupported;
 
     public NetconfDeviceTwoPhaseCommitTransaction(NetconfDevice device,
-            DataModification<InstanceIdentifier, CompositeNode> modification) {
-        super();
-        this.device = device;
-        this.modification = modification;
+            DataModification<InstanceIdentifier, CompositeNode> modification,
+            boolean candidateSupported) {
+        this.device = Preconditions.checkNotNull(device);
+        this.modification = Preconditions.checkNotNull(modification);
+        this.candidateSupported = candidateSupported;
     }
 
-    public void prepare() {
+    void prepare() throws InterruptedException, ExecutionException {
         for (InstanceIdentifier toRemove : modification.getRemovedConfigurationData()) {
             sendDelete(toRemove);
         }
         for(Entry<InstanceIdentifier, CompositeNode> toUpdate : modification.getUpdatedConfigurationData().entrySet()) {
             sendMerge(toUpdate.getKey(),toUpdate.getValue());
         }
-
     }
 
-    private void sendMerge(InstanceIdentifier key, CompositeNode value) {
+    private void sendMerge(InstanceIdentifier key, CompositeNode value) throws InterruptedException, ExecutionException {
         sendEditRpc(createEditStructure(key, Optional.<String>absent(), Optional.of(value)));
     }
 
-    private void sendDelete(InstanceIdentifier toDelete) {
+    private void sendDelete(InstanceIdentifier toDelete) throws InterruptedException, ExecutionException {
         sendEditRpc(createEditStructure(toDelete, Optional.of("delete"), Optional.<CompositeNode> absent()));
     }
 
-    private void sendEditRpc(CompositeNode editStructure) {
+    private void sendEditRpc(CompositeNode editStructure) throws InterruptedException, ExecutionException {
         CompositeNodeBuilder<ImmutableCompositeNode> builder = configurationRpcBuilder();
         builder.setQName(NETCONF_EDIT_CONFIG_QNAME);
         builder.add(editStructure);
 
-        RpcResult<CompositeNode> rpcResult = device.invokeRpc(NETCONF_EDIT_CONFIG_QNAME, builder.toInstance());
+        RpcResult<CompositeNode> rpcResult = device.invokeRpc(NETCONF_EDIT_CONFIG_QNAME, builder.toInstance()).get();
         Preconditions.checkState(rpcResult.isSuccessful(),"Rpc Result was unsuccessful");
-
     }
 
     private CompositeNodeBuilder<ImmutableCompositeNode> configurationRpcBuilder() {
@@ -135,8 +139,45 @@ public class NetconfDeviceTwoPhaseCommitTransaction implements DataCommitTransac
     public RpcResult<Void> finish() {
         CompositeNodeBuilder<ImmutableCompositeNode> commitInput = ImmutableCompositeNode.builder();
         commitInput.setQName(NETCONF_COMMIT_QNAME);
-        RpcResult<?> rpcResult = device.invokeRpc(NetconfMapping.NETCONF_COMMIT_QNAME, commitInput.toInstance());
-        return (RpcResult<Void>) rpcResult;
+        try {
+            final RpcResult<?> rpcResult = device.invokeRpc(NetconfMapping.NETCONF_COMMIT_QNAME, commitInput.toInstance()).get();
+            return new RpcResult<Void>() {
+
+                @Override
+                public boolean isSuccessful() {
+                    return rpcResult.isSuccessful();
+                }
+
+                @Override
+                public Void getResult() {
+                    return null;
+                }
+
+                @Override
+                public Collection<RpcError> getErrors() {
+                    return rpcResult.getErrors();
+                }
+            };
+        } catch (final InterruptedException | ExecutionException e) {
+            LOG.warn("Failed to finish operation", e);
+            return new RpcResult<Void>() {
+                @Override
+                public boolean isSuccessful() {
+                    return false;
+                }
+
+                @Override
+                public Void getResult() {
+                    return null;
+                }
+
+                @Override
+                public Collection<RpcError> getErrors() {
+                    // FIXME: wrap the exception
+                    return Collections.emptySet();
+                }
+            };
+        }
     }
 
     @Override
index bae0f089473be0b5dab92d717dc52b800a4cf57d..b68f18f52ebb06a47dc57249ae990469b5d0693b 100644 (file)
@@ -11,18 +11,19 @@ import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.CompositeNode;
 
 public class NetconfInventoryUtils {
-
-    
     public static final QName NETCONF_MOUNT = null;
     public static final QName NETCONF_ENDPOINT = null;
     public static final QName NETCONF_ENDPOINT_ADDRESS = null;
     public static final QName NETCONF_ENDPOINT_PORT = null;
 
+    private NetconfInventoryUtils() {
+        throw new UnsupportedOperationException("Utility class cannot be instantiated");
+    }
 
     public static String getEndpointAddress(CompositeNode node) {
         return node.getCompositesByName(NETCONF_ENDPOINT).get(0).getFirstSimpleByName(NETCONF_ENDPOINT_ADDRESS).getValue().toString();
     }
-    
+
     public static String getEndpointPort(CompositeNode node) {
         return node.getCompositesByName(NETCONF_ENDPOINT).get(0).getFirstSimpleByName(NETCONF_ENDPOINT_PORT).getValue().toString();
     }
index e5a24fcf63914f35492f50e7186ff2ed844761e4..228a01eb4c8340fe3a8aa58867cbb0312a664ff5 100644 (file)
@@ -39,8 +39,8 @@ class NetconfMapping {
     public static val NETCONF_URI = URI.create("urn:ietf:params:xml:ns:netconf:base:1.0")
     public static val NETCONF_MONITORING_URI = "urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring"
     public static val NETCONF_NOTIFICATION_URI = URI.create("urn:ietf:params:xml:ns:netconf:notification:1.0")
-    
-    
+
+
     public static val NETCONF_QNAME = QName.create(NETCONF_URI, null, "netconf");
     public static val NETCONF_RPC_QNAME = QName.create(NETCONF_QNAME, "rpc");
     public static val NETCONF_GET_QNAME = QName.create(NETCONF_QNAME, "get");
@@ -51,15 +51,15 @@ class NetconfMapping {
     public static val NETCONF_DELETE_CONFIG_QNAME = QName.create(NETCONF_QNAME, "delete-config");
     public static val NETCONF_OPERATION_QNAME = QName.create(NETCONF_QNAME, "operation");
     public static val NETCONF_COMMIT_QNAME = QName.create(NETCONF_QNAME, "commit");
-    
+
     public static val NETCONF_CONFIG_QNAME = QName.create(NETCONF_QNAME, "config");
     public static val NETCONF_SOURCE_QNAME = QName.create(NETCONF_QNAME, "source");
     public static val NETCONF_TARGET_QNAME = QName.create(NETCONF_QNAME, "target");
-    
+
     public static val NETCONF_CANDIDATE_QNAME = QName.create(NETCONF_QNAME, "candidate");
     public static val NETCONF_RUNNING_QNAME = QName.create(NETCONF_QNAME, "running");
-    
-    
+
+
     public static val NETCONF_RPC_REPLY_QNAME = QName.create(NETCONF_QNAME, "rpc-reply");
     public static val NETCONF_OK_QNAME = QName.create(NETCONF_QNAME, "ok");
     public static val NETCONF_DATA_QNAME = QName.create(NETCONF_QNAME, "data");
@@ -78,7 +78,7 @@ class NetconfMapping {
         if(identifier.path.empty) {
             return null;
         }
-        
+
         for (component : identifier.path.reverseView) {
             val Node<?> current = component.toNode(previous);
             previous = current;
@@ -106,11 +106,11 @@ class NetconfMapping {
     }
 
     static def CompositeNode toCompositeNode(NetconfMessage message,Optional<SchemaContext> ctx) {
-        //TODO: implement general normalization to normalize incoming Netconf Message 
+        //TODO: implement general normalization to normalize incoming Netconf Message
         // for Schema Context counterpart
         return null
     }
-    
+
     static def CompositeNode toNotificationNode(NetconfMessage message,Optional<SchemaContext> ctx) {
         if (ctx.present) {
             val schemaContext = ctx.get
@@ -127,56 +127,53 @@ class NetconfMapping {
         w3cPayload.documentElement.setAttribute("message-id", "m-" + messageId.andIncrement)
         return new NetconfMessage(w3cPayload);
     }
-    
+
     def static flattenInput(CompositeNode node) {
         val inputQName = QName.create(node.nodeType,"input");
         val input = node.getFirstCompositeByName(inputQName);
         if(input == null) return node;
         if(input instanceof CompositeNode) {
-            
+
             val nodes = ImmutableList.builder() //
                 .addAll(input.children) //
                 .addAll(node.children.filter[nodeType != inputQName]) //
                 .build()
             return ImmutableCompositeNode.create(node.nodeType,nodes);
-        } 
-        
+        }
+
     }
 
     static def RpcResult<CompositeNode> toRpcResult(NetconfMessage message,QName rpc,Optional<SchemaContext> context) {
         var CompositeNode rawRpc;
         if(context.present) {
             if(isDataRetrievalReply(rpc)) {
-                
+
                 val xmlData = message.document.dataSubtree
                 val dataNodes = XmlDocumentUtils.toDomNodes(xmlData, Optional.of(context.get.dataDefinitions))
-                
+
                 val it = ImmutableCompositeNode.builder()
                 setQName(NETCONF_RPC_REPLY_QNAME)
                 add(ImmutableCompositeNode.create(NETCONF_DATA_QNAME, dataNodes));
-                
+
                 rawRpc = it.toInstance;
                 //sys(xmlData)
             } else {
                 val rpcSchema = context.get.operations.findFirst[QName == rpc]
                 rawRpc = message.document.toCompositeNode() as CompositeNode;
             }
-            
-            
-            
         } else {
             rawRpc = message.document.toCompositeNode() as CompositeNode;
         }
         //rawRpc.
         return Rpcs.getRpcResult(true, rawRpc, Collections.emptySet());
     }
-    
+
     def static Element getDataSubtree(Document doc) {
         doc.getElementsByTagNameNS(NETCONF_URI.toString,"data").item(0) as Element
     }
-    
+
     def static boolean isDataRetrievalReply(QName it) {
-        return NETCONF_URI == namespace && ( localName == NETCONF_GET_CONFIG_QNAME.localName || localName == NETCONF_GET_QNAME.localName) 
+        return NETCONF_URI == namespace && ( localName == NETCONF_GET_CONFIG_QNAME.localName || localName == NETCONF_GET_QNAME.localName)
     }
 
     static def wrap(QName name, Node<?> node) {
@@ -209,12 +206,12 @@ class NetconfMapping {
     public static def Node<?> toCompositeNode(Document document) {
         return XmlDocumentUtils.toDomNode(document) as Node<?>
     }
-    
+
     public static def checkValidReply(NetconfMessage input, NetconfMessage output) {
         val inputMsgId = input.document.documentElement.getAttribute("message-id")
         val outputMsgId = output.document.documentElement.getAttribute("message-id")
         Preconditions.checkState(inputMsgId == outputMsgId,"Rpc request and reply message IDs must be same.");
-        
+
     }
-    
+
 }
index fa6b6f7ca58f4403e9c9c3b97f79fbb2aa47d2ea..c734e80d9aa06f76d3c4a96c277b8c71a7a48d74 100644 (file)
@@ -7,7 +7,8 @@
  */
 package org.opendaylight.controller.sal.connect.netconf;
 
-import java.util.Set;
+import java.util.Collection;
+import java.util.concurrent.ExecutionException;
 
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.RpcResult;
@@ -18,6 +19,7 @@ import org.opendaylight.yangtools.yang.data.impl.util.CompositeNodeBuilder;
 import org.opendaylight.yangtools.yang.model.util.repo.SchemaSourceProvider;
 
 import com.google.common.base.Optional;
+import com.google.common.base.Preconditions;
 
 class NetconfRemoteSchemaSourceProvider implements SchemaSourceProvider<String> {
 
@@ -26,11 +28,10 @@ class NetconfRemoteSchemaSourceProvider implements SchemaSourceProvider<String>
     public static final QName GET_SCHEMA_QNAME = QName.create(IETF_NETCONF_MONITORING, "get-schema");
     public static final QName GET_DATA_QNAME = QName.create(IETF_NETCONF_MONITORING, "data");
 
-    NetconfDevice device;
+    private final NetconfDevice device;
 
     public NetconfRemoteSchemaSourceProvider(NetconfDevice device) {
-        super();
-        this.device = device;
+        this.device = Preconditions.checkNotNull(device);
     }
 
     @Override
@@ -44,15 +45,19 @@ class NetconfRemoteSchemaSourceProvider implements SchemaSourceProvider<String>
         }
 
         device.logger.trace("Loading YANG schema source for {}:{}", moduleName, revision);
-        RpcResult<CompositeNode> schemaReply = device.invokeRpc(GET_SCHEMA_QNAME, request.toInstance());
-        if (schemaReply.isSuccessful()) {
-            String schemaBody = getSchemaFromRpc(schemaReply.getResult());
-            if (schemaBody != null) {
-                device.logger.trace("YANG Schema successfully retrieved from remote for {}:{}", moduleName, revision);
-                return Optional.of(schemaBody);
+        try {
+            RpcResult<CompositeNode> schemaReply = device.invokeRpc(GET_SCHEMA_QNAME, request.toInstance()).get();
+            if (schemaReply.isSuccessful()) {
+                String schemaBody = getSchemaFromRpc(schemaReply.getResult());
+                if (schemaBody != null) {
+                    device.logger.trace("YANG Schema successfully retrieved from remote for {}:{}", moduleName, revision);
+                    return Optional.of(schemaBody);
+                }
             }
+            device.logger.warn("YANG shcema was not successfully retrieved.");
+        } catch (InterruptedException | ExecutionException e) {
+            device.logger.warn("YANG shcema was not successfully retrieved.", e);
         }
-        device.logger.warn("YANG shcema was not successfully retrieved.");
         return Optional.absent();
     }
 
@@ -68,7 +73,7 @@ class NetconfRemoteSchemaSourceProvider implements SchemaSourceProvider<String>
         return null;
     }
 
-    public static final boolean isSupportedFor(Set<QName> capabilities) {
+    public static final boolean isSupportedFor(Collection<QName> capabilities) {
         return capabilities.contains(IETF_NETCONF_MONITORING);
     }
 }
diff --git a/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/UncancellableFuture.java b/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/UncancellableFuture.java
new file mode 100644 (file)
index 0000000..c353f86
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.controller.sal.connect.netconf;
+
+import javax.annotation.Nullable;
+import javax.annotation.concurrent.GuardedBy;
+
+import com.google.common.base.Preconditions;
+import com.google.common.util.concurrent.AbstractFuture;
+
+final class UncancellableFuture<V> extends AbstractFuture<V> {
+    @GuardedBy("this")
+    private boolean uncancellable = false;
+
+    public UncancellableFuture(boolean uncancellable) {
+        this.uncancellable = uncancellable;
+    }
+
+    public synchronized boolean setUncancellable() {
+        if (isCancelled()) {
+            return false;
+        }
+
+        uncancellable = true;
+        return true;
+    }
+
+    public synchronized boolean isUncancellable() {
+        return uncancellable;
+    }
+
+    @Override
+    public synchronized boolean cancel(boolean mayInterruptIfRunning) {
+        if (uncancellable) {
+            return false;
+        }
+
+        return super.cancel(mayInterruptIfRunning);
+    }
+
+    @Override
+    public synchronized boolean set(@Nullable V value) {
+        Preconditions.checkState(uncancellable == true);
+        return super.set(value);
+    }
+
+    @Override
+    protected boolean setException(Throwable throwable) {
+        Preconditions.checkState(uncancellable == true);
+        return super.setException(throwable);
+    }
+}
diff --git a/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/YangModelInputStreamAdapter.java b/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/YangModelInputStreamAdapter.java
deleted file mode 100644 (file)
index 23892e1..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.sal.connect.netconf;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-import org.opendaylight.yangtools.concepts.Delegator;
-import org.opendaylight.yangtools.yang.common.QName;
-
-import com.google.common.base.Charsets;
-
-/**
- *
- *
- */
-public class YangModelInputStreamAdapter extends InputStream implements Delegator<InputStream> {
-
-    final String source;
-    final QName moduleIdentifier;
-    final InputStream delegate;
-
-    private YangModelInputStreamAdapter(String source, QName moduleIdentifier, InputStream delegate) {
-        super();
-        this.source = source;
-        this.moduleIdentifier = moduleIdentifier;
-        this.delegate = delegate;
-    }
-
-    @Override
-    public int read() throws IOException {
-        return delegate.read();
-    }
-
-    @Override
-    public int hashCode() {
-        return delegate.hashCode();
-    }
-
-    @Override
-    public int read(byte[] b) throws IOException {
-        return delegate.read(b);
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        return delegate.equals(obj);
-    }
-
-    @Override
-    public int read(byte[] b, int off, int len) throws IOException {
-        return delegate.read(b, off, len);
-    }
-
-    @Override
-    public long skip(long n) throws IOException {
-        return delegate.skip(n);
-    }
-
-    @Override
-    public int available() throws IOException {
-        return delegate.available();
-    }
-
-    @Override
-    public void close() throws IOException {
-        delegate.close();
-    }
-
-    @Override
-    public void mark(int readlimit) {
-        delegate.mark(readlimit);
-    }
-
-    @Override
-    public void reset() throws IOException {
-        delegate.reset();
-    }
-
-    @Override
-    public boolean markSupported() {
-        return delegate.markSupported();
-    }
-
-    @Override
-    public InputStream getDelegate() {
-        return delegate;
-    }
-
-    @Override
-    public String toString() {
-        return "YangModelInputStreamAdapter [moduleIdentifier=" + moduleIdentifier + ", delegate=" + delegate + "]";
-    }
-
-    public static YangModelInputStreamAdapter create(QName name, String module) {
-        return new YangModelInputStreamAdapter(null, name, new ByteArrayInputStream(module.getBytes(Charsets.UTF_8)));
-    }
-}
index 84df2e43f01cd54084357d58b67abbe0ea6e93e9..8f95e73b15cdcd8307612bb155a0c3c406647a57 100644 (file)
@@ -7,7 +7,16 @@
 
 package org.opendaylight.controller.sal.connector.remoterpc;
 
-import com.google.common.base.Optional;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.FutureTask;
+import java.util.concurrent.TimeUnit;
+
 import org.opendaylight.controller.sal.common.util.RpcErrors;
 import org.opendaylight.controller.sal.common.util.Rpcs;
 import org.opendaylight.controller.sal.connector.api.RpcRouter;
@@ -27,16 +36,9 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.zeromq.ZMQ;
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.FutureTask;
-import java.util.concurrent.TimeUnit;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Preconditions.checkState;
+import com.google.common.base.Optional;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
 
 /**
  * An implementation of {@link RpcImplementation} that makes
@@ -46,8 +48,8 @@ public class ClientImpl implements RemoteRpcClient {
 
   private final Logger _logger = LoggerFactory.getLogger(ClientImpl.class);
 
-  private ZMQ.Context context = ZMQ.context(1);
-  private ClientRequestHandler handler;
+  private final ZMQ.Context context = ZMQ.context(1);
+  private final ClientRequestHandler handler;
   private RoutingTableProvider routingTableProvider;
 
   public ClientImpl(){
@@ -64,6 +66,7 @@ public class ClientImpl implements RemoteRpcClient {
     return routingTableProvider;
   }
 
+  @Override
   public void setRoutingTableProvider(RoutingTableProvider routingTableProvider) {
     this.routingTableProvider = routingTableProvider;
   }
@@ -93,7 +96,7 @@ public class ClientImpl implements RemoteRpcClient {
    * @param input payload for the remote service
    * @return
    */
-  public RpcResult<CompositeNode> invokeRpc(QName rpc, CompositeNode input) {
+  public ListenableFuture<RpcResult<CompositeNode>> invokeRpc(QName rpc, CompositeNode input) {
     RouteIdentifierImpl routeId = new RouteIdentifierImpl();
     routeId.setType(rpc);
 
@@ -115,7 +118,7 @@ public class ClientImpl implements RemoteRpcClient {
    *          payload
    * @return
    */
-  public RpcResult<CompositeNode> invokeRpc(QName rpc, InstanceIdentifier identifier, CompositeNode input) {
+  public ListenableFuture<RpcResult<CompositeNode>> invokeRpc(QName rpc, InstanceIdentifier identifier, CompositeNode input) {
 
     RouteIdentifierImpl routeId = new RouteIdentifierImpl();
     routeId.setType(rpc);
@@ -126,7 +129,7 @@ public class ClientImpl implements RemoteRpcClient {
     return sendMessage(input, routeId, address);
   }
 
-  private RpcResult<CompositeNode> sendMessage(CompositeNode input, RouteIdentifierImpl routeId, String address) {
+  private ListenableFuture<RpcResult<CompositeNode>> sendMessage(CompositeNode input, RouteIdentifierImpl routeId, String address) {
     Message request = new Message.MessageBuilder()
         .type(Message.MessageType.REQUEST)
         .sender(Context.getInstance().getLocalUri())
@@ -164,11 +167,11 @@ public class ClientImpl implements RemoteRpcClient {
 
         }
       }
-      return Rpcs.getRpcResult(true, payload, errors);
+      return Futures.immediateFuture(Rpcs.getRpcResult(true, payload, errors));
 
     } catch (Exception e){
       collectErrors(e, errors);
-      return Rpcs.getRpcResult(false, null, errors);
+      return Futures.immediateFuture(Rpcs.<CompositeNode>getRpcResult(false, null, errors));
     }
   }
 
index 16e720024752c157b0bd68b4df5f790ffb639fca..edcef83574983718711d644f7c5a89c91d9d5035 100644 (file)
@@ -8,7 +8,14 @@
 
 package org.opendaylight.controller.sal.connector.remoterpc;
 
-import com.google.common.base.Optional;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
 import org.opendaylight.controller.md.sal.common.api.routing.RouteChange;
 import org.opendaylight.controller.md.sal.common.api.routing.RouteChangeListener;
 import org.opendaylight.controller.sal.connector.api.RpcRouter;
@@ -32,13 +39,8 @@ import org.osgi.util.tracker.ServiceTracker;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-import static com.google.common.base.Preconditions.checkNotNull;
+import com.google.common.base.Optional;
+import com.google.common.util.concurrent.ListenableFuture;
 
 public class RemoteRpcProvider implements
     RpcImplementation,
@@ -46,7 +48,7 @@ public class RemoteRpcProvider implements
     AutoCloseable,
     Provider {
 
-  private Logger _logger = LoggerFactory.getLogger(RemoteRpcProvider.class);
+  private final Logger _logger = LoggerFactory.getLogger(RemoteRpcProvider.class);
 
   private final ServerImpl server;
   private final ClientImpl client;
@@ -96,12 +98,12 @@ public class RemoteRpcProvider implements
   }
 
   @Override
-  public RpcResult<CompositeNode> invokeRpc(QName rpc, CompositeNode input) {
+  public ListenableFuture<RpcResult<CompositeNode>> invokeRpc(QName rpc, CompositeNode input) {
     return client.invokeRpc(rpc, input);
   }
 
   @Override
-  public RpcResult<CompositeNode> invokeRpc(QName rpc, InstanceIdentifier identifier, CompositeNode input) {
+  public ListenableFuture<RpcResult<CompositeNode>> invokeRpc(QName rpc, InstanceIdentifier identifier, CompositeNode input) {
     return client.invokeRpc(rpc, identifier, input);
   }
 
@@ -289,8 +291,5 @@ public class RemoteRpcProvider implements
       return routeIdSet;
     }
 
-
-
   }
-
 }
index 722ca0687904f2c7f2e5c42572fc2d16c762936b..d256b998d4f8abd254fffea087778600a1b70051 100644 (file)
@@ -254,7 +254,6 @@ public class ServerImpl implements RemoteRpcServer {
       e = NetworkInterface.getNetworkInterfaces();
     } catch (SocketException e1) {
       _logger.error("Failed to get list of interfaces", e1);
-      //throw new RuntimeException("Failed to acquire list of interfaces", e1);
       return null;
     }
     while (e.hasMoreElements()) {
@@ -265,7 +264,7 @@ public class ServerImpl implements RemoteRpcServer {
       while (ee.hasMoreElements()) {
         InetAddress i = (InetAddress) ee.nextElement();
         _logger.debug("Trying address {}", i);
-        if ((i instanceof Inet4Address) && (i.isSiteLocalAddress())) {
+        if ((i instanceof Inet4Address) && (!i.isLoopbackAddress())) {
           String hostAddress = i.getHostAddress();
           _logger.debug("Settled on host address {}", hostAddress);
           return hostAddress;
index c0aae2dfb56590a39ac1e90a5a413b29c2a87cdb..0fa12e351c19d075ce934f4ca2ccccafa6918514 100644 (file)
@@ -7,29 +7,25 @@
  */
 package org.opendaylight.controller.sal.connector.remoterpc;
 
-import com.google.common.base.Optional;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.io.IOException;
+
 import junit.framework.Assert;
+
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
-import org.opendaylight.controller.sal.common.util.Rpcs;
 import org.opendaylight.controller.sal.connector.api.RpcRouter;
-import org.opendaylight.controller.sal.connector.remoterpc.api.RouteChangeListener;
 import org.opendaylight.controller.sal.connector.remoterpc.api.RoutingTable;
-import org.opendaylight.controller.sal.connector.remoterpc.api.RoutingTableException;
-import org.opendaylight.controller.sal.connector.remoterpc.api.SystemException;
 import org.opendaylight.controller.sal.connector.remoterpc.dto.Message;
 import org.opendaylight.controller.sal.connector.remoterpc.utils.MessagingUtil;
-import org.opendaylight.yangtools.yang.common.RpcError;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.data.api.CompositeNode;
 
-import java.io.IOException;
-import java.util.*;
-
-import static org.mockito.Matchers.any;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
+import com.google.common.base.Optional;
 
 /**
  *
@@ -88,7 +84,7 @@ public class ClientImplTest {
     when(mockHandler.handle(any(Message.class))).
             thenReturn(MessagingUtil.createEmptyMessage());
 
-    RpcResult<CompositeNode> result = client.invokeRpc(null, null);
+    RpcResult<CompositeNode> result = client.invokeRpc(null, null).get();
 
     Assert.assertTrue(result.isSuccessful());
     Assert.assertTrue(result.getErrors().isEmpty());
@@ -101,7 +97,7 @@ public class ClientImplTest {
     when(mockHandler.handle(any(Message.class))).
             thenThrow(new IOException());
 
-    RpcResult<CompositeNode> result = client.invokeRpc(null, null);
+    RpcResult<CompositeNode> result = client.invokeRpc(null, null).get();
 
     Assert.assertFalse(result.isSuccessful());
     Assert.assertFalse(result.getErrors().isEmpty());
index 837d7ae5b7d147b59aa762b1fda4a32de0b86175..cb02fc89bfe604fb58e34854ea85f27edb1a403e 100644 (file)
@@ -483,7 +483,7 @@ class ControllerContext implements SchemaContextListener {
                         + "\" cannot contain \"null\" value as a key."
                     )
                 }
-                keyValues.addKeyValue(listNode.getDataChildByName(key), uriKeyValue);
+                keyValues.addKeyValue(listNode.getDataChildByName(key), uriKeyValue, mountPoint);
                 i = i + 1;
             }
             consumed = consumed + i;
@@ -541,13 +541,13 @@ class ControllerContext implements SchemaContextListener {
         }
     }
     
-    private def void addKeyValue(HashMap<QName, Object> map, DataSchemaNode node, String uriValue) {
+    private def void addKeyValue(HashMap<QName, Object> map, DataSchemaNode node, String uriValue, MountInstance mountPoint) {
         checkNotNull(uriValue);
         checkArgument(node instanceof LeafSchemaNode);
         val urlDecoded = URLDecoder.decode(uriValue);
         val typedef = (node as LeafSchemaNode).type;
         
-        var decoded = TypeDefinitionAwareCodec.from(typedef)?.deserialize(urlDecoded)
+        var decoded = RestCodec.from(typedef, mountPoint)?.deserialize(urlDecoded)
         var additionalInfo = ""
         if(decoded === null) {
             var baseType = RestUtil.resolveBaseTypeFrom(typedef)
index d61393c22529573f03c76272064fda807d3c807a..8ca098c3d9efc230e0ec300adfe251adde91a9cf 100644 (file)
@@ -43,6 +43,7 @@
             <artifactId>sample-toaster-consumer</artifactId>
             <version>1.1-SNAPSHOT</version>
         </dependency>
+
         <dependency>
             <groupId>org.opendaylight.controller.samples</groupId>
             <artifactId>sample-toaster-provider</artifactId>
             <version>3.8.1.v20120830-144521</version>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.opendaylight.controller.thirdparty</groupId>
+            <artifactId>nagasena</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.opendaylight.controller.thirdparty</groupId>
+            <artifactId>nagasena-rta</artifactId>
+        </dependency>
     </dependencies>
 </project>
index 000783bd07e545ee16ae5e306c20c8d72f4d6e35..add523157fa358c5a4ccadbcc5203e8d91a1e076 100644 (file)
@@ -7,20 +7,9 @@
  */
 package org.opendaylight.controller.sample.toaster.it;
 
-import static org.junit.Assert.assertEquals;
-import static org.opendaylight.controller.test.sal.binding.it.TestHelper.*;
-import static org.ops4j.pax.exam.CoreOptions.*;
-
-import javax.inject.Inject;
-import javax.management.JMX;
-import javax.management.MBeanServer;
-import javax.management.ObjectName;
-
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.opendaylight.controller.config.yang.config.toaster_consumer.impl.ToasterConsumerRuntimeMXBean;
-import org.opendaylight.controller.config.yang.config.toaster_provider.impl.ToasterProviderRuntimeMXBean;
 import org.opendaylight.controller.sample.toaster.provider.api.ToastConsumer;
 import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.HashBrown;
 import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.WhiteBread;
@@ -31,8 +20,23 @@ import org.ops4j.pax.exam.options.DefaultCompositeOption;
 import org.ops4j.pax.exam.util.Filter;
 import org.ops4j.pax.exam.util.PathUtils;
 
+import javax.inject.Inject;
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
 import java.lang.management.ManagementFactory;
 
+import static org.junit.Assert.assertEquals;
+import static org.opendaylight.controller.test.sal.binding.it.TestHelper.baseModelBundles;
+import static org.opendaylight.controller.test.sal.binding.it.TestHelper.bindingAwareSalBundles;
+import static org.opendaylight.controller.test.sal.binding.it.TestHelper.configMinumumBundles;
+import static org.opendaylight.controller.test.sal.binding.it.TestHelper.flowCapableModelBundles;
+import static org.opendaylight.controller.test.sal.binding.it.TestHelper.junitAndMockitoBundles;
+import static org.opendaylight.controller.test.sal.binding.it.TestHelper.mdSalCoreBundles;
+import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
+import static org.ops4j.pax.exam.CoreOptions.options;
+import static org.ops4j.pax.exam.CoreOptions.systemPackages;
+import static org.ops4j.pax.exam.CoreOptions.systemProperty;
+
 @RunWith(PaxExam.class)
 public class ToasterTest {
 
@@ -72,7 +76,9 @@ public class ToasterTest {
         return new DefaultCompositeOption(
                 mavenBundle("org.opendaylight.controller.samples", "sample-toaster-provider").versionAsInProject(),
                 mavenBundle("org.opendaylight.controller.samples", "sample-toaster-consumer").versionAsInProject(),
-                mavenBundle("org.opendaylight.controller.samples", "sample-toaster").versionAsInProject()
+                mavenBundle("org.opendaylight.controller.samples", "sample-toaster").versionAsInProject(),
+                mavenBundle("org.opendaylight.controller.thirdparty", "nagasena").versionAsInProject(),
+                mavenBundle("org.opendaylight.controller.thirdparty", "nagasena-rta").versionAsInProject()
         );
     }
 
index b37b5babddf9161d87a3d7186aa06e713e965b94..d2a907ba4a809759583b0bd41b4715243dc17f9b 100644 (file)
           <groupId>org.opendaylight.controller</groupId>
           <artifactId>commons.logback_settings</artifactId>
         </dependency>
+        <dependency>
+            <groupId>xmlunit</groupId>
+            <artifactId>xmlunit</artifactId>
+        </dependency>
     </dependencies>
 
     <build>
index d1326bde8e1b545986a73c5ac2932df14b73403e..051f365086624ce5acf8bf2cb3d52d268044f892 100644 (file)
@@ -16,6 +16,8 @@ import org.opendaylight.controller.netconf.util.xml.XmlUtil;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
+import com.google.common.base.Optional;
+
 public class CompositeAttributeWritingStrategy implements AttributeWritingStrategy {
 
     protected final String key;
@@ -33,8 +35,7 @@ public class CompositeAttributeWritingStrategy implements AttributeWritingStrate
     public void writeElement(Element parentElement, String namespace, Object value) {
         Util.checkType(value, Map.class);
 
-        Element innerNode = document.createElement(key);
-        XmlUtil.addNamespaceAttr(innerNode, namespace);
+        Element innerNode = XmlUtil.createElement(document, key, Optional.of(namespace));
 
         Map<?, ?> map = (Map<?, ?>) value;
 
index 8563b781e3403ba1e45c1bd06f15d2c1c536a51e..66b945d14b8eca0dce2157bedba23bed403f0fa6 100644 (file)
@@ -15,6 +15,8 @@ import org.opendaylight.controller.netconf.util.xml.XmlUtil;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
+import com.google.common.base.Optional;
+
 public class ObjectNameAttributeWritingStrategy implements AttributeWritingStrategy {
 
     private final Document document;
@@ -32,19 +34,17 @@ public class ObjectNameAttributeWritingStrategy implements AttributeWritingStrat
     @Override
     public void writeElement(Element parentElement, String namespace, Object value) {
         Util.checkType(value, ObjectNameAttributeMappingStrategy.MappedDependency.class);
-        Element innerNode = document.createElement(key);
-        XmlUtil.addNamespaceAttr(innerNode, namespace);
+        Element innerNode = XmlUtil.createElement(document, key, Optional.of(namespace));
 
         String moduleName = ((ObjectNameAttributeMappingStrategy.MappedDependency) value).getServiceName();
         String refName = ((ObjectNameAttributeMappingStrategy.MappedDependency) value).getRefName();
         String namespaceForType = ((ObjectNameAttributeMappingStrategy.MappedDependency) value).getNamespace();
 
-        Element typeElement = XmlUtil.createPrefixedTextElement(document, XmlNetconfConstants.TYPE_KEY, XmlNetconfConstants.PREFIX,
-                moduleName);
-        XmlUtil.addPrefixedNamespaceAttr(typeElement, XmlNetconfConstants.PREFIX, namespaceForType);
+        Element typeElement = XmlUtil.createPrefixedTextElement(document, XmlUtil.createPrefixedValue(XmlNetconfConstants.PREFIX, XmlNetconfConstants.TYPE_KEY), XmlNetconfConstants.PREFIX,
+                moduleName, Optional.<String>of(namespaceForType));
         innerNode.appendChild(typeElement);
 
-        final Element nameElement = XmlUtil.createTextElement(document, XmlNetconfConstants.NAME_KEY, refName);
+        final Element nameElement = XmlUtil.createTextElement(document, XmlNetconfConstants.NAME_KEY, refName, Optional.<String>absent());
         innerNode.appendChild(nameElement);
 
         parentElement.appendChild(innerNode);
index a67b348f9fc61310fb69161d6901d033517117df..b2555f712a0b2bd175d47fc19c482ef5713ddfab 100644 (file)
@@ -12,9 +12,12 @@ import java.util.Map;
 import java.util.Map.Entry;
 
 import org.opendaylight.controller.netconf.confignetconfconnector.util.Util;
+import org.opendaylight.controller.netconf.util.xml.XmlUtil;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
+import com.google.common.base.Optional;
+
 public class RuntimeBeanEntryWritingStrategy extends CompositeAttributeWritingStrategy {
 
     public RuntimeBeanEntryWritingStrategy(Document document, String key,
@@ -33,7 +36,7 @@ public class RuntimeBeanEntryWritingStrategy extends CompositeAttributeWritingSt
     public void writeElement(Element parentElement, String namespace, Object value) {
         Util.checkType(value, Map.class);
 
-        Element innerNode = document.createElement(key);
+        Element innerNode = XmlUtil.createElement(document, key, Optional.<String>absent());
 
         Map<?, ?> map = (Map<?, ?>) value;
 
@@ -43,8 +46,8 @@ public class RuntimeBeanEntryWritingStrategy extends CompositeAttributeWritingSt
             // bean
             Util.checkType(runtimeBeanInstanceMappingEntry.getValue(), Map.class);
             Map<?, ?> innerMap = (Map<?, ?>) runtimeBeanInstanceMappingEntry.getValue();
-            Element runtimeInstanceNode = document.createElement("_"
-                    + (String) runtimeBeanInstanceMappingEntry.getKey());
+            Element runtimeInstanceNode = XmlUtil.createElement(document, "_"
+                    + (String) runtimeBeanInstanceMappingEntry.getKey(), Optional.<String>absent());
             innerNode.appendChild(runtimeInstanceNode);
 
             for (Entry<?, ?> innerObjectEntry : innerMap.entrySet()) {
index b327f8ebeff06733fd48ba7483d938b689ef477d..1b15171ca084b5409fa5992f7dc3f45300c80ea0 100644 (file)
@@ -13,6 +13,8 @@ import org.opendaylight.controller.netconf.util.xml.XmlUtil;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
+import com.google.common.base.Optional;
+
 public class SimpleAttributeWritingStrategy implements AttributeWritingStrategy {
 
     private final Document document;
@@ -31,13 +33,15 @@ public class SimpleAttributeWritingStrategy implements AttributeWritingStrategy
     public void writeElement(Element parentElement, String namespace, Object value) {
         value = preprocess(value);
         Util.checkType(value, String.class);
-        Element innerNode = createElement(document, key, (String) value);
-        XmlUtil.addNamespaceAttr(innerNode, namespace);
+        Element innerNode = createElement(document, key, (String) value, Optional.of(namespace));
         parentElement.appendChild(innerNode);
     }
 
-    protected Element createElement(Document document, String key, String value) {
-        return XmlUtil.createTextElement(document, key, (String) value);
+    protected Element createElement(Document document, String key, String value, Optional<String> namespace) {
+        Element typeElement = XmlUtil.createElement(document, key, namespace);
+
+        typeElement.appendChild(document.createTextNode(value));
+        return typeElement;
     }
 
     protected Object preprocess(Object value) {
index 7c90355051beaee44368a52a3dc0a20f08477140..68d31ae2076fd6e0d5d042175f308299ec7801c6 100644 (file)
@@ -14,9 +14,10 @@ import org.opendaylight.controller.netconf.confignetconfconnector.util.Util;
 import org.opendaylight.controller.netconf.util.xml.XmlUtil;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.w3c.dom.Document;
+import org.w3c.dom.Element;
 
+import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
-import org.w3c.dom.Element;
 
 public class SimpleIdentityRefAttributeWritingStrategy extends SimpleAttributeWritingStrategy {
 
@@ -41,13 +42,11 @@ public class SimpleIdentityRefAttributeWritingStrategy extends SimpleAttributeWr
     }
 
     @Override
-    protected Element createElement(Document doc, String key, String value) {
+    protected Element createElement(Document doc, String key, String value, Optional<String> namespace) {
         QName qName = QName.create(value);
         String identity = qName.getLocalName();
-        Element element = XmlUtil.createPrefixedTextElement(doc, key, PREFIX, identity);
-
         String identityNamespace = qName.getNamespace().toString();
-        XmlUtil.addPrefixedNamespaceAttr(element, PREFIX, identityNamespace);
+        Element element = XmlUtil.createPrefixedTextElement(doc, XmlUtil.createPrefixedValue(PREFIX, key), PREFIX, identity, Optional.<String>of(identityNamespace));
         return element;
     }
 }
index 449cfbb4cd4782b7a6e607cbc4258b7d48705968..decb091f866f085ae36034d21c7ee4908685170b 100644 (file)
@@ -8,12 +8,20 @@
 
 package org.opendaylight.controller.netconf.confignetconfconnector.mapping.config;
 
-import com.google.common.base.Optional;
-import com.google.common.base.Preconditions;
-import com.google.common.collect.HashMultimap;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Multimap;
+import static com.google.common.base.Preconditions.checkState;
+import static java.lang.String.format;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+import javax.management.ObjectName;
+
 import org.opendaylight.controller.config.api.jmx.ObjectNameUtil;
 import org.opendaylight.controller.netconf.confignetconfconnector.operations.editconfig.EditConfig;
 import org.opendaylight.controller.netconf.confignetconfconnector.operations.editconfig.EditStrategyType;
@@ -25,18 +33,12 @@ import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
-import javax.management.ObjectName;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-
-import static com.google.common.base.Preconditions.checkState;
-import static java.lang.String.format;
+import com.google.common.base.Optional;
+import com.google.common.base.Preconditions;
+import com.google.common.collect.HashMultimap;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Multimap;
 
 public class Config {
     private final Logger logger = LoggerFactory.getLogger(Config.class);
@@ -114,12 +116,10 @@ public class Config {
 
         Element root = dataElement;
         if (maybeNamespace.isPresent()) {
-            XmlUtil.addNamespaceAttr(root, maybeNamespace.get());
+            root.setAttributeNS(maybeNamespace.get(), dataElement.getNodeName(), "xmlns");
         }
 
-        Element modulesElement = document.createElement(XmlNetconfConstants.MODULES_KEY);
-        XmlUtil.addNamespaceAttr(modulesElement,
-                XmlNetconfConstants.URN_OPENDAYLIGHT_PARAMS_XML_NS_YANG_CONTROLLER_CONFIG);
+        Element modulesElement = XmlUtil.createElement(document, XmlNetconfConstants.MODULES_KEY, Optional.of(XmlNetconfConstants.URN_OPENDAYLIGHT_PARAMS_XML_NS_YANG_CONTROLLER_CONFIG));
         root.appendChild(modulesElement);
         for (String moduleNamespace : moduleToInstances.keySet()) {
             for (Entry<String, Collection<ObjectName>> moduleMappingEntry : moduleToInstances.get(moduleNamespace)
index bf625ea0e26aece140ef6a6f329cfef0bb92fcae..dbaa7895d353d8c2217c97765f8b555f234402e7 100644 (file)
@@ -8,8 +8,12 @@
 
 package org.opendaylight.controller.netconf.confignetconfconnector.mapping.config;
 
-import com.google.common.collect.HashMultimap;
-import com.google.common.collect.Multimap;
+import java.util.Collection;
+import java.util.Date;
+import java.util.Map;
+
+import javax.management.ObjectName;
+
 import org.opendaylight.controller.config.api.jmx.ObjectNameUtil;
 import org.opendaylight.controller.netconf.confignetconfconnector.operations.editconfig.EditConfig;
 import org.opendaylight.controller.netconf.confignetconfconnector.operations.editconfig.EditStrategyType;
@@ -20,10 +24,9 @@ import org.opendaylight.yangtools.yang.common.QName;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
-import javax.management.ObjectName;
-import java.util.Collection;
-import java.util.Date;
-import java.util.Map;
+import com.google.common.base.Optional;
+import com.google.common.collect.HashMultimap;
+import com.google.common.collect.Multimap;
 
 public class ModuleConfig {
 
@@ -57,19 +60,18 @@ public class ModuleConfig {
     }
 
     public Element toXml(ObjectName instanceON, ServiceRegistryWrapper depTracker, Document document, String namespace) {
-        Element root = document.createElement(XmlNetconfConstants.MODULE_KEY);
+        Element root = XmlUtil.createElement(document, XmlNetconfConstants.MODULE_KEY, Optional.<String>absent());
         // Xml.addNamespaceAttr(document, root, namespace);
 
         final String prefix = getPrefix(namespace);
-        Element typeElement = XmlUtil.createPrefixedTextElement(document, XmlNetconfConstants.TYPE_KEY, prefix,
-                moduleName);
-        XmlUtil.addPrefixedNamespaceAttr(typeElement, prefix, namespace);
+        Element typeElement = XmlUtil.createPrefixedTextElement(document, XmlUtil.createPrefixedValue(prefix, XmlNetconfConstants.TYPE_KEY), prefix,
+                moduleName, Optional.<String>of(namespace));
         // Xml.addNamespaceAttr(document, typeElement,
         // XMLUtil.URN_OPENDAYLIGHT_PARAMS_XML_NS_YANG_CONTROLLER_CONFIG);
         root.appendChild(typeElement);
 
-        Element nameElement = XmlUtil.createTextElement(document, XmlNetconfConstants.NAME_KEY,
-                ObjectNameUtil.getInstanceName(instanceON));
+        Element nameElement = XmlUtil.createTextElement(document, XmlUtil.createPrefixedValue(prefix, XmlNetconfConstants.NAME_KEY),
+                ObjectNameUtil.getInstanceName(instanceON), Optional.<String>of(namespace));
         // Xml.addNamespaceAttr(document, nameElement,
         // XMLUtil.URN_OPENDAYLIGHT_PARAMS_XML_NS_YANG_CONTROLLER_CONFIG);
         root.appendChild(nameElement);
index 7de7ea8c7169086afe4aa6ce1a2cf858718d20e3..9767b3f0560cdeae5f51927a1275dec0e7f8f29f 100644 (file)
@@ -8,8 +8,14 @@
 
 package org.opendaylight.controller.netconf.confignetconfconnector.mapping.config;
 
-import com.google.common.base.Preconditions;
-import com.google.common.collect.Maps;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.management.ObjectName;
+
 import org.opendaylight.controller.config.api.jmx.ObjectNameUtil;
 import org.opendaylight.controller.netconf.confignetconfconnector.mapping.attributes.fromxml.ObjectNameAttributeReadingStrategy;
 import org.opendaylight.controller.netconf.util.xml.XmlElement;
@@ -20,12 +26,9 @@ import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
-import javax.management.ObjectName;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
+import com.google.common.base.Optional;
+import com.google.common.base.Preconditions;
+import com.google.common.collect.Maps;
 
 public final class Services {
 
@@ -127,29 +130,27 @@ public final class Services {
     }
 
     public static Element toXml(ServiceRegistryWrapper serviceRegistryWrapper, Document document) {
-        Element root = document.createElement(XmlNetconfConstants.SERVICES_KEY);
-        XmlUtil.addNamespaceAttr(root, XmlNetconfConstants.URN_OPENDAYLIGHT_PARAMS_XML_NS_YANG_CONTROLLER_CONFIG);
+        Element root = XmlUtil.createElement(document, XmlNetconfConstants.SERVICES_KEY, Optional.of(XmlNetconfConstants.URN_OPENDAYLIGHT_PARAMS_XML_NS_YANG_CONTROLLER_CONFIG));
 
         Map<String, Map<String, Map<String, String>>> mappedServices = serviceRegistryWrapper.getMappedServices();
         for (String namespace : mappedServices.keySet()) {
 
             for (Entry<String, Map<String, String>> serviceEntry : mappedServices.get(namespace).entrySet()) {
-                Element serviceElement = document.createElement(SERVICE_KEY);
+                Element serviceElement = XmlUtil.createElement(document, SERVICE_KEY, Optional.<String>absent());
                 root.appendChild(serviceElement);
 
-                Element typeElement = XmlUtil.createPrefixedTextElement(document, TYPE_KEY, XmlNetconfConstants.PREFIX,
-                        serviceEntry.getKey());
-                XmlUtil.addPrefixedNamespaceAttr(typeElement, XmlNetconfConstants.PREFIX, namespace);
+                Element typeElement = XmlUtil.createPrefixedTextElement(document, XmlUtil.createPrefixedValue(XmlNetconfConstants.PREFIX, TYPE_KEY), XmlNetconfConstants.PREFIX,
+                        serviceEntry.getKey(), Optional.of(namespace));
                 serviceElement.appendChild(typeElement);
 
                 for (Entry<String, String> instanceEntry : serviceEntry.getValue().entrySet()) {
-                    Element instanceElement = document.createElement(XmlNetconfConstants.INSTANCE_KEY);
+                    Element instanceElement = XmlUtil.createElement(document, XmlNetconfConstants.INSTANCE_KEY, Optional.<String>absent());
                     serviceElement.appendChild(instanceElement);
 
-                    Element nameElement = XmlUtil.createTextElement(document, NAME_KEY, instanceEntry.getKey());
+                    Element nameElement = XmlUtil.createTextElement(document, NAME_KEY, instanceEntry.getKey(), Optional.<String>absent());
                     instanceElement.appendChild(nameElement);
 
-                    Element providerElement = XmlUtil.createTextElement(document, PROVIDER_KEY, instanceEntry.getValue());
+                    Element providerElement = XmlUtil.createTextElement(document, PROVIDER_KEY, instanceEntry.getValue(), Optional.<String>absent());
                     instanceElement.appendChild(providerElement);
                 }
             }
index 6a0d7508c849ee12c16e0d742fd7dfcadae5fe65..8c3b35122c2061af455222b70b464b3471ad6fc5 100644 (file)
@@ -8,19 +8,23 @@
 
 package org.opendaylight.controller.netconf.confignetconfconnector.mapping.runtime;
 
-import com.google.common.base.Predicate;
-import com.google.common.collect.Collections2;
-import com.google.common.collect.Sets;
-import org.opendaylight.controller.netconf.confignetconfconnector.mapping.config.InstanceConfig;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-
-import javax.management.ObjectName;
 import java.util.Hashtable;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
 
+import javax.management.ObjectName;
+
+import org.opendaylight.controller.netconf.confignetconfconnector.mapping.config.InstanceConfig;
+import org.opendaylight.controller.netconf.util.xml.XmlUtil;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import com.google.common.base.Optional;
+import com.google.common.base.Predicate;
+import com.google.common.collect.Collections2;
+import com.google.common.collect.Sets;
+
 public class InstanceRuntime {
 
     /**
@@ -104,7 +108,7 @@ public class InstanceRuntime {
 
                 String elementName = jmxToYangChildRbeMapping.get(childMappingEntry.getKey());
 
-                Element innerXml = document.createElement(elementName);
+                Element innerXml = XmlUtil.createElement(document, elementName, Optional.<String>absent());
                 childMappingEntry.getValue().toXml(objectName, innerChildRbeOns, document,
                         runtimeInstanceIndex, innerXml, namespace);
                 xml.appendChild(innerXml);
index 129143835fd024e53c290509662f968f9e691b6c..8fc3ee14233b31cf04c7703f2ba4ff65a1b28728 100644 (file)
@@ -8,9 +8,12 @@
 
 package org.opendaylight.controller.netconf.confignetconfconnector.mapping.runtime;
 
-import com.google.common.collect.HashMultimap;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Multimap;
+import java.util.Collection;
+import java.util.Map;
+import java.util.Set;
+
+import javax.management.ObjectName;
+
 import org.opendaylight.controller.config.api.jmx.ObjectNameUtil;
 import org.opendaylight.controller.netconf.confignetconfconnector.mapping.config.Config;
 import org.opendaylight.controller.netconf.confignetconfconnector.mapping.config.ModuleConfig;
@@ -20,10 +23,10 @@ import org.opendaylight.controller.netconf.util.xml.XmlUtil;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
-import javax.management.ObjectName;
-import java.util.Collection;
-import java.util.Map;
-import java.util.Set;
+import com.google.common.base.Optional;
+import com.google.common.collect.HashMultimap;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Multimap;
 
 public class Runtime {
 
@@ -61,11 +64,9 @@ public class Runtime {
     }
 
     public Element toXml(Set<ObjectName> instancesToMap, Set<ObjectName> configBeans, Document document, ServiceRegistryWrapper serviceRegistry) {
-        Element root = document.createElement(XmlNetconfConstants.DATA_KEY);
+        Element root = XmlUtil.createElement(document, XmlNetconfConstants.DATA_KEY, Optional.<String>absent());
 
-        Element modulesElement = document.createElement(XmlNetconfConstants.MODULES_KEY);
-        XmlUtil.addNamespaceAttr(modulesElement,
-                XmlNetconfConstants.URN_OPENDAYLIGHT_PARAMS_XML_NS_YANG_CONTROLLER_CONFIG);
+        Element modulesElement = XmlUtil.createElement(document, XmlNetconfConstants.MODULES_KEY, Optional.of(XmlNetconfConstants.URN_OPENDAYLIGHT_PARAMS_XML_NS_YANG_CONTROLLER_CONFIG));
         root.appendChild(modulesElement);
 
         Map<String, Multimap<String, ObjectName>> moduleToRuntimeInstance = mapInstancesToModules(instancesToMap);
index 57e356704f5d12bcf2649fe38c7f2e6c46827285..561aab9052f3ac5d040369fa89f799406a64d525 100644 (file)
@@ -22,11 +22,14 @@ import org.opendaylight.controller.netconf.api.NetconfDocumentedException.ErrorT
 import org.opendaylight.controller.netconf.confignetconfconnector.transactions.TransactionProvider;
 import org.opendaylight.controller.netconf.util.xml.XmlElement;
 import org.opendaylight.controller.netconf.util.xml.XmlNetconfConstants;
+import org.opendaylight.controller.netconf.util.xml.XmlUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
+import com.google.common.base.Optional;
+
 public class Commit extends AbstractConfigNetconfOperation {
 
     private static final Logger logger = LoggerFactory.getLogger(Commit.class);
@@ -73,7 +76,7 @@ public class Commit extends AbstractConfigNetconfOperation {
         }
         logger.trace("Datastore {} committed successfully: {}", Datastore.candidate, status);
 
-        return document.createElement(XmlNetconfConstants.OK);
+        return XmlUtil.createElement(document, XmlNetconfConstants.OK, Optional.<String>absent());
     }
 
 }
index 2f72612bebd93c46a2c368b487b963c54d92bb6e..639d4dac726d4d156659739bb5addaf54578d0ce 100644 (file)
@@ -19,11 +19,14 @@ import org.opendaylight.controller.netconf.api.NetconfDocumentedException.ErrorT
 import org.opendaylight.controller.netconf.confignetconfconnector.transactions.TransactionProvider;
 import org.opendaylight.controller.netconf.util.xml.XmlElement;
 import org.opendaylight.controller.netconf.util.xml.XmlNetconfConstants;
+import org.opendaylight.controller.netconf.util.xml.XmlUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
+import com.google.common.base.Optional;
+
 public class DiscardChanges extends AbstractConfigNetconfOperation {
 
     public static final String DISCARD = "discard-changes";
@@ -75,6 +78,6 @@ public class DiscardChanges extends AbstractConfigNetconfOperation {
         }
         logger.trace("Changes discarded successfully from datastore {}", Datastore.candidate);
 
-        return document.createElement(XmlNetconfConstants.OK);
+        return XmlUtil.createElement(document, XmlNetconfConstants.OK, Optional.<String>absent());
     }
 }
index 33432e45dfcfcc5c3a82b8d399f807a4d7b38fdf..642c4456a8cc79dea6b884dc84c575d4af6bd664 100644 (file)
@@ -20,11 +20,13 @@ import org.opendaylight.controller.netconf.api.NetconfDocumentedException.ErrorT
 import org.opendaylight.controller.netconf.confignetconfconnector.transactions.TransactionProvider;
 import org.opendaylight.controller.netconf.util.xml.XmlElement;
 import org.opendaylight.controller.netconf.util.xml.XmlNetconfConstants;
+import org.opendaylight.controller.netconf.util.xml.XmlUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
+import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
 
 public class Validate extends AbstractConfigNetconfOperation {
@@ -100,6 +102,6 @@ public class Validate extends AbstractConfigNetconfOperation {
 
         logger.trace("Datastore {} validated successfully", Datastore.candidate);
 
-        return document.createElement(XmlNetconfConstants.OK);
+        return XmlUtil.createElement(document, XmlNetconfConstants.OK, Optional.<String>absent());
     }
 }
index 01ced4cb9ab4c78408f76c59ff7e8b8fd35b8415..0cc9d1153f7711ec0aa3c8320b32cc45cd7d67ae 100644 (file)
@@ -20,7 +20,6 @@ import javax.management.ObjectName;
 import org.opendaylight.controller.config.api.ValidationException;
 import org.opendaylight.controller.config.util.ConfigRegistryClient;
 import org.opendaylight.controller.config.util.ConfigTransactionClient;
-import org.opendaylight.controller.netconf.confignetconfconnector.osgi.YangStoreSnapshot;
 import org.opendaylight.controller.config.yangjmxgenerator.ModuleMXBeanEntry;
 import org.opendaylight.controller.netconf.api.NetconfDocumentedException;
 import org.opendaylight.controller.netconf.api.NetconfDocumentedException.ErrorSeverity;
@@ -35,9 +34,11 @@ import org.opendaylight.controller.netconf.confignetconfconnector.mapping.config
 import org.opendaylight.controller.netconf.confignetconfconnector.mapping.config.Services;
 import org.opendaylight.controller.netconf.confignetconfconnector.operations.AbstractConfigNetconfOperation;
 import org.opendaylight.controller.netconf.confignetconfconnector.operations.editconfig.EditConfigXmlParser.EditConfigExecution;
+import org.opendaylight.controller.netconf.confignetconfconnector.osgi.YangStoreSnapshot;
 import org.opendaylight.controller.netconf.confignetconfconnector.transactions.TransactionProvider;
 import org.opendaylight.controller.netconf.util.xml.XmlElement;
 import org.opendaylight.controller.netconf.util.xml.XmlNetconfConstants;
+import org.opendaylight.controller.netconf.util.xml.XmlUtil;
 import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode;
 import org.opendaylight.yangtools.yang.model.api.Module;
 import org.slf4j.Logger;
@@ -46,6 +47,7 @@ import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
 import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Multimap;
@@ -81,7 +83,7 @@ public class EditConfig extends AbstractConfigNetconfOperation {
 
         logger.trace("Operation {} successful", EditConfigXmlParser.EDIT_CONFIG);
 
-        return document.createElement(XmlNetconfConstants.OK);
+        return XmlUtil.createElement(document, XmlNetconfConstants.OK, Optional.<String>absent());
     }
 
     private void executeSet(ConfigRegistryClient configRegistryClient,
index bf7f9f0f248e661080d48e16da93632b55f569ed..05bba56611a1137e0bfb60c69b198df82ae2aa7d 100644 (file)
@@ -16,7 +16,6 @@ import javax.management.ObjectName;
 
 import org.opendaylight.controller.config.util.ConfigRegistryClient;
 import org.opendaylight.controller.config.util.ConfigTransactionClient;
-import org.opendaylight.controller.netconf.confignetconfconnector.osgi.YangStoreSnapshot;
 import org.opendaylight.controller.netconf.api.NetconfDocumentedException;
 import org.opendaylight.controller.netconf.api.NetconfDocumentedException.ErrorSeverity;
 import org.opendaylight.controller.netconf.api.NetconfDocumentedException.ErrorTag;
@@ -26,9 +25,11 @@ import org.opendaylight.controller.netconf.confignetconfconnector.mapping.config
 import org.opendaylight.controller.netconf.confignetconfconnector.operations.AbstractConfigNetconfOperation;
 import org.opendaylight.controller.netconf.confignetconfconnector.operations.Datastore;
 import org.opendaylight.controller.netconf.confignetconfconnector.operations.editconfig.EditConfig;
+import org.opendaylight.controller.netconf.confignetconfconnector.osgi.YangStoreSnapshot;
 import org.opendaylight.controller.netconf.confignetconfconnector.transactions.TransactionProvider;
 import org.opendaylight.controller.netconf.util.xml.XmlElement;
 import org.opendaylight.controller.netconf.util.xml.XmlNetconfConstants;
+import org.opendaylight.controller.netconf.util.xml.XmlUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
@@ -78,7 +79,7 @@ public class GetConfig extends AbstractConfigNetconfOperation {
 
     private Element getResponseInternal(final Document document, final ConfigRegistryClient configRegistryClient,
             final Datastore source) throws NetconfDocumentedException {
-        Element dataElement = document.createElement(XmlNetconfConstants.DATA_KEY);
+        Element dataElement = XmlUtil.createElement(document, XmlNetconfConstants.DATA_KEY, Optional.<String>absent());
         final Set<ObjectName> instances = Datastore.getInstanceQueryStrategy(source, this.transactionProvider)
                 .queryInstances(configRegistryClient);
 
index a7b42889b6180aded5b123e86b3adae71ac4a5f3..8accbd591f6f2098904560b9097f0ccf2f3ad6b3 100644 (file)
@@ -14,7 +14,6 @@ import javax.management.ObjectName;
 import javax.management.openmbean.OpenType;
 
 import org.opendaylight.controller.config.util.ConfigRegistryClient;
-import org.opendaylight.controller.netconf.confignetconfconnector.osgi.YangStoreSnapshot;
 import org.opendaylight.controller.config.yangjmxgenerator.ModuleMXBeanEntry;
 import org.opendaylight.controller.config.yangjmxgenerator.RuntimeBeanEntry;
 import org.opendaylight.controller.config.yangjmxgenerator.RuntimeBeanEntry.Rpc;
@@ -30,9 +29,11 @@ import org.opendaylight.controller.netconf.confignetconfconnector.mapping.rpc.Mo
 import org.opendaylight.controller.netconf.confignetconfconnector.mapping.rpc.Rpcs;
 import org.opendaylight.controller.netconf.confignetconfconnector.operations.AbstractConfigNetconfOperation;
 import org.opendaylight.controller.netconf.confignetconfconnector.operations.Commit;
+import org.opendaylight.controller.netconf.confignetconfconnector.osgi.YangStoreSnapshot;
 import org.opendaylight.controller.netconf.mapping.api.HandlingPriority;
 import org.opendaylight.controller.netconf.util.xml.XmlElement;
 import org.opendaylight.controller.netconf.util.xml.XmlNetconfConstants;
+import org.opendaylight.controller.netconf.util.xml.XmlUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
@@ -66,7 +67,7 @@ public class RuntimeRpc extends AbstractConfigNetconfOperation {
         // Either allow List of Elements to be returned from NetconfOperation or
         // pass reference to parent output xml element for netconf operations to
         // append result(s) on their own
-        Element tempParent = doc.createElementNS(XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_NETCONF_BASE_1_0, "output");
+        Element tempParent = XmlUtil.createElement(doc, "output", Optional.of(XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_NETCONF_BASE_1_0));
         new ObjectXmlWriter().prepareWritingStrategy(elementName, returnType, doc).writeElement(tempParent, namespace, mappedAttributeOpt.get());
 
         XmlElement xmlElement = XmlElement.fromDomElement(tempParent);
@@ -179,7 +180,7 @@ public class RuntimeRpc extends AbstractConfigNetconfOperation {
                 execution.on, execution.attributes, result);
 
         if (execution.isVoid()) {
-            return document.createElement("ok");
+            return XmlUtil.createElement(document, XmlNetconfConstants.OK, Optional.<String>absent());
         } else {
             return toXml(document, result, execution.returnType, execution.namespace,
                     execution.returnType.getAttributeYangName());
index 95659ddf914837d32d10c0a4f36525fc03b09764..c6248df41bc133f7754f9c78f0ec2bb15fa69bcb 100644 (file)
@@ -8,10 +8,11 @@
 
 package org.opendaylight.controller.netconf.confignetconfconnector.osgi;
 
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Optional;
-import com.google.common.base.Preconditions;
-import com.google.common.collect.Sets;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
 import org.opendaylight.controller.config.api.LookupRegistry;
 import org.opendaylight.controller.config.util.ConfigRegistryJMXClient;
 import org.opendaylight.controller.config.yangjmxgenerator.ModuleMXBeanEntry;
@@ -22,10 +23,10 @@ import org.opendaylight.controller.netconf.mapping.api.NetconfOperation;
 import org.opendaylight.controller.netconf.mapping.api.NetconfOperationService;
 import org.opendaylight.yangtools.yang.model.api.Module;
 
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Optional;
+import com.google.common.base.Preconditions;
+import com.google.common.collect.Sets;
 
 /**
  * Manages life cycle of {@link YangStoreSnapshot}.
@@ -141,6 +142,11 @@ public class NetconfOperationServiceImpl implements NetconfOperationService {
         public Optional<List<String>> getLocation() {
             return Optional.absent();
         }
+
+        @Override
+        public String toString() {
+            return capability;
+        }
     }
 
     private static class YangStoreCapability extends BasicCapability {
index 8b6b1aefc1971d2af9fbc7f69b4264cc79ed3327..cd38d3babef700c8cb5b55529bbac71fb5e4c943 100644 (file)
@@ -8,12 +8,45 @@
 
 package org.opendaylight.controller.netconf.confignetconfconnector;
 
-import com.google.common.base.Optional;
-import com.google.common.base.Preconditions;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
-import org.apache.commons.lang3.StringUtils;
+import static org.custommonkey.xmlunit.XMLAssert.assertXMLEqual;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.opendaylight.controller.netconf.util.test.XmlUnitUtil.assertContainsElement;
+import static org.opendaylight.controller.netconf.util.test.XmlUnitUtil.assertContainsElementWithText;
+import static org.opendaylight.controller.netconf.util.xml.XmlUtil.readXmlToElement;
+
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.math.BigInteger;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.management.InstanceAlreadyExistsException;
+import javax.management.InstanceNotFoundException;
+import javax.management.ObjectName;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.custommonkey.xmlunit.AbstractNodeTester;
+import org.custommonkey.xmlunit.NodeTest;
+import org.custommonkey.xmlunit.NodeTestException;
+import org.custommonkey.xmlunit.NodeTester;
+import org.custommonkey.xmlunit.XMLAssert;
+import org.custommonkey.xmlunit.XMLUnit;
 import org.junit.Before;
 import org.junit.Ignore;
 import org.junit.Test;
@@ -41,7 +74,7 @@ import org.opendaylight.controller.config.yang.test.impl.NetconfTestImplModuleMX
 import org.opendaylight.controller.config.yang.test.impl.Peers;
 import org.opendaylight.controller.config.yangjmxgenerator.ModuleMXBeanEntry;
 import org.opendaylight.controller.netconf.api.NetconfDocumentedException;
-import org.opendaylight.controller.netconf.api.NetconfOperationRouter;
+import org.opendaylight.controller.netconf.impl.osgi.NetconfOperationRouter;
 import org.opendaylight.controller.netconf.confignetconfconnector.operations.Commit;
 import org.opendaylight.controller.netconf.confignetconfconnector.operations.DiscardChanges;
 import org.opendaylight.controller.netconf.confignetconfconnector.operations.editconfig.EditConfig;
@@ -52,7 +85,7 @@ import org.opendaylight.controller.netconf.confignetconfconnector.osgi.YangStore
 import org.opendaylight.controller.netconf.confignetconfconnector.osgi.YangStoreSnapshot;
 import org.opendaylight.controller.netconf.confignetconfconnector.transactions.TransactionProvider;
 import org.opendaylight.controller.netconf.impl.mapping.operations.DefaultCloseSession;
-import org.opendaylight.controller.netconf.impl.osgi.NetconfOperationServiceSnapshot;
+import org.opendaylight.controller.netconf.impl.osgi.NetconfOperationServiceSnapshotImpl;
 import org.opendaylight.controller.netconf.mapping.api.HandlingPriority;
 import org.opendaylight.controller.netconf.mapping.api.NetconfOperation;
 import org.opendaylight.controller.netconf.mapping.api.NetconfOperationChainedExecution;
@@ -72,35 +105,17 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
+import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
+import org.w3c.dom.Text;
+import org.w3c.dom.traversal.DocumentTraversal;
 import org.xml.sax.SAXException;
 
-import javax.management.InstanceAlreadyExistsException;
-import javax.management.InstanceNotFoundException;
-import javax.management.ObjectName;
-import javax.xml.parsers.ParserConfigurationException;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.math.BigInteger;
-import java.net.URISyntaxException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-import static org.mockito.Mockito.doNothing;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyNoMoreInteractions;
+import com.google.common.base.Optional;
+import com.google.common.base.Preconditions;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
 
 
 public class NetconfMappingTest extends AbstractConfigTest {
@@ -108,6 +123,7 @@ public class NetconfMappingTest extends AbstractConfigTest {
 
     private static final String INSTANCE_NAME = "instance-from-code";
     private static final String NETCONF_SESSION_ID = "foo";
+    private static final String TEST_NAMESPACE= "urn:opendaylight:params:xml:ns:yang:controller:test:impl";
     private NetconfTestImplModuleFactory factory;
     private DepTestImplModuleFactory factory2;
     private IdentityTestModuleFactory factory3;
@@ -117,7 +133,7 @@ public class NetconfMappingTest extends AbstractConfigTest {
     @Mock
     NetconfOperationRouter netconfOperationRouter;
     @Mock
-    NetconfOperationServiceSnapshot netconfOperationServiceSnapshot;
+    NetconfOperationServiceSnapshotImpl netconfOperationServiceSnapshot;
 
     private TransactionProvider transactionProvider;
 
@@ -180,72 +196,101 @@ public class NetconfMappingTest extends AbstractConfigTest {
         createModule(INSTANCE_NAME);
 
         edit("netconfMessages/editConfig.xml");
-        Element config = getConfigCandidate();
-        assertCorrectServiceNames(config, 6, "ref_test2", "user_to_instance_from_code", "ref_dep_user",
+        Document config = getConfigCandidate();
+        assertCorrectServiceNames(config, Sets.newHashSet("ref_test2", "user_to_instance_from_code", "ref_dep_user",
                 "ref_dep_user_two", "ref_from_code_to_instance-from-code_dep_1",
-                "ref_from_code_to_instance-from-code_1");
+                "ref_from_code_to_instance-from-code_1"));
 
 
         edit("netconfMessages/editConfig_addServiceName.xml");
         config = getConfigCandidate();
-        assertCorrectServiceNames(config, 7, "ref_test2", "user_to_instance_from_code", "ref_dep_user",
+        assertCorrectServiceNames(config, Sets.newHashSet("ref_test2", "user_to_instance_from_code", "ref_dep_user",
                 "ref_dep_user_two", "ref_from_code_to_instance-from-code_dep_1",
-                "ref_from_code_to_instance-from-code_1", "ref_dep_user_another");
+                "ref_from_code_to_instance-from-code_1", "ref_dep_user_another"));
 
         edit("netconfMessages/editConfig_addServiceNameOnTest.xml");
         config = getConfigCandidate();
-        assertCorrectServiceNames(config, 7, "ref_test2", "user_to_instance_from_code", "ref_dep_user",
+        assertCorrectServiceNames(config, Sets.newHashSet("ref_test2", "user_to_instance_from_code", "ref_dep_user",
                 "ref_dep_user_two", "ref_from_code_to_instance-from-code_dep_1",
-                "ref_from_code_to_instance-from-code_1", "ref_dep_user_another");
+                "ref_from_code_to_instance-from-code_1", "ref_dep_user_another"));
 
         commit();
         config = getConfigRunning();
         assertCorrectRefNamesForDependencies(config);
-        assertCorrectServiceNames(config, 7, "ref_test2", "user_to_instance_from_code", "ref_dep_user",
+        assertCorrectServiceNames(config, Sets.newHashSet("ref_test2", "user_to_instance_from_code", "ref_dep_user",
                 "ref_dep_user_two", "ref_from_code_to_instance-from-code_dep_1",
-                "ref_from_code_to_instance-from-code_1", "ref_dep_user_another");
+                "ref_from_code_to_instance-from-code_1", "ref_dep_user_another"));
 
         edit("netconfMessages/editConfig_replace_default.xml");
         config = getConfigCandidate();
-        assertCorrectServiceNames(config, 2, "ref_dep", "ref_dep2");
+        assertCorrectServiceNames(config, Sets.newHashSet("ref_dep", "ref_dep2"));
 
         edit("netconfMessages/editConfig_remove.xml");
         config = getConfigCandidate();
-        assertCorrectServiceNames(config, 0);
+        assertCorrectServiceNames(config, Collections.<String>emptySet());
 
         commit();
         config = getConfigCandidate();
-        assertCorrectServiceNames(config, 0);
+        assertCorrectServiceNames(config, Collections.<String>emptySet());
 
     }
 
-    private void assertCorrectRefNamesForDependencies(Element config) {
+    private void assertCorrectRefNamesForDependencies(Document config) throws NodeTestException {
         NodeList modulesList = config.getElementsByTagName("modules");
         assertEquals(1, modulesList.getLength());
 
-        Element modules = (Element) modulesList.item(0);
+        NodeTest nt = new NodeTest((DocumentTraversal) config, modulesList.item(0));
+        NodeTester tester = new AbstractNodeTester() {
+            private int defaultRefNameCount = 0;
+            private int userRefNameCount = 0;
 
-        String trimmedModules = XmlUtil.toString(modules).replaceAll("\\s", "");
-        int defaultRefNameCount = StringUtils.countMatches(trimmedModules, "ref_dep2");
-        int userRefNameCount = StringUtils.countMatches(trimmedModules, "ref_dep_user_two");
+            @Override
+            public void testText(Text text) throws NodeTestException {
+                if(text.getData().equals("ref_dep2")) {
+                    defaultRefNameCount++;
+                } else if(text.getData().equals("ref_dep_user_two")) {
+                    userRefNameCount++;
+                }
+            }
 
-        assertEquals(0, defaultRefNameCount);
-        assertEquals(2, userRefNameCount);
+            @Override
+            public void noMoreNodes(NodeTest forTest) throws NodeTestException {
+                assertEquals(0, defaultRefNameCount);
+                assertEquals(2, userRefNameCount);
+            }
+        };
+        nt.performTest(tester, Node.TEXT_NODE);
     }
 
-    private void assertCorrectServiceNames(Element configCandidate, int servicesSize, String... refNames) {
-        NodeList elements = configCandidate.getElementsByTagName("provider");
-        assertEquals(servicesSize, elements.getLength());
+    private void assertCorrectServiceNames(Document configCandidate, final Set<String> refNames) throws NodeTestException {
 
-        NodeList servicesList = configCandidate.getElementsByTagName("services");
-        assertEquals(1, servicesList.getLength());
+        NodeList servicesNodes = configCandidate.getElementsByTagName("services");
+        assertEquals(1, servicesNodes.getLength());
 
-        Element services = (Element) servicesList.item(0);
-        String trimmedServices = XmlUtil.toString(services).replaceAll("\\s", "");
+        NodeTest nt = new NodeTest((DocumentTraversal) configCandidate, servicesNodes.item(0));
+        NodeTester tester = new AbstractNodeTester() {
 
-        for (String s : refNames) {
-            assertThat(trimmedServices, JUnitMatchers.containsString(s));
-        }
+            @Override
+            public void testElement(Element element) throws NodeTestException {
+                if(element.getNodeName() != null) {
+                    if(element.getNodeName().equals("name")) {
+                        String elmText = element.getTextContent();
+                        if(refNames.contains(elmText)) {
+                            refNames.remove(elmText);
+                            return;
+                        } else {
+                            throw new NodeTestException("Unexpected services defined: " + elmText);
+                        }
+                    }
+                }
+            }
+
+            @Override
+            public void noMoreNodes(NodeTest forTest) throws NodeTestException {
+                assertTrue(refNames.isEmpty());
+            }
+        };
+        nt.performTest(tester, Node.ELEMENT_NODE);
     }
 
     @Test
@@ -255,19 +300,18 @@ public class NetconfMappingTest extends AbstractConfigTest {
 
         edit("netconfMessages/editConfig.xml");
         commit();
-        Element response = getConfigRunning();
-        String trimmedResponse = XmlUtil.toString(response).replaceAll("\\s", "");
-        assertContainsString(trimmedResponse, "<ipxmlns=\"urn:opendaylight:params:xml:ns:yang:controller:test:impl\">0:0:0:0:0:0:0:1</ip>");
-        assertContainsString(trimmedResponse, "<union-test-attrxmlns=\"urn:opendaylight:params:xml:ns:yang:controller:test:impl\">456</union-test-attr>");
+        Document response = getConfigRunning();
+        Element ipElement = readXmlToElement("<ip xmlns=\"urn:opendaylight:params:xml:ns:yang:controller:test:impl\">0:0:0:0:0:0:0:1</ip>");
+        assertContainsElement(response, readXmlToElement("<ip xmlns=\"urn:opendaylight:params:xml:ns:yang:controller:test:impl\">0:0:0:0:0:0:0:1</ip>"));
+
+        assertContainsElement(response, readXmlToElement("<union-test-attr xmlns=\"urn:opendaylight:params:xml:ns:yang:controller:test:impl\">456</union-test-attr>"));
 
 
         edit("netconfMessages/editConfig_setUnions.xml");
         commit();
         response = getConfigRunning();
-
-        trimmedResponse = XmlUtil.toString(response).replaceAll("\\s", "");
-        assertContainsString(trimmedResponse, "<ipxmlns=\"urn:opendaylight:params:xml:ns:yang:controller:test:impl\">127.1.2.3</ip>");
-        assertContainsString(trimmedResponse, "<union-test-attrxmlns=\"urn:opendaylight:params:xml:ns:yang:controller:test:impl\">randomStringForUnion</union-test-attr>");
+        assertContainsElement(response, readXmlToElement("<ip xmlns=\"urn:opendaylight:params:xml:ns:yang:controller:test:impl\">127.1.2.3</ip>"));
+        assertContainsElement(response, readXmlToElement("<union-test-attr xmlns=\"urn:opendaylight:params:xml:ns:yang:controller:test:impl\">randomStringForUnion</union-test-attr>"));
 
     }
 
@@ -277,7 +321,7 @@ public class NetconfMappingTest extends AbstractConfigTest {
         createModule(INSTANCE_NAME);
 
         edit("netconfMessages/editConfig.xml");
-        Element configCandidate = getConfigCandidate();
+        Document configCandidate = getConfigCandidate();
         checkBinaryLeafEdited(configCandidate);
 
 
@@ -287,7 +331,7 @@ public class NetconfMappingTest extends AbstractConfigTest {
 
         // check after edit
         commit();
-        Element response = getConfigRunning();
+        Document response = getConfigRunning();
 
         checkBinaryLeafEdited(response);
         checkTypeConfigAttribute(response);
@@ -299,17 +343,12 @@ public class NetconfMappingTest extends AbstractConfigTest {
         edit("netconfMessages/editConfig_remove.xml");
 
         commit();
-        response = getConfigCandidate();
-        final String responseFromCandidate = XmlUtil.toString(response).replaceAll("\\s+", "");
-        response = getConfigRunning();
-        final String responseFromRunning = XmlUtil.toString(response).replaceAll("\\s+", "");
-        assertEquals(responseFromCandidate, responseFromRunning);
-
-        final String expectedResult = XmlFileLoader.fileToString("netconfMessages/editConfig_expectedResult.xml")
-                .replaceAll("\\s+", "");
+        assertXMLEqual(getConfigCandidate(), getConfigRunning());
 
-        assertEquals(expectedResult, responseFromRunning);
-        assertEquals(expectedResult, responseFromCandidate);
+        final Document expectedResult = XmlFileLoader.xmlFileToDocument("netconfMessages/editConfig_expectedResult.xml");
+        XMLUnit.setIgnoreWhitespace(true);
+        assertXMLEqual(expectedResult, getConfigRunning());
+        assertXMLEqual(expectedResult, getConfigCandidate());
 
         edit("netconfMessages/editConfig_none.xml");
         closeSession();
@@ -318,12 +357,10 @@ public class NetconfMappingTest extends AbstractConfigTest {
         verifyNoMoreInteractions(netconfOperationServiceSnapshot);
     }
 
-    private void checkBigDecimal(Element response) {
-        String responseTrimmed = XmlUtil.toString(response).replaceAll("\\s", "");
-
-        assertContainsString(responseTrimmed, "<sleep-factorxmlns=\"urn:opendaylight:params:xml:ns:yang:controller:test:impl\">2.58</sleep-factor>");
+    private void checkBigDecimal(Document response) throws NodeTestException, SAXException, IOException {
+        assertContainsElement(response, readXmlToElement("<sleep-factor xmlns=\"urn:opendaylight:params:xml:ns:yang:controller:test:impl\">2.58</sleep-factor>"));
         // Default
-        assertContainsString(responseTrimmed, "<sleep-factorxmlns=\"urn:opendaylight:params:xml:ns:yang:controller:test:impl\">2.00</sleep-factor>");
+        assertContainsElement(response, readXmlToElement("<sleep-factor xmlns=\"urn:opendaylight:params:xml:ns:yang:controller:test:impl\">2.00</sleep-factor>"));
 
     }
 
@@ -345,14 +382,14 @@ public class NetconfMappingTest extends AbstractConfigTest {
         executeOp(commitOp, "netconfMessages/commit.xml");
     }
 
-    private Element getConfigCandidate() throws ParserConfigurationException, SAXException, IOException,
+    private Document getConfigCandidate() throws ParserConfigurationException, SAXException, IOException,
             NetconfDocumentedException {
         GetConfig getConfigOp = new GetConfig(yangStoreSnapshot, Optional.<String> absent(), transactionProvider,
                 configRegistryClient, NETCONF_SESSION_ID);
         return executeOp(getConfigOp, "netconfMessages/getConfig_candidate.xml");
     }
 
-    private Element getConfigRunning() throws ParserConfigurationException, SAXException, IOException,
+    private Document getConfigRunning() throws ParserConfigurationException, SAXException, IOException,
             NetconfDocumentedException {
         GetConfig getConfigOp = new GetConfig(yangStoreSnapshot, Optional.<String> absent(), transactionProvider,
                 configRegistryClient, NETCONF_SESSION_ID);
@@ -376,7 +413,7 @@ public class NetconfMappingTest extends AbstractConfigTest {
 
         edit("netconfMessages/editConfig.xml");
         commit();
-        Element response = getConfigRunning();
+        Document response = getConfigRunning();
         final int allInstances = response.getElementsByTagName("module").getLength();
 
         edit("netconfMessages/editConfig_replace_default.xml");
@@ -396,7 +433,7 @@ public class NetconfMappingTest extends AbstractConfigTest {
         } catch (NetconfDocumentedException e) {
             String message = e.getMessage();
             assertContainsString(message, "Element simple-long-2 present multiple times with different namespaces");
-            assertContainsString(message, "urn:opendaylight:params:xml:ns:yang:controller:test:impl");
+            assertContainsString(message, TEST_NAMESPACE);
             assertContainsString(message, XmlNetconfConstants.URN_OPENDAYLIGHT_PARAMS_XML_NS_YANG_CONTROLLER_CONFIG);
             throw e;
         }
@@ -422,7 +459,7 @@ public class NetconfMappingTest extends AbstractConfigTest {
         } catch (NetconfDocumentedException e) {
             String message = e.getMessage();
             assertContainsString(message, "Element binaryLeaf present multiple times with different namespaces");
-            assertContainsString(message, "urn:opendaylight:params:xml:ns:yang:controller:test:impl");
+            assertContainsString(message, TEST_NAMESPACE);
             assertContainsString(message, XmlNetconfConstants.URN_OPENDAYLIGHT_PARAMS_XML_NS_YANG_CONTROLLER_CONFIG);
             throw e;
         }
@@ -435,7 +472,7 @@ public class NetconfMappingTest extends AbstractConfigTest {
         edit("netconfMessages/namespaces/editConfig_typeNameConfigAttributeMatching.xml");
         commit();
 
-        Element response = getConfigRunning();
+        Document response = getConfigRunning();
         checkTypeConfigAttribute(response);
     }
 
@@ -477,7 +514,7 @@ public class NetconfMappingTest extends AbstractConfigTest {
 
         edit("netconfMessages/editConfig.xml");
         commit();
-        Element response = getConfigRunning();
+        Document response = getConfigRunning();
         final int allInstances = response.getElementsByTagName("instance").getLength();
 
         edit("netconfMessages/editConfig_replace_module.xml");
@@ -506,53 +543,42 @@ public class NetconfMappingTest extends AbstractConfigTest {
         executeOp(discardOp, "netconfMessages/discardChanges.xml");
     }
 
-    private void checkBinaryLeafEdited(final Element response) {
-        String responseTrimmed = XmlUtil.toString(response).replaceAll("\\s", "");
-        String substring = "<binaryLeafxmlns=\"urn:opendaylight:params:xml:ns:yang:controller:test:impl\">YmluYXJ5</binaryLeaf>";
-        assertContainsString(responseTrimmed, substring);
-        substring = "<binaryLeafxmlns=\"urn:opendaylight:params:xml:ns:yang:controller:test:impl\">ZGVmYXVsdEJpbg==</binaryLeaf>";
-        assertContainsString(responseTrimmed, substring);
+    private void checkBinaryLeafEdited(final Document response) throws NodeTestException, SAXException, IOException {
+        assertContainsElement(response, readXmlToElement("<binaryLeaf xmlns=\"urn:opendaylight:params:xml:ns:yang:controller:test:impl\">YmluYXJ5</binaryLeaf>"));
+        assertContainsElement(response, readXmlToElement("<binaryLeaf xmlns=\"urn:opendaylight:params:xml:ns:yang:controller:test:impl\">ZGVmYXVsdEJpbg==</binaryLeaf>"));
     }
 
-    private void checkTypedefs(final Element response) {
-        String responseTrimmed = XmlUtil.toString(response).replaceAll("\\s", "");
+    private void checkTypedefs(final Document response) throws NodeTestException, SAXException, IOException {
 
-        String substring = "<extendedxmlns=\"urn:opendaylight:params:xml:ns:yang:controller:test:impl\">10</extended>";
-        assertContainsString(responseTrimmed, substring);
+        assertContainsElement(response, readXmlToElement("<extended xmlns=\"urn:opendaylight:params:xml:ns:yang:controller:test:impl\">10</extended>"));
         // Default
-        assertContainsString(responseTrimmed,
-                "<extendedxmlns=\"urn:opendaylight:params:xml:ns:yang:controller:test:impl\">1</extended>");
+        assertContainsElement(response, readXmlToElement("<extended xmlns=\"urn:opendaylight:params:xml:ns:yang:controller:test:impl\">1</extended>"));
 
-        assertContainsString(responseTrimmed,
-                "<extended-twicexmlns=\"urn:opendaylight:params:xml:ns:yang:controller:test:impl\">20</extended-twice>");
+        assertContainsElement(response, readXmlToElement("<extended-twice xmlns=\"urn:opendaylight:params:xml:ns:yang:controller:test:impl\">20</extended-twice>"));
         // Default
-        assertContainsString(responseTrimmed,
-                "<extended-twicexmlns=\"urn:opendaylight:params:xml:ns:yang:controller:test:impl\">2</extended-twice>");
+        assertContainsElement(response, readXmlToElement("<extended-twice xmlns=\"urn:opendaylight:params:xml:ns:yang:controller:test:impl\">2</extended-twice>"));
 
-        assertContainsString(responseTrimmed,
-                "<extended-enumxmlns=\"urn:opendaylight:params:xml:ns:yang:controller:test:impl\">TWO</extended-enum>");
+        assertContainsElement(response, readXmlToElement("<extended-enum xmlns=\"urn:opendaylight:params:xml:ns:yang:controller:test:impl\">TWO</extended-enum>"));
         // Default
-        assertContainsString(responseTrimmed,
-                "<extended-enumxmlns=\"urn:opendaylight:params:xml:ns:yang:controller:test:impl\">ONE</extended-enum>");
+        assertContainsElement(response, readXmlToElement("<extended-enum xmlns=\"urn:opendaylight:params:xml:ns:yang:controller:test:impl\">ONE</extended-enum>"));
     }
 
     private void assertContainsString(String string, String substring) {
         assertThat(string, JUnitMatchers.containsString(substring));
     }
 
-    private void checkEnum(final Element response) {
-        XmlElement modulesElement = XmlElement.fromDomElement(response).getOnlyChildElement("data")
+    private void checkEnum(final Document response) {
+        XmlElement modulesElement = XmlElement.fromDomElement(response.getDocumentElement()).getOnlyChildElement("data")
                 .getOnlyChildElement("modules");
 
         String enumName = "extended-enum";
         String enumContent = "TWO";
 
         for (XmlElement moduleElement : modulesElement.getChildElements("module")) {
-            String name = moduleElement.getOnlyChildElement("name").getTextContent();
+            String name = moduleElement.getOnlyChildElement("prefix:name").getTextContent();
             if(name.equals(INSTANCE_NAME)) {
                 XmlElement enumAttr = moduleElement.getOnlyChildElement(enumName);
                 assertEquals(enumContent, enumAttr.getTextContent());
-
                 return;
             }
         }
@@ -560,14 +586,14 @@ public class NetconfMappingTest extends AbstractConfigTest {
         fail("Enum attribute " + enumName + ":" + enumContent + " not present in " + XmlUtil.toString(response));
     }
 
-    private void checkTestingDeps(Element response) {
+    private void checkTestingDeps(Document response) {
         int testingDepsSize = response.getElementsByTagName("testing-deps").getLength();
         assertEquals(2, testingDepsSize);
     }
 
-    private void checkTypeConfigAttribute(Element response) {
+    private void checkTypeConfigAttribute(Document response) {
 
-        XmlElement modulesElement = XmlElement.fromDomElement(response).getOnlyChildElement("data")
+        XmlElement modulesElement = XmlElement.fromDomElement(response.getDocumentElement()).getOnlyChildElement("data")
                 .getOnlyChildElement("modules");
 
         List<String> expectedValues = Lists.newArrayList("default-string", "configAttributeType");
@@ -575,7 +601,7 @@ public class NetconfMappingTest extends AbstractConfigTest {
 
         for (XmlElement moduleElement : modulesElement.getChildElements("module")) {
             for (XmlElement type : moduleElement.getChildElements("type")) {
-                if (type.getAttribute(XmlUtil.XMLNS_ATTRIBUTE_KEY).equals("") == false) {
+                if (type.getNamespace() != null) {
                     configAttributeType.add(type.getTextContent());
                 }
             }
@@ -629,7 +655,7 @@ public class NetconfMappingTest extends AbstractConfigTest {
 
         // check after edit
         commit();
-        Element response = get();
+        Document response = get();
 
         assertEquals(2/*With runtime beans*/ + 2 /*Without runtime beans*/, getElementsSize(response, "module"));
         // data from state
@@ -649,29 +675,31 @@ public class NetconfMappingTest extends AbstractConfigTest {
         RuntimeRpc netconf = new RuntimeRpc(yangStoreSnapshot, configRegistryClient, NETCONF_SESSION_ID);
 
         response = executeOp(netconf, "netconfMessages/rpc.xml");
-        assertContainsString(XmlUtil.toString(response), "testarg1".toUpperCase());
+        assertContainsElementWithText(response, "testarg1");
 
         response = executeOp(netconf, "netconfMessages/rpcInner.xml");
-        assertContainsString(XmlUtil.toString(response), "ok");
+        Document expectedReplyOk = XmlFileLoader.xmlFileToDocument("netconfMessages/rpc-reply_ok.xml");
+        XMLUnit.setIgnoreWhitespace(true);
+        XMLAssert.assertXMLEqual(expectedReplyOk, response);
 
         response = executeOp(netconf, "netconfMessages/rpcInnerInner.xml");
-        assertContainsString(XmlUtil.toString(response), "true");
+        assertContainsElementWithText(response, "true");
 
         response = executeOp(netconf, "netconfMessages/rpcInnerInner_complex_output.xml");
-        assertContainsString(XmlUtil.toString(response), "1");
-        assertContainsString(XmlUtil.toString(response), "2");
+        assertContainsElementWithText(response, "1");
+        assertContainsElementWithText(response, "2");
     }
 
-    private Element get() throws NetconfDocumentedException, ParserConfigurationException, SAXException, IOException {
+    private Document get() throws NetconfDocumentedException, ParserConfigurationException, SAXException, IOException {
         Get getOp = new Get(yangStoreSnapshot, configRegistryClient, NETCONF_SESSION_ID, transactionProvider);
         return executeOp(getOp, "netconfMessages/get.xml");
     }
 
-    private int getElementsSize(Element response, String elementName) {
+    private int getElementsSize(Document response, String elementName) {
         return response.getElementsByTagName(elementName).getLength();
     }
 
-    private Element executeOp(final NetconfOperation op, final String filename) throws ParserConfigurationException,
+    private Document executeOp(final NetconfOperation op, final String filename) throws ParserConfigurationException,
             SAXException, IOException, NetconfDocumentedException {
 
         final Document request = XmlFileLoader.xmlFileToDocument(filename);
@@ -683,7 +711,7 @@ public class NetconfMappingTest extends AbstractConfigTest {
 
         final Document response = op.handle(request, NetconfOperationChainedExecution.EXECUTION_TERMINATION_POINT);
         logger.debug("Got response\n{}", XmlUtil.toString(response));
-        return response.getDocumentElement();
+        return response;
     }
 
     private List<InputStream> getYangs() throws FileNotFoundException {
index 76afe8eb39b95f4500fd847cfe5df9a297c656e7..0cc55719e12875ece51220073657867fc3a9c21f 100644 (file)
@@ -10,14 +10,17 @@ package org.opendaylight.controller.netconf.persist.impl.osgi;
 
 import com.google.common.annotations.VisibleForTesting;
 import org.opendaylight.controller.config.persist.api.ConfigSnapshotHolder;
+import org.opendaylight.controller.netconf.mapping.api.NetconfOperationProvider;
 import org.opendaylight.controller.netconf.mapping.api.NetconfOperationServiceFactory;
 import org.opendaylight.controller.netconf.persist.impl.ConfigPersisterNotificationHandler;
 import org.opendaylight.controller.netconf.persist.impl.ConfigPusher;
 import org.opendaylight.controller.netconf.persist.impl.PersisterAggregator;
+import org.opendaylight.controller.netconf.util.CloseableUtil;
 import org.osgi.framework.BundleActivator;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.Constants;
 import org.osgi.framework.Filter;
+import org.osgi.framework.InvalidSyntaxException;
 import org.osgi.framework.ServiceReference;
 import org.osgi.util.tracker.ServiceTracker;
 import org.osgi.util.tracker.ServiceTrackerCustomizer;
@@ -33,6 +36,7 @@ import java.util.concurrent.TimeUnit;
 public class ConfigPersisterActivator implements BundleActivator {
 
     private static final Logger logger = LoggerFactory.getLogger(ConfigPersisterActivator.class);
+    private static final MBeanServer platformMBeanServer = ManagementFactory.getPlatformMBeanServer();
 
     public static final String MAX_WAIT_FOR_CAPABILITIES_MILLIS_PROPERTY = "maxWaitForCapabilitiesMillis";
     private static final long MAX_WAIT_FOR_CAPABILITIES_MILLIS_DEFAULT = TimeUnit.MINUTES.toMillis(2);
@@ -43,9 +47,6 @@ public class ConfigPersisterActivator implements BundleActivator {
 
     public static final String STORAGE_ADAPTER_CLASS_PROP_SUFFIX = "storageAdapterClass";
 
-
-    private static final MBeanServer platformMBeanServer = ManagementFactory.getPlatformMBeanServer();
-
     private List<AutoCloseable> autoCloseables;
 
 
@@ -55,56 +56,32 @@ public class ConfigPersisterActivator implements BundleActivator {
         autoCloseables = new ArrayList<>();
         PropertiesProviderBaseImpl propertiesProvider = new PropertiesProviderBaseImpl(context);
 
-
         final PersisterAggregator persisterAggregator = PersisterAggregator.createFromProperties(propertiesProvider);
         autoCloseables.add(persisterAggregator);
-        final long maxWaitForCapabilitiesMillis = getMaxWaitForCapabilitiesMillis(propertiesProvider);
-        final List<ConfigSnapshotHolder> configs = persisterAggregator.loadLastConfigs();
-        final long conflictingVersionTimeoutMillis = getConflictingVersionTimeoutMillis(propertiesProvider);
+        long maxWaitForCapabilitiesMillis = getMaxWaitForCapabilitiesMillis(propertiesProvider);
+        List<ConfigSnapshotHolder> configs = persisterAggregator.loadLastConfigs();
+        long conflictingVersionTimeoutMillis = getConflictingVersionTimeoutMillis(propertiesProvider);
         logger.trace("Following configs will be pushed: {}", configs);
-        ServiceTrackerCustomizer<NetconfOperationServiceFactory, NetconfOperationServiceFactory> configNetconfCustomizer = new ServiceTrackerCustomizer<NetconfOperationServiceFactory, NetconfOperationServiceFactory>() {
-            @Override
-            public NetconfOperationServiceFactory addingService(ServiceReference<NetconfOperationServiceFactory> reference) {
-                NetconfOperationServiceFactory service = reference.getBundle().getBundleContext().getService(reference);
-                final ConfigPusher configPusher = new ConfigPusher(service, maxWaitForCapabilitiesMillis, conflictingVersionTimeoutMillis);
-                logger.debug("Configuration Persister got %s", service);
-                final Thread pushingThread = new Thread(new Runnable() {
-                    @Override
-                    public void run() {
-                        configPusher.pushConfigs(configs);
-                        logger.info("Configuration Persister initialization completed.");
-                        ConfigPersisterNotificationHandler jmxNotificationHandler = new ConfigPersisterNotificationHandler(platformMBeanServer, persisterAggregator);
-                        synchronized (ConfigPersisterActivator.this) {
-                            autoCloseables.add(jmxNotificationHandler);
-                        }
-                    }
-                }, "config-pusher");
-                synchronized (ConfigPersisterActivator.this){
-                    autoCloseables.add(new AutoCloseable() {
-                        @Override
-                        public void close() throws Exception {
-                            pushingThread.interrupt();
-                        }
-                    });
-                }
-                pushingThread.start();
-                return service;
-            }
 
-            @Override
-            public void modifiedService(ServiceReference<NetconfOperationServiceFactory> reference, NetconfOperationServiceFactory service) {
-            }
+        InnerCustomizer innerCustomizer = new InnerCustomizer(configs, maxWaitForCapabilitiesMillis,
+                conflictingVersionTimeoutMillis, persisterAggregator);
+        OuterCustomizer outerCustomizer = new OuterCustomizer(context, innerCustomizer);
+        new ServiceTracker<>(context, NetconfOperationProvider.class, outerCustomizer).open();
+    }
 
-            @Override
-            public void removedService(ServiceReference<NetconfOperationServiceFactory> reference, NetconfOperationServiceFactory service) {
-            }
-        };
+    private long getConflictingVersionTimeoutMillis(PropertiesProviderBaseImpl propertiesProvider) {
+        String timeoutProperty = propertiesProvider.getProperty(CONFLICTING_VERSION_TIMEOUT_MILLIS_PROPERTY);
+        return timeoutProperty == null ? CONFLICTING_VERSION_TIMEOUT_MILLIS_DEFAULT : Long.valueOf(timeoutProperty);
+    }
 
-        Filter filter = context.createFilter(getFilterString());
+    private long getMaxWaitForCapabilitiesMillis(PropertiesProviderBaseImpl propertiesProvider) {
+        String timeoutProperty = propertiesProvider.getProperty(MAX_WAIT_FOR_CAPABILITIES_MILLIS_PROPERTY);
+        return timeoutProperty == null ? MAX_WAIT_FOR_CAPABILITIES_MILLIS_DEFAULT : Long.valueOf(timeoutProperty);
+    }
 
-        ServiceTracker<NetconfOperationServiceFactory, NetconfOperationServiceFactory> tracker =
-                new ServiceTracker<>(context, filter, configNetconfCustomizer);
-        tracker.open();
+    @Override
+    public synchronized void stop(BundleContext context) throws Exception {
+        CloseableUtil.closeAll(autoCloseables);
     }
 
 
@@ -116,32 +93,92 @@ public class ConfigPersisterActivator implements BundleActivator {
                 ")";
     }
 
-    private long getConflictingVersionTimeoutMillis(PropertiesProviderBaseImpl propertiesProvider) {
-        String timeoutProperty = propertiesProvider.getProperty(CONFLICTING_VERSION_TIMEOUT_MILLIS_PROPERTY);
-        return timeoutProperty == null ? CONFLICTING_VERSION_TIMEOUT_MILLIS_DEFAULT : Long.valueOf(timeoutProperty);
-    }
+    class OuterCustomizer implements ServiceTrackerCustomizer<NetconfOperationProvider, NetconfOperationProvider> {
+        private final BundleContext context;
+        private final InnerCustomizer innerCustomizer;
 
-    private long getMaxWaitForCapabilitiesMillis(PropertiesProviderBaseImpl propertiesProvider) {
-        String timeoutProperty = propertiesProvider.getProperty(MAX_WAIT_FOR_CAPABILITIES_MILLIS_PROPERTY);
-        return timeoutProperty == null ? MAX_WAIT_FOR_CAPABILITIES_MILLIS_DEFAULT : Long.valueOf(timeoutProperty);
-    }
+        OuterCustomizer(BundleContext context, InnerCustomizer innerCustomizer) {
+            this.context = context;
+            this.innerCustomizer = innerCustomizer;
+        }
 
-    @Override
-    public synchronized void stop(BundleContext context) throws Exception {
-        Exception lastException = null;
-        for (AutoCloseable autoCloseable : autoCloseables) {
+        @Override
+        public NetconfOperationProvider addingService(ServiceReference<NetconfOperationProvider> reference) {
+            logger.trace("Got OuterCustomizer.addingService {}", reference);
+            // JMX was registered, track config-netconf-connector
+            Filter filter;
             try {
-                autoCloseable.close();
-            } catch (Exception e) {
-                if (lastException == null) {
-                    lastException = e;
-                } else {
-                    lastException.addSuppressed(e);
+                filter = context.createFilter(getFilterString());
+            } catch (InvalidSyntaxException e) {
+                throw new IllegalStateException(e);
+            }
+            new ServiceTracker<>(context, filter, innerCustomizer).open();
+            return null;
+        }
+
+        @Override
+        public void modifiedService(ServiceReference<NetconfOperationProvider> reference, NetconfOperationProvider service) {
+
+        }
+
+        @Override
+        public void removedService(ServiceReference<NetconfOperationProvider> reference, NetconfOperationProvider service) {
+
+        }
+    }
+
+    class InnerCustomizer implements ServiceTrackerCustomizer<NetconfOperationServiceFactory, NetconfOperationServiceFactory> {
+        private final List<ConfigSnapshotHolder> configs;
+        private final PersisterAggregator persisterAggregator;
+        private final long maxWaitForCapabilitiesMillis, conflictingVersionTimeoutMillis;
+
+
+        InnerCustomizer(List<ConfigSnapshotHolder> configs, long maxWaitForCapabilitiesMillis, long conflictingVersionTimeoutMillis,
+                        PersisterAggregator persisterAggregator) {
+            this.configs = configs;
+            this.maxWaitForCapabilitiesMillis = maxWaitForCapabilitiesMillis;
+            this.conflictingVersionTimeoutMillis = conflictingVersionTimeoutMillis;
+            this.persisterAggregator = persisterAggregator;
+        }
+
+        @Override
+        public NetconfOperationServiceFactory addingService(ServiceReference<NetconfOperationServiceFactory> reference) {
+            logger.trace("Got InnerCustomizer.addingService {}", reference);
+            NetconfOperationServiceFactory service = reference.getBundle().getBundleContext().getService(reference);
+
+            final ConfigPusher configPusher = new ConfigPusher(service, maxWaitForCapabilitiesMillis, conflictingVersionTimeoutMillis);
+            logger.debug("Configuration Persister got {}", service);
+            final Thread pushingThread = new Thread(new Runnable() {
+                @Override
+                public void run() {
+                    configPusher.pushConfigs(configs);
+                    logger.info("Configuration Persister initialization completed.");
+                    ConfigPersisterNotificationHandler jmxNotificationHandler = new ConfigPersisterNotificationHandler(platformMBeanServer, persisterAggregator);
+                    synchronized (ConfigPersisterActivator.this) {
+                        autoCloseables.add(jmxNotificationHandler);
+                    }
                 }
+            }, "config-pusher");
+            synchronized (ConfigPersisterActivator.this) {
+                autoCloseables.add(new AutoCloseable() {
+                    @Override
+                    public void close() throws Exception {
+                        pushingThread.interrupt();
+                    }
+                });
             }
+            pushingThread.start();
+            return service;
+        }
+
+        @Override
+        public void modifiedService(ServiceReference<NetconfOperationServiceFactory> reference, NetconfOperationServiceFactory service) {
         }
-        if (lastException != null) {
-            throw lastException;
+
+        @Override
+        public void removedService(ServiceReference<NetconfOperationServiceFactory> reference, NetconfOperationServiceFactory service) {
         }
+
     }
 }
+
index 493ecd9250262959e78523c4ed1dc49c7d177474..b1bf23292875611d40c6875fd1a05bb8d81b328e 100644 (file)
@@ -25,9 +25,7 @@ import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
 import org.xml.sax.SAXException;
 
-import javax.management.MBeanServer;
 import java.io.IOException;
-import java.lang.management.ManagementFactory;
 
 import static org.mockito.Matchers.any;
 import static org.mockito.Matchers.anyString;
@@ -41,7 +39,6 @@ public class ConfigPersisterTest {
 
     private MockedBundleContext ctx;
     private ConfigPersisterActivator configPersisterActivator;
-    private static final MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
     private TestingExceptionHandler handler;
 
 
index 8bc787bdef39e571fc4cef62add5b0854c491130..95fd5f65498e507c54e6d88023dc24b25475031a 100644 (file)
@@ -14,6 +14,7 @@ import org.mockito.MockitoAnnotations;
 import org.opendaylight.controller.config.persist.api.ConfigSnapshotHolder;
 import org.opendaylight.controller.config.persist.api.Persister;
 import org.opendaylight.controller.config.persist.api.PropertiesProvider;
+import org.opendaylight.controller.netconf.mapping.api.NetconfOperationProvider;
 import org.opendaylight.controller.netconf.mapping.api.NetconfOperationService;
 import org.opendaylight.controller.netconf.mapping.api.NetconfOperationServiceFactory;
 import org.opendaylight.controller.netconf.persist.impl.DummyAdapter;
@@ -39,7 +40,7 @@ final class MockedBundleContext {
     @Mock
     private BundleContext context;
     @Mock
-    private Filter filter;
+    private Filter outerFilter, innerFilter;
     @Mock
     private ServiceReference<?> serviceReference;
     @Mock
@@ -53,12 +54,21 @@ final class MockedBundleContext {
         MockitoAnnotations.initMocks(this);
         doReturn(null).when(context).getProperty(anyString());
         initContext(maxWaitForCapabilitiesMillis, conflictingVersionTimeoutMillis);
-        doReturn(filter).when(context).createFilter(ConfigPersisterActivator.getFilterString());
-        String filterString = "filter";
-        doReturn(filterString).when(filter).toString();
-        doNothing().when(context).addServiceListener(any(ServiceListener.class), eq(filterString));
+
+        String outerFilterString = "(objectClass=org.opendaylight.controller.netconf.mapping.api.NetconfOperationProvider)";
+        doReturn(outerFilter).when(context).createFilter(outerFilterString);
+        doNothing().when(context).addServiceListener(any(ServiceListener.class), eq(outerFilterString));
         ServiceReference<?>[] toBeReturned = {serviceReference};
-        doReturn(toBeReturned).when(context).getServiceReferences((String) null, filterString);
+        doReturn(toBeReturned).when(context).getServiceReferences(NetconfOperationProvider.class.getName(), null);
+
+        String innerFilterString = "innerfilter";
+        doReturn(innerFilterString).when(outerFilter).toString();
+
+        doReturn(innerFilter).when(context).createFilter(ConfigPersisterActivator.getFilterString());
+        doReturn(innerFilterString).when(innerFilter).toString();
+        doNothing().when(context).addServiceListener(any(ServiceListener.class), eq(innerFilterString));
+
+        doReturn(toBeReturned).when(context).getServiceReferences((String) null, innerFilterString);
         doReturn(bundle).when(serviceReference).getBundle();
         doReturn(context).when(bundle).getBundleContext();
         doReturn("").when(serviceReference).toString();
@@ -66,6 +76,7 @@ final class MockedBundleContext {
         doReturn(service).when(serviceFactory).createService(anyString());
         doReturn(Collections.emptySet()).when(service).getCapabilities();
         doNothing().when(service).close();
+        doReturn("serviceFactoryMock").when(serviceFactory).toString();
     }
 
     public BundleContext getBundleContext() {
diff --git a/opendaylight/netconf/netconf-api/src/main/java/org/opendaylight/controller/netconf/api/AbstractNetconfSession.java b/opendaylight/netconf/netconf-api/src/main/java/org/opendaylight/controller/netconf/api/AbstractNetconfSession.java
deleted file mode 100644 (file)
index f85d9b9..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.netconf.api;
-
-import io.netty.channel.Channel;
-import io.netty.channel.ChannelFuture;
-
-import java.io.IOException;
-
-import org.opendaylight.protocol.framework.AbstractProtocolSession;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public abstract class AbstractNetconfSession<S extends NetconfSession, L extends NetconfSessionListener<S>> extends AbstractProtocolSession<NetconfMessage> implements NetconfSession {
-    private static final Logger logger = LoggerFactory.getLogger(AbstractNetconfSession.class);
-    private final L sessionListener;
-    private final long sessionId;
-    private boolean up = false;
-
-    private final Channel channel;
-
-    protected AbstractNetconfSession(L sessionListener, Channel channel, long sessionId) {
-        this.sessionListener = sessionListener;
-        this.channel = channel;
-        this.sessionId = sessionId;
-        logger.debug("Session {} created", sessionId);
-    }
-
-    protected abstract S thisInstance();
-
-    @Override
-    public void close() {
-        channel.close();
-        up = false;
-        sessionListener.onSessionTerminated(thisInstance(), new NetconfTerminationReason("Session closed"));
-    }
-
-    @Override
-    protected void handleMessage(NetconfMessage netconfMessage) {
-        logger.debug("handling incoming message");
-        sessionListener.onMessage(thisInstance(), netconfMessage);
-    }
-
-    @Override
-    public ChannelFuture sendMessage(NetconfMessage netconfMessage) {
-        return channel.writeAndFlush(netconfMessage);
-    }
-
-    @Override
-    protected void endOfInput() {
-        logger.debug("Session {} end of input detected while session was in state {}", toString(), isUp() ? "up"
-                : "initialized");
-        if (isUp()) {
-            this.sessionListener.onSessionDown(thisInstance(), new IOException("End of input detected. Close the session."));
-        }
-    }
-
-    @Override
-    protected void sessionUp() {
-        logger.debug("Session {} up", toString());
-        sessionListener.onSessionUp(thisInstance());
-        this.up = true;
-    }
-
-    @Override
-    public String toString() {
-        final StringBuffer sb = new StringBuffer("ServerNetconfSession{");
-        sb.append("sessionId=").append(sessionId);
-        sb.append('}');
-        return sb.toString();
-    }
-
-    public final boolean isUp() {
-        return up;
-    }
-
-    public final long getSessionId() {
-        return sessionId;
-    }
-}
-
diff --git a/opendaylight/netconf/netconf-api/src/main/java/org/opendaylight/controller/netconf/api/NetconfClientSessionPreferences.java b/opendaylight/netconf/netconf-api/src/main/java/org/opendaylight/controller/netconf/api/NetconfClientSessionPreferences.java
new file mode 100644 (file)
index 0000000..58242c7
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.controller.netconf.api;
+
+/**
+ * The only input for the start of a NETCONF session is hello-message.
+ */
+public final class NetconfClientSessionPreferences extends NetconfSessionPreferences {
+
+    private final NetconfMessage startExiMessage;
+
+    public NetconfClientSessionPreferences(final NetconfMessage helloMessage,
+                                     final NetconfMessage startExiMessage) {
+        super(helloMessage);
+        this.startExiMessage = startExiMessage;
+    }
+
+    /**
+     * @return the startExiMessage
+     */
+    public NetconfMessage getStartExiMessage() {
+        return startExiMessage;
+    }
+}
index d56213cf16eebc5e3656a685be4ace2906cd315f..d63a43e7eb01e29f8f0c217e9c475cdaf0f7ccf3 100644 (file)
@@ -15,7 +15,8 @@ public final class NetconfServerSessionPreferences extends NetconfSessionPrefere
 
     private final long sessionId;
 
-    public NetconfServerSessionPreferences(final NetconfMessage helloMessage, long sessionId) {
+    public NetconfServerSessionPreferences(final NetconfMessage helloMessage,
+                                           long sessionId) {
         super(helloMessage);
         this.sessionId = sessionId;
     }
index e52e71ceea91ac43f470c110d1127c499b748b42..0bd54979f8cab1c86a080b8bd9a2689625a122c0 100644 (file)
@@ -12,5 +12,7 @@ import io.netty.channel.ChannelFuture;
 import org.opendaylight.protocol.framework.ProtocolSession;
 
 public interface NetconfSession extends ProtocolSession<NetconfMessage> {
+
     ChannelFuture sendMessage(NetconfMessage message);
+
 }
index be3040802cdfdc4ab7eaf3ac266914e936de82b0..0f3717abec62b9846e12e25e37e81267ba3b4c2e 100644 (file)
@@ -9,6 +9,7 @@
 package org.opendaylight.controller.netconf.api;
 
 public class NetconfSessionPreferences {
+
     private final NetconfMessage helloMessage;
 
     public NetconfSessionPreferences(final NetconfMessage helloMessage) {
@@ -21,4 +22,5 @@ public class NetconfSessionPreferences {
     public NetconfMessage getHelloMessage() {
         return this.helloMessage;
     }
+
 }
index 9de3071060ac5a67f58fc687f153adcdf15d57ba..a15f9e092576c6d2a26f4168bc978a2b3140a773 100644 (file)
@@ -22,4 +22,9 @@ public class NetconfTerminationReason implements TerminationReason {
     public String getErrorMessage() {
         return reason;
     }
+
+    @Override
+    public String toString() {
+        return reason;
+    }
 }
index b0f5f748106ab499ab95983cbb358f84536dbd66..9c11cb1af7aaf905fe143028b1b944860f7bb4a1 100644 (file)
@@ -60,6 +60,7 @@
                             org.opendaylight.controller.netconf.util,
                             org.opendaylight.controller.netconf.util.*,
                             org.opendaylight.protocol.framework,
+                            org.openexi.*,
                             org.slf4j,
                             org.w3c.dom,
                             org.xml.sax,
                     </instructions>
                 </configuration>
             </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-jar-plugin</artifactId>
+                <version>2.4</version>
+                <executions>
+                    <execution>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>test-jar</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
         </plugins>
     </build>
 
diff --git a/opendaylight/netconf/netconf-client/src/main/java/org/opendaylight/controller/netconf/client/AbstractNetconfClientNotifySessionListener.java b/opendaylight/netconf/netconf-client/src/main/java/org/opendaylight/controller/netconf/client/AbstractNetconfClientNotifySessionListener.java
deleted file mode 100644 (file)
index 6ae966d..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-package org.opendaylight.controller.netconf.client;
-
-import org.opendaylight.controller.netconf.api.NetconfMessage;
-import org.opendaylight.controller.netconf.util.xml.XmlElement;
-import org.opendaylight.controller.netconf.util.xml.XmlNetconfConstants;
-
-/**
- * Class extending {@link NetconfClientSessionListener} to provide notification capability.
- */
-public abstract class AbstractNetconfClientNotifySessionListener extends SimpleNetconfClientSessionListener {
-    /*
-     * Maybe some capabilities could be expressed as internal NetconfClientSessionListener handlers.
-     * It would enable NetconfClient functionality to be extended by using namespace handlers.
-     * So far let just enable notification capability by extending and let parent class intact.
-     */
-
-    /**
-     * As class purpose is to provide notification capability to session listener
-     * onMessage method is not allowed to be further overridden.
-     * {@see #onNotification(NetconfClientSession, NetconfMessage)}
-     *
-     * @param session {@see NetconfClientSessionListener#onMessage(NetconfClientSession, NetconfMessage)}
-     * @param message {@see NetconfClientSessionListener#onMessage(NetconfClientSession, NetconfMessage)}
-     */
-    @Override
-    public final void onMessage(NetconfClientSession session, NetconfMessage message) {
-        if (isNotification(message)) {
-            onNotification(session, message);
-        } else {
-            super.onMessage(session, message);
-        }
-    }
-
-    /**
-     * Method intended to customize notification processing.
-     *
-     * @param session {@see NetconfClientSessionListener#onMessage(NetconfClientSession, NetconfMessage)}
-     * @param message {@see NetconfClientSessionListener#onMessage(NetconfClientSession, NetconfMessage)}
-     */
-    public abstract void onNotification(NetconfClientSession session, NetconfMessage message);
-
-    private boolean isNotification(NetconfMessage message) {
-        XmlElement xmle = XmlElement.fromDomDocument(message.getDocument());
-        return XmlNetconfConstants.NOTIFICATION_ELEMENT_NAME.equals(xmle.getName()) ;
-    }
-}
diff --git a/opendaylight/netconf/netconf-client/src/main/java/org/opendaylight/controller/netconf/client/NetconfClient.java b/opendaylight/netconf/netconf-client/src/main/java/org/opendaylight/controller/netconf/client/NetconfClient.java
deleted file mode 100644 (file)
index 4cdca20..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-package org.opendaylight.controller.netconf.client;
-
-import io.netty.util.concurrent.Future;
-import io.netty.util.concurrent.GlobalEventExecutor;
-
-import java.io.Closeable;
-import java.io.IOException;
-import java.net.InetSocketAddress;
-import java.util.Set;
-import java.util.concurrent.CancellationException;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
-
-import org.opendaylight.controller.netconf.api.NetconfMessage;
-import org.opendaylight.protocol.framework.NeverReconnectStrategy;
-import org.opendaylight.protocol.framework.ReconnectStrategy;
-import org.opendaylight.protocol.framework.TimedReconnectStrategy;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.base.Preconditions;
-import com.google.common.base.Stopwatch;
-import com.google.common.collect.Sets;
-
-/**
- * @deprecated Use {@link NetconfClientDispatcher.createClient()} or {@link NetconfClientDispatcher.createReconnectingClient()} instead.
- */
-@Deprecated
-public class NetconfClient implements Closeable {
-
-    private static final Logger logger = LoggerFactory.getLogger(NetconfClient.class);
-
-    public static final int DEFAULT_CONNECT_TIMEOUT = 5000;
-    private final NetconfClientDispatcher dispatch;
-    private final String label;
-    private final NetconfClientSession clientSession;
-    private final NetconfClientSessionListener sessionListener;
-    private final long sessionId;
-    private final InetSocketAddress address;
-
-    // TODO test reconnecting constructor
-    public NetconfClient(String clientLabelForLogging, InetSocketAddress address, int connectionAttempts,
-            int attemptMsTimeout, NetconfClientDispatcher netconfClientDispatcher) throws InterruptedException {
-        this(clientLabelForLogging, address, getReconnectStrategy(connectionAttempts, attemptMsTimeout),
-                netconfClientDispatcher);
-    }
-
-    private NetconfClient(String clientLabelForLogging, InetSocketAddress address, ReconnectStrategy strat, NetconfClientDispatcher netconfClientDispatcher) throws InterruptedException {
-        this.label = clientLabelForLogging;
-        dispatch = netconfClientDispatcher;
-        sessionListener = new SimpleNetconfClientSessionListener();
-        Future<NetconfClientSession> clientFuture = dispatch.createClient(address, sessionListener, strat);
-        this.address = address;
-        clientSession = get(clientFuture);
-        this.sessionId = clientSession.getSessionId();
-    }
-
-    private NetconfClientSession get(Future<NetconfClientSession> clientFuture) throws InterruptedException {
-        try {
-            return clientFuture.get();
-        } catch (CancellationException e) {
-            throw new RuntimeException("Cancelling " + this, e);
-        } catch (ExecutionException e) {
-            throw new IllegalStateException("Unable to create " + this, e);
-        }
-    }
-
-    public static NetconfClient clientFor(String clientLabelForLogging, InetSocketAddress address, ReconnectStrategy strategy, NetconfClientDispatcher netconfClientDispatcher) throws InterruptedException {
-        return new NetconfClient(clientLabelForLogging,address,strategy,netconfClientDispatcher);
-    }
-
-    public static NetconfClient clientFor(String clientLabelForLogging, InetSocketAddress address,
-            ReconnectStrategy strategy, NetconfClientDispatcher netconfClientDispatcher, NetconfClientSessionListener listener) throws InterruptedException {
-        return new NetconfClient(clientLabelForLogging,address,strategy,netconfClientDispatcher,listener);
-    }
-
-    public NetconfClient(String clientLabelForLogging, InetSocketAddress address, int connectTimeoutMs,
-            NetconfClientDispatcher netconfClientDispatcher) throws InterruptedException {
-        this(clientLabelForLogging, address,
-                new NeverReconnectStrategy(GlobalEventExecutor.INSTANCE, connectTimeoutMs), netconfClientDispatcher);
-    }
-
-    public NetconfClient(String clientLabelForLogging, InetSocketAddress address,
-            NetconfClientDispatcher netconfClientDispatcher) throws InterruptedException {
-        this(clientLabelForLogging, address, new NeverReconnectStrategy(GlobalEventExecutor.INSTANCE,
-                DEFAULT_CONNECT_TIMEOUT), netconfClientDispatcher);
-    }
-
-    public NetconfClient(String clientLabelForLogging, InetSocketAddress address, ReconnectStrategy strategy,
-            NetconfClientDispatcher netconfClientDispatcher, NetconfClientSessionListener listener) throws InterruptedException{
-        this.label = clientLabelForLogging;
-        dispatch = netconfClientDispatcher;
-        sessionListener = listener;
-        Future<NetconfClientSession> clientFuture = dispatch.createClient(address, sessionListener, strategy);
-        this.address = address;
-        clientSession = get(clientFuture);
-        this.sessionId = clientSession.getSessionId();
-    }
-
-    public Future<NetconfMessage> sendRequest(NetconfMessage message) {
-        return ((SimpleNetconfClientSessionListener)sessionListener).sendRequest(message);
-    }
-
-    /**
-     * @deprecated Use {@link sendRequest} instead
-     */
-    @Deprecated
-    public NetconfMessage sendMessage(NetconfMessage message) throws ExecutionException, InterruptedException, TimeoutException {
-        return sendMessage(message, 5, 1000);
-    }
-
-    /**
-     * @deprecated Use {@link sendRequest} instead
-     */
-    @Deprecated
-    public NetconfMessage sendMessage(NetconfMessage message, int attempts, int attemptMsDelay) throws ExecutionException, InterruptedException, TimeoutException {
-        //logger.debug("Sending message: {}",XmlUtil.toString(message.getDocument()));
-        final Stopwatch stopwatch = new Stopwatch().start();
-
-        try {
-            return sendRequest(message).get(attempts * attemptMsDelay, TimeUnit.MILLISECONDS);
-        } finally {
-            stopwatch.stop();
-            logger.debug("Total time spent waiting for response from {}: {} ms", address, stopwatch.elapsed(TimeUnit.MILLISECONDS));
-        }
-    }
-
-    @Override
-    public void close() throws IOException {
-        clientSession.close();
-    }
-
-    public NetconfClientDispatcher getNetconfClientDispatcher() {
-        return dispatch;
-    }
-
-    private static ReconnectStrategy getReconnectStrategy(int connectionAttempts, int attemptMsTimeout) {
-        return new TimedReconnectStrategy(GlobalEventExecutor.INSTANCE, attemptMsTimeout, 1000, 1.0, null,
-                Long.valueOf(connectionAttempts), null);
-    }
-
-    @Override
-    public String toString() {
-        final StringBuffer sb = new StringBuffer("NetconfClient{");
-        sb.append("label=").append(label);
-        sb.append(", sessionId=").append(sessionId);
-        sb.append('}');
-        return sb.toString();
-    }
-
-    public long getSessionId() {
-        return sessionId;
-    }
-
-    public Set<String> getCapabilities() {
-        Preconditions.checkState(clientSession != null, "Client was not initialized successfully");
-        return Sets.newHashSet(clientSession.getServerCapabilities());
-    }
-
-    public NetconfClientSession getClientSession() {
-        return clientSession;
-    }
-}
index 43664b3233b7fdca0787016089cc90a6f1b60553..20da6aa86934a71eb91a4461988d8d1097babba8 100644 (file)
@@ -8,15 +8,12 @@
 
 package org.opendaylight.controller.netconf.client;
 
+import com.google.common.base.Optional;
 import io.netty.channel.EventLoopGroup;
 import io.netty.channel.socket.SocketChannel;
 import io.netty.util.HashedWheelTimer;
 import io.netty.util.concurrent.Future;
 import io.netty.util.concurrent.Promise;
-
-import java.io.Closeable;
-import java.net.InetSocketAddress;
-
 import org.opendaylight.controller.netconf.util.AbstractChannelInitializer;
 import org.opendaylight.controller.netconf.util.messages.NetconfHelloMessageAdditionalHeader;
 import org.opendaylight.protocol.framework.AbstractDispatcher;
@@ -26,7 +23,8 @@ import org.opendaylight.protocol.framework.SessionListenerFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Optional;
+import java.io.Closeable;
+import java.net.InetSocketAddress;
 
 public class NetconfClientDispatcher extends AbstractDispatcher<NetconfClientSession, NetconfClientSessionListener> implements Closeable {
 
index 2d07dd58332ea6bd8b5c030a6408be876aae0278..ad50fedf6b564fbef12cfd6f8e3308b717d9515a 100644 (file)
@@ -9,13 +9,17 @@
 package org.opendaylight.controller.netconf.client;
 
 import io.netty.channel.Channel;
-
-import java.util.Collection;
-
-import org.opendaylight.controller.netconf.api.AbstractNetconfSession;
+import org.opendaylight.controller.netconf.util.AbstractNetconfSession;
+import org.opendaylight.controller.netconf.util.handler.NetconfEXICodec;
+import org.opendaylight.controller.netconf.util.handler.NetconfEXIToMessageDecoder;
+import org.opendaylight.controller.netconf.util.handler.NetconfMessageToEXIEncoder;
+import org.opendaylight.controller.netconf.util.handler.NetconfMessageToXMLEncoder;
+import org.opendaylight.controller.netconf.util.handler.NetconfXMLToMessageDecoder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.util.Collection;
+
 public final class NetconfClientSession extends AbstractNetconfSession<NetconfClientSession, NetconfClientSessionListener> {
 
     private static final Logger logger = LoggerFactory.getLogger(NetconfClientSession.class);
@@ -23,7 +27,7 @@ public final class NetconfClientSession extends AbstractNetconfSession<NetconfCl
 
     public NetconfClientSession(NetconfClientSessionListener sessionListener, Channel channel, long sessionId,
             Collection<String> capabilities) {
-        super(sessionListener,channel,sessionId);
+        super(sessionListener, channel, sessionId);
         this.capabilities = capabilities;
         logger.debug("Client Session {} created", toString());
     }
@@ -32,8 +36,23 @@ public final class NetconfClientSession extends AbstractNetconfSession<NetconfCl
         return capabilities;
     }
 
+
     @Override
     protected NetconfClientSession thisInstance() {
         return this;
     }
+
+    @Override
+    protected void addExiHandlers(NetconfEXICodec exiCodec) {
+        // TODO used only in negotiator, client supports only auto start-exi
+        replaceMessageDecoder(new NetconfEXIToMessageDecoder(exiCodec));
+        replaceMessageEncoder(new NetconfMessageToEXIEncoder(exiCodec));
+    }
+
+    @Override
+    public void stopExiCommunication() {
+        // TODO never used, Netconf client does not support stop-exi
+        replaceMessageDecoder(new NetconfXMLToMessageDecoder());
+        replaceMessageEncoder(new NetconfMessageToXMLEncoder());
+    }
 }
index c742bafe5e2ab52e371d9ebe1b9ca33696734849..83f49b2635a5d0699d2b31615fc3c20927d4f878 100644 (file)
@@ -8,58 +8,96 @@
 
 package org.opendaylight.controller.netconf.client;
 
-import java.util.Collection;
-import java.util.List;
-
-import javax.annotation.Nullable;
 import javax.xml.xpath.XPathConstants;
 import javax.xml.xpath.XPathExpression;
 
-import org.opendaylight.controller.netconf.api.NetconfSessionPreferences;
+import org.opendaylight.controller.netconf.api.NetconfClientSessionPreferences;
+import org.opendaylight.controller.netconf.api.NetconfMessage;
+import org.opendaylight.controller.netconf.util.AbstractChannelInitializer;
 import org.opendaylight.controller.netconf.util.AbstractNetconfSessionNegotiator;
 import org.opendaylight.controller.netconf.util.messages.NetconfHelloMessage;
+import org.opendaylight.controller.netconf.util.messages.NetconfMessageUtil;
 import org.opendaylight.controller.netconf.util.xml.XMLNetconfUtil;
-import org.opendaylight.controller.netconf.util.xml.XmlElement;
 import org.opendaylight.controller.netconf.util.xml.XmlNetconfConstants;
 import org.opendaylight.controller.netconf.util.xml.XmlUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
 import org.w3c.dom.Node;
-
-import com.google.common.base.Function;
-import com.google.common.collect.Collections2;
+import org.w3c.dom.NodeList;
 
 import io.netty.channel.Channel;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.ChannelFutureListener;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.ChannelInboundHandlerAdapter;
 import io.netty.util.Timer;
 import io.netty.util.concurrent.Promise;
 
 public class NetconfClientSessionNegotiator extends
-        AbstractNetconfSessionNegotiator<NetconfSessionPreferences, NetconfClientSession, NetconfClientSessionListener> {
+        AbstractNetconfSessionNegotiator<NetconfClientSessionPreferences, NetconfClientSession, NetconfClientSessionListener>
+{
+    private static final Logger logger = LoggerFactory.getLogger(NetconfClientSessionNegotiator.class);
+
+    private static final XPathExpression sessionIdXPath = XMLNetconfUtil
+            .compileXPath("/netconf:hello/netconf:session-id");
+
+    private static final String EXI_1_0_CAPABILITY_MARKER = "exi:1.0";
 
-    protected NetconfClientSessionNegotiator(NetconfSessionPreferences sessionPreferences,
-            Promise<NetconfClientSession> promise, Channel channel, Timer timer, NetconfClientSessionListener sessionListener,
-            long connectionTimeoutMillis) {
+    protected NetconfClientSessionNegotiator(NetconfClientSessionPreferences sessionPreferences,
+                                             Promise<NetconfClientSession> promise,
+                                             Channel channel,
+                                             Timer timer,
+                                             NetconfClientSessionListener sessionListener,
+                                             long connectionTimeoutMillis) {
         super(sessionPreferences, promise, channel, timer, sessionListener, connectionTimeoutMillis);
     }
 
-    private static Collection<String> getCapabilities(Document doc) {
-        XmlElement responseElement = XmlElement.fromDomDocument(doc);
-        XmlElement capabilitiesElement = responseElement
-                .getOnlyChildElementWithSameNamespace(XmlNetconfConstants.CAPABILITIES);
-        List<XmlElement> caps = capabilitiesElement.getChildElements(XmlNetconfConstants.CAPABILITY);
-        return Collections2.transform(caps, new Function<XmlElement, String>() {
+    @Override
+    protected void handleMessage(NetconfHelloMessage netconfMessage) {
+        NetconfClientSession session = super.getSessionForHelloMessage(netconfMessage);
+
+        if (shouldUseExi(netconfMessage.getDocument())){
+            logger.info("Netconf session: {} should use exi.", session);
+            tryToStartExi(session);
+        } else {
+            logger.info("Netconf session {} isn't capable using exi.", session);
+            negotiationSuccessful(session);
+        }
+    }
+
+    private boolean shouldUseExi(Document doc) {
+        return containsExi10Capability(doc)
+                && containsExi10Capability(sessionPreferences.getHelloMessage().getDocument());
+    }
+
+    private boolean containsExi10Capability(final Document doc) {
+        final NodeList nList = doc.getElementsByTagName(XmlNetconfConstants.CAPABILITY);
+        for (int i = 0; i < nList.getLength(); i++) {
+            if (nList.item(i).getTextContent().contains(EXI_1_0_CAPABILITY_MARKER)) {
+                return true;
+            }
+        }
+        return false;
+    }
 
-            @Nullable
+    private void tryToStartExi(final NetconfClientSession session) {
+        final NetconfMessage startExi = sessionPreferences.getStartExiMessage();
+        session.sendMessage(startExi).addListener(new ChannelFutureListener() {
             @Override
-            public String apply(@Nullable XmlElement input) {
-                // Trim possible leading/tailing whitespace
-                return input.getTextContent().trim();
+            public void operationComplete(final ChannelFuture f) {
+                if (!f.isSuccess()) {
+                    logger.warn("Failed to send start-exi message {} on session {}", startExi, session, f.cause());
+                } else {
+                    logger.trace("Start-exi message {} sent to socket on session {}", startExi, session);
+                    NetconfClientSessionNegotiator.this.channel.pipeline().addAfter(
+                            AbstractChannelInitializer.NETCONF_MESSAGE_DECODER, ExiConfirmationInboundHandler.EXI_CONFIRMED_HANDLER,
+                            new ExiConfirmationInboundHandler(session));
+                }
             }
         });
     }
 
-    private static final XPathExpression sessionIdXPath = XMLNetconfUtil
-            .compileXPath("/netconf:hello/netconf:session-id");
-
     private long extractSessionId(Document doc) {
         final Node sessionIdNode = (Node) XmlUtil.evaluateXPath(sessionIdXPath, doc, XPathConstants.NODE);
         String textContent = sessionIdNode.getTextContent();
@@ -73,6 +111,52 @@ public class NetconfClientSessionNegotiator extends
     @Override
     protected NetconfClientSession getSession(NetconfClientSessionListener sessionListener, Channel channel, NetconfHelloMessage message) {
         return new NetconfClientSession(sessionListener, channel, extractSessionId(message.getDocument()),
-                getCapabilities(message.getDocument()));
+                NetconfMessageUtil.extractCapabilitiesFromHello(message.getDocument()));
+    }
+
+    /**
+     * Handler to process response for start-exi message
+     */
+    private final class ExiConfirmationInboundHandler extends ChannelInboundHandlerAdapter {
+        private static final String EXI_CONFIRMED_HANDLER = "exiConfirmedHandler";
+
+        private final NetconfClientSession session;
+
+        ExiConfirmationInboundHandler(NetconfClientSession session) {
+            this.session = session;
+        }
+
+        @Override
+        public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
+            ctx.pipeline().remove(ExiConfirmationInboundHandler.EXI_CONFIRMED_HANDLER);
+
+            NetconfMessage netconfMessage = (NetconfMessage) msg;
+
+            // Ok response to start-exi, try to add exi handlers
+            if (NetconfMessageUtil.isOKMessage(netconfMessage)) {
+                logger.trace("Positive response on start-exi call received on session {}", session);
+                try {
+                    session.startExiCommunication(sessionPreferences.getStartExiMessage());
+                } catch (RuntimeException e) {
+                    // Unable to add exi, continue without exi
+                    logger.warn("Unable to start exi communication, Communication will continue without exi on session {}", session, e);
+                }
+
+            // Error response
+            } else if(NetconfMessageUtil.isErrorMessage(netconfMessage)) {
+                logger.warn(
+                        "Error response to start-exi message {}, Communication will continue without exi on session {}",
+                        XmlUtil.toString(netconfMessage.getDocument()), session);
+
+            // Unexpected response to start-exi, throwing message away, continue without exi
+            } else {
+                logger.warn(
+                        "Unexpected response to start-exi message, should be ok, was {}, " +
+                                "Communication will continue without exi and response message will be thrown away on session {}",
+                        XmlUtil.toString(netconfMessage.getDocument()), session);
+            }
+
+            negotiationSuccessful(session);
+        }
     }
 }
index bb372b3affc3e379bbff702805d7db6cca2b6b7f..07e088e117d636502be739aabff6952eeac62fb9 100644 (file)
@@ -8,61 +8,79 @@
 
 package org.opendaylight.controller.netconf.client;
 
-import io.netty.channel.Channel;
-import io.netty.util.Timer;
-import io.netty.util.concurrent.Promise;
-
-import java.io.IOException;
-import java.io.InputStream;
-
+import org.opendaylight.controller.netconf.api.NetconfClientSessionPreferences;
 import org.opendaylight.controller.netconf.api.NetconfMessage;
-import org.opendaylight.controller.netconf.api.NetconfSessionPreferences;
 import org.opendaylight.controller.netconf.util.messages.NetconfHelloMessage;
 import org.opendaylight.controller.netconf.util.messages.NetconfHelloMessageAdditionalHeader;
-import org.opendaylight.controller.netconf.util.xml.XmlUtil;
+import org.opendaylight.controller.netconf.util.messages.NetconfStartExiMessage;
+import org.opendaylight.controller.netconf.util.xml.XmlNetconfConstants;
 import org.opendaylight.protocol.framework.SessionListenerFactory;
 import org.opendaylight.protocol.framework.SessionNegotiator;
 import org.opendaylight.protocol.framework.SessionNegotiatorFactory;
-import org.xml.sax.SAXException;
+import org.openexi.proc.common.AlignmentType;
+import org.openexi.proc.common.EXIOptions;
+import org.openexi.proc.common.EXIOptionsException;
 
 import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
+import com.google.common.collect.Sets;
+
+import io.netty.channel.Channel;
+import io.netty.util.Timer;
+import io.netty.util.concurrent.Promise;
 
 public class NetconfClientSessionNegotiatorFactory implements SessionNegotiatorFactory<NetconfMessage, NetconfClientSession, NetconfClientSessionListener> {
 
+    public static final java.util.Set<String> CLIENT_CAPABILITIES = Sets.newHashSet(
+            XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_NETCONF_BASE_1_0,
+            XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_NETCONF_BASE_1_1,
+            XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_CAPABILITY_EXI_1_0);
+
+    private static final String START_EXI_MESSAGE_ID = "default-start-exi";
+
     private final Optional<NetconfHelloMessageAdditionalHeader> additionalHeader;
     private final long connectionTimeoutMillis;
     private final Timer timer;
+    private final EXIOptions options;
+
+    public NetconfClientSessionNegotiatorFactory(Timer timer,
+                                                 Optional<NetconfHelloMessageAdditionalHeader> additionalHeader,
+                                                 long connectionTimeoutMillis) {
+        this(timer, additionalHeader, connectionTimeoutMillis, DEFAULT_OPTIONS);
+    }
 
-    public NetconfClientSessionNegotiatorFactory(Timer timer, Optional<NetconfHelloMessageAdditionalHeader> additionalHeader, long connectionTimeoutMillis) {
+    public NetconfClientSessionNegotiatorFactory(Timer timer,
+                                                 Optional<NetconfHelloMessageAdditionalHeader> additionalHeader,
+                                                 long connectionTimeoutMillis, EXIOptions exiOptions) {
         this.timer = Preconditions.checkNotNull(timer);
         this.additionalHeader = additionalHeader;
         this.connectionTimeoutMillis = connectionTimeoutMillis;
-    }
-
-    private static NetconfMessage loadHelloMessageTemplate() {
-        final String helloMessagePath = "/client_hello.xml";
-        try (InputStream is = NetconfClientSessionNegotiatorFactory.class.getResourceAsStream(helloMessagePath)) {
-            Preconditions.checkState(is != null, "Input stream from %s was null", helloMessagePath);
-            return new NetconfMessage(XmlUtil.readXmlToDocument(is));
-        } catch (SAXException | IOException e) {
-            throw new RuntimeException("Unable to load hello message", e);
-        }
+        this.options = exiOptions;
     }
 
     @Override
-    public SessionNegotiator<NetconfClientSession> getSessionNegotiator(SessionListenerFactory<NetconfClientSessionListener> sessionListenerFactory, Channel channel,
+    public SessionNegotiator<NetconfClientSession> getSessionNegotiator(SessionListenerFactory<NetconfClientSessionListener> sessionListenerFactory,
+                                                                        Channel channel,
             Promise<NetconfClientSession> promise) {
-        // Hello message needs to be recreated every time
-        NetconfMessage helloMessage = loadHelloMessageTemplate();
 
-        if(this.additionalHeader.isPresent()) {
-            helloMessage = new NetconfHelloMessage(helloMessage.getDocument(), additionalHeader.get());
-        } else
-            helloMessage = new NetconfHelloMessage(helloMessage.getDocument());
+        NetconfMessage startExiMessage = NetconfStartExiMessage.create(options, START_EXI_MESSAGE_ID);
+        NetconfHelloMessage helloMessage = NetconfHelloMessage.createClientHello(CLIENT_CAPABILITIES, additionalHeader);
 
-        NetconfSessionPreferences proposal = new NetconfSessionPreferences(helloMessage);
+        NetconfClientSessionPreferences proposal = new NetconfClientSessionPreferences(helloMessage,startExiMessage);
         return new NetconfClientSessionNegotiator(proposal, promise, channel, timer,
-                sessionListenerFactory.getSessionListener(), connectionTimeoutMillis);
+                sessionListenerFactory.getSessionListener(),connectionTimeoutMillis);
+    }
+
+    private static final EXIOptions DEFAULT_OPTIONS = new EXIOptions();
+    static {
+        try {
+            DEFAULT_OPTIONS.setPreserveDTD(true);
+            DEFAULT_OPTIONS.setPreserveNS(true);
+            DEFAULT_OPTIONS.setPreserveLexicalValues(true);
+            DEFAULT_OPTIONS.setAlignmentType(AlignmentType.preCompress);
+        } catch (EXIOptionsException e) {
+            // Should not happen since DEFAULT_OPTIONS are still the same
+            throw new IllegalStateException("Unable to create EXI DEFAULT_OPTIONS");
+        }
     }
 }
index e96161c29ad08e36f128252fd805903c3bd3139b..504e4c994915aeafc5d303fc2a56ab4bcf2722d8 100644 (file)
@@ -101,7 +101,7 @@ public class SimpleNetconfClientSessionListener implements NetconfClientSessionL
         }
     }
 
-    final synchronized Future<NetconfMessage> sendRequest(NetconfMessage message) {
+    public final synchronized Future<NetconfMessage> sendRequest(NetconfMessage message) {
         final RequestEntry req = new RequestEntry(GlobalEventExecutor.INSTANCE.<NetconfMessage>newPromise(), message);
 
         requests.add(req);
diff --git a/opendaylight/netconf/netconf-client/src/main/resources/client_hello.xml b/opendaylight/netconf/netconf-client/src/main/resources/client_hello.xml
deleted file mode 100644 (file)
index 46f6f76..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
-    <capabilities>
-        <capability>urn:ietf:params:netconf:base:1.0</capability>
-        <capability>urn:ietf:params:netconf:base:1.1</capability>
-    </capabilities>
-</hello>
diff --git a/opendaylight/netconf/netconf-client/src/test/java/org/opendaylight/controller/netconf/client/SSHNetconfClientLiveTest.java b/opendaylight/netconf/netconf-client/src/test/java/org/opendaylight/controller/netconf/client/SSHNetconfClientLiveTest.java
deleted file mode 100644 (file)
index 1357201..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-package org.opendaylight.controller.netconf.client;
-
-import io.netty.channel.nio.NioEventLoopGroup;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.opendaylight.controller.netconf.util.handler.ssh.authentication.LoginPassword;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.IOException;
-import java.net.InetSocketAddress;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.TimeUnit;
-
-@Ignore
-public class SSHNetconfClientLiveTest {
-    private static final Logger logger = LoggerFactory.getLogger(SSHNetconfClientLiveTest.class);
-
-    NioEventLoopGroup nettyThreadgroup;
-    NetconfSshClientDispatcher netconfClientDispatcher;
-    InetSocketAddress address;
-    final int connectionAttempts = 10, attemptMsTimeout = 1000;
-    final int connectionTimeoutMillis = 20000;
-
-    @Before
-    public void setUp() {
-        nettyThreadgroup = new NioEventLoopGroup();
-
-        netconfClientDispatcher = new NetconfSshClientDispatcher(new LoginPassword(
-                System.getProperty("username"), System.getProperty("password")),
-                nettyThreadgroup, nettyThreadgroup, connectionTimeoutMillis);
-
-        address = new InetSocketAddress(System.getProperty("host"), Integer.parseInt(System.getProperty("port")));
-    }
-
-    @Ignore
-    @Test
-    public void test() throws Exception {
-        //runnable.run();
-    }
-
-    @Test
-    public void testInExecutor() throws Exception {
-        int threads = 4;
-        ExecutorService executorService = Executors.newFixedThreadPool(threads);
-        try {
-            for (int i= 0;i< threads;i++) {
-                InetSocketAddress address = new InetSocketAddress(System.getProperty("host"),
-                        Integer.parseInt(System.getProperty("port")));
-                NetconfRunnable runnable = new NetconfRunnable(address);
-                executorService.execute(runnable);
-            }
-            executorService.shutdown();
-            executorService.awaitTermination(1, TimeUnit.MINUTES);
-
-
-        } finally {
-            executorService.shutdownNow();
-        }
-    }
-
-    class NetconfRunnable implements Runnable {
-        private final InetSocketAddress address;
-
-        NetconfRunnable(InetSocketAddress address) {
-            this.address = address;
-        }
-
-        @Override
-        public void run() {
-            try (NetconfClient netconfClient = new NetconfClient(address.toString(), address, connectionAttempts,
-                    attemptMsTimeout, netconfClientDispatcher);) {
-                logger.info("OK {}", address);
-            } catch (InterruptedException | IOException e) {
-                logger.error("Failed {}", address, e);
-            }
-        }
-    };
-}
diff --git a/opendaylight/netconf/netconf-client/src/test/java/org/opendaylight/controller/netconf/client/test/TestingNetconfClient.java b/opendaylight/netconf/netconf-client/src/test/java/org/opendaylight/controller/netconf/client/test/TestingNetconfClient.java
new file mode 100644 (file)
index 0000000..32c6ea8
--- /dev/null
@@ -0,0 +1,114 @@
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.controller.netconf.client.test;
+
+import io.netty.util.concurrent.Future;
+import io.netty.util.concurrent.GlobalEventExecutor;
+
+import java.io.Closeable;
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.util.Set;
+import java.util.concurrent.CancellationException;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+
+import org.opendaylight.controller.netconf.api.NetconfMessage;
+import org.opendaylight.controller.netconf.client.NetconfClientDispatcher;
+import org.opendaylight.controller.netconf.client.NetconfClientSession;
+import org.opendaylight.controller.netconf.client.NetconfClientSessionListener;
+import org.opendaylight.controller.netconf.client.SimpleNetconfClientSessionListener;
+import org.opendaylight.protocol.framework.NeverReconnectStrategy;
+import org.opendaylight.protocol.framework.ReconnectStrategy;
+
+import com.google.common.base.Preconditions;
+import com.google.common.collect.Sets;
+
+
+/**
+ * Synchronous netconf client suitable for testing
+ */
+public class TestingNetconfClient implements Closeable {
+
+    public static final int DEFAULT_CONNECT_TIMEOUT = 5000;
+
+    private final String label;
+    private final NetconfClientSession clientSession;
+    private final NetconfClientSessionListener sessionListener;
+    private final long sessionId;
+
+    private TestingNetconfClient(String clientLabel, InetSocketAddress address, ReconnectStrategy strat,
+            NetconfClientDispatcher netconfClientDispatcher) throws InterruptedException {
+        this.label = clientLabel;
+        sessionListener = new SimpleNetconfClientSessionListener();
+        Future<NetconfClientSession> clientFuture = netconfClientDispatcher.createClient(address, sessionListener, strat);
+        clientSession = get(clientFuture);
+        this.sessionId = clientSession.getSessionId();
+    }
+
+    private NetconfClientSession get(Future<NetconfClientSession> clientFuture) throws InterruptedException {
+        try {
+            return clientFuture.get();
+        } catch (CancellationException e) {
+            throw new RuntimeException("Cancelling " + this, e);
+        } catch (ExecutionException e) {
+            throw new IllegalStateException("Unable to create " + this, e);
+        }
+    }
+
+    public TestingNetconfClient(String clientLabelForLogging, InetSocketAddress address, int connectTimeoutMs,
+                                NetconfClientDispatcher netconfClientDispatcher) throws InterruptedException {
+        this(clientLabelForLogging, address,
+                new NeverReconnectStrategy(GlobalEventExecutor.INSTANCE, connectTimeoutMs), netconfClientDispatcher);
+    }
+
+    public TestingNetconfClient(String clientLabelForLogging, InetSocketAddress address,
+                                NetconfClientDispatcher netconfClientDispatcher) throws InterruptedException {
+        this(clientLabelForLogging, address, new NeverReconnectStrategy(GlobalEventExecutor.INSTANCE,
+                DEFAULT_CONNECT_TIMEOUT), netconfClientDispatcher);
+    }
+
+    public Future<NetconfMessage> sendRequest(NetconfMessage message) {
+        return ((SimpleNetconfClientSessionListener)sessionListener).sendRequest(message);
+    }
+
+    public NetconfMessage sendMessage(NetconfMessage message, int attemptMsDelay) throws ExecutionException,
+            InterruptedException, TimeoutException {
+        return sendRequest(message).get(attemptMsDelay, TimeUnit.MILLISECONDS);
+    }
+
+    public NetconfMessage sendMessage(NetconfMessage message) throws ExecutionException,
+            InterruptedException, TimeoutException {
+        return sendMessage(message, DEFAULT_CONNECT_TIMEOUT);
+    }
+
+    @Override
+    public void close() throws IOException {
+        clientSession.close();
+    }
+
+    @Override
+    public String toString() {
+        final StringBuffer sb = new StringBuffer("TestingNetconfClient{");
+        sb.append("label=").append(label);
+        sb.append(", sessionId=").append(sessionId);
+        sb.append('}');
+        return sb.toString();
+    }
+
+    public long getSessionId() {
+        return sessionId;
+    }
+
+    public Set<String> getCapabilities() {
+        Preconditions.checkState(clientSession != null, "Client was not initialized successfully");
+        return Sets.newHashSet(clientSession.getServerCapabilities());
+    }
+}
\ No newline at end of file
index 76a0bd9908ac571a911f7309c33eb91a42ef87cd..ffc15d878a20d7b8b3ae64ca39b57ec839f559fb 100644 (file)
             <artifactId>netconf-client</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>netconf-client</artifactId>
+            <version>${project.version}</version>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
         <dependency>
           <groupId>org.opendaylight.controller</groupId>
           <artifactId>commons.logback_settings</artifactId>
                             org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.schemas,
                             org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.extension.rev131210,
                             org.opendaylight.yangtools.yang.binding,
+                            org.openexi.*,
                         </Import-Package>
                     </instructions>
                 </configuration>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-jar-plugin</artifactId>
                 <version>2.4</version>
+                <executions>
+                    <execution>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>test-jar</goal>
+                        </goals>
+                    </execution>
+                </executions>
             </plugin>
         </plugins>
     </build>
index e0d7e319be8b1be2bd9fa8305dea9eb65f6d8870..6a86ecd21f4d81fdfa9db9de1a81d6e28e1d9488 100644 (file)
@@ -12,9 +12,9 @@ import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Maps;
 import org.opendaylight.controller.netconf.impl.mapping.CapabilityProvider;
-import org.opendaylight.controller.netconf.impl.osgi.NetconfOperationServiceSnapshot;
 import org.opendaylight.controller.netconf.mapping.api.Capability;
 import org.opendaylight.controller.netconf.mapping.api.NetconfOperationService;
+import org.opendaylight.controller.netconf.mapping.api.NetconfOperationServiceSnapshot;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
index ee9009762e8cda9d3f2ac8896f2df8bced568f83..130818b12a7d6e040ff863b1026e9e9101d81385 100644 (file)
@@ -12,13 +12,12 @@ import io.netty.channel.ChannelFuture;
 import io.netty.channel.EventLoopGroup;
 import io.netty.channel.socket.SocketChannel;
 import io.netty.util.concurrent.Promise;
-
-import java.net.InetSocketAddress;
-
 import org.opendaylight.controller.netconf.impl.util.DeserializerExceptionHandler;
 import org.opendaylight.controller.netconf.util.AbstractChannelInitializer;
 import org.opendaylight.protocol.framework.AbstractDispatcher;
 
+import java.net.InetSocketAddress;
+
 public class NetconfServerDispatcher extends AbstractDispatcher<NetconfServerSession, NetconfServerSessionListener> {
 
     private final ServerChannelInitializer initializer;
@@ -44,12 +43,11 @@ public class NetconfServerDispatcher extends AbstractDispatcher<NetconfServerSes
         public static final String DESERIALIZER_EX_HANDLER_KEY = "deserializerExHandler";
 
         private final NetconfServerSessionNegotiatorFactory negotiatorFactory;
-        private final NetconfServerSessionListenerFactory listenerFactory;
 
-        public ServerChannelInitializer(NetconfServerSessionNegotiatorFactory negotiatorFactory,
-                                            NetconfServerSessionListenerFactory listenerFactory) {
+
+        public ServerChannelInitializer(NetconfServerSessionNegotiatorFactory negotiatorFactory) {
             this.negotiatorFactory = negotiatorFactory;
-            this.listenerFactory = listenerFactory;
+
         }
 
         @Override
@@ -60,7 +58,8 @@ public class NetconfServerDispatcher extends AbstractDispatcher<NetconfServerSes
 
         @Override
         protected void initializeSessionNegotiator(SocketChannel ch, Promise<NetconfServerSession> promise) {
-            ch.pipeline().addAfter(DESERIALIZER_EX_HANDLER_KEY, AbstractChannelInitializer.NETCONF_SESSION_NEGOTIATOR, negotiatorFactory.getSessionNegotiator(listenerFactory, ch, promise));
+            ch.pipeline().addAfter(DESERIALIZER_EX_HANDLER_KEY, AbstractChannelInitializer.NETCONF_SESSION_NEGOTIATOR,
+                    negotiatorFactory.getSessionNegotiator(null, ch, promise));
         }
     }
 
index 9ddc64f1a16934b95c6a3bd69410eef554e4313b..280375d918fc487f98b29777a276fbdef9123cec 100644 (file)
@@ -8,15 +8,18 @@
 
 package org.opendaylight.controller.netconf.impl;
 
-import io.netty.channel.Channel;
-
 import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import org.opendaylight.controller.netconf.api.AbstractNetconfSession;
 import org.opendaylight.controller.netconf.api.monitoring.NetconfManagementSession;
+import org.opendaylight.controller.netconf.util.AbstractNetconfSession;
+import org.opendaylight.controller.netconf.util.handler.NetconfEXICodec;
+import org.opendaylight.controller.netconf.util.handler.NetconfEXIToMessageDecoder;
+import org.opendaylight.controller.netconf.util.handler.NetconfMessageToEXIEncoder;
+import org.opendaylight.controller.netconf.util.handler.NetconfMessageToXMLEncoder;
+import org.opendaylight.controller.netconf.util.handler.NetconfXMLToMessageDecoder;
 import org.opendaylight.controller.netconf.util.messages.NetconfHelloMessageAdditionalHeader;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.DomainName;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Host;
@@ -34,6 +37,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.google.common.base.Preconditions;
+import io.netty.channel.Channel;
 
 public final class NetconfServerSession extends AbstractNetconfSession<NetconfServerSession, NetconfServerSessionListener> implements NetconfManagementSession {
 
@@ -124,4 +128,16 @@ public final class NetconfServerSession extends AbstractNetconfSession<NetconfSe
     protected NetconfServerSession thisInstance() {
         return this;
     }
+
+    @Override
+    protected void addExiHandlers(NetconfEXICodec exiCodec) {
+        replaceMessageDecoder(new NetconfEXIToMessageDecoder(exiCodec));
+        replaceMessageEncoderAfterNextMessage(new NetconfMessageToEXIEncoder(exiCodec));
+    }
+
+    @Override
+    public void stopExiCommunication() {
+        replaceMessageDecoder(new NetconfXMLToMessageDecoder());
+        replaceMessageEncoderAfterNextMessage(new NetconfMessageToXMLEncoder());
+    }
 }
index f8d9a45c201ed993ca081e27ecb995e743974d4a..b3245fff2b812775803acf59e1c2e53aa875d77e 100644 (file)
@@ -8,13 +8,13 @@
 
 package org.opendaylight.controller.netconf.impl;
 
-import static com.google.common.base.Preconditions.checkState;
 
 import org.opendaylight.controller.netconf.api.NetconfDocumentedException;
 import org.opendaylight.controller.netconf.api.NetconfMessage;
-import org.opendaylight.controller.netconf.api.NetconfOperationRouter;
+import org.opendaylight.controller.netconf.impl.osgi.NetconfOperationRouter;
 import org.opendaylight.controller.netconf.api.NetconfSessionListener;
 import org.opendaylight.controller.netconf.api.NetconfTerminationReason;
+import org.opendaylight.controller.netconf.impl.mapping.operations.DefaultCloseSession;
 import org.opendaylight.controller.netconf.impl.osgi.SessionMonitoringService;
 import org.opendaylight.controller.netconf.util.messages.SendErrorExceptionUtil;
 import org.opendaylight.controller.netconf.util.xml.XmlElement;
@@ -23,21 +23,24 @@ import org.opendaylight.controller.netconf.util.xml.XmlUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
+import org.w3c.dom.NamedNodeMap;
 import org.w3c.dom.Node;
 
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableMap;
 
 public class NetconfServerSessionListener implements NetconfSessionListener<NetconfServerSession> {
-    public static final String MESSAGE_ID = "message-id";
 
     static final Logger logger = LoggerFactory.getLogger(NetconfServerSessionListener.class);
     private final SessionMonitoringService monitoringService;
     private final NetconfOperationRouter operationRouter;
+    private final AutoCloseable onSessionDownCloseable;
 
-    public NetconfServerSessionListener(NetconfOperationRouter operationRouter, SessionMonitoringService monitoringService) {
+    public NetconfServerSessionListener(NetconfOperationRouter operationRouter, SessionMonitoringService monitoringService,
+                                        AutoCloseable onSessionDownCloseable) {
         this.operationRouter = operationRouter;
         this.monitoringService = monitoringService;
+        this.onSessionDownCloseable = onSessionDownCloseable;
     }
 
     @Override
@@ -46,11 +49,24 @@ public class NetconfServerSessionListener implements NetconfSessionListener<Netc
     }
 
     @Override
-    public void onSessionDown(NetconfServerSession netconfNetconfServerSession, Exception e) {
-        logger.debug("Session {} down, reason: {}", netconfNetconfServerSession, e.getMessage());
+    public void onSessionDown(NetconfServerSession netconfNetconfServerSession, Exception cause) {
+        logger.debug("Session {} down, reason: {}", netconfNetconfServerSession, cause.getMessage());
+        onDown(netconfNetconfServerSession);
+    }
+
+    public void onDown(NetconfServerSession netconfNetconfServerSession) {
         monitoringService.onSessionDown(netconfNetconfServerSession);
 
-        operationRouter.close();
+        try {
+            operationRouter.close();
+        } catch (Exception closingEx) {
+            logger.debug("Ignoring exception while closing operationRouter", closingEx);
+        }
+        try {
+            onSessionDownCloseable.close();
+        } catch(Exception ex){
+            logger.debug("Ignoring exception while closing onSessionDownCloseable", ex);
+        }
     }
 
     @Override
@@ -58,9 +74,7 @@ public class NetconfServerSessionListener implements NetconfSessionListener<Netc
             NetconfTerminationReason netconfTerminationReason) {
         logger.debug("Session {} terminated, reason: {}", netconfNetconfServerSession,
                 netconfTerminationReason.getErrorMessage());
-        monitoringService.onSessionDown(netconfNetconfServerSession);
-
-        operationRouter.close();
+        onDown(netconfNetconfServerSession);
     }
 
     @Override
@@ -97,18 +111,17 @@ public class NetconfServerSessionListener implements NetconfSessionListener<Netc
         logger.info("Session {} closed successfully", session.getSessionId());
     }
 
-    private NetconfMessage processDocument(final NetconfMessage netconfMessage,
-            NetconfServerSession session) throws NetconfDocumentedException {
+    private NetconfMessage processDocument(final NetconfMessage netconfMessage, NetconfServerSession session)
+            throws NetconfDocumentedException {
 
-        final Document incommingDocument = netconfMessage.getDocument();
-        final Node rootNode = incommingDocument.getDocumentElement();
+        final Document incomingDocument = netconfMessage.getDocument();
+        final Node rootNode = incomingDocument.getDocumentElement();
 
         if (rootNode.getLocalName().equals(XmlNetconfConstants.RPC_KEY)) {
-            final String messageId = rootNode.getAttributes().getNamedItem(MESSAGE_ID).getTextContent();
-            checkState(messageId != null);
             final Document responseDocument = XmlUtil.newDocument();
-            Document rpcReply = operationRouter.onNetconfMessage(
-                    incommingDocument, session);
+            checkMessageId(rootNode);
+
+            Document rpcReply = operationRouter.onNetconfMessage(incomingDocument, session);
 
             session.onIncommingRpcSuccess();
 
@@ -129,11 +142,28 @@ public class NetconfServerSessionListener implements NetconfSessionListener<Netc
         }
     }
 
-    private static boolean isCloseSession(final NetconfMessage incommingDocument) {
-        final Document document = incommingDocument.getDocument();
+    private void checkMessageId(Node rootNode) throws NetconfDocumentedException {
+            NamedNodeMap attributes = rootNode.getAttributes();
+        if(attributes.getNamedItemNS(XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_NETCONF_BASE_1_0, XmlNetconfConstants.MESSAGE_ID)!=null) {
+            return;
+        }
+
+        if(attributes.getNamedItem(XmlNetconfConstants.MESSAGE_ID)!=null) {
+            return;
+        }
+
+        throw new NetconfDocumentedException("Missing attribute" + rootNode.getNodeName(),
+                NetconfDocumentedException.ErrorType.protocol, NetconfDocumentedException.ErrorTag.missing_attribute,
+                NetconfDocumentedException.ErrorSeverity.error, ImmutableMap.of(NetconfDocumentedException.ErrorTag.missing_attribute.toString(),
+                XmlNetconfConstants.MESSAGE_ID));
+    }
+
+    private static boolean isCloseSession(final NetconfMessage incomingDocument) {
+        final Document document = incomingDocument.getDocument();
         XmlElement rpcElement = XmlElement.fromDomDocument(document);
-        if (rpcElement.getOnlyChildElementOptionally("close-session").isPresent())
+        if (rpcElement.getOnlyChildElementOptionally(DefaultCloseSession.CLOSE_SESSION).isPresent()) {
             return true;
+        }
 
         return false;
     }
index 7e047b14fccda2b07a4f04e2320b096780f97501..34a8bc4fd57f7a670aad66aa68cc824bf2905572 100644 (file)
@@ -8,44 +8,35 @@
 
 package org.opendaylight.controller.netconf.impl;
 
-import org.opendaylight.controller.netconf.api.NetconfOperationRouter;
+import org.opendaylight.controller.netconf.impl.osgi.NetconfOperationRouter;
 import org.opendaylight.controller.netconf.impl.mapping.CapabilityProvider;
 import org.opendaylight.controller.netconf.impl.osgi.NetconfOperationRouterImpl;
-import org.opendaylight.controller.netconf.impl.osgi.NetconfOperationServiceFactoryListener;
-import org.opendaylight.controller.netconf.impl.osgi.NetconfOperationServiceSnapshot;
 import org.opendaylight.controller.netconf.impl.osgi.SessionMonitoringService;
+import org.opendaylight.controller.netconf.mapping.api.NetconfOperationServiceSnapshot;
 import org.opendaylight.protocol.framework.SessionListenerFactory;
 
 public class NetconfServerSessionListenerFactory implements SessionListenerFactory<NetconfServerSessionListener> {
 
-    private final NetconfOperationServiceFactoryListener factoriesListener;
-
     private final DefaultCommitNotificationProducer commitNotifier;
-
-    private final SessionIdProvider idProvider;
-
     private final SessionMonitoringService monitor;
+    private final NetconfOperationServiceSnapshot netconfOperationServiceSnapshot;
+    private final CapabilityProvider capabilityProvider;
+
+    public NetconfServerSessionListenerFactory(DefaultCommitNotificationProducer commitNotifier,
+                                               SessionMonitoringService monitor,
+                                               NetconfOperationServiceSnapshot netconfOperationServiceSnapshot,
+                                               CapabilityProvider capabilityProvider) {
 
-    public NetconfServerSessionListenerFactory(NetconfOperationServiceFactoryListener factoriesListener,
-                                               DefaultCommitNotificationProducer commitNotifier,
-                                               SessionIdProvider idProvider, SessionMonitoringService monitor) {
-        this.factoriesListener = factoriesListener;
         this.commitNotifier = commitNotifier;
-        this.idProvider = idProvider;
         this.monitor = monitor;
+        this.netconfOperationServiceSnapshot = netconfOperationServiceSnapshot;
+        this.capabilityProvider = capabilityProvider;
     }
 
     @Override
     public NetconfServerSessionListener getSessionListener() {
-        NetconfOperationServiceSnapshot netconfOperationServiceSnapshot = factoriesListener.getSnapshot(idProvider
-                .getCurrentSessionId());
-
-        CapabilityProvider capabilityProvider = new CapabilityProviderImpl(netconfOperationServiceSnapshot);
-
         NetconfOperationRouter operationRouter = NetconfOperationRouterImpl.createOperationRouter(
-                netconfOperationServiceSnapshot, capabilityProvider,
-                commitNotifier);
-
-        return new NetconfServerSessionListener(operationRouter, monitor);
+                netconfOperationServiceSnapshot, capabilityProvider, commitNotifier);
+        return new NetconfServerSessionListener(operationRouter, monitor, netconfOperationServiceSnapshot);
     }
 }
index f8024922cfc5a5ba021e97b519493ae80a02c4d2..5c389fa966af340ef277f5d51ebe992b2c6081ff 100644 (file)
@@ -8,8 +8,10 @@
 
 package org.opendaylight.controller.netconf.impl;
 
-import java.net.InetSocketAddress;
-
+import com.google.common.base.Optional;
+import io.netty.channel.Channel;
+import io.netty.util.Timer;
+import io.netty.util.concurrent.Promise;
 import org.opendaylight.controller.netconf.api.NetconfServerSessionPreferences;
 import org.opendaylight.controller.netconf.util.AbstractNetconfSessionNegotiator;
 import org.opendaylight.controller.netconf.util.messages.NetconfHelloMessage;
@@ -17,11 +19,7 @@ import org.opendaylight.controller.netconf.util.messages.NetconfHelloMessageAddi
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Optional;
-
-import io.netty.channel.Channel;
-import io.netty.util.Timer;
-import io.netty.util.concurrent.Promise;
+import java.net.InetSocketAddress;
 
 public class NetconfServerSessionNegotiator extends
         AbstractNetconfSessionNegotiator<NetconfServerSessionPreferences, NetconfServerSession, NetconfServerSessionListener> {
@@ -52,4 +50,4 @@ public class NetconfServerSessionNegotiator extends
         return new NetconfServerSession(sessionListener, channel, getSessionPreferences().getSessionId(), parsedHeader);
     }
 
-   }
+}
index e052f61cc97dd7dce5a1e048f8f7f9938667df09..9106b6ad85ef68ec00e4cbb037c82e1b93047b03 100644 (file)
@@ -8,95 +8,82 @@
 
 package org.opendaylight.controller.netconf.impl;
 
-import com.google.common.base.Preconditions;
-import io.netty.channel.Channel;
-import io.netty.util.Timer;
-import io.netty.util.concurrent.Promise;
+import static org.opendaylight.controller.netconf.mapping.api.NetconfOperationProvider.NetconfOperationProviderUtil.getNetconfSessionIdForReporting;
+
+import java.util.Set;
+
 import org.opendaylight.controller.netconf.api.NetconfServerSessionPreferences;
 import org.opendaylight.controller.netconf.impl.mapping.CapabilityProvider;
-import org.opendaylight.controller.netconf.impl.osgi.NetconfOperationServiceFactoryListener;
-import org.opendaylight.controller.netconf.util.NetconfUtil;
+import org.opendaylight.controller.netconf.impl.osgi.SessionMonitoringService;
+import org.opendaylight.controller.netconf.mapping.api.NetconfOperationProvider;
+import org.opendaylight.controller.netconf.mapping.api.NetconfOperationServiceSnapshot;
 import org.opendaylight.controller.netconf.util.messages.NetconfHelloMessage;
-import org.opendaylight.controller.netconf.util.xml.XMLNetconfUtil;
 import org.opendaylight.controller.netconf.util.xml.XmlNetconfConstants;
-import org.opendaylight.controller.netconf.util.xml.XmlUtil;
 import org.opendaylight.protocol.framework.SessionListenerFactory;
 import org.opendaylight.protocol.framework.SessionNegotiator;
 import org.opendaylight.protocol.framework.SessionNegotiatorFactory;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
 
-import javax.xml.xpath.XPathConstants;
-import javax.xml.xpath.XPathExpression;
-import java.io.InputStream;
+import com.google.common.collect.Sets;
+
+import io.netty.channel.Channel;
+import io.netty.util.Timer;
+import io.netty.util.concurrent.Promise;
 
 public class NetconfServerSessionNegotiatorFactory implements SessionNegotiatorFactory<NetconfHelloMessage, NetconfServerSession, NetconfServerSessionListener> {
 
-    public static final String SERVER_HELLO_XML_LOCATION = "/server_hello.xml";
+    private static final Set<String> DEFAULT_CAPABILITIES = Sets.newHashSet(
+            XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_NETCONF_BASE_1_0,
+            XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_CAPABILITY_EXI_1_0);
 
     private final Timer timer;
 
-    private static final Document helloMessageTemplate = loadHelloMessageTemplate();
     private final SessionIdProvider idProvider;
-    private final NetconfOperationServiceFactoryListener factoriesListener;
+    private final NetconfOperationProvider netconfOperationProvider;
     private final long connectionTimeoutMillis;
+    private final DefaultCommitNotificationProducer commitNotificationProducer;
+    private final SessionMonitoringService monitoringService;
 
-    public NetconfServerSessionNegotiatorFactory(Timer timer, NetconfOperationServiceFactoryListener factoriesListener,
-            SessionIdProvider idProvider, long connectionTimeoutMillis) {
+    public NetconfServerSessionNegotiatorFactory(Timer timer, NetconfOperationProvider netconfOperationProvider,
+                                                 SessionIdProvider idProvider, long connectionTimeoutMillis,
+                                                 DefaultCommitNotificationProducer commitNot, SessionMonitoringService monitoringService) {
         this.timer = timer;
-        this.factoriesListener = factoriesListener;
+        this.netconfOperationProvider = netconfOperationProvider;
         this.idProvider = idProvider;
         this.connectionTimeoutMillis = connectionTimeoutMillis;
+        this.commitNotificationProducer = commitNot;
+        this.monitoringService = monitoringService;
     }
 
-    private static Document loadHelloMessageTemplate() {
-        InputStream resourceAsStream = NetconfServerSessionNegotiatorFactory.class
-                .getResourceAsStream(SERVER_HELLO_XML_LOCATION);
-        Preconditions.checkNotNull(resourceAsStream, "Unable to load server hello message blueprint from %s",
-                SERVER_HELLO_XML_LOCATION);
-        return NetconfUtil.createMessage(resourceAsStream).getDocument();
-    }
-
+    /**
+     *
+     * @param defunctSessionListenerFactory will not be taken into account as session listener factory can
+     *                                      only be created after snapshot is opened, thus this method constructs
+     *                                      proper session listener factory.
+     * @param channel Underlying channel
+     * @param promise Promise to be notified
+     * @return session negotiator
+     */
     @Override
-    public SessionNegotiator<NetconfServerSession> getSessionNegotiator(SessionListenerFactory<NetconfServerSessionListener> sessionListenerFactory, Channel channel,
-            Promise<NetconfServerSession> promise) {
+    public SessionNegotiator<NetconfServerSession> getSessionNegotiator(SessionListenerFactory<NetconfServerSessionListener> defunctSessionListenerFactory,
+                                                                        Channel channel, Promise<NetconfServerSession> promise) {
         long sessionId = idProvider.getNextSessionId();
+        NetconfOperationServiceSnapshot netconfOperationServiceSnapshot = netconfOperationProvider.openSnapshot(
+                getNetconfSessionIdForReporting(sessionId));
+        CapabilityProvider capabilityProvider = new CapabilityProviderImpl(netconfOperationServiceSnapshot);
+
+        NetconfServerSessionPreferences proposal = new NetconfServerSessionPreferences(
+                createHelloMessage(sessionId, capabilityProvider), sessionId);
+
+        NetconfServerSessionListenerFactory sessionListenerFactory = new NetconfServerSessionListenerFactory(
+                commitNotificationProducer, monitoringService,
+                netconfOperationServiceSnapshot, capabilityProvider);
 
-        NetconfServerSessionPreferences proposal = new NetconfServerSessionPreferences(createHelloMessage(sessionId),
-                sessionId);
         return new NetconfServerSessionNegotiator(proposal, promise, channel, timer,
                 sessionListenerFactory.getSessionListener(), connectionTimeoutMillis);
     }
 
-    private static final XPathExpression sessionIdXPath = XMLNetconfUtil
-            .compileXPath("/netconf:hello/netconf:session-id");
-    private static final XPathExpression capabilitiesXPath = XMLNetconfUtil
-            .compileXPath("/netconf:hello/netconf:capabilities");
-
-    private NetconfHelloMessage createHelloMessage(long sessionId) {
-        Document helloMessageTemplate = getHelloTemplateClone();
-
-        // change session ID
-        final Node sessionIdNode = (Node) XmlUtil.evaluateXPath(sessionIdXPath, helloMessageTemplate,
-                XPathConstants.NODE);
-        sessionIdNode.setTextContent(String.valueOf(sessionId));
-
-        // add capabilities from yang store
-        final Element capabilitiesElement = (Element) XmlUtil.evaluateXPath(capabilitiesXPath, helloMessageTemplate,
-                XPathConstants.NODE);
-
-        CapabilityProvider capabilityProvider = new CapabilityProviderImpl(factoriesListener.getSnapshot(sessionId));
-
-        for (String capability : capabilityProvider.getCapabilities()) {
-            final Element capabilityElement = helloMessageTemplate.createElement(XmlNetconfConstants.CAPABILITY);
-            capabilityElement.setTextContent(capability);
-            capabilitiesElement.appendChild(capabilityElement);
-        }
-        return new NetconfHelloMessage(helloMessageTemplate);
+    private NetconfHelloMessage createHelloMessage(long sessionId, CapabilityProvider capabilityProvider) {
+        return NetconfHelloMessage.createServerHello(Sets.union(capabilityProvider.getCapabilities(), DEFAULT_CAPABILITIES), sessionId);
     }
 
-    private synchronized Document getHelloTemplateClone() {
-        return (Document) helloMessageTemplate.cloneNode(true);
-    }
 }
index 8bc93e051253098fdadd361c3fd4a87d23dd8a4a..f31233987e97531a563fca3f186fee480e6b6616 100644 (file)
@@ -8,15 +8,18 @@
 
 package org.opendaylight.controller.netconf.impl.mapping.operations;
 
-import java.util.Collections;
-
 import org.opendaylight.controller.netconf.api.NetconfDocumentedException;
 import org.opendaylight.controller.netconf.util.mapping.AbstractSingletonNetconfOperation;
 import org.opendaylight.controller.netconf.util.xml.XmlElement;
 import org.opendaylight.controller.netconf.util.xml.XmlNetconfConstants;
+import org.opendaylight.controller.netconf.util.xml.XmlUtil;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
+import com.google.common.base.Optional;
+
+import java.util.Collections;
+
 public class DefaultCloseSession extends AbstractSingletonNetconfOperation {
     public static final String CLOSE_SESSION = "close-session";
     private final AutoCloseable sessionResources;
@@ -48,6 +51,6 @@ public class DefaultCloseSession extends AbstractSingletonNetconfOperation {
                     NetconfDocumentedException.ErrorSeverity.error, Collections.singletonMap(
                     NetconfDocumentedException.ErrorSeverity.error.toString(), e.getMessage()));
         }
-        return document.createElement(XmlNetconfConstants.OK);
+        return XmlUtil.createElement(document, XmlNetconfConstants.OK, Optional.<String>absent());
     }
 }
index ee0c6ce3ef9de07a472d57f0e43fba841f38a9bb..1a9f5d7393ad469f5e1c8d1cc0862589e65fe185 100644 (file)
@@ -12,7 +12,7 @@ import java.io.InputStream;
 import java.util.Map;
 
 import org.opendaylight.controller.netconf.api.NetconfDocumentedException;
-import org.opendaylight.controller.netconf.api.NetconfOperationRouter;
+import org.opendaylight.controller.netconf.impl.osgi.NetconfOperationRouter;
 import org.opendaylight.controller.netconf.impl.DefaultCommitNotificationProducer;
 import org.opendaylight.controller.netconf.impl.mapping.CapabilityProvider;
 import org.opendaylight.controller.netconf.mapping.api.HandlingPriority;
index 7134f5c580b601aee088fe2e2a510f83f4afcd02..f50dd3e706e40f60e22457c9f243a489061c4cab 100644 (file)
@@ -8,8 +8,9 @@
 
 package org.opendaylight.controller.netconf.impl.mapping.operations;
 
-import com.google.common.base.Optional;
-import com.google.common.collect.Maps;
+import java.util.HashMap;
+import java.util.Map;
+
 import org.opendaylight.controller.netconf.api.NetconfDocumentedException;
 import org.opendaylight.controller.netconf.impl.mapping.CapabilityProvider;
 import org.opendaylight.controller.netconf.util.mapping.AbstractLastNetconfOperation;
@@ -21,8 +22,8 @@ import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
-import java.util.HashMap;
-import java.util.Map;
+import com.google.common.base.Optional;
+import com.google.common.collect.Maps;
 
 public final class DefaultGetSchema extends AbstractLastNetconfOperation {
     public static final String GET_SCHEMA = "get-schema";
@@ -82,10 +83,8 @@ public final class DefaultGetSchema extends AbstractLastNetconfOperation {
         }
 
         Element getSchemaResult;
-        getSchemaResult = XmlUtil.createTextElement(document, XmlNetconfConstants.DATA_KEY, schema);
-        XmlUtil.addNamespaceAttr(getSchemaResult,
-                XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_YANG_IETF_NETCONF_MONITORING);
-
+        getSchemaResult = XmlUtil.createTextElement(document, XmlNetconfConstants.DATA_KEY, schema,
+                Optional.of(XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_YANG_IETF_NETCONF_MONITORING));
         logger.trace("{} operation successful", GET_SCHEMA);
 
         return getSchemaResult;
similarity index 54%
rename from opendaylight/config/yang-test-plugin/src/main/resources/Header.txt
rename to opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/mapping/operations/DefaultNetconfOperation.java
index 068fd26844b003f5b8770c0b049a66521a7d0426..13d4ab290b3c333d25e2e50ec66f15e79e19ec7f 100644 (file)
@@ -1,7 +1,14 @@
-/*
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
\ No newline at end of file
+/*\r
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+package org.opendaylight.controller.netconf.impl.mapping.operations;\r
+\r
+import org.opendaylight.controller.netconf.impl.NetconfServerSession;\r
+\r
+public interface DefaultNetconfOperation {\r
+    void setNetconfSession(NetconfServerSession s);\r
+}\r
index 31a7d320ea98d94b2012fe310df344df57af03a9..b9b30a5eaaa2b52b4967e102e373a578cf08b2ea 100644 (file)
@@ -8,8 +8,12 @@
 package org.opendaylight.controller.netconf.impl.mapping.operations;\r
 \r
 import org.opendaylight.controller.netconf.api.NetconfDocumentedException;\r
-import org.opendaylight.controller.netconf.api.NetconfSession;\r
-import org.opendaylight.controller.netconf.mapping.api.DefaultNetconfOperation;\r
+import org.opendaylight.controller.netconf.api.NetconfDocumentedException.ErrorSeverity;\r
+import org.opendaylight.controller.netconf.api.NetconfDocumentedException.ErrorTag;\r
+import org.opendaylight.controller.netconf.api.NetconfDocumentedException.ErrorType;\r
+import org.opendaylight.controller.netconf.api.NetconfMessage;\r
+import org.opendaylight.controller.netconf.impl.NetconfServerSession;\r
+import org.opendaylight.controller.netconf.mapping.api.NetconfOperationChainedExecution;\r
 import org.opendaylight.controller.netconf.util.mapping.AbstractSingletonNetconfOperation;\r
 import org.opendaylight.controller.netconf.util.xml.XmlElement;\r
 import org.opendaylight.controller.netconf.util.xml.XmlNetconfConstants;\r
@@ -18,63 +22,50 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;\r
 import org.w3c.dom.Document;\r
 import org.w3c.dom.Element;\r
-\r
 public class DefaultStartExi extends AbstractSingletonNetconfOperation implements DefaultNetconfOperation {\r
-\r
     public static final String START_EXI = "start-exi";\r
 \r
-    private NetconfSession netconfSession;\r
-\r
     private static final Logger logger = LoggerFactory.getLogger(DefaultStartExi.class);\r
+    private NetconfServerSession netconfSession;\r
 \r
     public DefaultStartExi(String netconfSessionIdForReporting) {\r
         super(netconfSessionIdForReporting);\r
     }\r
 \r
     @Override\r
-    protected String getOperationName() {\r
-        return START_EXI;\r
-    }\r
-\r
-    @Override\r
-    protected Element handleWithNoSubsequentOperations(Document document, XmlElement operationElement) throws NetconfDocumentedException {\r
-\r
-\r
-        Element getSchemaResult = document\r
-                .createElement(XmlNetconfConstants.OK);\r
-        XmlUtil.addNamespaceAttr(getSchemaResult,\r
-                XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_NETCONF_BASE_1_0);\r
+    public Document handle(Document message,\r
+                           NetconfOperationChainedExecution subsequentOperation) throws NetconfDocumentedException {\r
+        logger.debug("Received start-exi message {} ", XmlUtil.toString(message));\r
 \r
-\r
-        throw new UnsupportedOperationException("Not implemented");\r
-\r
-        /*\r
         try {\r
-            ExiParameters exiParams = new ExiParameters();\r
-            exiParams.setParametersFromXmlElement(operationElement);\r
-\r
-            netconfSession.addExiDecoder(ExiDecoderHandler.HANDLER_NAME, new ExiDecoderHandler(exiParams));\r
-            netconfSession.addExiEncoderAfterMessageSent(ExiEncoderHandler.HANDLER_NAME,new ExiEncoderHandler(exiParams));\r
-\r
-        } catch (EXIException e) {\r
-            getSchemaResult = document\r
-                    .createElement(XmlNetconfConstants.RPC_ERROR);\r
+            netconfSession.startExiCommunication(new NetconfMessage(message));\r
+        } catch (IllegalArgumentException e) {\r
+            throw new NetconfDocumentedException("Failed to parse EXI parameters", ErrorType.protocol,\r
+                    ErrorTag.operation_failed, ErrorSeverity.error);\r
         }\r
 \r
+        return super.handle(message, subsequentOperation);\r
+    }\r
+\r
+    @Override\r
+    protected Element handleWithNoSubsequentOperations(Document document, XmlElement operationElement) throws NetconfDocumentedException {\r
+        Element getSchemaResult = document.createElementNS( XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_NETCONF_BASE_1_0, XmlNetconfConstants.OK);\r
         logger.trace("{} operation successful", START_EXI);\r
-        logger.debug("received start-exi message {} ", XmlUtil.toString(document));\r
         return getSchemaResult;\r
-        */\r
     }\r
 \r
     @Override\r
-    public void setNetconfSession(NetconfSession s) {\r
-        netconfSession = s;\r
+    protected String getOperationName() {\r
+        return START_EXI;\r
     }\r
 \r
-    public NetconfSession getNetconfSession() {\r
-        return netconfSession;\r
+    @Override\r
+    protected String getOperationNamespace() {\r
+        return XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_NETCONF_EXI_1_0;\r
     }\r
 \r
-\r
+    @Override\r
+    public void setNetconfSession(NetconfServerSession s) {\r
+        netconfSession = s;\r
+    }\r
 }\r
index ae3b00b11ac167029546e38ed0392d6c5d43d809..22caeff071c44939f309d84c8187f2034172bd04 100644 (file)
@@ -8,10 +8,11 @@
 package org.opendaylight.controller.netconf.impl.mapping.operations;\r
 \r
 import org.opendaylight.controller.netconf.api.NetconfDocumentedException;\r
-import org.opendaylight.controller.netconf.api.NetconfSession;\r
-import org.opendaylight.controller.netconf.mapping.api.DefaultNetconfOperation;\r
+import org.opendaylight.controller.netconf.impl.NetconfServerSession;\r
 import org.opendaylight.controller.netconf.util.mapping.AbstractSingletonNetconfOperation;\r
 import org.opendaylight.controller.netconf.util.xml.XmlElement;\r
+import org.opendaylight.controller.netconf.util.xml.XmlNetconfConstants;\r
+import org.opendaylight.controller.netconf.util.xml.XmlUtil;\r
 import org.slf4j.Logger;\r
 import org.slf4j.LoggerFactory;\r
 import org.w3c.dom.Document;\r
@@ -20,7 +21,7 @@ import org.w3c.dom.Element;
 public class DefaultStopExi extends AbstractSingletonNetconfOperation implements DefaultNetconfOperation {\r
 \r
     public static final String STOP_EXI = "stop-exi";\r
-    private NetconfSession netconfSession;\r
+    private NetconfServerSession netconfSession;\r
 \r
     private static final Logger logger = LoggerFactory\r
             .getLogger(DefaultStartExi.class);\r
@@ -29,34 +30,29 @@ public class DefaultStopExi extends AbstractSingletonNetconfOperation implements
         super(netconfSessionIdForReporting);\r
     }\r
 \r
+    @Override\r
+    protected Element handleWithNoSubsequentOperations(Document document, XmlElement operationElement) throws NetconfDocumentedException {\r
+        logger.debug("Received stop-exi message {} ", XmlUtil.toString(operationElement));\r
+\r
+        netconfSession.stopExiCommunication();\r
+\r
+        Element getSchemaResult = document.createElementNS( XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_NETCONF_BASE_1_0, XmlNetconfConstants.OK);\r
+        logger.trace("{} operation successful", STOP_EXI);\r
+        return getSchemaResult;\r
+    }\r
+\r
     @Override\r
     protected String getOperationName() {\r
         return STOP_EXI;\r
     }\r
 \r
     @Override\r
-    protected Element handleWithNoSubsequentOperations(Document document, XmlElement operationElement)\r
-            throws NetconfDocumentedException {\r
-        throw new UnsupportedOperationException("Not implemented");\r
-        /*\r
-        netconfSession.remove(ExiDecoderHandler.class);\r
-        netconfSession.removeAfterMessageSent(ExiEncoderHandler.HANDLER_NAME);\r
-\r
-        Element getSchemaResult = document.createElement(XmlNetconfConstants.OK);\r
-        XmlUtil.addNamespaceAttr(getSchemaResult,\r
-                XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_NETCONF_BASE_1_0);\r
-        logger.trace("{} operation successful", STOP_EXI);\r
-        logger.debug("received stop-exi message {} ", XmlUtil.toString(document));\r
-        return getSchemaResult;\r
-        */\r
+    protected String getOperationNamespace() {\r
+        return XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_NETCONF_EXI_1_0;\r
     }\r
 \r
     @Override\r
-    public void setNetconfSession(NetconfSession s) {\r
+    public void setNetconfSession(NetconfServerSession s) {\r
         this.netconfSession = s;\r
     }\r
-\r
-    public NetconfSession getNetconfSession() {\r
-        return netconfSession;\r
-    }\r
 }\r
index b8dc9550c7f1fff5b4a544d3be0bc68f07f6d235..bbd07e42bf515c46dec0a6900bd2105f3140596f 100644 (file)
@@ -12,9 +12,9 @@ import io.netty.util.HashedWheelTimer;
 import org.opendaylight.controller.netconf.api.monitoring.NetconfMonitoringService;
 import org.opendaylight.controller.netconf.impl.DefaultCommitNotificationProducer;
 import org.opendaylight.controller.netconf.impl.NetconfServerDispatcher;
-import org.opendaylight.controller.netconf.impl.NetconfServerSessionListenerFactory;
 import org.opendaylight.controller.netconf.impl.NetconfServerSessionNegotiatorFactory;
 import org.opendaylight.controller.netconf.impl.SessionIdProvider;
+import org.opendaylight.controller.netconf.mapping.api.NetconfOperationProvider;
 import org.opendaylight.controller.netconf.util.osgi.NetconfConfigUtil;
 import org.osgi.framework.BundleActivator;
 import org.osgi.framework.BundleContext;
@@ -34,7 +34,6 @@ public class NetconfImplActivator implements BundleActivator {
 
     private NetconfOperationServiceFactoryTracker factoriesTracker;
     private DefaultCommitNotificationProducer commitNot;
-    private NetconfServerDispatcher dispatch;
     private NioEventLoopGroup eventLoopGroup;
     private HashedWheelTimer timer;
     private ServiceRegistration<NetconfMonitoringService> regMonitoring;
@@ -50,25 +49,26 @@ public class NetconfImplActivator implements BundleActivator {
         SessionIdProvider idProvider = new SessionIdProvider();
         timer = new HashedWheelTimer();
         long connectionTimeoutMillis = NetconfConfigUtil.extractTimeoutMillis(context);
-        NetconfServerSessionNegotiatorFactory serverNegotiatorFactory = new NetconfServerSessionNegotiatorFactory(
-                timer, factoriesListener, idProvider, connectionTimeoutMillis);
+
 
         commitNot = new DefaultCommitNotificationProducer(ManagementFactory.getPlatformMBeanServer());
 
-        NetconfMonitoringServiceImpl monitoringService = startMonitoringService(context, factoriesListener);
+        SessionMonitoringService monitoringService = startMonitoringService(context, factoriesListener);
 
-        NetconfServerSessionListenerFactory listenerFactory = new NetconfServerSessionListenerFactory(
-                factoriesListener, commitNot, idProvider, monitoringService);
+        NetconfServerSessionNegotiatorFactory serverNegotiatorFactory = new NetconfServerSessionNegotiatorFactory(
+                timer, factoriesListener, idProvider, connectionTimeoutMillis, commitNot, monitoringService);
 
         eventLoopGroup = new NioEventLoopGroup();
 
         NetconfServerDispatcher.ServerChannelInitializer serverChannelInitializer = new NetconfServerDispatcher.ServerChannelInitializer(
-                serverNegotiatorFactory, listenerFactory);
-        dispatch = new NetconfServerDispatcher(serverChannelInitializer, eventLoopGroup, eventLoopGroup);
+                serverNegotiatorFactory);
+        NetconfServerDispatcher dispatch = new NetconfServerDispatcher(serverChannelInitializer, eventLoopGroup, eventLoopGroup);
 
         logger.info("Starting TCP netconf server at {}", address);
         dispatch.createServer(address);
 
+        context.registerService(NetconfOperationProvider.class, factoriesListener, null);
+
     }
 
     private void startOperationServiceFactoryTracker(BundleContext context, NetconfOperationServiceFactoryListenerImpl factoriesListener) {
index 505c74714a71c269ad9721497cdbffaedd4fb706..a7560fadb602cc450f84c71e2f9936cb131cd495 100644 (file)
@@ -16,7 +16,9 @@ import io.netty.util.internal.ConcurrentSet;
 import org.opendaylight.controller.netconf.api.monitoring.NetconfManagementSession;
 import org.opendaylight.controller.netconf.api.monitoring.NetconfMonitoringService;
 import org.opendaylight.controller.netconf.mapping.api.Capability;
+import org.opendaylight.controller.netconf.mapping.api.NetconfOperationProvider;
 import org.opendaylight.controller.netconf.mapping.api.NetconfOperationService;
+import org.opendaylight.controller.netconf.mapping.api.NetconfOperationServiceSnapshot;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.Yang;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.Schemas;
@@ -40,10 +42,10 @@ public class NetconfMonitoringServiceImpl implements NetconfMonitoringService, S
     private static final Logger logger = LoggerFactory.getLogger(NetconfMonitoringServiceImpl.class);
 
     private final Set<NetconfManagementSession> sessions = new ConcurrentSet<>();
-    private final NetconfOperationServiceFactoryListener factoriesListener;
+    private final NetconfOperationProvider netconfOperationProvider;
 
-    public NetconfMonitoringServiceImpl(NetconfOperationServiceFactoryListener factoriesListener) {
-        this.factoriesListener = factoriesListener;
+    public NetconfMonitoringServiceImpl(NetconfOperationProvider netconfOperationProvider) {
+        this.netconfOperationProvider = netconfOperationProvider;
     }
 
     @Override
@@ -56,7 +58,7 @@ public class NetconfMonitoringServiceImpl implements NetconfMonitoringService, S
     @Override
     public void onSessionDown(NetconfManagementSession session) {
         logger.debug("Session {} down", session);
-        Preconditions.checkState(sessions.contains(session) == true, "Session %s not present", session);
+        Preconditions.checkState(sessions.contains(session), "Session %s not present", session);
         sessions.remove(session);
     }
 
@@ -67,17 +69,23 @@ public class NetconfMonitoringServiceImpl implements NetconfMonitoringService, S
 
     @Override
     public Schemas getSchemas() {
-        // FIXME, session ID
         // capabilities should be split from operations (it will allow to move getSchema operation to monitoring module)
-        return transformSchemas(factoriesListener.getSnapshot(0));
+        try (NetconfOperationServiceSnapshot snapshot = netconfOperationProvider.openSnapshot("netconf-monitoring")) {
+            return transformSchemas(snapshot.getServices());
+        } catch (RuntimeException e) {
+            throw e;
+        } catch (Exception e) {
+            throw new IllegalStateException("Exception while closing", e);
+        }
     }
 
-    private Schemas transformSchemas(NetconfOperationServiceSnapshot snapshot) {
+    private Schemas transformSchemas(Set<NetconfOperationService> services) {
         Set<Capability> caps = Sets.newHashSet();
 
         List<Schema> schemas = Lists.newArrayList();
 
-        for (NetconfOperationService netconfOperationService : snapshot.getServices()) {
+
+        for (NetconfOperationService netconfOperationService : services) {
             // TODO check for duplicates ? move capability merging to snapshot
             // Split capabilities from operations first and delete this duplicate code
             caps.addAll(netconfOperationService.getCapabilities());
@@ -86,8 +94,9 @@ public class NetconfMonitoringServiceImpl implements NetconfMonitoringService, S
         for (Capability cap : caps) {
             SchemaBuilder builder = new SchemaBuilder();
 
-            if(cap.getCapabilitySchema().isPresent() == false)
+            if (cap.getCapabilitySchema().isPresent() == false) {
                 continue;
+            }
 
             Preconditions.checkState(cap.getModuleNamespace().isPresent());
             builder.setNamespace(new Uri(cap.getModuleNamespace().get()));
@@ -102,7 +111,7 @@ public class NetconfMonitoringServiceImpl implements NetconfMonitoringService, S
 
             builder.setFormat(Yang.class);
 
-            builder.setLocation(transformLocations(cap.getLocation().or(Collections.<String> emptyList())));
+            builder.setLocation(transformLocations(cap.getLocation().or(Collections.<String>emptyList())));
 
             builder.setKey(new SchemaKey(Yang.class, identifier, version));
 
@@ -6,16 +6,16 @@
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
 
-package org.opendaylight.controller.netconf.api;
+package org.opendaylight.controller.netconf.impl.osgi;
 
+import org.opendaylight.controller.netconf.api.NetconfDocumentedException;
+import org.opendaylight.controller.netconf.impl.NetconfServerSession;
 import org.w3c.dom.Document;
 
 public interface NetconfOperationRouter extends AutoCloseable {
 
-    Document onNetconfMessage(Document message, NetconfSession session)
+    Document onNetconfMessage(Document message, NetconfServerSession session)
             throws NetconfDocumentedException;
 
-    @Override
-    void close();
 
 }
index a35851445381f8bdcfd3142d036b9c3c34280d13..bb4c76a4b89d327879e637a58a9ea4d919d26878 100644 (file)
@@ -11,20 +11,20 @@ import com.google.common.base.Preconditions;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
 import org.opendaylight.controller.netconf.api.NetconfDocumentedException;
-import org.opendaylight.controller.netconf.api.NetconfOperationRouter;
-import org.opendaylight.controller.netconf.api.NetconfSession;
 import org.opendaylight.controller.netconf.impl.DefaultCommitNotificationProducer;
+import org.opendaylight.controller.netconf.impl.NetconfServerSession;
 import org.opendaylight.controller.netconf.impl.mapping.CapabilityProvider;
 import org.opendaylight.controller.netconf.impl.mapping.operations.DefaultCloseSession;
 import org.opendaylight.controller.netconf.impl.mapping.operations.DefaultCommit;
 import org.opendaylight.controller.netconf.impl.mapping.operations.DefaultGetSchema;
 import org.opendaylight.controller.netconf.impl.mapping.operations.DefaultStartExi;
 import org.opendaylight.controller.netconf.impl.mapping.operations.DefaultStopExi;
-import org.opendaylight.controller.netconf.mapping.api.DefaultNetconfOperation;
+import org.opendaylight.controller.netconf.impl.mapping.operations.DefaultNetconfOperation;
 import org.opendaylight.controller.netconf.mapping.api.HandlingPriority;
 import org.opendaylight.controller.netconf.mapping.api.NetconfOperation;
 import org.opendaylight.controller.netconf.mapping.api.NetconfOperationChainedExecution;
 import org.opendaylight.controller.netconf.mapping.api.NetconfOperationService;
+import org.opendaylight.controller.netconf.mapping.api.NetconfOperationServiceSnapshot;
 import org.opendaylight.controller.netconf.util.xml.XmlUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -93,7 +93,7 @@ public class NetconfOperationRouterImpl implements NetconfOperationRouter {
 
     @Override
     public synchronized Document onNetconfMessage(Document message,
-            NetconfSession session) throws NetconfDocumentedException {
+            NetconfServerSession session) throws NetconfDocumentedException {
         Preconditions.checkNotNull(allNetconfOperations, "Operation router was not initialized properly");
 
         NetconfOperationExecution netconfOperationExecution;
@@ -107,11 +107,11 @@ public class NetconfOperationRouterImpl implements NetconfOperationRouter {
             String errorMessage = String.format("Unable to handle rpc %s on session %s", messageAsString, session);
             Map<String, String> errorInfo = Maps.newHashMap();
 
-            NetconfDocumentedException.ErrorTag tag = null;
+            NetconfDocumentedException.ErrorTag tag;
             if (e instanceof IllegalArgumentException) {
                 errorInfo.put(NetconfDocumentedException.ErrorTag.operation_not_supported.toString(), e.getMessage());
                 tag = NetconfDocumentedException.ErrorTag.operation_not_supported;
-            } else if (e instanceof IllegalStateException) {
+            } else {
                 errorInfo.put(NetconfDocumentedException.ErrorTag.operation_failed.toString(), e.getMessage());
                 tag = NetconfDocumentedException.ErrorTag.operation_failed;
             }
@@ -130,7 +130,7 @@ public class NetconfOperationRouterImpl implements NetconfOperationRouter {
     }
 
     @Override
-    public void close() {
+    public void close() throws Exception {
         netconfOperationServiceSnapshot.close();
     }
 
@@ -153,20 +153,20 @@ public class NetconfOperationRouterImpl implements NetconfOperationRouter {
     }
 
     private NetconfOperationExecution getNetconfOperationWithHighestPriority(
-            Document message, NetconfSession session) {
+            Document message, NetconfServerSession session) {
 
         TreeMap<HandlingPriority, NetconfOperation> sortedByPriority = getSortedNetconfOperationsWithCanHandle(
                 message, session);
 
         Preconditions.checkArgument(sortedByPriority.isEmpty() == false,
-                "No %s available to handleWithNoSubsequentOperations message %s", NetconfOperation.class.getName(),
+                "No %s available to handle message %s", NetconfOperation.class.getName(),
                 XmlUtil.toString(message));
 
         return NetconfOperationExecution.createExecutionChain(sortedByPriority, sortedByPriority.lastKey());
     }
 
     private TreeMap<HandlingPriority, NetconfOperation> getSortedNetconfOperationsWithCanHandle(Document message,
-            NetconfSession session) {
+            NetconfServerSession session) {
         TreeMap<HandlingPriority, NetconfOperation> sortedPriority = Maps.newTreeMap();
 
         for (NetconfOperation netconfOperation : allNetconfOperations) {
index 385ad09754f1a3b85b72febe63478d3a0c5b2899..8e1052cfeb71da6f776d3d0c8aebe6a502a0f2c5 100644 (file)
@@ -16,5 +16,5 @@ public interface NetconfOperationServiceFactoryListener {
 
     void onRemoveNetconfOperationServiceFactory(NetconfOperationServiceFactory service);
 
-    NetconfOperationServiceSnapshot getSnapshot(long sessionId);
+
 }
index 134c38ba971bcfd510386f112ed6cf00c1a941c4..63cd0baf347f8821a2f639cac5fca55cf4eae774 100644 (file)
@@ -7,12 +7,14 @@
  */
 package org.opendaylight.controller.netconf.impl.osgi;
 
+import org.opendaylight.controller.netconf.mapping.api.NetconfOperationProvider;
+import org.opendaylight.controller.netconf.mapping.api.NetconfOperationServiceFactory;
+
 import java.util.HashSet;
 import java.util.Set;
 
-import org.opendaylight.controller.netconf.mapping.api.NetconfOperationServiceFactory;
-
-public class NetconfOperationServiceFactoryListenerImpl implements NetconfOperationServiceFactoryListener {
+public class NetconfOperationServiceFactoryListenerImpl implements NetconfOperationServiceFactoryListener,
+        NetconfOperationProvider {
     private final Set<NetconfOperationServiceFactory> allFactories = new HashSet<>();
 
     @Override
@@ -26,8 +28,8 @@ public class NetconfOperationServiceFactoryListenerImpl implements NetconfOperat
     }
 
     @Override
-    public synchronized NetconfOperationServiceSnapshot getSnapshot(long sessionId) {
-        return new NetconfOperationServiceSnapshot(allFactories, sessionId);
+    public synchronized NetconfOperationServiceSnapshotImpl openSnapshot(String sessionIdForReporting) {
+        return new NetconfOperationServiceSnapshotImpl(allFactories, sessionIdForReporting);
     }
 
 }
@@ -10,62 +10,46 @@ package org.opendaylight.controller.netconf.impl.osgi;
 
 import org.opendaylight.controller.netconf.mapping.api.NetconfOperationService;
 import org.opendaylight.controller.netconf.mapping.api.NetconfOperationServiceFactory;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.opendaylight.controller.netconf.mapping.api.NetconfOperationServiceSnapshot;
+import org.opendaylight.controller.netconf.util.CloseableUtil;
 
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
 
-public class NetconfOperationServiceSnapshot implements AutoCloseable {
-    private static final Logger logger = LoggerFactory.getLogger(NetconfOperationServiceSnapshot.class);
+public class NetconfOperationServiceSnapshotImpl implements NetconfOperationServiceSnapshot {
 
     private final Set<NetconfOperationService> services;
     private final String netconfSessionIdForReporting;
 
-    public NetconfOperationServiceSnapshot(Set<NetconfOperationServiceFactory> factories, long sessionId) {
+    public NetconfOperationServiceSnapshotImpl(Set<NetconfOperationServiceFactory> factories, String sessionIdForReporting) {
         Set<NetconfOperationService> services = new HashSet<>();
-        netconfSessionIdForReporting = getNetconfSessionIdForReporting(sessionId);
+        netconfSessionIdForReporting = sessionIdForReporting;
         for (NetconfOperationServiceFactory factory : factories) {
             services.add(factory.createService(netconfSessionIdForReporting));
         }
         this.services = Collections.unmodifiableSet(services);
     }
 
-    private static String getNetconfSessionIdForReporting(long sessionId) {
-        return "netconf session id " + sessionId;
-    }
 
+
+    @Override
     public String getNetconfSessionIdForReporting() {
         return netconfSessionIdForReporting;
     }
 
+    @Override
     public Set<NetconfOperationService> getServices() {
         return services;
     }
 
     @Override
-    public void close() {
-        RuntimeException firstException = null;
-        for (NetconfOperationService service : services) {
-            try {
-                service.close();
-            } catch (RuntimeException e) {
-                logger.warn("Got exception while closing {}", service, e);
-                if (firstException == null) {
-                    firstException = e;
-                } else {
-                    firstException.addSuppressed(e);
-                }
-            }
-        }
-        if (firstException != null) {
-            throw firstException;
-        }
+    public void close() throws Exception {
+        CloseableUtil.closeAll(services);
     }
 
     @Override
     public String toString() {
-        return "NetconfOperationServiceSnapshot{" + netconfSessionIdForReporting + '}';
+        return "NetconfOperationServiceSnapshotImpl{" + netconfSessionIdForReporting + '}';
     }
 }
index fca3e8bc1bd496f251687e7277beae6ec5020af9..31c4d4f57e7b65f6f4b9ae5e28376346e3be3600 100644 (file)
@@ -36,7 +36,7 @@ public final class
 
     @Override
     public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
-        logger.warn("An exception occured during message handling", cause);
+        logger.warn("An exception occurred during message handling", cause);
         handleDeserializerException(ctx, cause);
     }
 
diff --git a/opendaylight/netconf/netconf-impl/src/main/resources/server_hello.xml b/opendaylight/netconf/netconf-impl/src/main/resources/server_hello.xml
deleted file mode 100644 (file)
index 6a3f911..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
-    <capabilities>
-        <capability>urn:ietf:params:netconf:base:1.0</capability>
-    </capabilities>
-    <session-id>1</session-id>
-</hello>
index c1a7b1478b3edde41ea5f13004afc48df540c6bf..db5a359d7a16c72784911a447b2756de36356b42 100644 (file)
@@ -18,10 +18,9 @@ import org.apache.commons.io.IOUtils;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
-import org.mockito.Mock;
 import org.opendaylight.controller.netconf.api.NetconfDocumentedException;
 import org.opendaylight.controller.netconf.api.NetconfMessage;
-import org.opendaylight.controller.netconf.client.NetconfClient;
+import org.opendaylight.controller.netconf.client.test.TestingNetconfClient;
 import org.opendaylight.controller.netconf.client.NetconfClientDispatcher;
 import org.opendaylight.controller.netconf.impl.osgi.NetconfOperationServiceFactoryListenerImpl;
 import org.opendaylight.controller.netconf.impl.osgi.SessionMonitoringService;
@@ -53,7 +52,7 @@ import static com.google.common.base.Preconditions.checkNotNull;
 import static org.junit.Assert.fail;
 import static org.mockito.Matchers.any;
 import static org.mockito.Mockito.doNothing;
-import static org.mockito.MockitoAnnotations.initMocks;
+import static org.mockito.Mockito.mock;
 
 public class ConcurrentClientsTest {
 
@@ -68,14 +67,20 @@ public class ConcurrentClientsTest {
     private DefaultCommitNotificationProducer commitNot;
     private NetconfServerDispatcher dispatch;
 
-    @Mock
-    private SessionMonitoringService monitoring;
+
 
     HashedWheelTimer hashedWheelTimer;
 
+    public static SessionMonitoringService createMockedMonitoringService() {
+        SessionMonitoringService monitoring = mock(SessionMonitoringService.class);
+        doNothing().when(monitoring).onSessionUp(any(NetconfServerSession.class));
+        doNothing().when(monitoring).onSessionDown(any(NetconfServerSession.class));
+        return monitoring;
+    }
+
     @Before
     public void setUp() throws Exception {
-        initMocks(this);
+
         nettyGroup = new NioEventLoopGroup();
         NetconfHelloMessageAdditionalHeader additionalHeader = new NetconfHelloMessageAdditionalHeader("uname", "10.10.10.1", "830", "tcp", "client");
         netconfClientDispatcher = new NetconfClientDispatcher( nettyGroup, nettyGroup, additionalHeader, 5000);
@@ -86,16 +91,13 @@ public class ConcurrentClientsTest {
         SessionIdProvider idProvider = new SessionIdProvider();
         hashedWheelTimer = new HashedWheelTimer();
         NetconfServerSessionNegotiatorFactory serverNegotiatorFactory = new NetconfServerSessionNegotiatorFactory(
-                hashedWheelTimer, factoriesListener, idProvider, 5000);
+                hashedWheelTimer, factoriesListener, idProvider, 5000, commitNot, createMockedMonitoringService());
 
         commitNot = new DefaultCommitNotificationProducer(ManagementFactory.getPlatformMBeanServer());
 
-        doNothing().when(monitoring).onSessionUp(any(NetconfServerSession.class));
-        doNothing().when(monitoring).onSessionDown(any(NetconfServerSession.class));
 
-        NetconfServerSessionListenerFactory listenerFactory = new NetconfServerSessionListenerFactory(
-                factoriesListener, commitNot, idProvider, monitoring);
-        NetconfServerDispatcher.ServerChannelInitializer serverChannelInitializer = new NetconfServerDispatcher.ServerChannelInitializer(serverNegotiatorFactory, listenerFactory);
+
+        NetconfServerDispatcher.ServerChannelInitializer serverChannelInitializer = new NetconfServerDispatcher.ServerChannelInitializer(serverNegotiatorFactory);
         dispatch = new NetconfServerDispatcher(serverChannelInitializer, nettyGroup, nettyGroup);
 
         ChannelFuture s = dispatch.createServer(netconfAddress);
@@ -259,13 +261,13 @@ public class ConcurrentClientsTest {
         @Override
         public void run() {
             try {
-                final NetconfClient netconfClient = new NetconfClient(clientId, netconfAddress, netconfClientDispatcher);
+                final TestingNetconfClient netconfClient = new TestingNetconfClient(clientId, netconfAddress, netconfClientDispatcher);
                 long sessionId = netconfClient.getSessionId();
                 logger.info("Client with sessionid {} hello exchanged", sessionId);
 
                 final NetconfMessage getMessage = XmlFileLoader
                         .xmlFileToNetconfMessage("netconfMessages/getConfig.xml");
-                NetconfMessage result = netconfClient.sendMessage(getMessage);
+                NetconfMessage result = netconfClient.sendRequest(getMessage).get();
                 logger.info("Client with sessionid {} got result {}", sessionId, result);
                 netconfClient.close();
                 logger.info("Client with session id {} ended", sessionId);
index d7beb5df9b4393eb4e88b8e1ba7f4e42ea9c01e7..58c6566d91dfb7b86230e6fcd48cfd3f12d12912 100644 (file)
@@ -1,43 +1,43 @@
-/*\r
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.\r
- *\r
- * This program and the accompanying materials are made available under the\r
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
- * and is available at http://www.eclipse.org/legal/epl-v10.html\r
- */\r
-package org.opendaylight.controller.netconf.impl;\r
-\r
-import static junit.framework.Assert.assertNotNull;\r
-\r
-import org.junit.Test;\r
-import org.opendaylight.controller.netconf.api.NetconfMessage;\r
-import org.opendaylight.controller.netconf.util.test.XmlFileLoader;\r
-\r
-public class ExiEncodeDecodeTest  {\r
-    @Test\r
-    public void encodeExi() throws Exception{\r
-\r
-        String startExiString = XmlFileLoader.xmlFileToString("netconfMessages/startExi.xml");\r
-        assertNotNull(startExiString);\r
-\r
-        NetconfMessage startExiMessage = XmlFileLoader.xmlFileToNetconfMessage(("netconfMessages/startExi.xml"));\r
-        assertNotNull(startExiMessage);\r
-\r
-        /*\r
-        ExiParameters exiParams = new ExiParameters();\r
-        exiParams.setParametersFromXmlElement(XmlElement.fromDomElement(startExiMessage.getDocument().getDocumentElement()));\r
-        assertNotNull(exiParams);\r
-\r
-        ByteBuf encodedBuf = Unpooled.buffer();\r
-        ByteBuf sourceBuf = Unpooled.copiedBuffer(startExiString.getBytes());\r
-        ExiUtil.encode(sourceBuf, encodedBuf, exiParams);\r
-\r
-        List<Object> newOut = new ArrayList<Object>();\r
-        ExiUtil.decode(encodedBuf, newOut, exiParams);\r
-\r
-        ByteBuf decodedBuf = (ByteBuf)newOut.get(0);\r
-        String decodedString = new String(decodedBuf.array(),"UTF-8");\r
-        assertNotNull(decodedString);\r
-        */\r
-    }\r
-}\r
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.controller.netconf.impl;
+
+import static junit.framework.Assert.assertNotNull;
+
+import org.junit.Test;
+import org.opendaylight.controller.netconf.api.NetconfMessage;
+import org.opendaylight.controller.netconf.util.test.XmlFileLoader;
+
+public class ExiEncodeDecodeTest  {
+    @Test
+    public void encodeExi() throws Exception{
+
+        String startExiString = XmlFileLoader.xmlFileToString("netconfMessages/startExi.xml");
+        assertNotNull(startExiString);
+
+        NetconfMessage startExiMessage = XmlFileLoader.xmlFileToNetconfMessage(("netconfMessages/startExi.xml"));
+        assertNotNull(startExiMessage);
+
+        /*
+        ExiParameters exiParams = new ExiParameters();
+        exiParams.setParametersFromXmlElement(XmlElement.fromDomElement(startExiMessage.getDocument().getDocumentElement()));
+        assertNotNull(exiParams);
+
+        ByteBuf encodedBuf = Unpooled.buffer();
+        ByteBuf sourceBuf = Unpooled.copiedBuffer(startExiString.getBytes());
+        ExiUtil.encode(sourceBuf, encodedBuf, exiParams);
+
+        List<Object> newOut = new ArrayList<Object>();
+        ExiUtil.decode(encodedBuf, newOut, exiParams);
+
+        ByteBuf decodedBuf = (ByteBuf)newOut.get(0);
+        String decodedString = new String(decodedBuf.array(),"UTF-8");
+        assertNotNull(decodedString);
+        */
+    }
+}
index d1c0b066d7a0a5ef15399a0544deb380177b0b01..e13415b64b71ad31aa6e2e846adbb360f3740183 100644 (file)
@@ -8,6 +8,7 @@
 
 package org.opendaylight.controller.netconf.impl;
 
+import static org.custommonkey.xmlunit.XMLAssert.assertXMLEqual;
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
@@ -87,7 +88,7 @@ public class MessageParserTest {
 
         NetconfMessage receivedMessage = (NetconfMessage) testChunkChannel.readInbound();
         assertNotNull(receivedMessage);
-        assertTrue(this.msg.getDocument().isEqualNode(receivedMessage.getDocument()));
+        assertXMLEqual(this.msg.getDocument(), receivedMessage.getDocument());
     }
 
     @Test
@@ -106,6 +107,6 @@ public class MessageParserTest {
         testChunkChannel.writeInbound(recievedOutbound);
         NetconfMessage receivedMessage = (NetconfMessage) testChunkChannel.readInbound();
         assertNotNull(receivedMessage);
-        assertTrue(this.msg.getDocument().isEqualNode(receivedMessage.getDocument()));
+        assertXMLEqual(this.msg.getDocument(), receivedMessage.getDocument());
     }
 }
index 9835c2393ba489e7dcf7ead4ceca119beef7f63b..42bd033c712d22daf600322680739b1f7b9f2b10 100644 (file)
@@ -15,7 +15,6 @@ import io.netty.util.HashedWheelTimer;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
-import org.opendaylight.controller.netconf.impl.osgi.NetconfOperationServiceFactoryListener;
 import org.opendaylight.controller.netconf.impl.osgi.NetconfOperationServiceFactoryListenerImpl;
 
 import java.lang.management.ManagementFactory;
@@ -28,22 +27,21 @@ public class NetconfDispatcherImplTest {
     private DefaultCommitNotificationProducer commitNot;
     private HashedWheelTimer hashedWheelTimer;
 
+
     @Before
     public void setUp() throws Exception {
         nettyGroup = new NioEventLoopGroup();
 
         commitNot = new DefaultCommitNotificationProducer(
                 ManagementFactory.getPlatformMBeanServer());
-        NetconfOperationServiceFactoryListener factoriesListener = new NetconfOperationServiceFactoryListenerImpl();
+        NetconfOperationServiceFactoryListenerImpl factoriesListener = new NetconfOperationServiceFactoryListenerImpl();
 
         SessionIdProvider idProvider = new SessionIdProvider();
         hashedWheelTimer = new HashedWheelTimer();
         NetconfServerSessionNegotiatorFactory serverNegotiatorFactory = new NetconfServerSessionNegotiatorFactory(
-                hashedWheelTimer, factoriesListener, idProvider, 5000);
+                hashedWheelTimer, factoriesListener, idProvider, 5000, commitNot, ConcurrentClientsTest.createMockedMonitoringService());
 
-        NetconfServerSessionListenerFactory listenerFactory = new NetconfServerSessionListenerFactory(
-                factoriesListener, commitNot, idProvider, null);
-        NetconfServerDispatcher.ServerChannelInitializer serverChannelInitializer = new NetconfServerDispatcher.ServerChannelInitializer(serverNegotiatorFactory, listenerFactory);
+        NetconfServerDispatcher.ServerChannelInitializer serverChannelInitializer = new NetconfServerDispatcher.ServerChannelInitializer(serverNegotiatorFactory);
 
         dispatch = new NetconfServerDispatcher(
                 serverChannelInitializer, nettyGroup, nettyGroup);
index 5e03681d958ab211237da7d7e555900bd226de16..fcef6b730c1b396c47402f9fd4a661c614e8ad86 100644 (file)
@@ -1,10 +1,10 @@
-{\r
-   "value":null,\r
-   "status":200,\r
-   "request": {\r
-                "type":"exec",\r
-                "mbean":"java.util.logging:type=Logging",\r
-                "operation":"setLoggerLevel",\r
-                "arguments":["global","INFO"]\r
-              }\r
+{
+   "value":null,
+   "status":200,
+   "request": {
+                "type":"exec",
+                "mbean":"java.util.logging:type=Logging",
+                "operation":"setLoggerLevel",
+                "arguments":["global","INFO"]
+              }
 }
\ No newline at end of file
index b04ace303fe7db55c61679550f3121ca5dd64118..09ba714ea901365eebc5465326592e38c08bf76b 100644 (file)
@@ -1,7 +1,7 @@
-<jmxbean>\r
-    <mBean>org.opendaylight.controller:type=AppDeployer</mBean>\r
-    <type>EXEC</type>\r
-    <operation>lookupConfigBeans</operation>\r
-    <arguments>abc,bcd.aas</arguments>\r
-    <arguments>64</arguments>\r
+<jmxbean>
+    <mBean>org.opendaylight.controller:type=AppDeployer</mBean>
+    <type>EXEC</type>
+    <operation>lookupConfigBeans</operation>
+    <arguments>abc,bcd.aas</arguments>
+    <arguments>64</arguments>
 </jmxbean>
\ No newline at end of file
index 5fc93532a43f33f40f23bd78fe12dd18ac83ce1c..011d47263415a27ae18189b66ccd87f9f6bcb5aa 100644 (file)
@@ -1,9 +1,9 @@
-<jmxbean>\r
-    <mBean>org.opendaylight.controller:type=AppDeployer</mBean>\r
-    <type>EXEC</type>\r
-    <operation>lookupConfigBeans</operation>\r
-    <arguments>\r
-        <elements>22</elements>\r
-        <elements>69</elements>\r
-    </arguments>\r
+<jmxbean>
+    <mBean>org.opendaylight.controller:type=AppDeployer</mBean>
+    <type>EXEC</type>
+    <operation>lookupConfigBeans</operation>
+    <arguments>
+        <elements>22</elements>
+        <elements>69</elements>
+    </arguments>
 </jmxbean>
\ No newline at end of file
index 9bf5b58dc47be98df76ccdd3600e5688d97d0a65..947335d2154621f2b084efa59a60080e7bc0fb61 100644 (file)
@@ -1,14 +1,14 @@
-<jmxbean>\r
-    <mBean>org.opendaylight.controller:type=AppDeployer</mBean>\r
-    <type>EXEC</type>\r
-    <operation>lookupConfigBeans</operation>\r
-    <arguments>\r
-        <map>\r
-            <topology-registry>single</topology-registry>\r
-            <bgp-update>mock</bgp-update>\r
-        </map>\r
-        <array>2</array>\r
-        <array>22</array>\r
-        <anotherArg>arg</anotherArg>\r
-    </arguments>\r
+<jmxbean>
+    <mBean>org.opendaylight.controller:type=AppDeployer</mBean>
+    <type>EXEC</type>
+    <operation>lookupConfigBeans</operation>
+    <arguments>
+        <map>
+            <topology-registry>single</topology-registry>
+            <bgp-update>mock</bgp-update>
+        </map>
+        <array>2</array>
+        <array>22</array>
+        <anotherArg>arg</anotherArg>
+    </arguments>
 </jmxbean>
\ No newline at end of file
index 23a3489310f7caed528a4acec408a01c0447252a..2ad485f6c5bf1eea75457c0e0426a85028b333b8 100644 (file)
@@ -1,29 +1,29 @@
-<config>\r
-    <jmxbean>\r
-        <mBean>org.opendaylight.controller:type=AppDeployer</mBean>\r
-        <type>EXEC</type>\r
-        <operation>lookupConfigBeans</operation>\r
-        <attribute>abc,bcd.aas</attribute>\r
-        <attribute>22</attribute>\r
-    </jmxbean>\r
-    <jmxbean>\r
-        <mBean>org.opendaylight.controller:type=AppDeployer</mBean>\r
-        <type>WRITE</type>\r
-        <attribute>attribute</attribute>\r
-        <value>22</value>\r
-    </jmxbean>\r
-    <jmxbean>\r
-        <mBean>org.opendaylight.controller:type=AppDeployer</mBean>\r
-        <type>EXEC</type>\r
-        <operation>lookupConfigBeans</operation>\r
-        <arguments>\r
-            <map>\r
-                <topology-registry>single</topology-registry>\r
-                <bgp-update>mock</bgp-update>\r
-            </map>\r
-            <array>2</array>\r
-            <array>22</array>\r
-            <anotherArg>arg</anotherArg>\r
-        </arguments>\r
-    </jmxbean>\r
+<config>
+    <jmxbean>
+        <mBean>org.opendaylight.controller:type=AppDeployer</mBean>
+        <type>EXEC</type>
+        <operation>lookupConfigBeans</operation>
+        <attribute>abc,bcd.aas</attribute>
+        <attribute>22</attribute>
+    </jmxbean>
+    <jmxbean>
+        <mBean>org.opendaylight.controller:type=AppDeployer</mBean>
+        <type>WRITE</type>
+        <attribute>attribute</attribute>
+        <value>22</value>
+    </jmxbean>
+    <jmxbean>
+        <mBean>org.opendaylight.controller:type=AppDeployer</mBean>
+        <type>EXEC</type>
+        <operation>lookupConfigBeans</operation>
+        <arguments>
+            <map>
+                <topology-registry>single</topology-registry>
+                <bgp-update>mock</bgp-update>
+            </map>
+            <array>2</array>
+            <array>22</array>
+            <anotherArg>arg</anotherArg>
+        </arguments>
+    </jmxbean>
 </config>
\ No newline at end of file
index abad54d27a72f2461b2adcce65b31e8ca2ccd405..a5882d6dedc738aa8856ff14b856a33df71a6ec0 100644 (file)
@@ -1,6 +1,6 @@
-<jmxbean>\r
-    <mBean>org.opendaylight.controller:type=AppDeployer</mBean>\r
-    <type>WRITE</type>\r
-    <attribute>attribute</attribute>\r
-    <value>22</value>\r
+<jmxbean>
+    <mBean>org.opendaylight.controller:type=AppDeployer</mBean>
+    <type>WRITE</type>
+    <attribute>attribute</attribute>
+    <value>22</value>
 </jmxbean>
\ No newline at end of file
index 7162b8f0564ad52477ceed752c644cf254cd5622..24d2171fe40c865100a84b155bd00293cdc566e2 100644 (file)
@@ -1,8 +1,8 @@
-<jmxbean>\r
-    <mBean>org.opendaylight.controller:type=AppDeployer</mBean>\r
-    <type>WRITE</type>\r
-    <attribute>attribute</attribute>\r
-    <value>22</value>\r
-    <value>222</value>\r
-    <value>223</value>\r
+<jmxbean>
+    <mBean>org.opendaylight.controller:type=AppDeployer</mBean>
+    <type>WRITE</type>
+    <attribute>attribute</attribute>
+    <value>22</value>
+    <value>222</value>
+    <value>223</value>
 </jmxbean>
\ No newline at end of file
index 00a0536c0c94db40f983cf0d82265ac7bfd498cd..9af105fe58f83ff51001b3991d293e385cb30eb9 100644 (file)
@@ -1,9 +1,9 @@
-<jmxbean>\r
-    <mBean>org.opendaylight.controller:type=AppDeployer</mBean>\r
-    <type>WRITE</type>\r
-    <attribute>setAtr</attribute>\r
-    <value>\r
-        <abc>1</abc>\r
-        <bcd>2</bcd>\r
-    </value>\r
-</jmxbean>\r
+<jmxbean>
+    <mBean>org.opendaylight.controller:type=AppDeployer</mBean>
+    <type>WRITE</type>
+    <attribute>setAtr</attribute>
+    <value>
+        <abc>1</abc>
+        <bcd>2</bcd>
+    </value>
+</jmxbean>
index 60fabb62d1aa017e66c4a432bf3a82df93b5f26e..d7538663e3d173e299bb25e0b1d1ce054c54b729 100644 (file)
-{\r
-   "timestamp":1362488209,\r
-   "status":200,\r
-   "request":{\r
-      "mbean":"org.opendaylight.controller:type=ConfigRegistry",\r
-      "attribute":"AvailableInterfacesAndImplementations",\r
-      "type":"read"\r
-   },\r
-   "value":{\r
-      "topology-registry":[\r
-         "single"\r
-      ],\r
-      "bgp-update":[\r
-         "mock",\r
-         "bgp-impl"\r
-      ],\r
-      "positioning-service":[\r
-         "combine",\r
-         "onehop",\r
-         "ondemand",\r
-         "pxe",\r
-         "precompute"\r
-      ],\r
-      "serializer":[\r
-         "serializer-impl"\r
-      ],\r
-      "network-topology-factory":[\r
-         "mock-xml",\r
-         "bgp-network-topology-factory",\r
-         "transient"\r
-      ],\r
-      "dwe-topology":[\r
-         "ebgp",\r
-         "defaultmetric",\r
-         "igp",\r
-         "network"\r
-      ],\r
-      "thread-factory":[\r
-         "naming-thread-factory"\r
-      ],\r
-      "bgp-parser":[\r
-         "parser"\r
-      ],\r
-      "pcep-dispatcher":[\r
-         "dispatcher"\r
-      ],\r
-      "threadpool":[\r
-         "flexible",\r
-         "fixed",\r
-         "scheduled"\r
-      ],\r
-      "scheduled-threadpool":[\r
-         "scheduled"\r
-      ],\r
-      "positioning-onehop":[\r
-         "onehop"\r
-      ],\r
-      "bgp-dispatcher":[\r
-         "bgp-dispatcher-impl"\r
-      ],\r
-      "cost-combiner":[\r
-         "pxe"\r
-      ],\r
-      "apsp-provider":[\r
-         "jgrapht",\r
-         "parallel",\r
-         "single-threaded"\r
-      ],\r
-      "topology":[\r
-         "ebgp",\r
-         "defaultmetric",\r
-         "igp",\r
-         "network"\r
-      ],\r
-      "soap-resource":[\r
-         "positioning-adaptor-pxe"\r
-      ],\r
-      "database-provider-factory":[\r
-         "transient"\r
-      ],\r
-      "bgp-proposal-checker":[\r
-         "bgp-proposal-checker-impl"\r
-      ],\r
-      "bgp-proposal":[\r
-         "bgp-proposal-impl"\r
-      ],\r
-      "listenable-network-topology-factory":[\r
-         "transient"\r
-      ],\r
-      "event-bus":[\r
-         "sync",\r
-         "async"\r
-      ],\r
-      "topology-registry-provider":[\r
-         "single"\r
-      ],\r
-      "topology-provider-factory":[\r
-         "transient"\r
-      ],\r
-      "rest-resource":[\r
-         "topology-resource-holder",\r
-         "alto-resource-holder",\r
-         "topology-visual-holder",\r
-         "network-resource-holder",\r
-         "path-resource-holder"\r
-      ],\r
-      "listenable-database-provider-factory":[\r
-         "transient"\r
-      ],\r
-      "topology-validator":[\r
-         "accept-all",\r
-         "threshold"\r
-      ],\r
-      "replicator":[\r
-         "replicator-impl"\r
-      ],\r
-      "server":[\r
-         "soap",\r
-         "rest"\r
-      ],\r
-      "combiner-pxe":[\r
-         "pxe"\r
-      ],\r
-      "rest":[\r
-         "rest"\r
-      ],\r
-      "soap":[\r
-         "soap"\r
-      ],\r
-      "path-service":[\r
-         "cariden"\r
-      ]\r
-   }\r
+{
+   "timestamp":1362488209,
+   "status":200,
+   "request":{
+      "mbean":"org.opendaylight.controller:type=ConfigRegistry",
+      "attribute":"AvailableInterfacesAndImplementations",
+      "type":"read"
+   },
+   "value":{
+      "topology-registry":[
+         "single"
+      ],
+      "bgp-update":[
+         "mock",
+         "bgp-impl"
+      ],
+      "positioning-service":[
+         "combine",
+         "onehop",
+         "ondemand",
+         "pxe",
+         "precompute"
+      ],
+      "serializer":[
+         "serializer-impl"
+      ],
+      "network-topology-factory":[
+         "mock-xml",
+         "bgp-network-topology-factory",
+         "transient"
+      ],
+      "dwe-topology":[
+         "ebgp",
+         "defaultmetric",
+         "igp",
+         "network"
+      ],
+      "thread-factory":[
+         "naming-thread-factory"
+      ],
+      "bgp-parser":[
+         "parser"
+      ],
+      "pcep-dispatcher":[
+         "dispatcher"
+      ],
+      "threadpool":[
+         "flexible",
+         "fixed",
+         "scheduled"
+      ],
+      "scheduled-threadpool":[
+         "scheduled"
+      ],
+      "positioning-onehop":[
+         "onehop"
+      ],
+      "bgp-dispatcher":[
+         "bgp-dispatcher-impl"
+      ],
+      "cost-combiner":[
+         "pxe"
+      ],
+      "apsp-provider":[
+         "jgrapht",
+         "parallel",
+         "single-threaded"
+      ],
+      "topology":[
+         "ebgp",
+         "defaultmetric",
+         "igp",
+         "network"
+      ],
+      "soap-resource":[
+         "positioning-adaptor-pxe"
+      ],
+      "database-provider-factory":[
+         "transient"
+      ],
+      "bgp-proposal-checker":[
+         "bgp-proposal-checker-impl"
+      ],
+      "bgp-proposal":[
+         "bgp-proposal-impl"
+      ],
+      "listenable-network-topology-factory":[
+         "transient"
+      ],
+      "event-bus":[
+         "sync",
+         "async"
+      ],
+      "topology-registry-provider":[
+         "single"
+      ],
+      "topology-provider-factory":[
+         "transient"
+      ],
+      "rest-resource":[
+         "topology-resource-holder",
+         "alto-resource-holder",
+         "topology-visual-holder",
+         "network-resource-holder",
+         "path-resource-holder"
+      ],
+      "listenable-database-provider-factory":[
+         "transient"
+      ],
+      "topology-validator":[
+         "accept-all",
+         "threshold"
+      ],
+      "replicator":[
+         "replicator-impl"
+      ],
+      "server":[
+         "soap",
+         "rest"
+      ],
+      "combiner-pxe":[
+         "pxe"
+      ],
+      "rest":[
+         "rest"
+      ],
+      "soap":[
+         "soap"
+      ],
+      "path-service":[
+         "cariden"
+      ]
+   }
 }
\ No newline at end of file
index aab939e8d90933dedc0dfb496d6db1ada9e48217..340e295d525fcde4ab7b543b01b77f09d0f516bf 100644 (file)
@@ -1,6 +1,9 @@
 <?xml version="1.0"?>
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
+    <properties>
+        <tinybundles.version>2.0.0</tinybundles.version>
+    </properties>
 
     <parent>
         <artifactId>netconf-subsystem</artifactId>
             <artifactId>netconf-client</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>netconf-client</artifactId>
+            <version>${project.version}</version>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
         <dependency>
             <groupId>${project.groupId}</groupId>
             <artifactId>config-netconf-connector</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>netty-config-api</artifactId>
+            <scope>test</scope>
+        </dependency>
         <dependency>
             <groupId>${project.groupId}</groupId>
             <artifactId>config-manager</artifactId>
             <artifactId>netconf-impl</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>netconf-impl</artifactId>
+            <scope>test</scope>
+            <type>test-jar</type>
+        </dependency>
         <dependency>
             <groupId>${project.groupId}</groupId>
             <artifactId>netconf-monitoring</artifactId>
           <groupId>org.opendaylight.controller</groupId>
           <artifactId>commons.logback_settings</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.ops4j.pax.tinybundles</groupId>
+            <artifactId>tinybundles</artifactId>
+            <version>${tinybundles.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+          <groupId>xmlunit</groupId>
+          <artifactId>xmlunit</artifactId>
+        </dependency>
     </dependencies>
 
     <build>
index b261218bf1c17129b6761b48668519b5ca99ab29..b81f950cb362cf8f810201bfe98c983e1bf0988d 100644 (file)
@@ -15,7 +15,6 @@ import org.junit.Before;
 import org.opendaylight.controller.config.manager.impl.AbstractConfigTest;
 import org.opendaylight.controller.netconf.impl.DefaultCommitNotificationProducer;
 import org.opendaylight.controller.netconf.impl.NetconfServerDispatcher;
-import org.opendaylight.controller.netconf.impl.NetconfServerSessionListenerFactory;
 import org.opendaylight.controller.netconf.impl.NetconfServerSessionNegotiatorFactory;
 import org.opendaylight.controller.netconf.impl.SessionIdProvider;
 import org.opendaylight.controller.netconf.impl.osgi.NetconfOperationServiceFactoryListenerImpl;
@@ -39,14 +38,10 @@ public class AbstractNetconfConfigTest extends AbstractConfigTest {
         SessionIdProvider idProvider = new SessionIdProvider();
 
         NetconfServerSessionNegotiatorFactory serverNegotiatorFactory = new NetconfServerSessionNegotiatorFactory(
-                hashedWheelTimer, factoriesListener, idProvider, 5000);
-
-        NetconfServerSessionListenerFactory listenerFactory = new NetconfServerSessionListenerFactory(
-                factoriesListener, commitNotifier, idProvider,
-                sessionMonitoringService);
+                hashedWheelTimer, factoriesListener, idProvider, 5000, commitNotifier, sessionMonitoringService);
 
         NetconfServerDispatcher.ServerChannelInitializer serverChannelInitializer = new NetconfServerDispatcher.ServerChannelInitializer(
-                serverNegotiatorFactory, listenerFactory);
+                serverNegotiatorFactory);
         return new NetconfServerDispatcher(serverChannelInitializer, nettyThreadgroup, nettyThreadgroup);
     }
 
index 997cae0f7cf258a8a3074af1f525ea17347b1ce1..8b2af393439e932ac069481ad3670b3b154fe0cb 100644 (file)
@@ -7,15 +7,32 @@
  */
 package org.opendaylight.controller.netconf.it;
 
-import com.google.common.collect.Lists;
-import com.google.common.collect.Sets;
+import static junit.framework.Assert.assertEquals;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.opendaylight.controller.netconf.util.test.XmlUnitUtil.assertContainsElementWithName;
+import static org.opendaylight.controller.netconf.util.test.XmlUnitUtil.assertElementsCount;
+import static org.opendaylight.controller.netconf.util.xml.XmlUtil.readXmlToDocument;
 import io.netty.channel.ChannelFuture;
-import org.apache.commons.lang3.StringUtils;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.InetSocketAddress;
+import java.util.Collection;
+import java.util.List;
+import java.util.Set;
+
+import javax.management.InstanceNotFoundException;
+import javax.management.Notification;
+import javax.management.NotificationListener;
+
 import org.junit.After;
-import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
-import org.junit.matchers.JUnitMatchers;
 import org.mockito.invocation.InvocationOnMock;
 import org.mockito.stubbing.Answer;
 import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;
@@ -25,43 +42,29 @@ import org.opendaylight.controller.config.spi.ModuleFactory;
 import org.opendaylight.controller.netconf.api.NetconfMessage;
 import org.opendaylight.controller.netconf.api.jmx.CommitJMXNotification;
 import org.opendaylight.controller.netconf.api.monitoring.NetconfManagementSession;
-import org.opendaylight.controller.netconf.client.NetconfClient;
 import org.opendaylight.controller.netconf.client.NetconfClientDispatcher;
+import org.opendaylight.controller.netconf.client.test.TestingNetconfClient;
 import org.opendaylight.controller.netconf.confignetconfconnector.osgi.NetconfOperationServiceFactoryImpl;
 import org.opendaylight.controller.netconf.confignetconfconnector.osgi.YangStoreException;
 import org.opendaylight.controller.netconf.impl.DefaultCommitNotificationProducer;
 import org.opendaylight.controller.netconf.impl.NetconfServerDispatcher;
 import org.opendaylight.controller.netconf.impl.osgi.NetconfMonitoringServiceImpl;
-import org.opendaylight.controller.netconf.impl.osgi.NetconfOperationServiceFactoryListener;
 import org.opendaylight.controller.netconf.impl.osgi.NetconfOperationServiceFactoryListenerImpl;
-import org.opendaylight.controller.netconf.impl.osgi.NetconfOperationServiceSnapshot;
+import org.opendaylight.controller.netconf.impl.osgi.NetconfOperationServiceSnapshotImpl;
 import org.opendaylight.controller.netconf.impl.osgi.SessionMonitoringService;
 import org.opendaylight.controller.netconf.mapping.api.Capability;
+import org.opendaylight.controller.netconf.mapping.api.NetconfOperationProvider;
 import org.opendaylight.controller.netconf.mapping.api.NetconfOperationService;
 import org.opendaylight.controller.netconf.monitoring.osgi.NetconfMonitoringActivator;
 import org.opendaylight.controller.netconf.monitoring.osgi.NetconfMonitoringOperationService;
 import org.opendaylight.controller.netconf.persist.impl.ConfigPersisterNotificationHandler;
 import org.opendaylight.controller.netconf.util.test.XmlFileLoader;
-import org.opendaylight.controller.netconf.util.xml.XmlUtil;
+import org.w3c.dom.Document;
 import org.w3c.dom.Element;
+import org.xml.sax.SAXException;
 
-import javax.management.InstanceNotFoundException;
-import javax.management.Notification;
-import javax.management.NotificationListener;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.InetSocketAddress;
-import java.util.Collection;
-import java.util.List;
-import java.util.Set;
-
-import static junit.framework.Assert.assertEquals;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyLong;
-import static org.mockito.Mockito.doAnswer;
-import static org.mockito.Mockito.doNothing;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.mock;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
 
 public class NetconfConfigPersisterITTest extends AbstractNetconfConfigTest {
 
@@ -78,7 +81,7 @@ public class NetconfConfigPersisterITTest extends AbstractNetconfConfigTest {
         super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(NetconfITTest.getModuleFactoriesS().toArray(
                 new ModuleFactory[0])));
 
-        NetconfMonitoringServiceImpl monitoringService = new NetconfMonitoringServiceImpl(getFactoriesListener());
+        NetconfMonitoringServiceImpl monitoringService = new NetconfMonitoringServiceImpl(getNetconfOperationProvider());
 
         NetconfOperationServiceFactoryListenerImpl factoriesListener = new NetconfOperationServiceFactoryListenerImpl();
         factoriesListener.onAddNetconfOperationServiceFactory(new NetconfOperationServiceFactoryImpl(getYangStore()));
@@ -121,22 +124,22 @@ public class NetconfConfigPersisterITTest extends AbstractNetconfConfigTest {
         VerifyingNotificationListener notificationVerifier = createCommitNotificationListener();
         VerifyingPersister mockedAggregator = mockAggregator();
 
-        try (NetconfClient persisterClient = new NetconfClient("persister", tcpAddress, 4000, clientDispatcher)) {
+        try (TestingNetconfClient persisterClient = new TestingNetconfClient("persister", tcpAddress, 4000, clientDispatcher)) {
             try (ConfigPersisterNotificationHandler configPersisterNotificationHandler = new ConfigPersisterNotificationHandler(
                     platformMBeanServer, mockedAggregator)) {
 
 
-                try (NetconfClient netconfClient = new NetconfClient("client", tcpAddress, 4000, clientDispatcher)) {
+                try (TestingNetconfClient netconfClient = new TestingNetconfClient("client", tcpAddress, 4000, clientDispatcher)) {
                     NetconfMessage response = netconfClient.sendMessage(loadGetConfigMessage());
-                    assertResponse(response, "<modules");
-                    assertResponse(response, "<services");
+                    assertContainsElementWithName(response.getDocument(), "modules");
+                    assertContainsElementWithName(response.getDocument(), "services");
                     response = netconfClient.sendMessage(loadCommitMessage());
-                    assertResponse(response, "ok");
+                    assertContainsElementWithName(response.getDocument(), "ok");
 
                     response = netconfClient.sendMessage(loadEditConfigMessage());
-                    assertResponse(response, "ok");
+                    assertContainsElementWithName(response.getDocument(), "ok");
                     response = netconfClient.sendMessage(loadCommitMessage());
-                    assertResponse(response, "ok");
+                    assertContainsElementWithName(response.getDocument(), "ok");
                 }
             }
         }
@@ -161,10 +164,6 @@ public class NetconfConfigPersisterITTest extends AbstractNetconfConfigTest {
         return listener;
     }
 
-    private void assertResponse(NetconfMessage response, String content) {
-        Assert.assertThat(XmlUtil.toString(response.getDocument()), JUnitMatchers.containsString(content));
-    }
-
     private NetconfMessage loadGetConfigMessage() throws Exception {
         return XmlFileLoader.xmlFileToNetconfMessage("netconfMessages/getConfig.xml");
     }
@@ -178,15 +177,15 @@ public class NetconfConfigPersisterITTest extends AbstractNetconfConfigTest {
     }
 
 
-    public NetconfOperationServiceFactoryListener getFactoriesListener() {
-        NetconfOperationServiceFactoryListener factoriesListener = mock(NetconfOperationServiceFactoryListener.class);
-        NetconfOperationServiceSnapshot snap = mock(NetconfOperationServiceSnapshot.class);
+    public NetconfOperationProvider getNetconfOperationProvider() {
+        NetconfOperationProvider factoriesListener = mock(NetconfOperationProvider.class);
+        NetconfOperationServiceSnapshotImpl snap = mock(NetconfOperationServiceSnapshotImpl.class);
         NetconfOperationService service = mock(NetconfOperationService.class);
         Set<Capability> caps = Sets.newHashSet();
         doReturn(caps).when(service).getCapabilities();
         Set<NetconfOperationService> services = Sets.newHashSet(service);
         doReturn(services).when(snap).getServices();
-        doReturn(snap).when(factoriesListener).getSnapshot(anyLong());
+        doReturn(snap).when(factoriesListener).openSnapshot(anyString());
 
         return factoriesListener;
     }
@@ -240,15 +239,14 @@ public class NetconfConfigPersisterITTest extends AbstractNetconfConfigTest {
             assertEquals(size, snapshots.size());
         }
 
-        void assertSnapshotContent(int notificationIndex, int expectedModulesSize, int expectedServicesSize, int expectedCapsSize) {
+        void assertSnapshotContent(int notificationIndex, int expectedModulesSize, int expectedServicesSize, int expectedCapsSize)
+                throws SAXException, IOException {
             ConfigSnapshotHolder snapshot = snapshots.get(notificationIndex);
             int capsSize = snapshot.getCapabilities().size();
             assertEquals("Expected capabilities count", expectedCapsSize, capsSize);
-            String configSnapshot = snapshot.getConfigSnapshot();
-            int modulesSize = StringUtils.countMatches(configSnapshot, "<module>");
-            assertEquals("Expected modules count", expectedModulesSize, modulesSize);
-            int servicesSize = StringUtils.countMatches(configSnapshot, "<instance>");
-            assertEquals("Expected services count", expectedServicesSize, servicesSize);
+            Document configSnapshot = readXmlToDocument(snapshot.getConfigSnapshot());
+            assertElementsCount(configSnapshot, "module", expectedModulesSize);
+            assertElementsCount(configSnapshot, "instance", expectedServicesSize);
         }
 
         @Override
index 6989bf512fb702f2b6a3b32b15f803134b27c654..e45a249ad4e1f901075060451c6865a5fd54b585 100644 (file)
@@ -14,10 +14,10 @@ import org.junit.Before;
 import org.junit.Test;
 import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;
 import org.opendaylight.controller.config.spi.ModuleFactory;
-import org.opendaylight.controller.netconf.confignetconfconnector.osgi.YangStoreException;
-import org.opendaylight.controller.netconf.client.NetconfClient;
 import org.opendaylight.controller.netconf.client.NetconfClientDispatcher;
+import org.opendaylight.controller.netconf.client.test.TestingNetconfClient;
 import org.opendaylight.controller.netconf.confignetconfconnector.osgi.NetconfOperationServiceFactoryImpl;
+import org.opendaylight.controller.netconf.confignetconfconnector.osgi.YangStoreException;
 import org.opendaylight.controller.netconf.impl.DefaultCommitNotificationProducer;
 import org.opendaylight.controller.netconf.impl.NetconfServerDispatcher;
 import org.opendaylight.controller.netconf.impl.osgi.NetconfOperationServiceFactoryListenerImpl;
@@ -91,7 +91,7 @@ public class NetconfITSecureTest extends AbstractNetconfConfigTest {
     @Test
     public void testSecure() throws Exception {
         NetconfClientDispatcher dispatch = new NetconfClientDispatcher(nettyThreadgroup, nettyThreadgroup, 5000);
-        try (NetconfClient netconfClient = new NetconfClient("tls-client", tlsAddress, 4000, dispatch))  {
+        try (TestingNetconfClient netconfClient = new TestingNetconfClient("tls-client", tlsAddress, 4000, dispatch))  {
 
         }
     }
index 4ca9690211c87bccd6ee79ddc23985c191024653..d169858d35ff90a720d039f8d8ecc0fa85aa60e3 100644 (file)
@@ -22,22 +22,22 @@ import org.junit.Test;
 import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;
 import org.opendaylight.controller.config.spi.ModuleFactory;
 import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;
+import org.opendaylight.controller.netconf.client.test.TestingNetconfClient;
+import org.opendaylight.controller.netconf.confignetconfconnector.osgi.YangStoreException;
 import org.opendaylight.controller.config.yang.test.impl.DepTestImplModuleFactory;
 import org.opendaylight.controller.config.yang.test.impl.NetconfTestImplModuleFactory;
 import org.opendaylight.controller.config.yang.test.impl.NetconfTestImplModuleMXBean;
 import org.opendaylight.controller.config.yang.test.impl.TestImplModuleFactory;
 import org.opendaylight.controller.netconf.StubUserManager;
 import org.opendaylight.controller.netconf.api.NetconfMessage;
-import org.opendaylight.controller.netconf.client.NetconfClient;
 import org.opendaylight.controller.netconf.client.NetconfClientDispatcher;
 import org.opendaylight.controller.netconf.confignetconfconnector.osgi.NetconfOperationServiceFactoryImpl;
-import org.opendaylight.controller.netconf.confignetconfconnector.osgi.YangStoreException;
 import org.opendaylight.controller.netconf.impl.DefaultCommitNotificationProducer;
 import org.opendaylight.controller.netconf.impl.NetconfServerDispatcher;
 import org.opendaylight.controller.netconf.impl.osgi.NetconfMonitoringServiceImpl;
-import org.opendaylight.controller.netconf.impl.osgi.NetconfOperationServiceFactoryListener;
 import org.opendaylight.controller.netconf.impl.osgi.NetconfOperationServiceFactoryListenerImpl;
-import org.opendaylight.controller.netconf.impl.osgi.NetconfOperationServiceSnapshot;
+import org.opendaylight.controller.netconf.impl.osgi.NetconfOperationServiceSnapshotImpl;
+import org.opendaylight.controller.netconf.mapping.api.NetconfOperationProvider;
 import org.opendaylight.controller.netconf.mapping.api.NetconfOperationService;
 import org.opendaylight.controller.netconf.ssh.NetconfSSHServer;
 import org.opendaylight.controller.netconf.ssh.authentication.AuthProvider;
@@ -68,10 +68,10 @@ import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeoutException;
 
 import static java.util.Collections.emptyList;
-import static junit.framework.Assert.assertEquals;
-import static junit.framework.Assert.assertNotNull;
-import static junit.framework.Assert.assertTrue;
-import static org.mockito.Matchers.anyLong;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Matchers.anyString;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
 
@@ -118,11 +118,11 @@ public class NetconfITTest extends AbstractNetconfConfigTest {
     }
 
     static NetconfMonitoringServiceImpl getNetconfMonitoringListenerService() {
-        NetconfOperationServiceFactoryListener factoriesListener = mock(NetconfOperationServiceFactoryListener.class);
-        NetconfOperationServiceSnapshot snap = mock(NetconfOperationServiceSnapshot.class);
+        NetconfOperationProvider netconfOperationProvider = mock(NetconfOperationProvider.class);
+        NetconfOperationServiceSnapshotImpl snap = mock(NetconfOperationServiceSnapshotImpl.class);
         doReturn(Collections.<NetconfOperationService>emptySet()).when(snap).getServices();
-        doReturn(snap).when(factoriesListener).getSnapshot(anyLong());
-        return new NetconfMonitoringServiceImpl(factoriesListener);
+        doReturn(snap).when(netconfOperationProvider).openSnapshot(anyString());
+        return new NetconfMonitoringServiceImpl(netconfOperationProvider);
     }
 
     @After
@@ -148,6 +148,7 @@ public class NetconfITTest extends AbstractNetconfConfigTest {
     }
 
     static Collection<InputStream> getBasicYangs() throws IOException {
+
         List<String> paths = Arrays.asList("/META-INF/yang/config.yang", "/META-INF/yang/rpc-context.yang",
                 "/META-INF/yang/config-test.yang", "/META-INF/yang/config-test-impl.yang", "/META-INF/yang/test-types.yang",
                 "/META-INF/yang/ietf-inet-types.yang");
@@ -176,7 +177,7 @@ public class NetconfITTest extends AbstractNetconfConfigTest {
 
     @Test
     public void testNetconfClientDemonstration() throws Exception {
-        try (NetconfClient netconfClient = new NetconfClient("client", tcpAddress, 4000, clientDispatcher)) {
+        try (TestingNetconfClient netconfClient = new TestingNetconfClient("client", tcpAddress, 4000, clientDispatcher)) {
 
             Set<String> capabilitiesFromNetconfServer = netconfClient.getCapabilities();
             long sessionId = netconfClient.getSessionId();
@@ -191,8 +192,8 @@ public class NetconfITTest extends AbstractNetconfConfigTest {
 
     @Test
     public void testTwoSessions() throws Exception {
-        try (NetconfClient netconfClient = new NetconfClient("1", tcpAddress, 10000, clientDispatcher)) {
-            try (NetconfClient netconfClient2 = new NetconfClient("2", tcpAddress, 10000, clientDispatcher)) {
+        try (TestingNetconfClient netconfClient = new TestingNetconfClient("1", tcpAddress, 10000, clientDispatcher))  {
+            try (TestingNetconfClient netconfClient2 = new TestingNetconfClient("2", tcpAddress, 10000, clientDispatcher)) {
             }
         }
     }
@@ -208,7 +209,7 @@ public class NetconfITTest extends AbstractNetconfConfigTest {
 
     @Test
     public void rpcReplyContainsAllAttributesTest() throws Exception {
-        try (NetconfClient netconfClient = createSession(tcpAddress, "1")) {
+        try (TestingNetconfClient netconfClient = createSession(tcpAddress, "1")) {
             final String rpc = "<rpc message-id=\"5\" a=\"a\" b=\"44\" xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">"
                     + "<get/>" + "</rpc>";
             final Document doc = XmlUtil.readXmlToDocument(rpc);
@@ -236,7 +237,7 @@ public class NetconfITTest extends AbstractNetconfConfigTest {
 
     @Test
     public void rpcReplyErrorContainsAllAttributesTest() throws Exception {
-        try (NetconfClient netconfClient = createSession(tcpAddress, "1")) {
+        try (TestingNetconfClient netconfClient = createSession(tcpAddress, "1")) {
             final String rpc = "<rpc message-id=\"1\" a=\"adada\" b=\"4\" xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">"
                     + "<commit/>" + "</rpc>";
             final Document doc = XmlUtil.readXmlToDocument(rpc);
@@ -260,7 +261,7 @@ public class NetconfITTest extends AbstractNetconfConfigTest {
 
         transaction.commit();
 
-        try (NetconfClient netconfClient = createSession(tcpAddress, "1")) {
+        try (TestingNetconfClient netconfClient = createSession(tcpAddress, "1")) {
             final String expectedNamespace = "urn:opendaylight:params:xml:ns:yang:controller:test:impl";
 
             final String rpc = "<rpc message-id=\"5\" xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">"
@@ -281,37 +282,9 @@ public class NetconfITTest extends AbstractNetconfConfigTest {
         }
     }
 
-    /*
-    @Test
-    public void testStartExi() throws Exception {
-        try (NetconfClient netconfClient = createSession(tcpAddress, "1")) {
-
-
-            Document rpcReply = netconfClient.sendMessage(this.startExi)
-                    .getDocument();
-            assertIsOK(rpcReply);
-
-            ExiParameters exiParams = new ExiParameters();
-            exiParams.setParametersFromXmlElement(XmlElement.fromDomDocument(this.startExi.getDocument()));
-
-            netconfClient.getClientSession().addExiDecoder(ExiDecoderHandler.HANDLER_NAME, new ExiDecoderHandler(exiParams));
-            netconfClient.getClientSession().addExiEncoder(ExiEncoderHandler.HANDLER_NAME, new ExiEncoderHandler(exiParams));
-
-            rpcReply = netconfClient.sendMessage(this.editConfig)
-                    .getDocument();
-            assertIsOK(rpcReply);
-
-            rpcReply = netconfClient.sendMessage(this.stopExi)
-                    .getDocument();
-            assertIsOK(rpcReply);
-
-        }
-    }
-     */
-
     @Test
     public void testCloseSession() throws Exception {
-        try (NetconfClient netconfClient = createSession(tcpAddress, "1")) {
+        try (TestingNetconfClient netconfClient = createSession(tcpAddress, "1")) {
 
             // edit config
             Document rpcReply = netconfClient.sendMessage(this.editConfig)
@@ -327,7 +300,7 @@ public class NetconfITTest extends AbstractNetconfConfigTest {
 
     @Test
     public void testEditConfig() throws Exception {
-        try (NetconfClient netconfClient = createSession(tcpAddress, "1")) {
+        try (TestingNetconfClient netconfClient = createSession(tcpAddress, "1")) {
             // send edit_config.xml
             final Document rpcReply = netconfClient.sendMessage(this.editConfig).getDocument();
             assertIsOK(rpcReply);
@@ -336,7 +309,7 @@ public class NetconfITTest extends AbstractNetconfConfigTest {
 
     @Test
     public void testValidate() throws Exception {
-        try (NetconfClient netconfClient = createSession(tcpAddress, "1")) {
+        try (TestingNetconfClient netconfClient = createSession(tcpAddress, "1")) {
             // begin transaction
             Document rpcReply = netconfClient.sendMessage(getConfigCandidate).getDocument();
             assertEquals("data", XmlElement.fromDomDocument(rpcReply).getOnlyChildElement().getName());
@@ -353,11 +326,11 @@ public class NetconfITTest extends AbstractNetconfConfigTest {
         assertEquals("ok", XmlElement.fromDomDocument(rpcReply).getOnlyChildElement().getName());
     }
 
-    private Document assertGetConfigWorks(final NetconfClient netconfClient) throws InterruptedException, ExecutionException, TimeoutException {
+    private Document assertGetConfigWorks(final TestingNetconfClient netconfClient) throws InterruptedException, ExecutionException, TimeoutException {
         return assertGetConfigWorks(netconfClient, this.getConfig);
     }
 
-    private Document assertGetConfigWorks(final NetconfClient netconfClient, final NetconfMessage getConfigMessage)
+    private Document assertGetConfigWorks(final TestingNetconfClient netconfClient, final NetconfMessage getConfigMessage)
             throws InterruptedException, ExecutionException, TimeoutException {
         final NetconfMessage rpcReply = netconfClient.sendMessage(getConfigMessage);
         assertNotNull(rpcReply);
@@ -367,14 +340,14 @@ public class NetconfITTest extends AbstractNetconfConfigTest {
 
     @Test
     public void testGetConfig() throws Exception {
-        try (NetconfClient netconfClient = createSession(tcpAddress, "1")) {
+        try (TestingNetconfClient netconfClient = createSession(tcpAddress, "1")) {
             assertGetConfigWorks(netconfClient);
         }
     }
 
     @Test
     public void createYangTestBasedOnYuma() throws Exception {
-        try (NetconfClient netconfClient = createSession(tcpAddress, "1")) {
+        try (TestingNetconfClient netconfClient = createSession(tcpAddress, "1")) {
             Document rpcReply = netconfClient.sendMessage(
                     XmlFileLoader.xmlFileToNetconfMessage("netconfMessages/editConfig_merge_yang-test.xml"))
                     .getDocument();
@@ -392,8 +365,8 @@ public class NetconfITTest extends AbstractNetconfConfigTest {
         }
     }
 
-    private NetconfClient createSession(final InetSocketAddress address, final String expected) throws Exception {
-        final NetconfClient netconfClient = new NetconfClient("test " + address.toString(), address, 5000, clientDispatcher);
+    private TestingNetconfClient createSession(final InetSocketAddress address, final String expected) throws Exception {
+        final TestingNetconfClient netconfClient = new TestingNetconfClient("test " + address.toString(), address, 5000, clientDispatcher);
         assertEquals(expected, Long.toString(netconfClient.getSessionId()));
         return netconfClient;
     }
@@ -448,5 +421,4 @@ public class NetconfITTest extends AbstractNetconfConfigTest {
         }.join();
     }
 
-
 }
index 4af66532a18ec2d8a8fc067f61a777905f4011a2..92caea17d5eaea998d5d62ab6682c765287c5329 100644 (file)
@@ -7,54 +7,54 @@
  */
 package org.opendaylight.controller.netconf.it;
 
-import static org.mockito.Matchers.anyLong;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.mock;
+import com.google.common.base.Charsets;
+import com.google.common.base.Optional;
+import com.google.common.collect.Sets;
 import io.netty.channel.ChannelFuture;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.net.InetSocketAddress;
-import java.net.Socket;
-import java.util.Collection;
-import java.util.List;
-import java.util.Set;
-
 import junit.framework.Assert;
-
 import org.junit.Before;
 import org.junit.Test;
-import org.junit.matchers.JUnitMatchers;
 import org.mockito.Mock;
 import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;
 import org.opendaylight.controller.config.spi.ModuleFactory;
+import org.opendaylight.controller.netconf.client.test.TestingNetconfClient;
 import org.opendaylight.controller.netconf.confignetconfconnector.osgi.YangStoreException;
 import org.opendaylight.controller.netconf.api.NetconfMessage;
 import org.opendaylight.controller.netconf.api.monitoring.NetconfManagementSession;
-import org.opendaylight.controller.netconf.client.NetconfClient;
 import org.opendaylight.controller.netconf.client.NetconfClientDispatcher;
 import org.opendaylight.controller.netconf.confignetconfconnector.osgi.NetconfOperationServiceFactoryImpl;
 import org.opendaylight.controller.netconf.impl.DefaultCommitNotificationProducer;
 import org.opendaylight.controller.netconf.impl.NetconfServerDispatcher;
 import org.opendaylight.controller.netconf.impl.osgi.NetconfMonitoringServiceImpl;
-import org.opendaylight.controller.netconf.impl.osgi.NetconfOperationServiceFactoryListener;
 import org.opendaylight.controller.netconf.impl.osgi.NetconfOperationServiceFactoryListenerImpl;
-import org.opendaylight.controller.netconf.impl.osgi.NetconfOperationServiceSnapshot;
+import org.opendaylight.controller.netconf.impl.osgi.NetconfOperationServiceSnapshotImpl;
 import org.opendaylight.controller.netconf.impl.osgi.SessionMonitoringService;
 import org.opendaylight.controller.netconf.mapping.api.Capability;
+import org.opendaylight.controller.netconf.mapping.api.NetconfOperationProvider;
 import org.opendaylight.controller.netconf.mapping.api.NetconfOperationService;
 import org.opendaylight.controller.netconf.monitoring.osgi.NetconfMonitoringActivator;
 import org.opendaylight.controller.netconf.monitoring.osgi.NetconfMonitoringOperationService;
 import org.opendaylight.controller.netconf.util.test.XmlFileLoader;
+import org.opendaylight.controller.netconf.util.xml.XmlUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
 
-import com.google.common.base.Charsets;
-import com.google.common.base.Optional;
-import com.google.common.collect.Sets;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.InetSocketAddress;
+import java.net.Socket;
+import java.util.Collection;
+import java.util.List;
+import java.util.Set;
+
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.opendaylight.controller.netconf.util.test.XmlUnitUtil.assertContainsElementWithText;
 
 public class NetconfMonitoringITTest extends AbstractNetconfConfigTest {
 
@@ -75,7 +75,7 @@ public class NetconfMonitoringITTest extends AbstractNetconfConfigTest {
         super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(NetconfITTest.getModuleFactoriesS().toArray(
                 new ModuleFactory[0])));
 
-        monitoringService = new NetconfMonitoringServiceImpl(getFactoriesListener());
+        monitoringService = new NetconfMonitoringServiceImpl(getNetconfOperationProvider());
 
         NetconfOperationServiceFactoryListenerImpl factoriesListener = new NetconfOperationServiceFactoryListenerImpl();
         factoriesListener.onAddNetconfOperationServiceFactory(new NetconfOperationServiceFactoryImpl(getYangStore()));
@@ -120,8 +120,8 @@ public class NetconfMonitoringITTest extends AbstractNetconfConfigTest {
 
     @Test
     public void testGetResponseFromMonitoring() throws Exception {
-        try (NetconfClient netconfClient = new NetconfClient("client-monitoring", tcpAddress, 4000, clientDispatcher)) {
-        try (NetconfClient netconfClient2 = new NetconfClient("client-monitoring2", tcpAddress, 4000, clientDispatcher)) {
+        try (TestingNetconfClient netconfClient = new TestingNetconfClient("client-monitoring", tcpAddress, 4000, clientDispatcher)) {
+        try (TestingNetconfClient netconfClient2 = new TestingNetconfClient("client-monitoring2", tcpAddress, 4000, clientDispatcher)) {
             NetconfMessage response = netconfClient.sendMessage(loadGetMessage());
             assertSessionElementsInResponse(response.getDocument(), 2);
         }
@@ -131,7 +131,7 @@ public class NetconfMonitoringITTest extends AbstractNetconfConfigTest {
     }
 
 
-    @Test(timeout = 5 * 10000)
+    @Test(timeout = 13 * 10000)
     public void testClientHelloWithAuth() throws Exception {
         String fileName = "netconfMessages/client_hello_with_auth.xml";
         String hello = XmlFileLoader.fileToString(fileName);
@@ -165,22 +165,28 @@ public class NetconfMonitoringITTest extends AbstractNetconfConfigTest {
 
         sock.close();
 
-        org.junit.Assert.assertThat(responseBuilder.toString(), JUnitMatchers.containsString("<capability>urn:ietf:params:netconf:capability:candidate:1.0</capability>"));
-        org.junit.Assert.assertThat(responseBuilder.toString(), JUnitMatchers.containsString("<username>tomas</username>"));
+        String helloMsg = responseBuilder.substring(0, responseBuilder.indexOf(separator));
+        Document doc = XmlUtil.readXmlToDocument(helloMsg);
+        assertContainsElementWithText(doc, "urn:ietf:params:netconf:capability:candidate:1.0");
+
+        String replyMsg = responseBuilder.substring(responseBuilder.indexOf(separator) + separator.length());
+        doc = XmlUtil.readXmlToDocument(replyMsg);
+        assertContainsElementWithText(doc, "tomas");
     }
 
     private void assertSessionElementsInResponse(Document document, int i) {
         int elementSize = document.getElementsByTagName("session-id").getLength();
-        Assert.assertEquals(i, elementSize);
+        Assert.assertEquals("Incorrect number of session-id tags in " + XmlUtil.toString(document),i, elementSize);
     }
 
     private NetconfMessage loadGetMessage() throws Exception {
         return XmlFileLoader.xmlFileToNetconfMessage("netconfMessages/get.xml");
     }
 
-    public static NetconfOperationServiceFactoryListener getFactoriesListener() {
-        NetconfOperationServiceFactoryListener factoriesListener = mock(NetconfOperationServiceFactoryListener.class);
-        NetconfOperationServiceSnapshot snap = mock(NetconfOperationServiceSnapshot.class);
+    public static NetconfOperationProvider getNetconfOperationProvider() throws Exception {
+        NetconfOperationProvider factoriesListener = mock(NetconfOperationProvider.class);
+        NetconfOperationServiceSnapshotImpl snap = mock(NetconfOperationServiceSnapshotImpl.class);
+        doNothing().when(snap).close();
         NetconfOperationService service = mock(NetconfOperationService.class);
         Set<Capability> caps = Sets.newHashSet();
         caps.add(new Capability() {
@@ -218,7 +224,7 @@ public class NetconfMonitoringITTest extends AbstractNetconfConfigTest {
         doReturn(caps).when(service).getCapabilities();
         Set<NetconfOperationService> services = Sets.newHashSet(service);
         doReturn(services).when(snap).getServices();
-        doReturn(snap).when(factoriesListener).getSnapshot(anyLong());
+        doReturn(snap).when(factoriesListener).openSnapshot(anyString());
 
         return factoriesListener;
     }
index c75adbba8d775845ef6623dbc9f296cedbe9f88a..96a9effcfc7cdfc4ccf9b28995b26a9eea5ef148 100644 (file)
@@ -7,17 +7,37 @@
  */
 package org.opendaylight.controller.netconf.it.pax;
 
-import com.google.common.base.Preconditions;
-import com.google.common.base.Throwables;
+import static org.junit.Assert.fail;
+import static org.opendaylight.controller.test.sal.binding.it.TestHelper.baseModelBundles;
+import static org.opendaylight.controller.test.sal.binding.it.TestHelper.bindingAwareSalBundles;
+import static org.opendaylight.controller.test.sal.binding.it.TestHelper.configMinumumBundles;
+import static org.opendaylight.controller.test.sal.binding.it.TestHelper.flowCapableModelBundles;
+import static org.opendaylight.controller.test.sal.binding.it.TestHelper.junitAndMockitoBundles;
+import static org.opendaylight.controller.test.sal.binding.it.TestHelper.mdSalCoreBundles;
+import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
+import static org.ops4j.pax.exam.CoreOptions.options;
+import static org.ops4j.pax.exam.CoreOptions.streamBundle;
+import static org.ops4j.pax.exam.CoreOptions.systemPackages;
+import static org.ops4j.pax.exam.CoreOptions.systemProperty;
 import io.netty.channel.nio.NioEventLoopGroup;
+
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeoutException;
+
+import javax.inject.Inject;
+import javax.xml.parsers.ParserConfigurationException;
+
 import org.junit.Assert;
 import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.matchers.JUnitMatchers;
 import org.junit.runner.RunWith;
 import org.opendaylight.controller.netconf.api.NetconfMessage;
-import org.opendaylight.controller.netconf.client.NetconfClient;
 import org.opendaylight.controller.netconf.client.NetconfClientDispatcher;
+import org.opendaylight.controller.netconf.client.test.TestingNetconfClient;
+import org.opendaylight.controller.netconf.util.test.XmlFileLoader;
 import org.opendaylight.controller.netconf.util.xml.XmlUtil;
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
 import org.ops4j.pax.exam.Configuration;
@@ -25,28 +45,12 @@ import org.ops4j.pax.exam.Option;
 import org.ops4j.pax.exam.junit.PaxExam;
 import org.ops4j.pax.exam.options.DefaultCompositeOption;
 import org.ops4j.pax.exam.util.Filter;
-import org.w3c.dom.Document;
+import org.ops4j.pax.tinybundles.core.TinyBundles;
+import org.osgi.framework.Constants;
 import org.xml.sax.SAXException;
 
-import javax.inject.Inject;
-import javax.xml.parsers.ParserConfigurationException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.InetSocketAddress;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.TimeoutException;
-
-import static org.junit.Assert.fail;
-import static org.opendaylight.controller.test.sal.binding.it.TestHelper.baseModelBundles;
-import static org.opendaylight.controller.test.sal.binding.it.TestHelper.bindingAwareSalBundles;
-import static org.opendaylight.controller.test.sal.binding.it.TestHelper.configMinumumBundles;
-import static org.opendaylight.controller.test.sal.binding.it.TestHelper.flowCapableModelBundles;
-import static org.opendaylight.controller.test.sal.binding.it.TestHelper.junitAndMockitoBundles;
-import static org.opendaylight.controller.test.sal.binding.it.TestHelper.mdSalCoreBundles;
-import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
-import static org.ops4j.pax.exam.CoreOptions.options;
-import static org.ops4j.pax.exam.CoreOptions.systemPackages;
-import static org.ops4j.pax.exam.CoreOptions.systemProperty;
+import com.google.common.base.Preconditions;
+import com.google.common.base.Throwables;
 
 @Ignore
 @RunWith(PaxExam.class)
@@ -71,7 +75,24 @@ public class IdentityRefNetconfTest {
                 loggingModules(),
                 mdSalCoreBundles(),
                 bindingAwareSalBundles(), configMinumumBundles(), baseModelBundles(), flowCapableModelBundles(),
-                junitAndMockitoBundles());
+                junitAndMockitoBundles(),
+
+                // Classes from test-jars bundled for pax-exam test
+                streamBundle(TinyBundles.bundle()
+                        .add(TestingNetconfClient.class)
+                        .add(XmlFileLoader.class)
+
+                        .add("/netconfMessages/editConfig_identities.xml",
+                                XmlFileLoader.class.getResource("/netconfMessages/editConfig_identities.xml"))
+                        .add("/netconfMessages/commit.xml",
+                                XmlFileLoader.class.getResource("/netconfMessages/commit.xml"))
+                        .add("/netconfMessages/getConfig.xml",
+                                XmlFileLoader.class.getResource("/netconfMessages/getConfig.xml"))
+
+                        .set(Constants.BUNDLE_SYMBOLICNAME, "TestingClient_bundle")
+                        .set(Constants.EXPORT_PACKAGE, "org.opendaylight.controller.netconf.client.test, " +
+                                "org.opendaylight.controller.netconf.util.test")
+                        .build(TinyBundles.withBnd())));
     }
 
     private Option loggingModules() {
@@ -79,7 +100,11 @@ public class IdentityRefNetconfTest {
                 mavenBundle("org.slf4j", "slf4j-api").versionAsInProject(),
                 mavenBundle("org.slf4j", "log4j-over-slf4j").versionAsInProject(),
                 mavenBundle("ch.qos.logback", "logback-core").versionAsInProject(),
-                mavenBundle("ch.qos.logback", "logback-classic").versionAsInProject());
+                mavenBundle("ch.qos.logback", "logback-classic").versionAsInProject(),
+                mavenBundle("org.opendaylight.controller.thirdparty", "nagasena").versionAsInProject(),
+                mavenBundle("org.opendaylight.controller.thirdparty", "nagasena-rta").versionAsInProject());
+
+
     }
 
     private Option testingModules() {
@@ -89,29 +114,26 @@ public class IdentityRefNetconfTest {
 
     private static final InetSocketAddress tcpAddress = new InetSocketAddress("127.0.0.1", 18383);
 
-
     @Test
     public void testIdRef() throws Exception {
-        try {
-            Preconditions.checkNotNull(broker, "Controller not initialized");
-
-            NioEventLoopGroup nettyThreadgroup = new NioEventLoopGroup();
-            NetconfClientDispatcher clientDispatcher = new NetconfClientDispatcher(nettyThreadgroup, nettyThreadgroup,
-                    CLIENT_CONNECTION_TIMEOUT_MILLIS);
-
-            NetconfMessage edit = xmlFileToNetconfMessage("netconfMessages/editConfig_identities.xml");
-            NetconfMessage commit = xmlFileToNetconfMessage("netconfMessages/commit.xml");
-            NetconfMessage getConfig = xmlFileToNetconfMessage("netconfMessages/getConfig.xml");
-
-            try (NetconfClient netconfClient = new NetconfClient("client", tcpAddress, CLIENT_CONNECTION_TIMEOUT_MILLIS, clientDispatcher)) {
-                sendMessage(edit, netconfClient);
-                sendMessage(commit, netconfClient);
-                sendMessage(getConfig, netconfClient, "id-test",
-                        "<afi xmlns:prefix=\"urn:opendaylight:params:xml:ns:yang:controller:config:test:types\">prefix:test-identity1</afi>",
-                        "<afi xmlns:prefix=\"urn:opendaylight:params:xml:ns:yang:controller:config:test:types\">prefix:test-identity2</afi>",
-                        "<safi xmlns:prefix=\"urn:opendaylight:params:xml:ns:yang:controller:config:test:types\">prefix:test-identity2</safi>",
-                        "<safi xmlns:prefix=\"urn:opendaylight:params:xml:ns:yang:controller:config:test:types\">prefix:test-identity1</safi>");
-            }
+        Preconditions.checkNotNull(broker, "Controller not initialized");
+
+        NioEventLoopGroup nettyThreadgroup = new NioEventLoopGroup();
+        NetconfClientDispatcher clientDispatcher = new NetconfClientDispatcher(nettyThreadgroup, nettyThreadgroup,
+                CLIENT_CONNECTION_TIMEOUT_MILLIS);
+
+        NetconfMessage edit = xmlFileToNetconfMessage("netconfMessages/editConfig_identities.xml");
+        NetconfMessage commit = xmlFileToNetconfMessage("netconfMessages/commit.xml");
+        NetconfMessage getConfig = xmlFileToNetconfMessage("netconfMessages/getConfig.xml");
+
+        try (TestingNetconfClient netconfClient = new TestingNetconfClient("client", tcpAddress, CLIENT_CONNECTION_TIMEOUT_MILLIS, clientDispatcher)) {
+            sendMessage(edit, netconfClient);
+            sendMessage(commit, netconfClient);
+            sendMessage(getConfig, netconfClient, "id-test",
+                        "<prefix:afi xmlns:prefix=\"urn:opendaylight:params:xml:ns:yang:controller:config:test:types\">prefix:test-identity1</prefix:afi>",
+                        "<prefix:afi xmlns:prefix=\"urn:opendaylight:params:xml:ns:yang:controller:config:test:types\">prefix:test-identity2</prefix:afi>",
+                        "<prefix:safi xmlns:prefix=\"urn:opendaylight:params:xml:ns:yang:controller:config:test:types\">prefix:test-identity2</prefix:safi>",
+                        "<prefix:safi xmlns:prefix=\"urn:opendaylight:params:xml:ns:yang:controller:config:test:types\">prefix:test-identity1</prefix:safi>");
 
             clientDispatcher.close();
         } catch (Exception e) {
@@ -119,8 +141,7 @@ public class IdentityRefNetconfTest {
         }
     }
 
-
-    private void sendMessage(NetconfMessage edit, NetconfClient netconfClient, String... containingResponse)
+    private void sendMessage(NetconfMessage edit, TestingNetconfClient netconfClient, String... containingResponse)
             throws ExecutionException, InterruptedException, TimeoutException {
         NetconfMessage response = netconfClient.sendRequest(edit).get();
         if (containingResponse == null) {
@@ -134,16 +155,6 @@ public class IdentityRefNetconfTest {
 
     public static NetconfMessage xmlFileToNetconfMessage(final String fileName) throws IOException, SAXException,
             ParserConfigurationException {
-        return new NetconfMessage(xmlFileToDocument(fileName));
-    }
-
-    public static Document xmlFileToDocument(final String fileName) throws IOException, SAXException,
-            ParserConfigurationException {
-        // TODO xml messages from netconf-util test-jar cannot be loaded here(in OSGi), since test jar is not a bundle
-        try (InputStream resourceAsStream = IdentityRefNetconfTest.class.getClassLoader().getResourceAsStream(fileName)) {
-            Preconditions.checkNotNull(resourceAsStream);
-            final Document doc = XmlUtil.readXmlToDocument(resourceAsStream);
-            return doc;
-        }
+        return XmlFileLoader.xmlFileToNetconfMessage(fileName);
     }
 }
index 664a30daa57d74810ea9213847f17e0c91ce689a..96efc10403da50e82cbeb854e89033f5e4e366bf 100644 (file)
             <data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
                <modules xmlns="urn:opendaylight:params:xml:ns:yang:controller:config">
                   <module>
-                     <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:test:impl">prefix:impl-identity-test</type>
-                     <name>id-test</name>
+                     <prefix:type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:test:impl">prefix:impl-identity-test</prefix:type>
+                     <prefix:name xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:test:impl">id-test</prefix:name>
                      <identities-container xmlns="urn:opendaylight:params:xml:ns:yang:controller:test:impl">
-                        <afi xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:config:test:types">prefix:test-identity2</afi>
+                        <prefix:afi xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:config:test:types">prefix:test-identity2</prefix:afi>
                      </identities-container>
                      <identities xmlns="urn:opendaylight:params:xml:ns:yang:controller:test:impl">
-                        <safi xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:config:test:types">prefix:test-identity2</safi>
-                        <afi xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:config:test:types">prefix:test-identity1</afi>
+                        <prefix:safi xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:config:test:types">prefix:test-identity2</prefix:safi>
+                        <prefix:afi xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:config:test:types">prefix:test-identity1</prefix:afi>
                      </identities>
                      <identities xmlns="urn:opendaylight:params:xml:ns:yang:controller:test:impl">
-                        <safi xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:config:test:types">prefix:test-identity1</safi>
-                        <afi xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:config:test:types">prefix:test-identity2</afi>
+                        <prefix:safi xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:config:test:types">prefix:test-identity1</prefix:safi>
+                        <prefix:afi xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:config:test:types">prefix:test-identity2</prefix:afi>
                      </identities>
-                     <afi xmlns="urn:opendaylight:params:xml:ns:yang:controller:test:impl" xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:config:test:types">prefix:test-identity1</afi>
+                     <prefix:afi xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:config:test:types">prefix:test-identity1</prefix:afi>
                   </module>
                   <module>
-                     <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">prefix:binding-broker-impl</type>
-                     <name>binding-broker-impl</name>
+                     <prefix:type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">prefix:binding-broker-impl</prefix:type>
+                     <prefix:name xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">binding-broker-impl</prefix:name>
                      <notification-service xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">
-                        <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">prefix:binding-notification-service</type>
+                        <prefix:type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">prefix:binding-notification-service</prefix:type>
                         <name>ref_binding-notification-broker</name>
                      </notification-service>
                      <data-broker xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">
-                        <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">prefix:binding-data-broker</type>
+                        <prefix:type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">prefix:binding-data-broker</prefix:type>
                         <name>ref_binding-data-broker</name>
                      </data-broker>
                   </module>
                   <module>
-                     <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">prefix:runtime-generated-mapping</type>
-                     <name>runtime-mapping-singleton</name>
+                     <prefix:type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">prefix:runtime-generated-mapping</prefix:type>
+                     <prefix:name xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">runtime-mapping-singleton</prefix:name>
                   </module>
                   <module>
-                     <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">prefix:binding-notification-broker</type>
-                     <name>binding-notification-broker</name>
+                     <prefix:type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">prefix:binding-notification-broker</prefix:type>
+                     <prefix:name xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">binding-notification-broker</prefix:name>
                   </module>
                   <module>
-                     <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">prefix:binding-data-broker</type>
-                     <name>binding-data-broker</name>
+                     <prefix:type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">prefix:binding-data-broker</prefix:type>
+                     <prefix:name xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">binding-data-broker</prefix:name>
                      <dom-broker xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">
-                        <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">prefix:dom-broker-osgi-registry</type>
+                        <prefix:type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">prefix:dom-broker-osgi-registry</prefix:type>
                         <name>ref_dom-broker</name>
                      </dom-broker>
                      <mapping-service xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">
-                        <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">prefix:binding-dom-mapping-service</type>
+                        <prefix:type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">prefix:binding-dom-mapping-service</prefix:type>
                         <name>ref_runtime-mapping-singleton</name>
                      </mapping-service>
                   </module>
                   <module>
-                     <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:logback:config">prefix:logback</type>
-                     <name>singleton</name>
+                     <prefix:type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:logback:config">prefix:logback</prefix:type>
+                     <prefix:name xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:logback:config">singleton</prefix:name>
                      <console-appenders xmlns="urn:opendaylight:params:xml:ns:yang:controller:logback:config">
                         <threshold-filter>DEBUG</threshold-filter>
                         <name>console</name>
                      </loggers>
                   </module>
                   <module>
-                     <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:impl">prefix:schema-service-singleton</type>
-                     <name>yang-schema-service</name>
+                     <prefix:type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:impl">prefix:schema-service-singleton</prefix:type>
+                     <prefix:name xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:impl">yang-schema-service</prefix:name>
                   </module>
                   <module>
-                     <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:impl">prefix:hash-map-data-store</type>
-                     <name>hash-map-data-store</name>
+                     <prefix:type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:impl">prefix:hash-map-data-store</prefix:type>
+                     <prefix:name xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:impl">hash-map-data-store</prefix:name>
                   </module>
                   <module>
-                     <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:impl">prefix:dom-broker-impl</type>
-                     <name>dom-broker</name>
+                     <prefix:type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:impl">prefix:dom-broker-impl</prefix:type>
+                     <prefix:name xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:impl">dom-broker</prefix:name>
                      <data-store xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:impl">
-                        <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">prefix:dom-data-store</type>
+                        <prefix:type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">prefix:dom-data-store</prefix:type>
                         <name>ref_hash-map-data-store</name>
                      </data-store>
                   </module>
                </modules>
                <services xmlns="urn:opendaylight:params:xml:ns:yang:controller:config">
                   <service>
-                     <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">prefix:schema-service</type>
+                     <prefix:type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">prefix:schema-service</prefix:type>
                      <instance>
                         <name>ref_yang-schema-service</name>
                         <provider>/modules/module[type='schema-service-singleton'][name='yang-schema-service']</provider>
                      </instance>
                   </service>
                   <service>
-                     <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">prefix:dom-data-store</type>
+                     <prefix:type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">prefix:dom-data-store</prefix:type>
                      <instance>
                         <name>ref_hash-map-data-store</name>
                         <provider>/modules/module[type='hash-map-data-store'][name='hash-map-data-store']</provider>
                      </instance>
                   </service>
                   <service>
-                     <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">prefix:dom-broker-osgi-registry</type>
+                     <prefix:type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">prefix:dom-broker-osgi-registry</prefix:type>
                      <instance>
                         <name>ref_dom-broker</name>
                         <provider>/modules/module[type='dom-broker-impl'][name='dom-broker']</provider>
                      </instance>
                   </service>
                   <service>
-                     <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:test">prefix:testing</type>
+                     <prefix:type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:test">prefix:testing</prefix:type>
                      <instance>
                         <name>ref_id-test</name>
                         <provider>/modules/module[type='impl-identity-test'][name='id-test']</provider>
                      </instance>
                   </service>
                   <service>
-                     <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">prefix:binding-dom-mapping-service</type>
+                     <prefix:type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">prefix:binding-dom-mapping-service</prefix:type>
                      <instance>
                         <name>ref_runtime-mapping-singleton</name>
                         <provider>/modules/module[type='runtime-generated-mapping'][name='runtime-mapping-singleton']</provider>
                      </instance>
                   </service>
                   <service>
-                     <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">prefix:binding-data-consumer-broker</type>
+                     <prefix:type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">prefix:binding-data-consumer-broker</prefix:type>
                      <instance>
                         <name>ref_binding-data-broker</name>
                         <provider>/modules/module[type='binding-data-broker'][name='binding-data-broker']</provider>
                      </instance>
                   </service>
                   <service>
-                     <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">prefix:binding-rpc-registry</type>
+                     <prefix:type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">prefix:binding-rpc-registry</prefix:type>
                      <instance>
                         <name>ref_binding-broker-impl</name>
                         <provider>/modules/module[type='binding-broker-impl'][name='binding-broker-impl']</provider>
                      </instance>
                   </service>
                   <service>
-                     <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">prefix:binding-notification-service</type>
+                     <prefix:type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">prefix:binding-notification-service</prefix:type>
                      <instance>
                         <name>ref_binding-notification-broker</name>
                         <provider>/modules/module[type='binding-notification-broker'][name='binding-notification-broker']</provider>
                      </instance>
                   </service>
                   <service>
-                     <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">prefix:binding-broker-osgi-registry</type>
+                     <prefix:type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">prefix:binding-broker-osgi-registry</prefix:type>
                      <instance>
                         <name>ref_binding-broker-impl</name>
                         <provider>/modules/module[type='binding-broker-impl'][name='binding-broker-impl']</provider>
                      </instance>
                   </service>
                   <service>
-                     <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">prefix:binding-notification-subscription-service</type>
+                     <prefix:type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">prefix:binding-notification-subscription-service</prefix:type>
                      <instance>
                         <name>ref_binding-notification-broker</name>
                         <provider>/modules/module[type='binding-notification-broker'][name='binding-notification-broker']</provider>
                      </instance>
                   </service>
                   <service>
-                     <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">prefix:binding-data-broker</type>
+                     <prefix:type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">prefix:binding-data-broker</prefix:type>
                      <instance>
                         <name>ref_binding-data-broker</name>
                         <provider>/modules/module[type='binding-data-broker'][name='binding-data-broker']</provider>
diff --git a/opendaylight/netconf/netconf-mapping-api/src/main/java/org/opendaylight/controller/netconf/mapping/api/NetconfOperationProvider.java b/opendaylight/netconf/netconf-mapping-api/src/main/java/org/opendaylight/controller/netconf/mapping/api/NetconfOperationProvider.java
new file mode 100644 (file)
index 0000000..f5c50f8
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.controller.netconf.mapping.api;
+
+public interface NetconfOperationProvider {
+
+    NetconfOperationServiceSnapshot openSnapshot(String sessionIdForReporting);
+
+    public static class NetconfOperationProviderUtil {
+
+        public static String getNetconfSessionIdForReporting(long sessionId) {
+            return "netconf session id " + sessionId;
+        }
+
+    }
+
+}
@@ -1,14 +1,18 @@
-/*\r
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.\r
- *\r
- * This program and the accompanying materials are made available under the\r
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
- * and is available at http://www.eclipse.org/legal/epl-v10.html\r
- */\r
-package org.opendaylight.controller.netconf.mapping.api;\r
-\r
-import org.opendaylight.controller.netconf.api.NetconfSession;\r
-\r
-public interface DefaultNetconfOperation {\r
-    void setNetconfSession(NetconfSession s);\r
-}\r
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.controller.netconf.mapping.api;
+
+import java.util.Set;
+
+public interface NetconfOperationServiceSnapshot extends AutoCloseable {
+    String getNetconfSessionIdForReporting();
+
+    Set<NetconfOperationService> getServices();
+
+}
index d623dd979646e8f724f7abdefc9ce287a528a9fa..af8e4fbc39c502e90c7ad408809dba6c15355ac8 100644 (file)
             <groupId>org.opendaylight.controller.thirdparty</groupId>
             <artifactId>ganymed</artifactId>
         </dependency>
+        <dependency>
+            <groupId>xmlunit</groupId>
+            <artifactId>xmlunit</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.opendaylight.controller.thirdparty</groupId>
+            <artifactId>nagasena</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.opendaylight.controller.thirdparty</groupId>
+            <artifactId>nagasena-rta</artifactId>
+        </dependency>
     </dependencies>
 
     <build>
                             org.xml.sax,
                             org.xml.sax.helpers,
                             org.opendaylight.controller.config.api,
+                            org.openexi.*,
                         </Import-Package>
                     </instructions>
                 </configuration>
diff --git a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/AbstractNetconfSession.java b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/AbstractNetconfSession.java
new file mode 100644 (file)
index 0000000..270af35
--- /dev/null
@@ -0,0 +1,139 @@
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.controller.netconf.util;
+
+import java.io.IOException;
+
+import org.opendaylight.controller.netconf.api.NetconfMessage;
+import org.opendaylight.controller.netconf.api.NetconfSession;
+import org.opendaylight.controller.netconf.api.NetconfSessionListener;
+import org.opendaylight.controller.netconf.api.NetconfTerminationReason;
+import org.opendaylight.controller.netconf.util.handler.NetconfEXICodec;
+import org.opendaylight.controller.netconf.util.xml.EXIParameters;
+import org.opendaylight.controller.netconf.util.xml.XmlElement;
+import org.opendaylight.controller.netconf.util.xml.XmlUtil;
+import org.opendaylight.protocol.framework.AbstractProtocolSession;
+import org.openexi.proc.common.EXIOptionsException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.ChannelHandler;
+
+public abstract class AbstractNetconfSession<S extends NetconfSession, L extends NetconfSessionListener<S>> extends AbstractProtocolSession<NetconfMessage> implements NetconfSession, NetconfExiSession {
+    private static final Logger logger = LoggerFactory.getLogger(AbstractNetconfSession.class);
+    private final L sessionListener;
+    private final long sessionId;
+    private boolean up = false;
+
+    private ChannelHandler delayedEncoder;
+
+    private final Channel channel;
+
+    protected AbstractNetconfSession(final L sessionListener, final Channel channel, final long sessionId) {
+        this.sessionListener = sessionListener;
+        this.channel = channel;
+        this.sessionId = sessionId;
+        logger.debug("Session {} created", sessionId);
+    }
+
+    protected abstract S thisInstance();
+
+    @Override
+    public void close() {
+        channel.close();
+        up = false;
+        sessionListener.onSessionTerminated(thisInstance(), new NetconfTerminationReason("Session closed"));
+    }
+
+    @Override
+    protected void handleMessage(final NetconfMessage netconfMessage) {
+        logger.debug("handling incoming message");
+        sessionListener.onMessage(thisInstance(), netconfMessage);
+    }
+
+    @Override
+    public ChannelFuture sendMessage(final NetconfMessage netconfMessage) {
+        final ChannelFuture future = channel.writeAndFlush(netconfMessage);
+        if (delayedEncoder !=null) {
+                replaceMessageEncoder(delayedEncoder);
+                delayedEncoder = null;
+        }
+
+        return future;
+    }
+
+    @Override
+    protected void endOfInput() {
+        logger.debug("Session {} end of input detected while session was in state {}", toString(), isUp() ? "up"
+                : "initialized");
+        if (isUp()) {
+            this.sessionListener.onSessionDown(thisInstance(), new IOException("End of input detected. Close the session."));
+        }
+    }
+
+    @Override
+    protected void sessionUp() {
+        logger.debug("Session {} up", toString());
+        sessionListener.onSessionUp(thisInstance());
+        this.up = true;
+    }
+
+    @Override
+    public String toString() {
+        final StringBuffer sb = new StringBuffer(getClass().getSimpleName() + "{");
+        sb.append("sessionId=").append(sessionId);
+        sb.append('}');
+        return sb.toString();
+    }
+
+    protected <T extends ChannelHandler> T removeHandler(final Class<T> handlerType) {
+        return this.channel.pipeline().remove(handlerType);
+    }
+
+    protected void replaceMessageDecoder(final ChannelHandler handler) {
+        replaceChannelHandler(AbstractChannelInitializer.NETCONF_MESSAGE_DECODER, handler);
+    }
+
+    protected void replaceMessageEncoder(final ChannelHandler handler) {
+        replaceChannelHandler(AbstractChannelInitializer.NETCONF_MESSAGE_ENCODER, handler);
+    }
+
+    protected void replaceMessageEncoderAfterNextMessage(final ChannelHandler handler) {
+        this.delayedEncoder = handler;
+    }
+
+    protected void replaceChannelHandler(final String handlerName, final ChannelHandler handler) {
+        channel.pipeline().replace(handlerName, handlerName, handler);
+    }
+
+    @Override
+    public final void startExiCommunication(final NetconfMessage startExiMessage) {
+        final EXIParameters exiParams;
+        try {
+            exiParams = EXIParameters.fromXmlElement(XmlElement.fromDomDocument(startExiMessage.getDocument()));
+        } catch (final EXIOptionsException e) {
+            logger.warn("Unable to parse EXI parameters from {} om session {}", XmlUtil.toString(startExiMessage.getDocument()), this, e);
+            throw new IllegalArgumentException(e);
+        }
+        final NetconfEXICodec exiCodec = new NetconfEXICodec(exiParams.getOptions());
+        addExiHandlers(exiCodec);
+        logger.debug("EXI handlers added to pipeline on session {}", this);
+    }
+
+    protected abstract void addExiHandlers(NetconfEXICodec exiCodec);
+
+    public final boolean isUp() {
+        return up;
+    }
+
+    public final long getSessionId() {
+        return sessionId;
+    }
+}
index 71f08339c803774d3d3b50a701b2d55454e9081e..724b45bc08d867f6702ae75a11aece291fefd484 100644 (file)
@@ -8,9 +8,12 @@
 
 package org.opendaylight.controller.netconf.util;
 
+import com.google.common.base.Optional;
+import com.google.common.base.Preconditions;
 import io.netty.channel.Channel;
 import io.netty.channel.ChannelHandler;
 import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.ChannelInboundHandlerAdapter;
 import io.netty.handler.ssl.SslHandler;
 import io.netty.util.Timeout;
 import io.netty.util.Timer;
@@ -18,11 +21,6 @@ import io.netty.util.TimerTask;
 import io.netty.util.concurrent.Future;
 import io.netty.util.concurrent.GenericFutureListener;
 import io.netty.util.concurrent.Promise;
-
-import java.util.concurrent.TimeUnit;
-
-import io.netty.channel.ChannelInboundHandlerAdapter;
-import org.opendaylight.controller.netconf.api.AbstractNetconfSession;
 import org.opendaylight.controller.netconf.api.NetconfMessage;
 import org.opendaylight.controller.netconf.api.NetconfSessionListener;
 import org.opendaylight.controller.netconf.api.NetconfSessionPreferences;
@@ -39,16 +37,16 @@ import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
 import org.w3c.dom.NodeList;
 
-import com.google.common.base.Optional;
-import com.google.common.base.Preconditions;
+import java.util.concurrent.TimeUnit;
 
 public abstract class AbstractNetconfSessionNegotiator<P extends NetconfSessionPreferences, S extends AbstractNetconfSession<S, L>, L extends NetconfSessionListener<S>>
 extends AbstractSessionNegotiator<NetconfHelloMessage, S> {
 
     private static final Logger logger = LoggerFactory.getLogger(AbstractNetconfSessionNegotiator.class);
+
     public static final String NAME_OF_EXCEPTION_HANDLER = "lastExceptionHandler";
 
-    private final P sessionPreferences;
+    protected final P sessionPreferences;
 
     private final L sessionListener;
     private Timeout timeout;
@@ -56,7 +54,7 @@ extends AbstractSessionNegotiator<NetconfHelloMessage, S> {
     /**
      * Possible states for Finite State Machine
      */
-    private enum State {
+    protected enum State {
         IDLE, OPEN_WAIT, FAILED, ESTABLISHED
     }
 
@@ -64,6 +62,7 @@ extends AbstractSessionNegotiator<NetconfHelloMessage, S> {
     private final Timer timer;
     private final long connectionTimeoutMillis;
 
+    // TODO shrink constructor
     protected AbstractNetconfSessionNegotiator(P sessionPreferences, Promise<S> promise, Channel channel, Timer timer,
             L sessionListener, long connectionTimeoutMillis) {
         super(promise, channel);
@@ -127,7 +126,6 @@ extends AbstractSessionNegotiator<NetconfHelloMessage, S> {
         sendMessage((NetconfHelloMessage)helloMessage);
         changeState(State.OPEN_WAIT);
     }
-
     private void cancelTimeout() {
         if(timeout!=null) {
             timeout.cancel();
@@ -136,7 +134,12 @@ extends AbstractSessionNegotiator<NetconfHelloMessage, S> {
 
     @Override
     protected void handleMessage(NetconfHelloMessage netconfMessage) {
-        Preconditions.checkNotNull(netconfMessage != null, "netconfMessage");
+        S session = getSessionForHelloMessage(netconfMessage);
+        negotiationSuccessful(session);
+    }
+
+    protected final S getSessionForHelloMessage(NetconfHelloMessage netconfMessage) {
+        Preconditions.checkNotNull(netconfMessage, "netconfMessage");
 
         final Document doc = netconfMessage.getDocument();
 
@@ -147,22 +150,20 @@ extends AbstractSessionNegotiator<NetconfHelloMessage, S> {
         }
 
         changeState(State.ESTABLISHED);
-        S session = getSession(sessionListener, channel, netconfMessage);
-
-        negotiationSuccessful(session);
+        return getSession(sessionListener, channel, netconfMessage);
     }
 
     /**
      * Insert chunk framing handlers into the pipeline
      */
-    private void insertChunkFramingToPipeline() {
+    protected void insertChunkFramingToPipeline() {
         replaceChannelHandler(channel, AbstractChannelInitializer.NETCONF_MESSAGE_FRAME_ENCODER,
                 FramingMechanismHandlerFactory.createHandler(FramingMechanism.CHUNK));
         replaceChannelHandler(channel, AbstractChannelInitializer.NETCONF_MESSAGE_AGGREGATOR,
                 new NetconfChunkAggregator());
     }
 
-    private boolean shouldUseChunkFraming(Document doc) {
+    protected boolean shouldUseChunkFraming(Document doc) {
         return containsBase11Capability(doc)
                 && containsBase11Capability(sessionPreferences.getHelloMessage().getDocument());
     }
@@ -170,7 +171,7 @@ extends AbstractSessionNegotiator<NetconfHelloMessage, S> {
     /**
      * Remove special handlers for hello message. Insert regular netconf xml message (en|de)coders.
      */
-    private void replaceHelloMessageHandlers() {
+    protected void replaceHelloMessageHandlers() {
         replaceChannelHandler(channel, AbstractChannelInitializer.NETCONF_MESSAGE_DECODER, new NetconfXMLToMessageDecoder());
         replaceChannelHandler(channel, AbstractChannelInitializer.NETCONF_MESSAGE_ENCODER, new NetconfMessageToXMLEncoder());
     }
@@ -181,7 +182,7 @@ extends AbstractSessionNegotiator<NetconfHelloMessage, S> {
 
     protected abstract S getSession(L sessionListener, Channel channel, NetconfHelloMessage message);
 
-    private synchronized void changeState(final State newState) {
+    protected synchronized void changeState(final State newState) {
         logger.debug("Changing state from : {} to : {}", state, newState);
         Preconditions.checkState(isStateChangePermitted(state, newState), "Cannot change state from %s to %s", state,
                 newState);
@@ -208,7 +209,6 @@ extends AbstractSessionNegotiator<NetconfHelloMessage, S> {
         if (state == State.OPEN_WAIT && newState == State.FAILED) {
             return true;
         }
-
         logger.debug("Transition from {} to {} is not allowed", state, newState);
         return false;
     }
@@ -217,7 +217,6 @@ extends AbstractSessionNegotiator<NetconfHelloMessage, S> {
      * Handler to catch exceptions in pipeline during negotiation
      */
     private final class ExceptionHandlingInboundChannelHandler extends ChannelInboundHandlerAdapter {
-
         @Override
         public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
             logger.warn("An exception occurred during negotiation on channel {}", channel.localAddress(), cause);
diff --git a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/CloseableUtil.java b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/CloseableUtil.java
new file mode 100644 (file)
index 0000000..27960df
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.controller.netconf.util;
+
+public class CloseableUtil {
+
+    public static void closeAll(Iterable<? extends AutoCloseable> autoCloseables) throws Exception {
+        Exception lastException = null;
+        for (AutoCloseable autoCloseable : autoCloseables) {
+            try {
+                autoCloseable.close();
+            } catch (Exception e) {
+                if (lastException == null) {
+                    lastException = e;
+                } else {
+                    lastException.addSuppressed(e);
+                }
+            }
+        }
+        if (lastException != null) {
+            throw lastException;
+        }
+
+    }
+}
diff --git a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/NetconfExiSession.java b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/NetconfExiSession.java
new file mode 100644 (file)
index 0000000..2a20ba2
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.controller.netconf.util;
+
+import org.opendaylight.controller.netconf.api.NetconfMessage;
+
+/**
+ * Session capable of exi communication according to http://tools.ietf.org/html/draft-varga-netconf-exi-capability-02
+ */
+public interface NetconfExiSession {
+
+    /**
+     * Start exi communication with parameters included in start-exi message
+     */
+    void startExiCommunication(NetconfMessage startExiMessage);
+
+    /**
+     * Stop exi communication, initiated by stop-exi message
+     */
+    void stopExiCommunication();
+}
diff --git a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/handler/NetconfEXICodec.java b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/handler/NetconfEXICodec.java
new file mode 100644 (file)
index 0000000..a6e2e52
--- /dev/null
@@ -0,0 +1,59 @@
+package org.opendaylight.controller.netconf.util.handler;
+
+import com.google.common.base.Preconditions;
+import org.openexi.proc.HeaderOptionsOutputType;
+import org.openexi.proc.common.EXIOptions;
+import org.openexi.proc.common.EXIOptionsException;
+import org.openexi.proc.common.GrammarOptions;
+import org.openexi.proc.grammars.GrammarCache;
+import org.openexi.sax.EXIReader;
+import org.openexi.sax.Transmogrifier;
+
+public final class NetconfEXICodec {
+    /**
+     * NETCONF is XML environment, so the use of EXI cookie is not really needed. Adding it
+     * decreases efficiency of encoding by adding human-readable 4 bytes "EXI$" to the head
+     * of the stream. This is really useful, so let's output it now.
+     */
+    private static final boolean OUTPUT_EXI_COOKIE = true;
+    private final EXIOptions exiOptions;
+
+    public NetconfEXICodec(final EXIOptions exiOptions) {
+        this.exiOptions = Preconditions.checkNotNull(exiOptions);
+    }
+
+    private GrammarCache getGrammarCache() {
+        short go = GrammarOptions.DEFAULT_OPTIONS;
+        if (exiOptions.getPreserveComments()) {
+            go = GrammarOptions.addCM(go);
+        }
+        if (exiOptions.getPreserveDTD()) {
+            go = GrammarOptions.addDTD(go);
+        }
+        if (exiOptions.getPreserveNS()) {
+            go = GrammarOptions.addNS(go);
+        }
+        if (exiOptions.getPreservePIs()) {
+            go = GrammarOptions.addPI(go);
+        }
+
+        return new GrammarCache(null, go);
+    }
+
+    EXIReader getReader() throws EXIOptionsException {
+        final EXIReader r = new EXIReader();
+        r.setPreserveLexicalValues(exiOptions.getPreserveLexicalValues());
+        r.setGrammarCache(getGrammarCache());
+        return r;
+    }
+
+    Transmogrifier getTransmogrifier() throws EXIOptionsException {
+        final Transmogrifier transmogrifier = new Transmogrifier();
+        transmogrifier.setAlignmentType(exiOptions.getAlignmentType());
+        transmogrifier.setBlockSize(exiOptions.getBlockSize());
+        transmogrifier.setGrammarCache(getGrammarCache());
+        transmogrifier.setOutputCookie(OUTPUT_EXI_COOKIE);
+        transmogrifier.setOutputOptions(HeaderOptionsOutputType.all);
+        return transmogrifier;
+    }
+}
diff --git a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/handler/NetconfEXIToMessageDecoder.java b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/handler/NetconfEXIToMessageDecoder.java
new file mode 100644 (file)
index 0000000..cbfbfe1
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.controller.netconf.util.handler;
+
+import java.io.InputStream;
+import java.util.List;
+
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMResult;
+import javax.xml.transform.sax.SAXTransformerFactory;
+import javax.xml.transform.sax.TransformerHandler;
+
+import org.opendaylight.controller.netconf.api.NetconfMessage;
+import org.openexi.sax.EXIReader;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.w3c.dom.Document;
+import org.xml.sax.InputSource;
+
+import com.google.common.base.Preconditions;
+
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufInputStream;
+import io.netty.buffer.ByteBufUtil;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.handler.codec.ByteToMessageDecoder;
+
+public final class NetconfEXIToMessageDecoder extends ByteToMessageDecoder {
+
+    private static final Logger LOG = LoggerFactory.getLogger(NetconfEXIToMessageDecoder.class);
+
+//    private static final SAXTransformerFactory saxTransformerFactory = (SAXTransformerFactory)SAXTransformerFactory.newInstance();
+
+    private final NetconfEXICodec codec;
+
+    public NetconfEXIToMessageDecoder(final NetconfEXICodec codec) {
+        this.codec = Preconditions.checkNotNull(codec);
+    }
+
+    @Override
+    protected void decode(final ChannelHandlerContext ctx, final ByteBuf in, final List<Object> out) throws Exception {
+        /*
+         * Note that we could loop here and process all the messages, but we can't do that.
+         * The reason is <stop-exi> operation, which has the contract of immediately stopping
+         * the use of EXI, which means the next message needs to be decoded not by us, but rather
+         * by the XML decoder.
+         */
+        // If empty Byte buffer is passed to r.parse, EOFException is thrown
+
+        if (in.readableBytes() == 0) {
+            LOG.debug("No more content in incoming buffer.");
+            return;
+        }
+
+        LOG.trace("Received to decode: {}", ByteBufUtil.hexDump(in));
+
+        final EXIReader r = codec.getReader();
+
+        final SAXTransformerFactory transformerFactory
+                = (SAXTransformerFactory) TransformerFactory.newInstance();
+        final TransformerHandler handler = transformerFactory.newTransformerHandler();
+        r.setContentHandler(handler);
+
+        final DOMResult domResult = new DOMResult();
+        handler.setResult(domResult);
+
+
+        try (final InputStream is = new ByteBufInputStream(in)) {
+            r.parse(new InputSource(is));
+        }
+
+        out.add(new NetconfMessage((Document) domResult.getNode()));
+    }
+}
diff --git a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/handler/NetconfMessageToEXIEncoder.java b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/handler/NetconfMessageToEXIEncoder.java
new file mode 100644 (file)
index 0000000..5edec0d
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.controller.netconf.util.handler;
+
+import java.io.ByteArrayInputStream;
+import java.io.OutputStream;
+
+import org.opendaylight.controller.netconf.api.NetconfMessage;
+import org.opendaylight.controller.netconf.util.xml.XmlUtil;
+import org.openexi.sax.Transmogrifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.xml.sax.InputSource;
+
+import com.google.common.base.Preconditions;
+
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufOutputStream;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.handler.codec.MessageToByteEncoder;
+
+public final class NetconfMessageToEXIEncoder extends MessageToByteEncoder<NetconfMessage> {
+
+    private static final Logger LOG = LoggerFactory.getLogger(NetconfMessageToEXIEncoder.class);
+
+    //private static final SAXTransformerFactory saxTransformerFactory = (SAXTransformerFactory)SAXTransformerFactory.newInstance();
+    private final NetconfEXICodec codec;
+
+    public NetconfMessageToEXIEncoder(final NetconfEXICodec codec) {
+        this.codec = Preconditions.checkNotNull(codec);
+    }
+
+    @Override
+    protected void encode(final ChannelHandlerContext ctx, final NetconfMessage msg, final ByteBuf out) throws Exception {
+        LOG.trace("Sent to encode : {}", XmlUtil.toString(msg.getDocument()));
+
+        try (final OutputStream os = new ByteBufOutputStream(out)) {
+            final Transmogrifier transmogrifier = codec.getTransmogrifier();
+            transmogrifier.setOutputStream(os);
+
+            // FIXME transformer not working, see EXILibTest
+            transmogrifier.encode(new InputSource(new ByteArrayInputStream(XmlUtil.toString(msg.getDocument()).getBytes())));
+            //final Transformer transformer = saxTransformerFactory.newTransformer();
+            //transformer.transform(new DOMSource(msg.getDocument()), new SAXResult(transmogrifier.getSAXTransmogrifier()));
+        }
+    }
+}
index f9792a6c5bf0e2965bead5df9b1c8671ce7d600e..121ef8d7434eac609e55ff083a902e2a07cf92d8 100644 (file)
@@ -24,6 +24,7 @@ import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.stream.StreamResult;
 
 import org.opendaylight.controller.netconf.api.NetconfMessage;
+import org.opendaylight.controller.netconf.util.xml.XmlUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.w3c.dom.Comment;
@@ -48,7 +49,7 @@ public class NetconfMessageToXMLEncoder extends MessageToByteEncoder<NetconfMess
     @Override
     @VisibleForTesting
     public void encode(ChannelHandlerContext ctx, NetconfMessage msg, ByteBuf out) throws IOException, TransformerException {
-        LOG.debug("Sent to encode : {}", msg);
+        LOG.trace("Sent to encode : {}", XmlUtil.toString(msg.getDocument()));
 
         if (clientId.isPresent()) {
             Comment comment = msg.getDocument().createComment("clientId:" + clientId.get());
index 6b12a1999270608264053c7edbf9ab1cc5bc6b55..b7bbd3c6a70199cac0915d412568aae7d796d594 100644 (file)
@@ -8,6 +8,8 @@
 
 package org.opendaylight.controller.netconf.util.mapping;
 
+import java.util.Map;
+
 import org.opendaylight.controller.netconf.api.NetconfDocumentedException;
 import org.opendaylight.controller.netconf.mapping.api.HandlingPriority;
 import org.opendaylight.controller.netconf.mapping.api.NetconfOperation;
@@ -20,7 +22,7 @@ import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.NodeList;
 
-import java.util.Map;
+import com.google.common.base.Optional;
 
 public abstract class AbstractNetconfOperation implements NetconfOperation {
     private final String netconfSessionIdForReporting;
@@ -39,7 +41,7 @@ public abstract class AbstractNetconfOperation implements NetconfOperation {
         return canHandle(operationNameAndNamespace.getOperationName(), operationNameAndNamespace.getNamespace());
     }
 
-    public static class OperationNameAndNamespace {
+    public static final class OperationNameAndNamespace {
         private final String operationName, namespace;
 
         public OperationNameAndNamespace(Document message) {
@@ -92,13 +94,12 @@ public abstract class AbstractNetconfOperation implements NetconfOperation {
         Map<String, Attr> attributes = requestElement.getAttributes();
 
         Element response = handle(document, operationElement, subsequentOperation);
-        Element rpcReply = document.createElementNS(XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_NETCONF_BASE_1_0,
-                XmlNetconfConstants.RPC_REPLY_KEY);
+        Element rpcReply = XmlUtil.createElement(document, XmlNetconfConstants.RPC_REPLY_KEY, Optional.of(XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_NETCONF_BASE_1_0));
 
         if(XmlElement.fromDomElement(response).hasNamespace()) {
             rpcReply.appendChild(response);
         } else {
-            Element responseNS = document.createElementNS(XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_NETCONF_BASE_1_0, response.getNodeName());
+            Element responseNS = XmlUtil.createElement(document, response.getNodeName(), Optional.of(XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_NETCONF_BASE_1_0));
             NodeList list = response.getChildNodes();
             while(list.getLength()!=0) {
                 responseNS.appendChild(list.item(0));
index 249f894340e5a948ca6dd13bfe55d66ea1c0b5f9..e3eb45070453f038240faebebe584e6ad742d977 100644 (file)
@@ -8,13 +8,17 @@
 
 package org.opendaylight.controller.netconf.util.messages;
 
+import java.util.Set;
+
 import org.opendaylight.controller.netconf.api.NetconfMessage;
 import org.opendaylight.controller.netconf.util.xml.XmlElement;
 import org.opendaylight.controller.netconf.util.xml.XmlNetconfConstants;
 import org.opendaylight.controller.netconf.util.xml.XmlUtil;
 import org.w3c.dom.Document;
+import org.w3c.dom.Element;
 
 import com.google.common.base.Optional;
+import com.google.common.collect.Sets;
 
 /**
  * NetconfMessage that can carry additional header with session metadata. See {@link org.opendaylight.controller.netconf.util.messages.NetconfHelloMessageAdditionalHeader}
@@ -50,4 +54,37 @@ public final class NetconfHelloMessage extends NetconfMessage {
                     XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_NETCONF_BASE_1_0, XmlUtil.toString(doc)), e);
         }
     }
+
+    public static NetconfHelloMessage createClientHello(Iterable<String> capabilities,
+                                                        Optional<NetconfHelloMessageAdditionalHeader> additionalHeaderOptional) {
+        Document doc = createHelloMessageDoc(capabilities);
+        return additionalHeaderOptional.isPresent() ? new NetconfHelloMessage(doc, additionalHeaderOptional.get())
+                : new NetconfHelloMessage(doc);
+    }
+
+    private static Document createHelloMessageDoc(Iterable<String> capabilities) {
+        Document doc = XmlUtil.newDocument();
+        Element helloElement = doc.createElementNS(XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_NETCONF_BASE_1_0,
+                HELLO_TAG);
+        Element capabilitiesElement = doc.createElement(XmlNetconfConstants.CAPABILITIES);
+
+        for (String capability : Sets.newHashSet(capabilities)) {
+            Element capElement = doc.createElement(XmlNetconfConstants.CAPABILITY);
+            capElement.setTextContent(capability);
+            capabilitiesElement.appendChild(capElement);
+        }
+
+        helloElement.appendChild(capabilitiesElement);
+
+        doc.appendChild(helloElement);
+        return doc;
+    }
+
+    public static NetconfHelloMessage createServerHello(Set<String> capabilities, long sessionId) {
+        Document doc = createHelloMessageDoc(capabilities);
+        Element sessionIdElement = doc.createElement(XmlNetconfConstants.SESSION_ID);
+        sessionIdElement.setTextContent(Long.toString(sessionId));
+        doc.getDocumentElement().appendChild(sessionIdElement);
+        return new NetconfHelloMessage(doc);
+    }
 }
index 91eb86908b169ca9ecff8a77fb803b2d7ee60184..e4d97cf65af4ef805b6ecf9cff3133a65cf964ab 100644 (file)
@@ -8,11 +8,17 @@
 
 package org.opendaylight.controller.netconf.util.messages;
 
+import com.google.common.base.Function;
+import com.google.common.collect.Collections2;
 import org.opendaylight.controller.netconf.api.NetconfMessage;
 import org.opendaylight.controller.netconf.util.xml.XmlElement;
 import org.opendaylight.controller.netconf.util.xml.XmlNetconfConstants;
 import org.w3c.dom.Document;
 
+import javax.annotation.Nullable;
+import java.util.Collection;
+import java.util.List;
+
 public final class NetconfMessageUtil {
 
     private NetconfMessageUtil() {}
@@ -26,10 +32,13 @@ public final class NetconfMessageUtil {
     }
 
     public static boolean isOKMessage(XmlElement xmlElement) {
+        if(xmlElement.getChildElements().size() != 1) {
+            return false;
+        }
         return xmlElement.getOnlyChildElement().getName().equals(XmlNetconfConstants.OK);
     }
 
-    public static boolean isErrorMEssage(NetconfMessage message) {
+    public static boolean isErrorMessage(NetconfMessage message) {
         return isErrorMessage(message.getDocument());
     }
 
@@ -38,7 +47,26 @@ public final class NetconfMessageUtil {
     }
 
     public static boolean isErrorMessage(XmlElement xmlElement) {
+        if(xmlElement.getChildElements().size() != 1) {
+            return false;
+        }
         return xmlElement.getOnlyChildElement().getName().equals(XmlNetconfConstants.RPC_ERROR);
+    }
+
+    public static Collection<String> extractCapabilitiesFromHello(Document doc) {
+        XmlElement responseElement = XmlElement.fromDomDocument(doc);
+        XmlElement capabilitiesElement = responseElement
+                .getOnlyChildElementWithSameNamespace(XmlNetconfConstants.CAPABILITIES);
+        List<XmlElement> caps = capabilitiesElement.getChildElements(XmlNetconfConstants.CAPABILITY);
+        return Collections2.transform(caps, new Function<XmlElement, String>() {
+
+            @Nullable
+            @Override
+            public String apply(@Nullable XmlElement input) {
+                // Trim possible leading/tailing whitespace
+                return input.getTextContent().trim();
+            }
+        });
 
     }
 }
diff --git a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/messages/NetconfStartExiMessage.java b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/messages/NetconfStartExiMessage.java
new file mode 100644 (file)
index 0000000..4fe6adc
--- /dev/null
@@ -0,0 +1,93 @@
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.controller.netconf.util.messages;
+
+import java.util.List;
+
+import org.opendaylight.controller.netconf.api.NetconfMessage;
+import org.opendaylight.controller.netconf.util.xml.XmlNetconfConstants;
+import org.opendaylight.controller.netconf.util.xml.XmlUtil;
+import org.openexi.proc.common.EXIOptions;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import com.google.common.collect.Lists;
+
+/**
+ * Start-exi netconf message.
+ */
+public final class NetconfStartExiMessage extends NetconfMessage {
+
+    public static final String START_EXI = "start-exi";
+    public static final String ALIGNMENT_KEY = "alignment";
+    public static final String FIDELITY_KEY = "fidelity";
+    public static final String COMMENTS_KEY = "comments";
+    public static final String DTD_KEY = "dtd";
+    public static final String LEXICAL_VALUES_KEY = "lexical-values";
+    public static final String PIS_KEY = "pis";
+    public static final String PREFIXES_KEY = "prefixes";
+
+    private NetconfStartExiMessage(Document doc) {
+        super(doc);
+    }
+
+    public static NetconfStartExiMessage create(EXIOptions exiOptions, String messageId) {
+        Document doc = XmlUtil.newDocument();
+        Element rpcElement = doc.createElementNS(XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_NETCONF_BASE_1_0,
+                XmlNetconfConstants.RPC_KEY);
+        rpcElement.setAttributeNS(XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_NETCONF_BASE_1_0,
+                XmlNetconfConstants.MESSAGE_ID, messageId);
+
+        // TODO draft http://tools.ietf.org/html/draft-varga-netconf-exi-capability-02#section-3.5.1 has no namespace for start-exi element in xml
+        Element startExiElement = doc.createElementNS(XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_NETCONF_EXI_1_0,
+                START_EXI);
+
+        addAlignemnt(exiOptions, doc, startExiElement);
+        addFidelity(exiOptions, doc, startExiElement);
+
+        rpcElement.appendChild(startExiElement);
+
+        doc.appendChild(rpcElement);
+        return new NetconfStartExiMessage(doc);
+    }
+
+    private static void addFidelity(EXIOptions exiOptions, Document doc, Element startExiElement) {
+        List<Element> fidelityElements = Lists.newArrayList();
+        createFidelityElement(doc, fidelityElements, exiOptions.getPreserveComments(), COMMENTS_KEY);
+        createFidelityElement(doc, fidelityElements, exiOptions.getPreserveDTD(), DTD_KEY);
+        createFidelityElement(doc, fidelityElements, exiOptions.getPreserveLexicalValues(), LEXICAL_VALUES_KEY);
+        createFidelityElement(doc, fidelityElements, exiOptions.getPreservePIs(), PIS_KEY);
+        createFidelityElement(doc, fidelityElements, exiOptions.getPreserveNS(), PREFIXES_KEY);
+
+        if (fidelityElements.isEmpty() == false) {
+            Element fidelityElement = doc.createElementNS(
+                    XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_NETCONF_EXI_1_0, FIDELITY_KEY);
+            for (Element element : fidelityElements) {
+                fidelityElement.appendChild(element);
+            }
+            startExiElement.appendChild(fidelityElement);
+        }
+    }
+
+    private static void addAlignemnt(EXIOptions exiOptions, Document doc, Element startExiElement) {
+        Element alignmentElement = doc.createElementNS(XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_NETCONF_EXI_1_0,
+                ALIGNMENT_KEY);
+        alignmentElement.setTextContent(exiOptions.getAlignmentType().toString());
+        startExiElement.appendChild(alignmentElement);
+    }
+
+    private static void createFidelityElement(Document doc, List<Element> fidelityElements, boolean fidelity, String fidelityName) {
+
+        if (fidelity) {
+            fidelityElements.add(doc.createElementNS(XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_NETCONF_EXI_1_0,
+                    fidelityName));
+        }
+
+    }
+}
diff --git a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/xml/EXIParameters.java b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/xml/EXIParameters.java
new file mode 100644 (file)
index 0000000..593b77f
--- /dev/null
@@ -0,0 +1,109 @@
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.controller.netconf.util.xml;
+
+import org.opendaylight.controller.netconf.api.NetconfMessage;
+import org.openexi.proc.common.AlignmentType;
+import org.openexi.proc.common.EXIOptions;
+import org.openexi.proc.common.EXIOptionsException;
+
+import com.google.common.base.Preconditions;
+
+public final class EXIParameters {
+    private static final String EXI_PARAMETER_ALIGNMENT = "alignment";
+    private static final String EXI_PARAMETER_BYTE_ALIGNED = "byte-aligned";
+    private static final String EXI_PARAMETER_BIT_PACKED = "bit-packed";
+    private static final String EXI_PARAMETER_COMPRESSED = "compressed";
+    private static final String EXI_PARAMETER_PRE_COMPRESSION = "pre-compression";
+
+    private static final String EXI_PARAMETER_FIDELITY = "fidelity";
+    private static final String EXI_FIDELITY_DTD = "dtd";
+    private static final String EXI_FIDELITY_LEXICAL_VALUES = "lexical-values";
+    private static final String EXI_FIDELITY_COMMENTS = "comments";
+    private static final String EXI_FIDELITY_PIS = "pis";
+    private static final String EXI_FIDELITY_PREFIXES = "prefixes";
+
+    private static final String EXI_PARAMETER_SCHEMA = "schema";
+    private static final String EXI_PARAMETER_SCHEMA_NONE = "none";
+    private static final String EXI_PARAMETER_SCHEMA_BUILT_IN = "builtin";
+    private static final String EXI_PARAMETER_SCHEMA_BASE_1_1 = "base:1.1";
+
+    private final EXIOptions options;
+
+    private EXIParameters(final EXIOptions options) {
+        this.options = Preconditions.checkNotNull(options);
+    }
+
+    public static EXIParameters fromNetconfMessage(final NetconfMessage root) throws EXIOptionsException {
+        return fromXmlElement(XmlElement.fromDomDocument(root.getDocument()));
+    }
+
+    public static EXIParameters fromXmlElement(final XmlElement root) throws EXIOptionsException {
+        final EXIOptions options =  new EXIOptions();
+
+        options.setAlignmentType(AlignmentType.bitPacked);
+        if (root.getElementsByTagName(EXI_PARAMETER_ALIGNMENT).getLength() > 0) {
+            if (root.getElementsByTagName(EXI_PARAMETER_BIT_PACKED).getLength() > 0) {
+                options.setAlignmentType(AlignmentType.bitPacked);
+            } else if (root.getElementsByTagName(EXI_PARAMETER_BYTE_ALIGNED).getLength() > 0) {
+                options.setAlignmentType(AlignmentType.byteAligned);
+            } else if (root.getElementsByTagName(EXI_PARAMETER_COMPRESSED).getLength() > 0) {
+                options.setAlignmentType(AlignmentType.compress);
+            } else if (root.getElementsByTagName(EXI_PARAMETER_PRE_COMPRESSION).getLength() > 0) {
+                options.setAlignmentType(AlignmentType.preCompress);
+            }
+        }
+
+        if (root.getElementsByTagName(EXI_PARAMETER_FIDELITY).getLength() > 0) {
+            if (root.getElementsByTagName(EXI_FIDELITY_DTD).getLength() > 0) {
+                options.setPreserveDTD(true);
+            }
+            if (root.getElementsByTagName(EXI_FIDELITY_LEXICAL_VALUES).getLength() > 0) {
+                options.setPreserveLexicalValues(true);
+            }
+            if (root.getElementsByTagName(EXI_FIDELITY_COMMENTS).getLength() > 0) {
+                options.setPreserveComments(true);
+            }
+            if (root.getElementsByTagName(EXI_FIDELITY_PIS).getLength() > 0) {
+                options.setPreservePIs(true);
+            }
+            if (root.getElementsByTagName(EXI_FIDELITY_PREFIXES).getLength() > 0) {
+                options.setPreserveNS(true);
+            }
+        }
+
+        if (root.getElementsByTagName(EXI_PARAMETER_SCHEMA).getLength() > 0) {
+/*
+                        GrammarFactory grammarFactory = GrammarFactory.newInstance();
+                        if (operationElement
+                                .getElementsByTagName(EXI_PARAMETER_SCHEMA_NONE)
+                                .getLength() > 0) {
+                            this.grammars = grammarFactory.createSchemaLessGrammars();
+                        }
+
+                        if (operationElement.getElementsByTagName(
+                                EXI_PARAMETER_SCHEMA_BUILT_IN).getLength() > 0) {
+                            this.grammars = grammarFactory.createXSDTypesOnlyGrammars();
+                        }
+
+                        if (operationElement.getElementsByTagName(
+                                EXI_PARAMETER_SCHEMA_BASE_1_1).getLength() > 0) {
+                            this.grammars = grammarFactory
+                                    .createGrammars(NETCONF_XSD_LOCATION);
+                        }
+*/
+
+        }
+
+        return new EXIParameters(options);
+    }
+
+    public final EXIOptions getOptions() {
+        return options;
+    }
+}
index c9f3a8a53b31dedf67b4f0560e9925f18cb2bf75..d0be73843b0aa3b9c3243e942e91f8aab5d2aa31 100644 (file)
@@ -9,6 +9,8 @@ package org.opendaylight.controller.netconf.util.xml;
 
 public final class XmlNetconfConstants {
 
+
+
     private XmlNetconfConstants() {}
 
     public static final String MOUNTPOINTS = "mountpoints";
@@ -37,8 +39,15 @@ public final class XmlNetconfConstants {
 
     public static final String PREFIX = "prefix";
 
+    public static final String MESSAGE_ID = "message-id";
+    public static final String SESSION_ID = "session-id";
+
     //
     public static final String URN_IETF_PARAMS_XML_NS_NETCONF_BASE_1_0 = "urn:ietf:params:xml:ns:netconf:base:1.0";
+    public static final String URN_IETF_PARAMS_XML_NS_NETCONF_BASE_1_1 = "urn:ietf:params:xml:ns:netconf:base:1.1";
+    public static final String URN_IETF_PARAMS_XML_NS_NETCONF_EXI_1_0 = "urn:ietf:params:xml:ns:netconf:exi:1.0";
+
+    public static final String URN_IETF_PARAMS_NETCONF_CAPABILITY_EXI_1_0 = "urn:ietf:params:netconf:capability:exi:1.0";
     public static final String URN_IETF_PARAMS_XML_NS_YANG_IETF_NETCONF_MONITORING = "urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring";
     // TODO where to store namespace of config ?
     public static final String URN_OPENDAYLIGHT_PARAMS_XML_NS_YANG_CONTROLLER_CONFIG = "urn:opendaylight:params:xml:ns:yang:controller:config";
index 238249dbbd8d49086b38c1696cb6d0cb685909fe..d8907424f804f6d93262a38ddf107364a392cca1 100644 (file)
@@ -40,10 +40,12 @@ import org.w3c.dom.Node;
 import org.xml.sax.SAXException;
 
 import com.google.common.base.Charsets;
+import com.google.common.base.Optional;
 
 public final class XmlUtil {
 
     public static final String XMLNS_ATTRIBUTE_KEY = "xmlns";
+    private static final String XMLNS_URI = "http://www.w3.org/2000/xmlns/";
     private static final DocumentBuilderFactory BUILDERFACTORY;
 
     static {
@@ -101,25 +103,30 @@ public final class XmlUtil {
         }
     }
 
-    public static Element createTextElement(Document document, String name, String content) {
-        Element typeElement = document.createElement(name);
-        typeElement.appendChild(document.createTextNode(content));
-        return typeElement;
-    }
-
-    public static void addNamespaceAttr(Element root, String namespace) {
-        root.setAttribute(XMLNS_ATTRIBUTE_KEY, namespace);
+    public static Element createElement(final Document document, String qName, Optional<String> namespaceURI) {
+        if(namespaceURI.isPresent()) {
+            final Element element = document.createElementNS(namespaceURI.get(), qName);
+            String name = XMLNS_ATTRIBUTE_KEY;
+            if(element.getPrefix() != null) {
+                name += ":" + element.getPrefix();
+            }
+            element.setAttributeNS(XMLNS_URI, name, namespaceURI.get());
+            return element;
+        }
+        return document.createElement(qName);
     }
 
-    public static void addPrefixedNamespaceAttr(Element root, String prefix, String namespace) {
-        root.setAttribute(concat(XMLNS_ATTRIBUTE_KEY, prefix), namespace);
+    public static Element createTextElement(Document document, String qName, String content, Optional<String> namespaceURI) {
+        Element typeElement = createElement(document, qName, namespaceURI);
+        typeElement.appendChild(document.createTextNode(content));
+        return typeElement;
     }
 
-    public static Element createPrefixedTextElement(Document document, String key, String prefix, String content) {
-        return createTextElement(document, key, concat(prefix, content));
+    public static Element createPrefixedTextElement(Document document, String qName, String prefix, String content, Optional<String> namespace) {
+        return createTextElement(document, qName, createPrefixedValue(prefix, content), namespace);
     }
 
-    private static String concat(String prefix, String value) {
+    public static String createPrefixedValue(String prefix, String value) {
         return prefix + ":" + value;
     }
 
diff --git a/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/EXILibTest.java b/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/EXILibTest.java
new file mode 100644 (file)
index 0000000..360e812
--- /dev/null
@@ -0,0 +1,207 @@
+/*
+ * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.controller.netconf.util;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.StringWriter;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.TransformerFactoryConfigurationError;
+import javax.xml.transform.dom.DOMResult;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.sax.SAXResult;
+import javax.xml.transform.sax.SAXTransformerFactory;
+import javax.xml.transform.sax.TransformerHandler;
+import javax.xml.transform.stream.StreamResult;
+
+import org.junit.Ignore;
+import org.junit.Test;
+import org.openexi.proc.common.AlignmentType;
+import org.openexi.proc.common.GrammarOptions;
+import org.openexi.proc.grammars.GrammarCache;
+import org.openexi.sax.EXIReader;
+import org.openexi.sax.Transmogrifier;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.xml.sax.InputSource;
+
+/**
+ * This test case tests nagasena library used for exi encode/decode.
+ *
+ * This library does not work correctly, since it is impossible to encode and then decode DOM xml.
+ * Encoding DOM using sax Transformer produces invalid xml, that cannot be decoded (Problem seems to be the namespace handling).
+ *
+ */
+@Ignore
+public class EXILibTest {
+
+    public static final AlignmentType ALIGNMENT_TYPE = AlignmentType.preCompress;
+
+    @Test
+    public void testExiLibWithSaxTransformer() throws Exception {
+        final byte[] encode = encodeEXI(getDom2());
+        final byte[] encodeWithTransformer = encodeEXITransformer(getDom2());
+
+        // System.err.println(Arrays.toString(encode));
+        // System.err.println(Arrays.toString(encodeWithTransformer));
+
+        // This works fine (encoded from string)
+        decodeEXI(encode);
+        // Error, encoded from Dom with Transformer cannot be decoded, Exception is thrown
+        //
+        // either:
+        // org.w3c.dom.DOMException: NAMESPACE_ERR: An attempt is made to create or change an object in a way which is incorrect with regard to namespaces.
+        //
+        // or:
+        // java.lang.NullPointerException
+        //
+        // depends on GrammarOptions.addNS(go); option set
+        decodeEXI(encodeWithTransformer);
+    }
+
+    private static final SAXTransformerFactory saxTransformerFactory = (SAXTransformerFactory)SAXTransformerFactory.newInstance();
+
+    public static byte[] encodeEXITransformer(final Element xml) throws Exception {
+        final Transmogrifier transmogrifier = new Transmogrifier();
+
+        transmogrifier.setAlignmentType(ALIGNMENT_TYPE);
+
+        final ByteArrayOutputStream out = new ByteArrayOutputStream();
+
+        transmogrifier.setGrammarCache(getGrammarCache());
+
+        transmogrifier.setOutputStream(out);
+
+        final Transformer transformer = saxTransformerFactory.newTransformer();
+        transformer.transform(new DOMSource(xml), new SAXResult(transmogrifier.getSAXTransmogrifier()));
+
+        return out.toByteArray();
+    }
+
+    public static byte[] encodeEXI(final Element xml) throws Exception {
+        final Transmogrifier transmogrifier = new Transmogrifier();
+
+        transmogrifier.setAlignmentType(ALIGNMENT_TYPE);
+
+        final ByteArrayOutputStream out = new ByteArrayOutputStream();
+
+        transmogrifier.setGrammarCache(getGrammarCache());
+
+        transmogrifier.setOutputStream(out);
+
+        transmogrifier.encode(new InputSource(new ByteArrayInputStream(toString(xml, false).getBytes())));
+
+        out.flush();
+
+        return out.toByteArray();
+    }
+
+    private static GrammarCache getGrammarCache() {
+        short go = GrammarOptions.DEFAULT_OPTIONS;
+
+        // This option on or off, nagasena still fails
+//        go = GrammarOptions.addNS(go);
+
+        return new GrammarCache(null, go);
+    }
+
+    public static Document decodeEXI(final byte[] input) throws Exception {
+
+        final GrammarCache grammarCache;
+        final DOMResult domResult = new DOMResult();
+
+        try(ByteArrayInputStream in = new ByteArrayInputStream(input)) {
+
+            final EXIReader reader = new EXIReader();
+
+            reader.setAlignmentType(ALIGNMENT_TYPE);
+            grammarCache = getGrammarCache();
+
+            reader.setGrammarCache(grammarCache);
+
+            final SAXTransformerFactory transformerFactory
+                    = (SAXTransformerFactory) TransformerFactory.newInstance();
+            final TransformerHandler handler = transformerFactory.newTransformerHandler();
+            handler.setResult(domResult);
+
+            reader.setContentHandler(handler);
+
+            reader.parse(new InputSource(in));
+        }
+
+        return (Document) domResult.getNode();
+    }
+
+    public static Element getDom() {
+        final Element dom;
+
+        final Document d = newDocument();
+
+        dom = d.createElement("rpc");
+        dom.setAttribute("xmlns", "a.b.c");
+        dom.setAttribute("message-id", "id");
+        dom.appendChild(d.createElement("inner"));
+
+        return dom;
+    }
+
+    public static Element getDom2() {
+        final Element dom;
+
+        final Document d = newDocument();
+
+        dom = d.createElementNS("a.b.c", "rpc");
+        dom.setAttribute("message-id", "id");
+        dom.appendChild(d.createElement("inner"));
+
+        return dom;
+    }
+
+    private static final DocumentBuilderFactory BUILDERFACTORY;
+
+    static {
+        final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+        factory.setNamespaceAware(true);
+        factory.setCoalescing(true);
+        factory.setIgnoringElementContentWhitespace(true);
+        factory.setIgnoringComments(true);
+        BUILDERFACTORY = factory;
+    }
+
+    private static Document newDocument() {
+        try {
+            final DocumentBuilder builder = BUILDERFACTORY.newDocumentBuilder();
+            return builder.newDocument();
+        } catch (final ParserConfigurationException e) {
+            throw new RuntimeException("Failed to create document", e);
+        }
+    }
+
+    private static String toString(final Element xml, final boolean addXmlDeclaration) {
+        try {
+            final Transformer transformer = TransformerFactory.newInstance().newTransformer();
+            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
+            transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, addXmlDeclaration ? "no" : "yes");
+
+            final StreamResult result = new StreamResult(new StringWriter());
+            final DOMSource source = new DOMSource(xml);
+            transformer.transform(source, result);
+
+            return result.getWriter().toString();
+        } catch (IllegalArgumentException | TransformerFactoryConfigurationError | TransformerException e) {
+            throw new RuntimeException("Unable to serialize xml element " + xml, e);
+        }
+    }
+}
diff --git a/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/test/XmlUnitUtil.java b/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/test/XmlUnitUtil.java
new file mode 100644 (file)
index 0000000..e8a453e
--- /dev/null
@@ -0,0 +1,117 @@
+/*
+ * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.controller.netconf.util.test;
+
+import static org.custommonkey.xmlunit.XMLAssert.assertNodeTestPasses;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import org.custommonkey.xmlunit.AbstractNodeTester;
+import org.custommonkey.xmlunit.NodeTest;
+import org.custommonkey.xmlunit.NodeTestException;
+import org.custommonkey.xmlunit.NodeTester;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.Text;
+
+public class XmlUnitUtil {
+
+    private XmlUnitUtil() {}
+
+    public static void assertContainsElementWithText(final Document doc, final String textToFind) throws NodeTestException {
+        NodeTest nt = new NodeTest(doc);
+        NodeTester tester = new AbstractNodeTester() {
+
+            boolean textFound = false;
+
+            @Override
+            public void testText(Text text) throws NodeTestException {
+                if(!textFound) {
+                    if (text.getData().equalsIgnoreCase(textToFind)) {
+                        textFound = true;
+                    }
+                }
+            }
+
+            @Override
+            public void noMoreNodes(NodeTest forTest) throws NodeTestException {
+                assertTrue(textFound);
+            }
+        };
+        assertNodeTestPasses(nt, tester, new short[]{Node.TEXT_NODE}, true);
+    }
+
+    public static void assertContainsElement(final Document doc, final Element testElement) throws NodeTestException {
+        NodeTest nt = new NodeTest(doc);
+        NodeTester tester = new AbstractNodeTester() {
+
+            private boolean elementFound = false;
+
+            @Override
+            public void testElement(Element element) throws NodeTestException {
+                if (!elementFound) {
+                    if(element.isEqualNode(testElement)) {
+                        elementFound = true;
+                    }
+                }
+            }
+
+            @Override
+            public void noMoreNodes(NodeTest forTest) throws NodeTestException {
+                assertTrue(elementFound);
+            }
+        };
+        assertNodeTestPasses(nt, tester, new short[]{Node.ELEMENT_NODE}, true);
+    }
+
+    public static void assertContainsElementWithName(final Document doc, final String elementName) throws NodeTestException {
+        NodeTest nt = new NodeTest(doc);
+        NodeTester tester = new AbstractNodeTester() {
+
+            private boolean elementFound = false;
+
+            @Override
+            public void testElement(Element element) throws NodeTestException {
+                if (!elementFound) {
+                    if (element.getNodeName() != null && element.getNodeName().equals(elementName)) {
+                        elementFound = true;
+                    }
+                }
+            }
+
+            @Override
+            public void noMoreNodes(NodeTest forTest) throws NodeTestException {
+                assertTrue(elementFound);
+            }
+        };
+        assertNodeTestPasses(nt, tester, new short[]{Node.ELEMENT_NODE}, true);
+    }
+
+    public static void assertElementsCount(final Document doc, final String elementName, final int expectedCount) {
+        NodeTest nt = new NodeTest(doc);
+        NodeTester tester = new AbstractNodeTester() {
+
+            private int elementFound = 0;
+
+            @Override
+            public void testElement(Element element) throws NodeTestException {
+                if (element.getNodeName() != null && element.getNodeName().equals(elementName)) {
+                    elementFound++;
+                }
+            }
+
+            @Override
+            public void noMoreNodes(NodeTest forTest) throws NodeTestException {
+                assertEquals(expectedCount, elementFound);
+            }
+        };
+        assertNodeTestPasses(nt, tester, new short[]{Node.ELEMENT_NODE}, true);
+    }
+}
diff --git a/opendaylight/netconf/netconf-util/src/test/resources/netconfMessages/rpc-reply_ok.xml b/opendaylight/netconf/netconf-util/src/test/resources/netconfMessages/rpc-reply_ok.xml
new file mode 100644 (file)
index 0000000..5949633
--- /dev/null
@@ -0,0 +1,3 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" a="64" message-id="a">
+    <ok/>
+</rpc-reply>
\ No newline at end of file
index 6b9e9452e859c68a1da7dce07b6be5ac1cc79d16..e7a483e4056a9f8c4ccb2aa1c1cbcc9e6d2b2032 100644 (file)
@@ -1,5 +1,5 @@
 <rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" a="64" message-id="a">\r
-<start-exi>\r
+<start-exi xmlns="urn:ietf:params:xml:ns:netconf:exi:1.0">\r
 <alignment>pre-compression</alignment>\r
 <fidelity>\r
 <dtd/>\r
index 4168d21aba9239d4311f3d965268a23a9dbcdb48..6c0524a4fce9d9059e8fd32b6fc2a21cd7c1ff60 100644 (file)
@@ -1,3 +1,3 @@
 <rpc message-id="a" a="64" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">\r
-    <stop-exi/>\r
+    <stop-exi xmlns="urn:ietf:params:xml:ns:netconf:exi:1.0"/>\r
 </rpc>
\ No newline at end of file
index 9a71c47193ec25c98c7d04cd6317ddd7341177eb..5dbf4423dba15af88ccbafa933c55256377e7d0c 100644 (file)
@@ -29,6 +29,7 @@
         <module>netconf-monitoring</module>
         <module>ietf-netconf-monitoring</module>
         <module>ietf-netconf-monitoring-extension</module>
+        <module>../../third-party/org.openexi</module>
     </modules>
 
     <profiles>
                 <artifactId>netconf-impl</artifactId>
                 <version>${netconf.version}</version>
             </dependency>
+            <dependency>
+                <groupId>${project.groupId}</groupId>
+                <artifactId>netconf-impl</artifactId>
+                <version>${netconf.version}</version>
+                <type>test-jar</type>
+            </dependency>
             <dependency>
                 <groupId>${project.groupId}</groupId>
                 <artifactId>netconf-monitoring</artifactId>
diff --git a/third-party/org.openexi/nagasena-rta/nagasena-rta-0000.0002.0035.0.jar b/third-party/org.openexi/nagasena-rta/nagasena-rta-0000.0002.0035.0.jar
new file mode 100644 (file)
index 0000000..060b171
Binary files /dev/null and b/third-party/org.openexi/nagasena-rta/nagasena-rta-0000.0002.0035.0.jar differ
diff --git a/third-party/org.openexi/nagasena-rta/pom.xml b/third-party/org.openexi/nagasena-rta/pom.xml
new file mode 100644 (file)
index 0000000..6beba8c
--- /dev/null
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- vi: set et smarttab sw=4 tabstop=4: -->
+<!--
+ Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
+
+ This program and the accompanying materials are made available under the
+ terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ and is available at http://www.eclipse.org/legal/epl-v10.html
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.opendaylight.controller.thirdparty</groupId>
+        <artifactId>org.openexi</artifactId>
+        <version>0000.0002.0035.0-SNAPSHOT</version>
+    </parent>
+
+    <groupId>org.opendaylight.controller.thirdparty</groupId>
+    <artifactId>nagasena-rta</artifactId>
+    <packaging>bundle</packaging>
+
+    <properties>
+        <archive>nagasena-rta-0000.0002.0035.0.jar</archive>
+    </properties>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>truezip-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>extract</id>
+                        <goals>
+                            <goal>copy</goal>
+                        </goals>
+                        <phase>compile</phase>
+                        <configuration>
+                            <fileset>
+                                <!-- note how the archive is treated as a normal file directory -->
+                                <directory>${archive}</directory>
+                                <outputDirectory>${project.build.outputDirectory}</outputDirectory>
+                                <includes>
+                                    <include>**</include>
+                                </includes>
+                            </fileset>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>   
+            <plugin>   
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <extensions>true</extensions>
+                <configuration>
+                    <instructions>
+                        <Bundle-Name>${project.groupId}.${project.artifactId}</Bundle-Name>
+                    </instructions>
+                </configuration>
+            </plugin>   
+        </plugins>
+    </build>
+</project>
+
diff --git a/third-party/org.openexi/nagasena/nagasena-0000.0002.0035.0.jar b/third-party/org.openexi/nagasena/nagasena-0000.0002.0035.0.jar
new file mode 100644 (file)
index 0000000..c566f27
Binary files /dev/null and b/third-party/org.openexi/nagasena/nagasena-0000.0002.0035.0.jar differ
diff --git a/third-party/org.openexi/nagasena/pom.xml b/third-party/org.openexi/nagasena/pom.xml
new file mode 100644 (file)
index 0000000..297f15f
--- /dev/null
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- vi: set et smarttab sw=4 tabstop=4: -->
+<!--
+ Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
+
+ This program and the accompanying materials are made available under the
+ terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ and is available at http://www.eclipse.org/legal/epl-v10.html
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.opendaylight.controller.thirdparty</groupId>
+        <artifactId>org.openexi</artifactId>
+        <version>0000.0002.0035.0-SNAPSHOT</version>
+    </parent>
+
+    <groupId>org.opendaylight.controller.thirdparty</groupId>
+    <artifactId>nagasena</artifactId>
+    <packaging>bundle</packaging>
+
+    <properties>
+        <archive>nagasena-0000.0002.0035.0.jar</archive>
+    </properties>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>truezip-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>extract</id>
+                        <goals>
+                            <goal>copy</goal>
+                        </goals>
+                        <phase>compile</phase>
+                        <configuration>
+                            <fileset>
+                                <!-- note how the archive is treated as a normal file directory -->
+                                <directory>${archive}</directory>
+                                <outputDirectory>${project.build.outputDirectory}</outputDirectory>
+                                <includes>
+                                    <include>**</include>
+                                </includes>
+                            </fileset>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>   
+            <plugin>   
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <extensions>true</extensions>
+                <configuration>
+                    <instructions>
+                        <Bundle-Name>${project.groupId}.${project.artifactId}</Bundle-Name>
+                    </instructions>
+                </configuration>
+            </plugin>   
+        </plugins>
+    </build>
+</project>
+
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/allclasses-frame.html b/third-party/org.openexi/nagasena/src/main/resources/doc/allclasses-frame.html
new file mode 100644 (file)
index 0000000..11f9ed5
--- /dev/null
@@ -0,0 +1,85 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:58 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+All Classes\r
+</TITLE>\r
+\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">\r
+\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white">\r
+<FONT size="+1" CLASS="FrameHeadingFont">\r
+<B>All Classes</B></FONT>\r
+<BR>\r
+\r
+<TABLE BORDER="0" WIDTH="100%" SUMMARY="">\r
+<TR>\r
+<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="org/openexi/proc/common/AlignmentType.html" title="enum in org.openexi.proc.common" target="classFrame">AlignmentType</A>\r
+<BR>\r
+<A HREF="org/openexi/sax/BinaryDataHandler.html" title="interface in org.openexi.sax" target="classFrame"><I>BinaryDataHandler</I></A>\r
+<BR>\r
+<A HREF="org/openexi/proc/io/BinaryDataSink.html" title="interface in org.openexi.proc.io" target="classFrame"><I>BinaryDataSink</I></A>\r
+<BR>\r
+<A HREF="org/openexi/proc/common/BinaryDataSource.html" title="class in org.openexi.proc.common" target="classFrame">BinaryDataSource</A>\r
+<BR>\r
+<A HREF="org/openexi/proc/io/CharacterBuffer.html" title="class in org.openexi.proc.io" target="classFrame">CharacterBuffer</A>\r
+<BR>\r
+<A HREF="org/openexi/schema/Characters.html" title="class in org.openexi.schema" target="classFrame">Characters</A>\r
+<BR>\r
+<A HREF="org/openexi/schema/EmptySchema.html" title="class in org.openexi.schema" target="classFrame">EmptySchema</A>\r
+<BR>\r
+<A HREF="org/openexi/scomp/EntityResolverEx.html" title="interface in org.openexi.scomp" target="classFrame"><I>EntityResolverEx</I></A>\r
+<BR>\r
+<A HREF="org/openexi/proc/common/EventDescription.html" title="interface in org.openexi.proc.common" target="classFrame"><I>EventDescription</I></A>\r
+<BR>\r
+<A HREF="org/openexi/proc/common/EventType.html" title="class in org.openexi.proc.common" target="classFrame">EventType</A>\r
+<BR>\r
+<A HREF="org/openexi/proc/EXIDecoder.html" title="class in org.openexi.proc" target="classFrame">EXIDecoder</A>\r
+<BR>\r
+<A HREF="org/openexi/proc/common/EXIOptions.html" title="class in org.openexi.proc.common" target="classFrame">EXIOptions</A>\r
+<BR>\r
+<A HREF="org/openexi/sax/EXIReader.html" title="class in org.openexi.sax" target="classFrame">EXIReader</A>\r
+<BR>\r
+<A HREF="org/openexi/schema/EXISchema.html" title="class in org.openexi.schema" target="classFrame">EXISchema</A>\r
+<BR>\r
+<A HREF="org/openexi/scomp/EXISchemaFactory.html" title="class in org.openexi.scomp" target="classFrame">EXISchemaFactory</A>\r
+<BR>\r
+<A HREF="org/openexi/scomp/EXISchemaFactoryErrorHandler.html" title="interface in org.openexi.scomp" target="classFrame"><I>EXISchemaFactoryErrorHandler</I></A>\r
+<BR>\r
+<A HREF="org/openexi/scomp/EXISchemaFactoryException.html" title="class in org.openexi.scomp" target="classFrame">EXISchemaFactoryException</A>\r
+<BR>\r
+<A HREF="org/openexi/scomp/EXISchemaReader.html" title="class in org.openexi.scomp" target="classFrame">EXISchemaReader</A>\r
+<BR>\r
+<A HREF="org/openexi/proc/EXISchemaResolver.html" title="interface in org.openexi.proc" target="classFrame"><I>EXISchemaResolver</I></A>\r
+<BR>\r
+<A HREF="org/openexi/proc/grammars/GrammarCache.html" title="class in org.openexi.proc.grammars" target="classFrame">GrammarCache</A>\r
+<BR>\r
+<A HREF="org/openexi/proc/common/GrammarOptions.html" title="class in org.openexi.proc.common" target="classFrame">GrammarOptions</A>\r
+<BR>\r
+<A HREF="org/openexi/proc/HeaderOptionsOutputType.html" title="enum in org.openexi.proc" target="classFrame">HeaderOptionsOutputType</A>\r
+<BR>\r
+<A HREF="org/openexi/proc/common/QName.html" title="class in org.openexi.proc.common" target="classFrame">QName</A>\r
+<BR>\r
+<A HREF="org/openexi/sax/ReaderSupport.html" title="class in org.openexi.sax" target="classFrame">ReaderSupport</A>\r
+<BR>\r
+<A HREF="org/openexi/sax/SAXTransmogrifier.html" title="interface in org.openexi.sax" target="classFrame"><I>SAXTransmogrifier</I></A>\r
+<BR>\r
+<A HREF="org/openexi/proc/io/Scanner.html" title="class in org.openexi.proc.io" target="classFrame">Scanner</A>\r
+<BR>\r
+<A HREF="org/openexi/sax/Transmogrifier.html" title="class in org.openexi.sax" target="classFrame">Transmogrifier</A>\r
+<BR>\r
+<A HREF="org/openexi/sax/TransmogrifierException.html" title="class in org.openexi.sax" target="classFrame">TransmogrifierException</A>\r
+<BR>\r
+</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/allclasses-noframe.html b/third-party/org.openexi/nagasena/src/main/resources/doc/allclasses-noframe.html
new file mode 100644 (file)
index 0000000..8f32ae6
--- /dev/null
@@ -0,0 +1,85 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:59 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+All Classes\r
+</TITLE>\r
+\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">\r
+\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white">\r
+<FONT size="+1" CLASS="FrameHeadingFont">\r
+<B>All Classes</B></FONT>\r
+<BR>\r
+\r
+<TABLE BORDER="0" WIDTH="100%" SUMMARY="">\r
+<TR>\r
+<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="org/openexi/proc/common/AlignmentType.html" title="enum in org.openexi.proc.common">AlignmentType</A>\r
+<BR>\r
+<A HREF="org/openexi/sax/BinaryDataHandler.html" title="interface in org.openexi.sax"><I>BinaryDataHandler</I></A>\r
+<BR>\r
+<A HREF="org/openexi/proc/io/BinaryDataSink.html" title="interface in org.openexi.proc.io"><I>BinaryDataSink</I></A>\r
+<BR>\r
+<A HREF="org/openexi/proc/common/BinaryDataSource.html" title="class in org.openexi.proc.common">BinaryDataSource</A>\r
+<BR>\r
+<A HREF="org/openexi/proc/io/CharacterBuffer.html" title="class in org.openexi.proc.io">CharacterBuffer</A>\r
+<BR>\r
+<A HREF="org/openexi/schema/Characters.html" title="class in org.openexi.schema">Characters</A>\r
+<BR>\r
+<A HREF="org/openexi/schema/EmptySchema.html" title="class in org.openexi.schema">EmptySchema</A>\r
+<BR>\r
+<A HREF="org/openexi/scomp/EntityResolverEx.html" title="interface in org.openexi.scomp"><I>EntityResolverEx</I></A>\r
+<BR>\r
+<A HREF="org/openexi/proc/common/EventDescription.html" title="interface in org.openexi.proc.common"><I>EventDescription</I></A>\r
+<BR>\r
+<A HREF="org/openexi/proc/common/EventType.html" title="class in org.openexi.proc.common">EventType</A>\r
+<BR>\r
+<A HREF="org/openexi/proc/EXIDecoder.html" title="class in org.openexi.proc">EXIDecoder</A>\r
+<BR>\r
+<A HREF="org/openexi/proc/common/EXIOptions.html" title="class in org.openexi.proc.common">EXIOptions</A>\r
+<BR>\r
+<A HREF="org/openexi/sax/EXIReader.html" title="class in org.openexi.sax">EXIReader</A>\r
+<BR>\r
+<A HREF="org/openexi/schema/EXISchema.html" title="class in org.openexi.schema">EXISchema</A>\r
+<BR>\r
+<A HREF="org/openexi/scomp/EXISchemaFactory.html" title="class in org.openexi.scomp">EXISchemaFactory</A>\r
+<BR>\r
+<A HREF="org/openexi/scomp/EXISchemaFactoryErrorHandler.html" title="interface in org.openexi.scomp"><I>EXISchemaFactoryErrorHandler</I></A>\r
+<BR>\r
+<A HREF="org/openexi/scomp/EXISchemaFactoryException.html" title="class in org.openexi.scomp">EXISchemaFactoryException</A>\r
+<BR>\r
+<A HREF="org/openexi/scomp/EXISchemaReader.html" title="class in org.openexi.scomp">EXISchemaReader</A>\r
+<BR>\r
+<A HREF="org/openexi/proc/EXISchemaResolver.html" title="interface in org.openexi.proc"><I>EXISchemaResolver</I></A>\r
+<BR>\r
+<A HREF="org/openexi/proc/grammars/GrammarCache.html" title="class in org.openexi.proc.grammars">GrammarCache</A>\r
+<BR>\r
+<A HREF="org/openexi/proc/common/GrammarOptions.html" title="class in org.openexi.proc.common">GrammarOptions</A>\r
+<BR>\r
+<A HREF="org/openexi/proc/HeaderOptionsOutputType.html" title="enum in org.openexi.proc">HeaderOptionsOutputType</A>\r
+<BR>\r
+<A HREF="org/openexi/proc/common/QName.html" title="class in org.openexi.proc.common">QName</A>\r
+<BR>\r
+<A HREF="org/openexi/sax/ReaderSupport.html" title="class in org.openexi.sax">ReaderSupport</A>\r
+<BR>\r
+<A HREF="org/openexi/sax/SAXTransmogrifier.html" title="interface in org.openexi.sax"><I>SAXTransmogrifier</I></A>\r
+<BR>\r
+<A HREF="org/openexi/proc/io/Scanner.html" title="class in org.openexi.proc.io">Scanner</A>\r
+<BR>\r
+<A HREF="org/openexi/sax/Transmogrifier.html" title="class in org.openexi.sax">Transmogrifier</A>\r
+<BR>\r
+<A HREF="org/openexi/sax/TransmogrifierException.html" title="class in org.openexi.sax">TransmogrifierException</A>\r
+<BR>\r
+</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/constant-values.html b/third-party/org.openexi/nagasena/src/main/resources/doc/constant-values.html
new file mode 100644 (file)
index 0000000..6c4e3d2
--- /dev/null
@@ -0,0 +1,553 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:58 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+Constant Field Values\r
+</TITLE>\r
+\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">\r
+\r
+<SCRIPT type="text/javascript">\r
+function windowTitle()\r
+{\r
+    parent.document.title="Constant Field Values";\r
+}\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+</NOSCRIPT>\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white" onload="windowTitle();">\r
+\r
+\r
+<!-- ========= START OF TOP NAVBAR ======= -->\r
+<A NAME="navbar_top"><!-- --></A>\r
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_top_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;PREV&nbsp;\r
+&nbsp;NEXT</FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="index.html?constant-values.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="constant-values.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_top"></A>\r
+<!-- ========= END OF TOP NAVBAR ========= -->\r
+\r
+<HR>\r
+<CENTER>\r
+<H1>\r
+Constant Field Values</H1>\r
+</CENTER>\r
+<HR SIZE="4" NOSHADE>\r
+<B>Contents</B><UL>\r
+<LI><A HREF="#org.openexi">org.openexi.*</A>\r
+</UL>\r
+\r
+<A NAME="org.openexi"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left"><FONT SIZE="+2">\r
+org.openexi.*</FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<P>\r
+\r
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">\r
+<TH ALIGN="left" COLSPAN="3">org.openexi.proc.common.<A HREF="org/openexi/proc/common/EventDescription.html" title="interface in org.openexi.proc.common">EventDescription</A></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.proc.common.EventDescription.EVENT_AT"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;byte</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/proc/common/EventDescription.html#EVENT_AT">EVENT_AT</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>3</CODE></TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.proc.common.EventDescription.EVENT_BLOB"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;byte</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/proc/common/EventDescription.html#EVENT_BLOB">EVENT_BLOB</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>13</CODE></TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.proc.common.EventDescription.EVENT_CH"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;byte</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/proc/common/EventDescription.html#EVENT_CH">EVENT_CH</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>6</CODE></TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.proc.common.EventDescription.EVENT_CM"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;byte</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/proc/common/EventDescription.html#EVENT_CM">EVENT_CM</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>10</CODE></TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.proc.common.EventDescription.EVENT_DTD"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;byte</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/proc/common/EventDescription.html#EVENT_DTD">EVENT_DTD</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>12</CODE></TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.proc.common.EventDescription.EVENT_ED"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;byte</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/proc/common/EventDescription.html#EVENT_ED">EVENT_ED</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>1</CODE></TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.proc.common.EventDescription.EVENT_EE"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;byte</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/proc/common/EventDescription.html#EVENT_EE">EVENT_EE</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>7</CODE></TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.proc.common.EventDescription.EVENT_ER"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;byte</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/proc/common/EventDescription.html#EVENT_ER">EVENT_ER</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>11</CODE></TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.proc.common.EventDescription.EVENT_NL"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;byte</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/proc/common/EventDescription.html#EVENT_NL">EVENT_NL</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>5</CODE></TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.proc.common.EventDescription.EVENT_NS"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;byte</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/proc/common/EventDescription.html#EVENT_NS">EVENT_NS</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>8</CODE></TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.proc.common.EventDescription.EVENT_PI"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;byte</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/proc/common/EventDescription.html#EVENT_PI">EVENT_PI</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>9</CODE></TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.proc.common.EventDescription.EVENT_SD"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;byte</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/proc/common/EventDescription.html#EVENT_SD">EVENT_SD</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>0</CODE></TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.proc.common.EventDescription.EVENT_SE"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;byte</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/proc/common/EventDescription.html#EVENT_SE">EVENT_SE</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>2</CODE></TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.proc.common.EventDescription.EVENT_TP"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;byte</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/proc/common/EventDescription.html#EVENT_TP">EVENT_TP</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>4</CODE></TD>\r
+</TR>\r
+</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+\r
+<P>\r
+\r
+<P>\r
+\r
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">\r
+<TH ALIGN="left" COLSPAN="3">org.openexi.proc.common.<A HREF="org/openexi/proc/common/EventType.html" title="class in org.openexi.proc.common">EventType</A></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.proc.common.EventType.ITEM_AT"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;byte</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/proc/common/EventType.html#ITEM_AT">ITEM_AT</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>12</CODE></TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.proc.common.EventType.ITEM_AT_WC_ANY_UNTYPED"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;byte</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/proc/common/EventType.html#ITEM_AT_WC_ANY_UNTYPED">ITEM_AT_WC_ANY_UNTYPED</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>8</CODE></TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.proc.common.EventType.ITEM_CH"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;byte</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/proc/common/EventType.html#ITEM_CH">ITEM_CH</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>3</CODE></TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.proc.common.EventType.ITEM_CM"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;byte</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/proc/common/EventType.html#ITEM_CM">ITEM_CM</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>1</CODE></TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.proc.common.EventType.ITEM_DTD"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;byte</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/proc/common/EventType.html#ITEM_DTD">ITEM_DTD</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>10</CODE></TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.proc.common.EventType.ITEM_ED"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;byte</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/proc/common/EventType.html#ITEM_ED">ITEM_ED</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>4</CODE></TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.proc.common.EventType.ITEM_EE"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;byte</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/proc/common/EventType.html#ITEM_EE">ITEM_EE</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>9</CODE></TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.proc.common.EventType.ITEM_ER"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;byte</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/proc/common/EventType.html#ITEM_ER">ITEM_ER</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>2</CODE></TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.proc.common.EventType.ITEM_NS"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;byte</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/proc/common/EventType.html#ITEM_NS">ITEM_NS</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>7</CODE></TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.proc.common.EventType.ITEM_PI"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;byte</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/proc/common/EventType.html#ITEM_PI">ITEM_PI</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>0</CODE></TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.proc.common.EventType.ITEM_SC"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;byte</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/proc/common/EventType.html#ITEM_SC">ITEM_SC</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>6</CODE></TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.proc.common.EventType.ITEM_SCHEMA_AT"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;byte</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/proc/common/EventType.html#ITEM_SCHEMA_AT">ITEM_SCHEMA_AT</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>16</CODE></TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.proc.common.EventType.ITEM_SCHEMA_AT_INVALID_VALUE"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;byte</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/proc/common/EventType.html#ITEM_SCHEMA_AT_INVALID_VALUE">ITEM_SCHEMA_AT_INVALID_VALUE</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>23</CODE></TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.proc.common.EventType.ITEM_SCHEMA_AT_WC_ANY"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;byte</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/proc/common/EventType.html#ITEM_SCHEMA_AT_WC_ANY">ITEM_SCHEMA_AT_WC_ANY</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>17</CODE></TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.proc.common.EventType.ITEM_SCHEMA_AT_WC_NS"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;byte</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/proc/common/EventType.html#ITEM_SCHEMA_AT_WC_NS">ITEM_SCHEMA_AT_WC_NS</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>18</CODE></TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.proc.common.EventType.ITEM_SCHEMA_CH"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;byte</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/proc/common/EventType.html#ITEM_SCHEMA_CH">ITEM_SCHEMA_CH</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>19</CODE></TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.proc.common.EventType.ITEM_SCHEMA_CH_MIXED"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;byte</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/proc/common/EventType.html#ITEM_SCHEMA_CH_MIXED">ITEM_SCHEMA_CH_MIXED</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>20</CODE></TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.proc.common.EventType.ITEM_SCHEMA_NIL"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;byte</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/proc/common/EventType.html#ITEM_SCHEMA_NIL">ITEM_SCHEMA_NIL</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>21</CODE></TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.proc.common.EventType.ITEM_SCHEMA_TYPE"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;byte</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/proc/common/EventType.html#ITEM_SCHEMA_TYPE">ITEM_SCHEMA_TYPE</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>22</CODE></TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.proc.common.EventType.ITEM_SCHEMA_WC_ANY"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;byte</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/proc/common/EventType.html#ITEM_SCHEMA_WC_ANY">ITEM_SCHEMA_WC_ANY</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>14</CODE></TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.proc.common.EventType.ITEM_SCHEMA_WC_NS"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;byte</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/proc/common/EventType.html#ITEM_SCHEMA_WC_NS">ITEM_SCHEMA_WC_NS</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>15</CODE></TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.proc.common.EventType.ITEM_SD"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;byte</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/proc/common/EventType.html#ITEM_SD">ITEM_SD</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>13</CODE></TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.proc.common.EventType.ITEM_SE"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;byte</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/proc/common/EventType.html#ITEM_SE">ITEM_SE</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>11</CODE></TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.proc.common.EventType.ITEM_SE_WC"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;byte</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/proc/common/EventType.html#ITEM_SE_WC">ITEM_SE_WC</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>5</CODE></TD>\r
+</TR>\r
+</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+\r
+<P>\r
+\r
+<P>\r
+\r
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">\r
+<TH ALIGN="left" COLSPAN="3">org.openexi.proc.common.<A HREF="org/openexi/proc/common/GrammarOptions.html" title="class in org.openexi.proc.common">GrammarOptions</A></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.proc.common.GrammarOptions.DEFAULT_OPTIONS"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;short</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/proc/common/GrammarOptions.html#DEFAULT_OPTIONS">DEFAULT_OPTIONS</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>2</CODE></TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.proc.common.GrammarOptions.OPTIONS_UNUSED"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;short</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/proc/common/GrammarOptions.html#OPTIONS_UNUSED">OPTIONS_UNUSED</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>0</CODE></TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.proc.common.GrammarOptions.STRICT_OPTIONS"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;short</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/proc/common/GrammarOptions.html#STRICT_OPTIONS">STRICT_OPTIONS</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>1</CODE></TD>\r
+</TR>\r
+</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+\r
+<P>\r
+\r
+<P>\r
+\r
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">\r
+<TH ALIGN="left" COLSPAN="3">org.openexi.proc.io.<A HREF="org/openexi/proc/io/CharacterBuffer.html" title="class in org.openexi.proc.io">CharacterBuffer</A></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.proc.io.CharacterBuffer.BUFSIZE_DEFAULT"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/proc/io/CharacterBuffer.html#BUFSIZE_DEFAULT">BUFSIZE_DEFAULT</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>4096</CODE></TD>\r
+</TR>\r
+</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+\r
+<P>\r
+\r
+<P>\r
+\r
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">\r
+<TH ALIGN="left" COLSPAN="3">org.openexi.sax.<A HREF="org/openexi/sax/TransmogrifierException.html" title="class in org.openexi.sax">TransmogrifierException</A></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.sax.TransmogrifierException.PREFIX_BOUND_TO_ANOTHER_NAMESPACE"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/sax/TransmogrifierException.html#PREFIX_BOUND_TO_ANOTHER_NAMESPACE">PREFIX_BOUND_TO_ANOTHER_NAMESPACE</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>11</CODE></TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.sax.TransmogrifierException.PREFIX_NOT_BOUND"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/sax/TransmogrifierException.html#PREFIX_NOT_BOUND">PREFIX_NOT_BOUND</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>10</CODE></TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.sax.TransmogrifierException.SAX_ERROR"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/sax/TransmogrifierException.html#SAX_ERROR">SAX_ERROR</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>6</CODE></TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.sax.TransmogrifierException.SCRIBER_ERROR"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/sax/TransmogrifierException.html#SCRIBER_ERROR">SCRIBER_ERROR</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>12</CODE></TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.sax.TransmogrifierException.UNEXPECTED_ATTR"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/sax/TransmogrifierException.html#UNEXPECTED_ATTR">UNEXPECTED_ATTR</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>2</CODE></TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.sax.TransmogrifierException.UNEXPECTED_BINARY_VALUE"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/sax/TransmogrifierException.html#UNEXPECTED_BINARY_VALUE">UNEXPECTED_BINARY_VALUE</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>4</CODE></TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.sax.TransmogrifierException.UNEXPECTED_CHARS"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/sax/TransmogrifierException.html#UNEXPECTED_CHARS">UNEXPECTED_CHARS</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>3</CODE></TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.sax.TransmogrifierException.UNEXPECTED_ED"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/sax/TransmogrifierException.html#UNEXPECTED_ED">UNEXPECTED_ED</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>8</CODE></TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.sax.TransmogrifierException.UNEXPECTED_ELEM"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/sax/TransmogrifierException.html#UNEXPECTED_ELEM">UNEXPECTED_ELEM</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>1</CODE></TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.sax.TransmogrifierException.UNEXPECTED_END_ELEM"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/sax/TransmogrifierException.html#UNEXPECTED_END_ELEM">UNEXPECTED_END_ELEM</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>7</CODE></TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.sax.TransmogrifierException.UNEXPECTED_SD"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/sax/TransmogrifierException.html#UNEXPECTED_SD">UNEXPECTED_SD</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>9</CODE></TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.sax.TransmogrifierException.UNHANDLED_SAXPARSER_FEATURE"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/sax/TransmogrifierException.html#UNHANDLED_SAXPARSER_FEATURE">UNHANDLED_SAXPARSER_FEATURE</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>5</CODE></TD>\r
+</TR>\r
+</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+\r
+<P>\r
+\r
+<P>\r
+\r
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">\r
+<TH ALIGN="left" COLSPAN="3">org.openexi.scomp.<A HREF="org/openexi/scomp/EXISchemaFactoryException.html" title="class in org.openexi.scomp">EXISchemaFactoryException</A></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<A NAME="org.openexi.scomp.EXISchemaFactoryException.XMLSCHEMA_ERROR"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">\r
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>\r
+<TD ALIGN="left"><CODE><A HREF="org/openexi/scomp/EXISchemaFactoryException.html#XMLSCHEMA_ERROR">XMLSCHEMA_ERROR</A></CODE></TD>\r
+<TD ALIGN="right"><CODE>1002</CODE></TD>\r
+</TR>\r
+</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+\r
+<P>\r
+\r
+<P>\r
+<HR>\r
+\r
+\r
+<!-- ======= START OF BOTTOM NAVBAR ====== -->\r
+<A NAME="navbar_bottom"><!-- --></A>\r
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_bottom_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;PREV&nbsp;\r
+&nbsp;NEXT</FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="index.html?constant-values.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="constant-values.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_bottom"></A>\r
+<!-- ======== END OF BOTTOM NAVBAR ======= -->\r
+\r
+<HR>\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/deprecated-list.html b/third-party/org.openexi/nagasena/src/main/resources/doc/deprecated-list.html
new file mode 100644 (file)
index 0000000..60ad3ed
--- /dev/null
@@ -0,0 +1,141 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:58 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+Deprecated List\r
+</TITLE>\r
+\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">\r
+\r
+<SCRIPT type="text/javascript">\r
+function windowTitle()\r
+{\r
+    parent.document.title="Deprecated List";\r
+}\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+</NOSCRIPT>\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white" onload="windowTitle();">\r
+\r
+\r
+<!-- ========= START OF TOP NAVBAR ======= -->\r
+<A NAME="navbar_top"><!-- --></A>\r
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_top_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Deprecated</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;PREV&nbsp;\r
+&nbsp;NEXT</FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="index.html?deprecated-list.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="deprecated-list.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_top"></A>\r
+<!-- ========= END OF TOP NAVBAR ========= -->\r
+\r
+<HR>\r
+<CENTER>\r
+<H2>\r
+<B>Deprecated API</B></H2>\r
+</CENTER>\r
+<HR SIZE="4" NOSHADE>\r
+<B>Contents</B><UL>\r
+</UL>\r
+\r
+<HR>\r
+\r
+\r
+<!-- ======= START OF BOTTOM NAVBAR ====== -->\r
+<A NAME="navbar_bottom"><!-- --></A>\r
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_bottom_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Deprecated</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;PREV&nbsp;\r
+&nbsp;NEXT</FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="index.html?deprecated-list.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="deprecated-list.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_bottom"></A>\r
+<!-- ======== END OF BOTTOM NAVBAR ======= -->\r
+\r
+<HR>\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/help-doc.html b/third-party/org.openexi/nagasena/src/main/resources/doc/help-doc.html
new file mode 100644 (file)
index 0000000..81850ce
--- /dev/null
@@ -0,0 +1,214 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:59 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+API Help\r
+</TITLE>\r
+\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">\r
+\r
+<SCRIPT type="text/javascript">\r
+function windowTitle()\r
+{\r
+    parent.document.title="API Help";\r
+}\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+</NOSCRIPT>\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white" onload="windowTitle();">\r
+\r
+\r
+<!-- ========= START OF TOP NAVBAR ======= -->\r
+<A NAME="navbar_top"><!-- --></A>\r
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_top_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Help</B></FONT>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;PREV&nbsp;\r
+&nbsp;NEXT</FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="index.html?help-doc.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="help-doc.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_top"></A>\r
+<!-- ========= END OF TOP NAVBAR ========= -->\r
+\r
+<HR>\r
+<CENTER>\r
+<H1>\r
+How This API Document Is Organized</H1>\r
+</CENTER>\r
+This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.<H3>\r
+Overview</H3>\r
+<BLOCKQUOTE>\r
+\r
+<P>\r
+The <A HREF="overview-summary.html">Overview</A> page is the front page of this API document and provides a list of all packages with a summary for each.  This page can also contain an overall description of the set of packages.</BLOCKQUOTE>\r
+<H3>\r
+Package</H3>\r
+<BLOCKQUOTE>\r
+\r
+<P>\r
+Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain four categories:<UL>\r
+<LI>Interfaces (italic)<LI>Classes<LI>Enums<LI>Exceptions<LI>Errors<LI>Annotation Types</UL>\r
+</BLOCKQUOTE>\r
+<H3>\r
+Class/Interface</H3>\r
+<BLOCKQUOTE>\r
+\r
+<P>\r
+Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:<UL>\r
+<LI>Class inheritance diagram<LI>Direct Subclasses<LI>All Known Subinterfaces<LI>All Known Implementing Classes<LI>Class/interface declaration<LI>Class/interface description\r
+<P>\r
+<LI>Nested Class Summary<LI>Field Summary<LI>Constructor Summary<LI>Method Summary\r
+<P>\r
+<LI>Field Detail<LI>Constructor Detail<LI>Method Detail</UL>\r
+Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.</BLOCKQUOTE>\r
+</BLOCKQUOTE>\r
+<H3>\r
+Annotation Type</H3>\r
+<BLOCKQUOTE>\r
+\r
+<P>\r
+Each annotation type has its own separate page with the following sections:<UL>\r
+<LI>Annotation Type declaration<LI>Annotation Type description<LI>Required Element Summary<LI>Optional Element Summary<LI>Element Detail</UL>\r
+</BLOCKQUOTE>\r
+</BLOCKQUOTE>\r
+<H3>\r
+Enum</H3>\r
+<BLOCKQUOTE>\r
+\r
+<P>\r
+Each enum has its own separate page with the following sections:<UL>\r
+<LI>Enum declaration<LI>Enum description<LI>Enum Constant Summary<LI>Enum Constant Detail</UL>\r
+</BLOCKQUOTE>\r
+<H3>\r
+Tree (Class Hierarchy)</H3>\r
+<BLOCKQUOTE>\r
+There is a <A HREF="overview-tree.html">Class Hierarchy</A> page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with <code>java.lang.Object</code>. The interfaces do not inherit from <code>java.lang.Object</code>.<UL>\r
+<LI>When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.<LI>When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.</UL>\r
+</BLOCKQUOTE>\r
+<H3>\r
+Deprecated API</H3>\r
+<BLOCKQUOTE>\r
+The <A HREF="deprecated-list.html">Deprecated API</A> page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.</BLOCKQUOTE>\r
+<H3>\r
+Index</H3>\r
+<BLOCKQUOTE>\r
+The <A HREF="index-all.html">Index</A> contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.</BLOCKQUOTE>\r
+<H3>\r
+Prev/Next</H3>\r
+These links take you to the next or previous class, interface, package, or related page.<H3>\r
+Frames/No Frames</H3>\r
+These links show and hide the HTML frames.  All pages are available with or without frames.\r
+<P>\r
+<H3>\r
+Serialized Form</H3>\r
+Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.\r
+<P>\r
+<H3>\r
+Constant Field Values</H3>\r
+The <a href="constant-values.html">Constant Field Values</a> page lists the static final fields and their values.\r
+<P>\r
+<FONT SIZE="-1">\r
+<EM>\r
+This help file applies to API documentation generated using the standard doclet.</EM>\r
+</FONT>\r
+<BR>\r
+<HR>\r
+\r
+\r
+<!-- ======= START OF BOTTOM NAVBAR ====== -->\r
+<A NAME="navbar_bottom"><!-- --></A>\r
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_bottom_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Help</B></FONT>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;PREV&nbsp;\r
+&nbsp;NEXT</FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="index.html?help-doc.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="help-doc.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_bottom"></A>\r
+<!-- ======== END OF BOTTOM NAVBAR ======= -->\r
+\r
+<HR>\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/index-all.html b/third-party/org.openexi/nagasena/src/main/resources/doc/index-all.html
new file mode 100644 (file)
index 0000000..3fc6b29
--- /dev/null
@@ -0,0 +1,970 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:58 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+Index\r
+</TITLE>\r
+\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="./stylesheet.css" TITLE="Style">\r
+\r
+<SCRIPT type="text/javascript">\r
+function windowTitle()\r
+{\r
+    parent.document.title="Index";\r
+}\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+</NOSCRIPT>\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white" onload="windowTitle();">\r
+\r
+\r
+<!-- ========= START OF TOP NAVBAR ======= -->\r
+<A NAME="navbar_top"><!-- --></A>\r
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_top_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="./overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="./overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="./deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="./help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;PREV&nbsp;\r
+&nbsp;NEXT</FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="./index.html?index-all.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="index-all.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="./allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="./allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_top"></A>\r
+<!-- ========= END OF TOP NAVBAR ========= -->\r
+\r
+<A HREF="#_A_">A</A> <A HREF="#_B_">B</A> <A HREF="#_C_">C</A> <A HREF="#_D_">D</A> <A HREF="#_E_">E</A> <A HREF="#_F_">F</A> <A HREF="#_G_">G</A> <A HREF="#_H_">H</A> <A HREF="#_I_">I</A> <A HREF="#_L_">L</A> <A HREF="#_M_">M</A> <A HREF="#_N_">N</A> <A HREF="#_O_">O</A> <A HREF="#_P_">P</A> <A HREF="#_Q_">Q</A> <A HREF="#_R_">R</A> <A HREF="#_S_">S</A> <A HREF="#_T_">T</A> <A HREF="#_U_">U</A> <A HREF="#_V_">V</A> <A HREF="#_W_">W</A> <A HREF="#_X_">X</A> <A HREF="#___">_</A> <HR>\r
+<A NAME="_A_"><!-- --></A><H2>\r
+<B>A</B></H2>\r
+<DL>\r
+<DT><A HREF="./org/openexi/proc/common/GrammarOptions.html#addCM(short)"><B>addCM(short)</B></A> - \r
+Static method in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/GrammarOptions.html" title="class in org.openexi.proc.common">GrammarOptions</A>\r
+<DD>Sets Preserve Comments to <i>true</i>.\r
+<DT><A HREF="./org/openexi/proc/common/GrammarOptions.html#addDTD(short)"><B>addDTD(short)</B></A> - \r
+Static method in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/GrammarOptions.html" title="class in org.openexi.proc.common">GrammarOptions</A>\r
+<DD>Sets Preserve Document Type Definition to <i>true</i>.\r
+<DT><A HREF="./org/openexi/proc/common/GrammarOptions.html#addNS(short)"><B>addNS(short)</B></A> - \r
+Static method in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/GrammarOptions.html" title="class in org.openexi.proc.common">GrammarOptions</A>\r
+<DD>Sets Preserve Namespaces to <i>true</i>.\r
+<DT><A HREF="./org/openexi/proc/common/GrammarOptions.html#addPI(short)"><B>addPI(short)</B></A> - \r
+Static method in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/GrammarOptions.html" title="class in org.openexi.proc.common">GrammarOptions</A>\r
+<DD>Sets Preserve Processing Instructions to <i>true</i>.\r
+<DT><A HREF="./org/openexi/proc/common/AlignmentType.html" title="enum in org.openexi.proc.common"><B>AlignmentType</B></A> - Enum in <A HREF="./org/openexi/proc/common/package-summary.html">org.openexi.proc.common</A><DD>AlignmentType represents one of the following bit alignment 
+ styles so as to provide an extra degree of control over the
+ way information is stored in EXI format.<DT><A HREF="./org/openexi/schema/EXISchema.html#ancestryIds"><B>ancestryIds</B></A> - \r
+Variable in class org.openexi.schema.<A HREF="./org/openexi/schema/EXISchema.html" title="class in org.openexi.schema">EXISchema</A>\r
+<DD>&nbsp;\r
+</DL>\r
+<HR>\r
+<A NAME="_B_"><!-- --></A><H2>\r
+<B>B</B></H2>\r
+<DL>\r
+<DT><A HREF="./org/openexi/sax/BinaryDataHandler.html#binaryData(byte[], int, int, org.openexi.proc.io.BinaryDataSink)"><B>binaryData(byte[], int, int, BinaryDataSink)</B></A> - \r
+Method in interface org.openexi.sax.<A HREF="./org/openexi/sax/BinaryDataHandler.html" title="interface in org.openexi.sax">BinaryDataHandler</A>\r
+<DD>Writes a binary value where the schema expects a binary value.\r
+<DT><A HREF="./org/openexi/sax/BinaryDataHandler.html" title="interface in org.openexi.sax"><B>BinaryDataHandler</B></A> - Interface in <A HREF="./org/openexi/sax/package-summary.html">org.openexi.sax</A><DD>&nbsp;<DT><A HREF="./org/openexi/proc/io/BinaryDataSink.html" title="interface in org.openexi.proc.io"><B>BinaryDataSink</B></A> - Interface in <A HREF="./org/openexi/proc/io/package-summary.html">org.openexi.proc.io</A><DD>BinaryDataSink represents a sink that accepts successive chunks of binary data.<DT><A HREF="./org/openexi/proc/common/BinaryDataSource.html" title="class in org.openexi.proc.common"><B>BinaryDataSource</B></A> - Class in <A HREF="./org/openexi/proc/common/package-summary.html">org.openexi.proc.common</A><DD>&nbsp;<DT><A HREF="./org/openexi/proc/common/BinaryDataSource.html#BinaryDataSource()"><B>BinaryDataSource()</B></A> - \r
+Constructor for class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/BinaryDataSource.html" title="class in org.openexi.proc.common">BinaryDataSource</A>\r
+<DD>&nbsp;\r
+<DT><A HREF="./org/openexi/proc/io/CharacterBuffer.html#BUFSIZE_DEFAULT"><B>BUFSIZE_DEFAULT</B></A> - \r
+Static variable in class org.openexi.proc.io.<A HREF="./org/openexi/proc/io/CharacterBuffer.html" title="class in org.openexi.proc.io">CharacterBuffer</A>\r
+<DD>&nbsp;\r
+</DL>\r
+<HR>\r
+<A NAME="_C_"><!-- --></A><H2>\r
+<B>C</B></H2>\r
+<DL>\r
+<DT><A HREF="./org/openexi/proc/io/CharacterBuffer.html" title="class in org.openexi.proc.io"><B>CharacterBuffer</B></A> - Class in <A HREF="./org/openexi/proc/io/package-summary.html">org.openexi.proc.io</A><DD>&nbsp;<DT><A HREF="./org/openexi/proc/io/CharacterBuffer.html#CharacterBuffer(int)"><B>CharacterBuffer(int)</B></A> - \r
+Constructor for class org.openexi.proc.io.<A HREF="./org/openexi/proc/io/CharacterBuffer.html" title="class in org.openexi.proc.io">CharacterBuffer</A>\r
+<DD>&nbsp;\r
+<DT><A HREF="./org/openexi/schema/Characters.html" title="class in org.openexi.schema"><B>Characters</B></A> - Class in <A HREF="./org/openexi/schema/package-summary.html">org.openexi.schema</A><DD>&nbsp;<DT><A HREF="./org/openexi/schema/Characters.html#Characters(char[], int, int, boolean)"><B>Characters(char[], int, int, boolean)</B></A> - \r
+Constructor for class org.openexi.schema.<A HREF="./org/openexi/schema/Characters.html" title="class in org.openexi.schema">Characters</A>\r
+<DD>&nbsp;\r
+<DT><A HREF="./org/openexi/schema/Characters.html#characters"><B>characters</B></A> - \r
+Variable in class org.openexi.schema.<A HREF="./org/openexi/schema/Characters.html" title="class in org.openexi.schema">Characters</A>\r
+<DD>&nbsp;\r
+<DT><A HREF="./org/openexi/schema/Characters.html#CHARACTERS_EMPTY"><B>CHARACTERS_EMPTY</B></A> - \r
+Static variable in class org.openexi.schema.<A HREF="./org/openexi/schema/Characters.html" title="class in org.openexi.schema">Characters</A>\r
+<DD>&nbsp;\r
+<DT><A HREF="./org/openexi/proc/io/Scanner.html#closeInputStream()"><B>closeInputStream()</B></A> - \r
+Method in class org.openexi.proc.io.<A HREF="./org/openexi/proc/io/Scanner.html" title="class in org.openexi.proc.io">Scanner</A>\r
+<DD>Close the input stream.\r
+<DT><A HREF="./org/openexi/scomp/EXISchemaFactory.html#compile(org.xml.sax.InputSource)"><B>compile(InputSource)</B></A> - \r
+Method in class org.openexi.scomp.<A HREF="./org/openexi/scomp/EXISchemaFactory.html" title="class in org.openexi.scomp">EXISchemaFactory</A>\r
+<DD>Compile an XML Schema Document into an EXISchema.\r
+</DL>\r
+<HR>\r
+<A NAME="_D_"><!-- --></A><H2>\r
+<B>D</B></H2>\r
+<DL>\r
+<DT><A HREF="./org/openexi/proc/common/GrammarOptions.html#DEFAULT_OPTIONS"><B>DEFAULT_OPTIONS</B></A> - \r
+Static variable in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/GrammarOptions.html" title="class in org.openexi.proc.common">GrammarOptions</A>\r
+<DD>Indicates that undeclared elements and attributes will be 
+ processed when the XML stream is encoded and decoded.\r
+</DL>\r
+<HR>\r
+<A NAME="_E_"><!-- --></A><H2>\r
+<B>E</B></H2>\r
+<DL>\r
+<DT><A HREF="./org/openexi/schema/EmptySchema.html" title="class in org.openexi.schema"><B>EmptySchema</B></A> - Class in <A HREF="./org/openexi/schema/package-summary.html">org.openexi.schema</A><DD>EmptySchema provides an EXISchema that supports all datatypes inherent
+ in XML Schema such as xsd:int and xsd:dateTime, but with no 
+ user-specific definitions.<DT><A HREF="./org/openexi/sax/Transmogrifier.html#encode(org.xml.sax.InputSource)"><B>encode(InputSource)</B></A> - \r
+Method in class org.openexi.sax.<A HREF="./org/openexi/sax/Transmogrifier.html" title="class in org.openexi.sax">Transmogrifier</A>\r
+<DD>Parses XML input source and converts it to an EXI stream.\r
+<DT><A HREF="./org/openexi/sax/BinaryDataHandler.html#endBinaryData(org.openexi.proc.io.BinaryDataSink)"><B>endBinaryData(BinaryDataSink)</B></A> - \r
+Method in interface org.openexi.sax.<A HREF="./org/openexi/sax/BinaryDataHandler.html" title="interface in org.openexi.sax">BinaryDataHandler</A>\r
+<DD>Mark the end of a binary value.\r
+<DT><A HREF="./org/openexi/scomp/EntityResolverEx.html" title="interface in org.openexi.scomp"><B>EntityResolverEx</B></A> - Interface in <A HREF="./org/openexi/scomp/package-summary.html">org.openexi.scomp</A><DD>Extended SAX EntityResolver interface for resolving entities and
+ schema documents.<DT><A HREF="./org/openexi/proc/common/QName.html#equals(java.lang.Object)"><B>equals(Object)</B></A> - \r
+Method in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/QName.html" title="class in org.openexi.proc.common">QName</A>\r
+<DD>&nbsp;\r
+<DT><A HREF="./org/openexi/schema/Characters.html#equals(java.lang.Object)"><B>equals(Object)</B></A> - \r
+Method in class org.openexi.schema.<A HREF="./org/openexi/schema/Characters.html" title="class in org.openexi.schema">Characters</A>\r
+<DD>&nbsp;\r
+<DT><A HREF="./org/openexi/scomp/EXISchemaFactoryErrorHandler.html#error(org.openexi.scomp.EXISchemaFactoryException)"><B>error(EXISchemaFactoryException)</B></A> - \r
+Method in interface org.openexi.scomp.<A HREF="./org/openexi/scomp/EXISchemaFactoryErrorHandler.html" title="interface in org.openexi.scomp">EXISchemaFactoryErrorHandler</A>\r
+<DD>Report an error found during schema processing.\r
+<DT><A HREF="./org/openexi/proc/common/EventDescription.html#EVENT_AT"><B>EVENT_AT</B></A> - \r
+Static variable in interface org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EventDescription.html" title="interface in org.openexi.proc.common">EventDescription</A>\r
+<DD>Attribute event.\r
+<DT><A HREF="./org/openexi/proc/common/EventDescription.html#EVENT_BLOB"><B>EVENT_BLOB</B></A> - \r
+Static variable in interface org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EventDescription.html" title="interface in org.openexi.proc.common">EventDescription</A>\r
+<DD>BLOB event (content of an element).\r
+<DT><A HREF="./org/openexi/proc/common/EventDescription.html#EVENT_CH"><B>EVENT_CH</B></A> - \r
+Static variable in interface org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EventDescription.html" title="interface in org.openexi.proc.common">EventDescription</A>\r
+<DD>Character event (content of an element).\r
+<DT><A HREF="./org/openexi/proc/common/EventDescription.html#EVENT_CM"><B>EVENT_CM</B></A> - \r
+Static variable in interface org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EventDescription.html" title="interface in org.openexi.proc.common">EventDescription</A>\r
+<DD>Comment event.\r
+<DT><A HREF="./org/openexi/proc/common/EventDescription.html#EVENT_DTD"><B>EVENT_DTD</B></A> - \r
+Static variable in interface org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EventDescription.html" title="interface in org.openexi.proc.common">EventDescription</A>\r
+<DD>Document Type Definition event.\r
+<DT><A HREF="./org/openexi/proc/common/EventDescription.html#EVENT_ED"><B>EVENT_ED</B></A> - \r
+Static variable in interface org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EventDescription.html" title="interface in org.openexi.proc.common">EventDescription</A>\r
+<DD>End Document event.\r
+<DT><A HREF="./org/openexi/proc/common/EventDescription.html#EVENT_EE"><B>EVENT_EE</B></A> - \r
+Static variable in interface org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EventDescription.html" title="interface in org.openexi.proc.common">EventDescription</A>\r
+<DD>End Element event.\r
+<DT><A HREF="./org/openexi/proc/common/EventDescription.html#EVENT_ER"><B>EVENT_ER</B></A> - \r
+Static variable in interface org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EventDescription.html" title="interface in org.openexi.proc.common">EventDescription</A>\r
+<DD>Entity Reference event.\r
+<DT><A HREF="./org/openexi/proc/common/EventDescription.html#EVENT_NL"><B>EVENT_NL</B></A> - \r
+Static variable in interface org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EventDescription.html" title="interface in org.openexi.proc.common">EventDescription</A>\r
+<DD>Attribute <i>xsi:nil</i>.\r
+<DT><A HREF="./org/openexi/proc/common/EventDescription.html#EVENT_NS"><B>EVENT_NS</B></A> - \r
+Static variable in interface org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EventDescription.html" title="interface in org.openexi.proc.common">EventDescription</A>\r
+<DD>Namespace declaration event.\r
+<DT><A HREF="./org/openexi/proc/common/EventDescription.html#EVENT_PI"><B>EVENT_PI</B></A> - \r
+Static variable in interface org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EventDescription.html" title="interface in org.openexi.proc.common">EventDescription</A>\r
+<DD>Processing Instruction event.\r
+<DT><A HREF="./org/openexi/proc/common/EventDescription.html#EVENT_SD"><B>EVENT_SD</B></A> - \r
+Static variable in interface org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EventDescription.html" title="interface in org.openexi.proc.common">EventDescription</A>\r
+<DD>Start Document event.\r
+<DT><A HREF="./org/openexi/proc/common/EventDescription.html#EVENT_SE"><B>EVENT_SE</B></A> - \r
+Static variable in interface org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EventDescription.html" title="interface in org.openexi.proc.common">EventDescription</A>\r
+<DD>Start Element event.\r
+<DT><A HREF="./org/openexi/proc/common/EventDescription.html#EVENT_TP"><B>EVENT_TP</B></A> - \r
+Static variable in interface org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EventDescription.html" title="interface in org.openexi.proc.common">EventDescription</A>\r
+<DD>Attribute <i>xsi:type</i>.\r
+<DT><A HREF="./org/openexi/proc/common/EventDescription.html" title="interface in org.openexi.proc.common"><B>EventDescription</B></A> - Interface in <A HREF="./org/openexi/proc/common/package-summary.html">org.openexi.proc.common</A><DD>EventDescription provides accessors to the current EXI event data
+ during the decode process.<DT><A HREF="./org/openexi/proc/common/EventType.html" title="class in org.openexi.proc.common"><B>EventType</B></A> - Class in <A HREF="./org/openexi/proc/common/package-summary.html">org.openexi.proc.common</A><DD>EventType denotes terminal symbols of grammar productions  
+ defined in the EXI 1.0 specification.<DT><A HREF="./org/openexi/proc/EXIDecoder.html" title="class in org.openexi.proc"><B>EXIDecoder</B></A> - Class in <A HREF="./org/openexi/proc/package-summary.html">org.openexi.proc</A><DD>EXIDecoder provides methods to configure and 
+ instantiate a <A HREF="./org/openexi/proc/io/Scanner.html" title="class in org.openexi.proc.io"><CODE>Scanner</CODE></A> object
+ you can use to parse the contents of an EXI stream.<DT><A HREF="./org/openexi/proc/EXIDecoder.html#EXIDecoder()"><B>EXIDecoder()</B></A> - \r
+Constructor for class org.openexi.proc.<A HREF="./org/openexi/proc/EXIDecoder.html" title="class in org.openexi.proc">EXIDecoder</A>\r
+<DD>Creates an instance of EXIDecoder with the default inflator 
+ buffer size of 8192 bytes.\r
+<DT><A HREF="./org/openexi/proc/EXIDecoder.html#EXIDecoder(int, boolean)"><B>EXIDecoder(int, boolean)</B></A> - \r
+Constructor for class org.openexi.proc.<A HREF="./org/openexi/proc/EXIDecoder.html" title="class in org.openexi.proc">EXIDecoder</A>\r
+<DD>Creates an instance of EXIDecoder with the specified inflator buffer 
+ size.\r
+<DT><A HREF="./org/openexi/proc/common/EXIOptions.html" title="class in org.openexi.proc.common"><B>EXIOptions</B></A> - Class in <A HREF="./org/openexi/proc/common/package-summary.html">org.openexi.proc.common</A><DD>EXIOptions provides accessors for values associated with
+ EXI options in the EXI header of an EXI stream.<DT><A HREF="./org/openexi/sax/EXIReader.html" title="class in org.openexi.sax"><B>EXIReader</B></A> - Class in <A HREF="./org/openexi/sax/package-summary.html">org.openexi.sax</A><DD>EXIReader implements the SAX XMLReader to provide a convenient and 
+ familiar interface for decoding an EXI stream.<DT><A HREF="./org/openexi/sax/EXIReader.html#EXIReader()"><B>EXIReader()</B></A> - \r
+Constructor for class org.openexi.sax.<A HREF="./org/openexi/sax/EXIReader.html" title="class in org.openexi.sax">EXIReader</A>\r
+<DD>&nbsp;\r
+<DT><A HREF="./org/openexi/schema/EXISchema.html" title="class in org.openexi.schema"><B>EXISchema</B></A> - Class in <A HREF="./org/openexi/schema/package-summary.html">org.openexi.schema</A><DD>EXISchema provides methods to read and write compiled EXI schemas.<DT><A HREF="./org/openexi/scomp/EXISchemaFactory.html" title="class in org.openexi.scomp"><B>EXISchemaFactory</B></A> - Class in <A HREF="./org/openexi/scomp/package-summary.html">org.openexi.scomp</A><DD>EXISchemaFactory compiles XML Schema into an EXISchema instance.<DT><A HREF="./org/openexi/scomp/EXISchemaFactory.html#EXISchemaFactory()"><B>EXISchemaFactory()</B></A> - \r
+Constructor for class org.openexi.scomp.<A HREF="./org/openexi/scomp/EXISchemaFactory.html" title="class in org.openexi.scomp">EXISchemaFactory</A>\r
+<DD>&nbsp;\r
+<DT><A HREF="./org/openexi/scomp/EXISchemaFactoryErrorHandler.html" title="interface in org.openexi.scomp"><B>EXISchemaFactoryErrorHandler</B></A> - Interface in <A HREF="./org/openexi/scomp/package-summary.html">org.openexi.scomp</A><DD>This interface reports exceptions from EXISchemaFactory during schema 
+ processing.<DT><A HREF="./org/openexi/scomp/EXISchemaFactoryException.html" title="class in org.openexi.scomp"><B>EXISchemaFactoryException</B></A> - Exception in <A HREF="./org/openexi/scomp/package-summary.html">org.openexi.scomp</A><DD>Any errors encountered during schema compilation are communicated to
+ an application as EXISchemaFactoryException objects.<DT><A HREF="./org/openexi/scomp/EXISchemaReader.html" title="class in org.openexi.scomp"><B>EXISchemaReader</B></A> - Class in <A HREF="./org/openexi/scomp/package-summary.html">org.openexi.scomp</A><DD>EXISchemaReader parses EXI-encoded EXI Grammar into an EXISchema.<DT><A HREF="./org/openexi/scomp/EXISchemaReader.html#EXISchemaReader()"><B>EXISchemaReader()</B></A> - \r
+Constructor for class org.openexi.scomp.<A HREF="./org/openexi/scomp/EXISchemaReader.html" title="class in org.openexi.scomp">EXISchemaReader</A>\r
+<DD>&nbsp;\r
+<DT><A HREF="./org/openexi/proc/EXISchemaResolver.html" title="interface in org.openexi.proc"><B>EXISchemaResolver</B></A> - Interface in <A HREF="./org/openexi/proc/package-summary.html">org.openexi.proc</A><DD>Developers have the option of implementing the EXISchemaResolver interface
+ to help EXIReader and EXIDecoder locate the correct grammar cache for parsing 
+ an EXI stream.</DL>\r
+<HR>\r
+<A NAME="_F_"><!-- --></A><H2>\r
+<B>F</B></H2>\r
+<DL>\r
+<DT><A HREF="./org/openexi/scomp/EXISchemaFactoryErrorHandler.html#fatalError(org.openexi.scomp.EXISchemaFactoryException)"><B>fatalError(EXISchemaFactoryException)</B></A> - \r
+Method in interface org.openexi.scomp.<A HREF="./org/openexi/scomp/EXISchemaFactoryErrorHandler.html" title="interface in org.openexi.scomp">EXISchemaFactoryErrorHandler</A>\r
+<DD>Report a fatal error found during schema processing.\r
+</DL>\r
+<HR>\r
+<A NAME="_G_"><!-- --></A><H2>\r
+<B>G</B></H2>\r
+<DL>\r
+<DT><A HREF="./org/openexi/proc/common/EXIOptions.html#getAlignmentType()"><B>getAlignmentType()</B></A> - \r
+Method in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EXIOptions.html" title="class in org.openexi.proc.common">EXIOptions</A>\r
+<DD>Get the bit alignment setting.\r
+<DT><A HREF="./org/openexi/proc/common/EventDescription.html#getBinaryDataSource()"><B>getBinaryDataSource()</B></A> - \r
+Method in interface org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EventDescription.html" title="interface in org.openexi.proc.common">EventDescription</A>\r
+<DD>Gets the value of an EVENT_BLOB.\r
+<DT><A HREF="./org/openexi/proc/common/EXIOptions.html#getBlockSize()"><B>getBlockSize()</B></A> - \r
+Method in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EXIOptions.html" title="class in org.openexi.proc.common">EXIOptions</A>\r
+<DD>Returns the number of element and attribute values that are read and processed
+ as a group.\r
+<DT><A HREF="./org/openexi/proc/common/BinaryDataSource.html#getByteArray()"><B>getByteArray()</B></A> - \r
+Method in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/BinaryDataSource.html" title="class in org.openexi.proc.common">BinaryDataSource</A>\r
+<DD>&nbsp;\r
+<DT><A HREF="./org/openexi/proc/common/EventDescription.html#getCharacters()"><B>getCharacters()</B></A> - \r
+Method in interface org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EventDescription.html" title="interface in org.openexi.proc.common">EventDescription</A>\r
+<DD>Gets the value of an EVENT_CH, 
+ Attribute (EVENT_AT, EVENT_NL, EVENT_TP), EVENT_CM,
+ EVENT_DTD or EVENT_PI event.\r
+<DT><A HREF="./org/openexi/sax/TransmogrifierException.html#getCode()"><B>getCode()</B></A> - \r
+Method in exception org.openexi.sax.<A HREF="./org/openexi/sax/TransmogrifierException.html" title="class in org.openexi.sax">TransmogrifierException</A>\r
+<DD>Returns a code that represents the type of the exception.\r
+<DT><A HREF="./org/openexi/scomp/EXISchemaFactoryException.html#getCode()"><B>getCode()</B></A> - \r
+Method in exception org.openexi.scomp.<A HREF="./org/openexi/scomp/EXISchemaFactoryException.html" title="class in org.openexi.scomp">EXISchemaFactoryException</A>\r
+<DD>Returns a code that represents the type of the exception.\r
+<DT><A HREF="./org/openexi/sax/ReaderSupport.html#getContentHandler()"><B>getContentHandler()</B></A> - \r
+Method in class org.openexi.sax.<A HREF="./org/openexi/sax/ReaderSupport.html" title="class in org.openexi.sax">ReaderSupport</A>\r
+<DD>Get the SAX content handler currently in use.\r
+<DT><A HREF="./org/openexi/proc/common/EXIOptions.html#getDatatypeRepresentationMap()"><B>getDatatypeRepresentationMap()</B></A> - \r
+Method in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EXIOptions.html" title="class in org.openexi.proc.common">EXIOptions</A>\r
+<DD>Returns an array of qualified names that map XMLSchema datatypes to 
+ non-standard equivalents in EXI.\r
+<DT><A HREF="./org/openexi/proc/common/EXIOptions.html#getDatatypeRepresentationMapBindingsCount()"><B>getDatatypeRepresentationMapBindingsCount()</B></A> - \r
+Method in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EXIOptions.html" title="class in org.openexi.proc.common">EXIOptions</A>\r
+<DD>Returns the number of Datatype Representation Map QName pairs.\r
+<DT><A HREF="./org/openexi/proc/common/EventDescription.html#getEventKind()"><B>getEventKind()</B></A> - \r
+Method in interface org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EventDescription.html" title="interface in org.openexi.proc.common">EventDescription</A>\r
+<DD>Gets the event kind of which instance data this EventDescription is describing.\r
+<DT><A HREF="./org/openexi/proc/common/EventDescription.html#getEventType()"><B>getEventType()</B></A> - \r
+Method in interface org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EventDescription.html" title="interface in org.openexi.proc.common">EventDescription</A>\r
+<DD>Returns the EventType from which this event is derived.\r
+<DT><A HREF="./org/openexi/sax/TransmogrifierException.html#getException()"><B>getException()</B></A> - \r
+Method in exception org.openexi.sax.<A HREF="./org/openexi/sax/TransmogrifierException.html" title="class in org.openexi.sax">TransmogrifierException</A>\r
+<DD>Returns an Exception object.\r
+<DT><A HREF="./org/openexi/scomp/EXISchemaFactoryException.html#getException()"><B>getException()</B></A> - \r
+Method in exception org.openexi.scomp.<A HREF="./org/openexi/scomp/EXISchemaFactoryException.html" title="class in org.openexi.scomp">EXISchemaFactoryException</A>\r
+<DD>Returns an Exception object.\r
+<DT><A HREF="./org/openexi/proc/grammars/GrammarCache.html#getEXISchema()"><B>getEXISchema()</B></A> - \r
+Method in class org.openexi.proc.grammars.<A HREF="./org/openexi/proc/grammars/GrammarCache.html" title="class in org.openexi.proc.grammars">GrammarCache</A>\r
+<DD>Gets the compiled EXI Schema.\r
+<DT><A HREF="./org/openexi/schema/EmptySchema.html#getEXISchema()"><B>getEXISchema()</B></A> - \r
+Static method in class org.openexi.schema.<A HREF="./org/openexi/schema/EmptySchema.html" title="class in org.openexi.schema">EmptySchema</A>\r
+<DD>Returns an EXISchema that supports all datatypes inherent in XML Schema.\r
+<DT><A HREF="./org/openexi/sax/EXIReader.html#getFeature(java.lang.String)"><B>getFeature(String)</B></A> - \r
+Method in class org.openexi.sax.<A HREF="./org/openexi/sax/EXIReader.html" title="class in org.openexi.sax">EXIReader</A>\r
+<DD>Get features for the SAX parser.\r
+<DT><A HREF="./org/openexi/sax/SAXTransmogrifier.html#getGrammarCache()"><B>getGrammarCache()</B></A> - \r
+Method in interface org.openexi.sax.<A HREF="./org/openexi/sax/SAXTransmogrifier.html" title="interface in org.openexi.sax">SAXTransmogrifier</A>\r
+<DD>Returns the GrammarCache that is in use by this SAXTransmogrifier.\r
+<DT><A HREF="./org/openexi/sax/Transmogrifier.html#getGrammarCache()"><B>getGrammarCache()</B></A> - \r
+Method in class org.openexi.sax.<A HREF="./org/openexi/sax/Transmogrifier.html" title="class in org.openexi.sax">Transmogrifier</A>\r
+<DD>Returns the GrammarCache that was previously set.\r
+<DT><A HREF="./org/openexi/proc/io/Scanner.html#getHeaderOptions()"><B>getHeaderOptions()</B></A> - \r
+Method in class org.openexi.proc.io.<A HREF="./org/openexi/proc/io/Scanner.html" title="class in org.openexi.proc.io">Scanner</A>\r
+<DD>Returns the EXI Header options from the header of the
+ EXI stream, if present.\r
+<DT><A HREF="./org/openexi/proc/common/BinaryDataSource.html#getLength()"><B>getLength()</B></A> - \r
+Method in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/BinaryDataSource.html" title="class in org.openexi.proc.common">BinaryDataSource</A>\r
+<DD>&nbsp;\r
+<DT><A HREF="./org/openexi/sax/TransmogrifierException.html#getLocator()"><B>getLocator()</B></A> - \r
+Method in exception org.openexi.sax.<A HREF="./org/openexi/sax/TransmogrifierException.html" title="class in org.openexi.sax">TransmogrifierException</A>\r
+<DD>Returns the locator that is associated with this compilation error.\r
+<DT><A HREF="./org/openexi/scomp/EXISchemaFactoryException.html#getLocator()"><B>getLocator()</B></A> - \r
+Method in exception org.openexi.scomp.<A HREF="./org/openexi/scomp/EXISchemaFactoryException.html" title="class in org.openexi.scomp">EXISchemaFactoryException</A>\r
+<DD>Returns the locator that is associated with this compilation error.\r
+<DT><A HREF="./org/openexi/sax/TransmogrifierException.html#getMessage()"><B>getMessage()</B></A> - \r
+Method in exception org.openexi.sax.<A HREF="./org/openexi/sax/TransmogrifierException.html" title="class in org.openexi.sax">TransmogrifierException</A>\r
+<DD>Returns a message that describes the exception.\r
+<DT><A HREF="./org/openexi/scomp/EXISchemaFactoryException.html#getMessage()"><B>getMessage()</B></A> - \r
+Method in exception org.openexi.scomp.<A HREF="./org/openexi/scomp/EXISchemaFactoryException.html" title="class in org.openexi.scomp">EXISchemaFactoryException</A>\r
+<DD>Returns a message that describes the exception.\r
+<DT><A HREF="./org/openexi/proc/common/EventDescription.html#getName()"><B>getName()</B></A> - \r
+Method in interface org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EventDescription.html" title="interface in org.openexi.proc.common">EventDescription</A>\r
+<DD>Gets the name of the EXI event.\r
+<DT><A HREF="./org/openexi/proc/common/EventDescription.html#getPrefix()"><B>getPrefix()</B></A> - \r
+Method in interface org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EventDescription.html" title="interface in org.openexi.proc.common">EventDescription</A>\r
+<DD>Gets the namespace prefix of the event.\r
+<DT><A HREF="./org/openexi/proc/common/EXIOptions.html#getPreserveComments()"><B>getPreserveComments()</B></A> - \r
+Method in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EXIOptions.html" title="class in org.openexi.proc.common">EXIOptions</A>\r
+<DD>Returns whether comments are conserved in the EXI Stream.\r
+<DT><A HREF="./org/openexi/proc/common/EXIOptions.html#getPreserveDTD()"><B>getPreserveDTD()</B></A> - \r
+Method in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EXIOptions.html" title="class in org.openexi.proc.common">EXIOptions</A>\r
+<DD>Returns whether the document type definition is conserved in the EXI Stream.\r
+<DT><A HREF="./org/openexi/proc/common/EXIOptions.html#getPreserveLexicalValues()"><B>getPreserveLexicalValues()</B></A> - \r
+Method in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EXIOptions.html" title="class in org.openexi.proc.common">EXIOptions</A>\r
+<DD>Returns whether lexical values (literal strings) are preserved rather 
+ than the logical values of elements and attributes.\r
+<DT><A HREF="./org/openexi/proc/common/EXIOptions.html#getPreserveNS()"><B>getPreserveNS()</B></A> - \r
+Method in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EXIOptions.html" title="class in org.openexi.proc.common">EXIOptions</A>\r
+<DD>Returns whether the namespaces are preserved in the EXI stream.\r
+<DT><A HREF="./org/openexi/proc/common/EXIOptions.html#getPreservePIs()"><B>getPreservePIs()</B></A> - \r
+Method in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EXIOptions.html" title="class in org.openexi.proc.common">EXIOptions</A>\r
+<DD>Returns whether processing instructions are conserved in the EXI Stream.\r
+<DT><A HREF="./org/openexi/sax/EXIReader.html#getProperty(java.lang.String)"><B>getProperty(String)</B></A> - \r
+Method in class org.openexi.sax.<A HREF="./org/openexi/sax/EXIReader.html" title="class in org.openexi.sax">EXIReader</A>\r
+<DD>Use to retrieve the name of the lexical handler, currently the only
+ property recognized by this class.\r
+<DT><A HREF="./org/openexi/proc/common/BinaryDataSource.html#getRemainingBytesCount()"><B>getRemainingBytesCount()</B></A> - \r
+Method in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/BinaryDataSource.html" title="class in org.openexi.proc.common">BinaryDataSource</A>\r
+<DD>&nbsp;\r
+<DT><A HREF="./org/openexi/sax/Transmogrifier.html#getSAXTransmogrifier()"><B>getSAXTransmogrifier()</B></A> - \r
+Method in class org.openexi.sax.<A HREF="./org/openexi/sax/Transmogrifier.html" title="class in org.openexi.sax">Transmogrifier</A>\r
+<DD>Returns the SAXTransmogrifier, which implements both the ContentHandler
+ and LexicalHandler.\r
+<DT><A HREF="./org/openexi/proc/common/BinaryDataSource.html#getStartIndex()"><B>getStartIndex()</B></A> - \r
+Method in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/BinaryDataSource.html" title="class in org.openexi.proc.common">BinaryDataSource</A>\r
+<DD>&nbsp;\r
+<DT><A HREF="./org/openexi/proc/common/EventDescription.html#getURI()"><B>getURI()</B></A> - \r
+Method in interface org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EventDescription.html" title="interface in org.openexi.proc.common">EventDescription</A>\r
+<DD>Gets the URI of the EXI event.\r
+<DT><A HREF="./org/openexi/proc/common/EXIOptions.html#getValueMaxLength()"><B>getValueMaxLength()</B></A> - \r
+Method in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EXIOptions.html" title="class in org.openexi.proc.common">EXIOptions</A>\r
+<DD>Returns the maximum length in characters of strings that will be included
+ in the String Table.\r
+<DT><A HREF="./org/openexi/proc/common/EXIOptions.html#getValuePartitionCapacity()"><B>getValuePartitionCapacity()</B></A> - \r
+Method in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EXIOptions.html" title="class in org.openexi.proc.common">EXIOptions</A>\r
+<DD>Returns the maximum number of entries in the String Table.\r
+<DT><A HREF="./org/openexi/proc/grammars/GrammarCache.html" title="class in org.openexi.proc.grammars"><B>GrammarCache</B></A> - Class in <A HREF="./org/openexi/proc/grammars/package-summary.html">org.openexi.proc.grammars</A><DD>A GrammarCache object represents a set of EXI grammars used 
+ for processing EXI streams using specific grammar options.<DT><A HREF="./org/openexi/proc/grammars/GrammarCache.html#GrammarCache(org.openexi.schema.EXISchema)"><B>GrammarCache(EXISchema)</B></A> - \r
+Constructor for class org.openexi.proc.grammars.<A HREF="./org/openexi/proc/grammars/GrammarCache.html" title="class in org.openexi.proc.grammars">GrammarCache</A>\r
+<DD>Creates an instance of GrammarCache informed by a schema with default 
+ grammar options.\r
+<DT><A HREF="./org/openexi/proc/grammars/GrammarCache.html#GrammarCache(short)"><B>GrammarCache(short)</B></A> - \r
+Constructor for class org.openexi.proc.grammars.<A HREF="./org/openexi/proc/grammars/GrammarCache.html" title="class in org.openexi.proc.grammars">GrammarCache</A>\r
+<DD>Creates an instance of GrammarCache with the specified grammar options.\r
+<DT><A HREF="./org/openexi/proc/grammars/GrammarCache.html#GrammarCache(org.openexi.schema.EXISchema, short)"><B>GrammarCache(EXISchema, short)</B></A> - \r
+Constructor for class org.openexi.proc.grammars.<A HREF="./org/openexi/proc/grammars/GrammarCache.html" title="class in org.openexi.proc.grammars">GrammarCache</A>\r
+<DD>Creates an instance of GrammarCache informed by a schema with the
+ specified grammar options.\r
+<DT><A HREF="./org/openexi/proc/common/GrammarOptions.html" title="class in org.openexi.proc.common"><B>GrammarOptions</B></A> - Class in <A HREF="./org/openexi/proc/common/package-summary.html">org.openexi.proc.common</A><DD>GrammarOptions computes a short integer that represents settings in the EXI Grammar settings
+ that determine how an EXI file will be encoded or decoded.<DT><A HREF="./org/openexi/proc/grammars/GrammarCache.html#grammarOptions"><B>grammarOptions</B></A> - \r
+Variable in class org.openexi.proc.grammars.<A HREF="./org/openexi/proc/grammars/GrammarCache.html" title="class in org.openexi.proc.grammars">GrammarCache</A>\r
+<DD>Short integer that encapsulates <A HREF="./org/openexi/proc/common/GrammarOptions.html" title="class in org.openexi.proc.common"><CODE>GrammarOptions</CODE></A>
+ for the EXI stream.\r
+</DL>\r
+<HR>\r
+<A NAME="_H_"><!-- --></A><H2>\r
+<B>H</B></H2>\r
+<DL>\r
+<DT><A HREF="./org/openexi/proc/common/GrammarOptions.html#hasCM(short)"><B>hasCM(short)</B></A> - \r
+Static method in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/GrammarOptions.html" title="class in org.openexi.proc.common">GrammarOptions</A>\r
+<DD>Returns <i>true</i> if Preserve Comments is true.\r
+<DT><A HREF="./org/openexi/proc/common/GrammarOptions.html#hasDTD(short)"><B>hasDTD(short)</B></A> - \r
+Static method in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/GrammarOptions.html" title="class in org.openexi.proc.common">GrammarOptions</A>\r
+<DD>Returns <i>true</i> if Preserve Document Type Definition is true.\r
+<DT><A HREF="./org/openexi/schema/Characters.html#hashCode()"><B>hashCode()</B></A> - \r
+Method in class org.openexi.schema.<A HREF="./org/openexi/schema/Characters.html" title="class in org.openexi.schema">Characters</A>\r
+<DD>&nbsp;\r
+<DT><A HREF="./org/openexi/proc/common/BinaryDataSource.html#hasNext()"><B>hasNext()</B></A> - \r
+Method in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/BinaryDataSource.html" title="class in org.openexi.proc.common">BinaryDataSource</A>\r
+<DD>&nbsp;\r
+<DT><A HREF="./org/openexi/proc/common/GrammarOptions.html#hasNS(short)"><B>hasNS(short)</B></A> - \r
+Static method in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/GrammarOptions.html" title="class in org.openexi.proc.common">GrammarOptions</A>\r
+<DD>Returns <i>true</i> if Preserve Namespaces is true.\r
+<DT><A HREF="./org/openexi/proc/common/GrammarOptions.html#hasPI(short)"><B>hasPI(short)</B></A> - \r
+Static method in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/GrammarOptions.html" title="class in org.openexi.proc.common">GrammarOptions</A>\r
+<DD>Returns <i>true</i> if Preserve Processing Instructions is true.\r
+<DT><A HREF="./org/openexi/proc/HeaderOptionsOutputType.html" title="enum in org.openexi.proc"><B>HeaderOptionsOutputType</B></A> - Enum in <A HREF="./org/openexi/proc/package-summary.html">org.openexi.proc</A><DD>This enumeration provides three possible settings for header options output.</DL>\r
+<HR>\r
+<A NAME="_I_"><!-- --></A><H2>\r
+<B>I</B></H2>\r
+<DL>\r
+<DT><A HREF="./org/openexi/schema/Characters.html#indexOf(char)"><B>indexOf(char)</B></A> - \r
+Method in class org.openexi.schema.<A HREF="./org/openexi/schema/Characters.html" title="class in org.openexi.schema">Characters</A>\r
+<DD>&nbsp;\r
+<DT><A HREF="./org/openexi/proc/common/EXIOptions.html#isFragment()"><B>isFragment()</B></A> - \r
+Method in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EXIOptions.html" title="class in org.openexi.proc.common">EXIOptions</A>\r
+<DD>An XML fragment is a non-compliant XML document with multiple root
+ elements.\r
+<DT><A HREF="./org/openexi/proc/common/GrammarOptions.html#isPermitDeviation(short)"><B>isPermitDeviation(short)</B></A> - \r
+Static method in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/GrammarOptions.html" title="class in org.openexi.proc.common">GrammarOptions</A>\r
+<DD>Returns <i>true</i> if DEFAULT_OPTIONS is set to true.\r
+<DT><A HREF="./org/openexi/schema/EXISchema.html#isSimpleType(int)"><B>isSimpleType(int)</B></A> - \r
+Method in class org.openexi.schema.<A HREF="./org/openexi/schema/EXISchema.html" title="class in org.openexi.schema">EXISchema</A>\r
+<DD>&nbsp;\r
+<DT><A HREF="./org/openexi/proc/common/EXIOptions.html#isStrict()"><B>isStrict()</B></A> - \r
+Method in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EXIOptions.html" title="class in org.openexi.proc.common">EXIOptions</A>\r
+<DD>The Strict option applies to streams that have an associated XML Schema
+ and the data in the XML stream is 100% compliant with the schema.\r
+<DT><A HREF="./org/openexi/schema/Characters.html#isVolatile"><B>isVolatile</B></A> - \r
+Variable in class org.openexi.schema.<A HREF="./org/openexi/schema/Characters.html" title="class in org.openexi.schema">Characters</A>\r
+<DD>&nbsp;\r
+<DT><A HREF="./org/openexi/proc/common/EventType.html#ITEM_AT"><B>ITEM_AT</B></A> - \r
+Static variable in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EventType.html" title="class in org.openexi.proc.common">EventType</A>\r
+<DD>Event type for an Attribute learned by built-in element grammars 
+ from prior attribute occurrences.\r
+<DT><A HREF="./org/openexi/proc/common/EventType.html#ITEM_AT_WC_ANY_UNTYPED"><B>ITEM_AT_WC_ANY_UNTYPED</B></A> - \r
+Static variable in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EventType.html" title="class in org.openexi.proc.common">EventType</A>\r
+<DD>Wildcard event type for an Attribute where the attribute's defined 
+  datatype (if any) is disregarded.\r
+<DT><A HREF="./org/openexi/proc/common/EventType.html#ITEM_CH"><B>ITEM_CH</B></A> - \r
+Static variable in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EventType.html" title="class in org.openexi.proc.common">EventType</A>\r
+<DD>Event type for a Character event (character events store values as strings).\r
+<DT><A HREF="./org/openexi/proc/common/EventType.html#ITEM_CM"><B>ITEM_CM</B></A> - \r
+Static variable in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EventType.html" title="class in org.openexi.proc.common">EventType</A>\r
+<DD>Event type for a Comment.\r
+<DT><A HREF="./org/openexi/proc/common/EventType.html#ITEM_DTD"><B>ITEM_DTD</B></A> - \r
+Static variable in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EventType.html" title="class in org.openexi.proc.common">EventType</A>\r
+<DD>Event type for a Document Type Definition.\r
+<DT><A HREF="./org/openexi/proc/common/EventType.html#ITEM_ED"><B>ITEM_ED</B></A> - \r
+Static variable in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EventType.html" title="class in org.openexi.proc.common">EventType</A>\r
+<DD>Event type for End of Document.\r
+<DT><A HREF="./org/openexi/proc/common/EventType.html#ITEM_EE"><B>ITEM_EE</B></A> - \r
+Static variable in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EventType.html" title="class in org.openexi.proc.common">EventType</A>\r
+<DD>Event type for End of Element.\r
+<DT><A HREF="./org/openexi/proc/common/EventType.html#ITEM_ER"><B>ITEM_ER</B></A> - \r
+Static variable in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EventType.html" title="class in org.openexi.proc.common">EventType</A>\r
+<DD>Event type for an Entity Reference.\r
+<DT><A HREF="./org/openexi/proc/common/EventType.html#ITEM_NS"><B>ITEM_NS</B></A> - \r
+Static variable in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EventType.html" title="class in org.openexi.proc.common">EventType</A>\r
+<DD>Event type for a Namespace declaration.\r
+<DT><A HREF="./org/openexi/proc/common/EventType.html#ITEM_PI"><B>ITEM_PI</B></A> - \r
+Static variable in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EventType.html" title="class in org.openexi.proc.common">EventType</A>\r
+<DD>Event type for a Processing Instruction.\r
+<DT><A HREF="./org/openexi/proc/common/EventType.html#ITEM_SC"><B>ITEM_SC</B></A> - \r
+Static variable in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EventType.html" title="class in org.openexi.proc.common">EventType</A>\r
+<DD>Self-contained items are not supported in this release of OpenEXI.\r
+<DT><A HREF="./org/openexi/proc/common/EventType.html#ITEM_SCHEMA_AT"><B>ITEM_SCHEMA_AT</B></A> - \r
+Static variable in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EventType.html" title="class in org.openexi.proc.common">EventType</A>\r
+<DD>Event type for AttributeUse that matches an attribute event with
+ a valid value.\r
+<DT><A HREF="./org/openexi/proc/common/EventType.html#ITEM_SCHEMA_AT_INVALID_VALUE"><B>ITEM_SCHEMA_AT_INVALID_VALUE</B></A> - \r
+Static variable in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EventType.html" title="class in org.openexi.proc.common">EventType</A>\r
+<DD>Event type for AttributeUse that matches an attribute event with an 
+ invalid value.\r
+<DT><A HREF="./org/openexi/proc/common/EventType.html#ITEM_SCHEMA_AT_WC_ANY"><B>ITEM_SCHEMA_AT_WC_ANY</B></A> - \r
+Static variable in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EventType.html" title="class in org.openexi.proc.common">EventType</A>\r
+<DD>Attribute wildcard event type stemming from a schema, where the attribute's 
+ defined datatype (if any) is applied.\r
+<DT><A HREF="./org/openexi/proc/common/EventType.html#ITEM_SCHEMA_AT_WC_NS"><B>ITEM_SCHEMA_AT_WC_NS</B></A> - \r
+Static variable in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EventType.html" title="class in org.openexi.proc.common">EventType</A>\r
+<DD>Attribute wildcard event type, qualified with a specific namespace, stemming
+ from a schema where the attribute's defined datatype (if any) is applied.\r
+<DT><A HREF="./org/openexi/proc/common/EventType.html#ITEM_SCHEMA_CH"><B>ITEM_SCHEMA_CH</B></A> - \r
+Static variable in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EventType.html" title="class in org.openexi.proc.common">EventType</A>\r
+<DD>Event type for a defined Character event in an EXI stream processed
+ using a schema.\r
+<DT><A HREF="./org/openexi/proc/common/EventType.html#ITEM_SCHEMA_CH_MIXED"><B>ITEM_SCHEMA_CH_MIXED</B></A> - \r
+Static variable in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EventType.html" title="class in org.openexi.proc.common">EventType</A>\r
+<DD>Event type for a Character event that occurs in the context of an element 
+ defined so as to permit mixed content (mark up and data) in an EXI 
+ stream processed using a schema.\r
+<DT><A HREF="./org/openexi/proc/common/EventType.html#ITEM_SCHEMA_NIL"><B>ITEM_SCHEMA_NIL</B></A> - \r
+Static variable in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EventType.html" title="class in org.openexi.proc.common">EventType</A>\r
+<DD>Special Attribute that indicates the value of the associated element is
+ explicitly <i>nil</i> rather than an empty string.\r
+<DT><A HREF="./org/openexi/proc/common/EventType.html#ITEM_SCHEMA_TYPE"><B>ITEM_SCHEMA_TYPE</B></A> - \r
+Static variable in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EventType.html" title="class in org.openexi.proc.common">EventType</A>\r
+<DD>Special Attribute that describes a data type for the associated
+ element.\r
+<DT><A HREF="./org/openexi/proc/common/EventType.html#ITEM_SCHEMA_WC_ANY"><B>ITEM_SCHEMA_WC_ANY</B></A> - \r
+Static variable in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EventType.html" title="class in org.openexi.proc.common">EventType</A>\r
+<DD>Attribute wildcard event type stemming from a schema where the 
+ attribute's defined datatype (if any) is applied.\r
+<DT><A HREF="./org/openexi/proc/common/EventType.html#ITEM_SCHEMA_WC_NS"><B>ITEM_SCHEMA_WC_NS</B></A> - \r
+Static variable in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EventType.html" title="class in org.openexi.proc.common">EventType</A>\r
+<DD>Event type for an element defined in a namespace in an EXI stream
+ processed using a schema.\r
+<DT><A HREF="./org/openexi/proc/common/EventType.html#ITEM_SD"><B>ITEM_SD</B></A> - \r
+Static variable in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EventType.html" title="class in org.openexi.proc.common">EventType</A>\r
+<DD>Event type for Start Document.\r
+<DT><A HREF="./org/openexi/proc/common/EventType.html#ITEM_SE"><B>ITEM_SE</B></A> - \r
+Static variable in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EventType.html" title="class in org.openexi.proc.common">EventType</A>\r
+<DD>Event type for Start Element.\r
+<DT><A HREF="./org/openexi/proc/common/EventType.html#ITEM_SE_WC"><B>ITEM_SE_WC</B></A> - \r
+Static variable in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EventType.html" title="class in org.openexi.proc.common">EventType</A>\r
+<DD>Wildcard event type for an element.\r
+</DL>\r
+<HR>\r
+<A NAME="_L_"><!-- --></A><H2>\r
+<B>L</B></H2>\r
+<DL>\r
+<DT><A HREF="./org/openexi/schema/Characters.html#length"><B>length</B></A> - \r
+Variable in class org.openexi.schema.<A HREF="./org/openexi/schema/Characters.html" title="class in org.openexi.schema">Characters</A>\r
+<DD>&nbsp;\r
+<DT><A HREF="./org/openexi/proc/common/QName.html#localName"><B>localName</B></A> - \r
+Variable in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/QName.html" title="class in org.openexi.proc.common">QName</A>\r
+<DD>Local name of the datatype.\r
+</DL>\r
+<HR>\r
+<A NAME="_M_"><!-- --></A><H2>\r
+<B>M</B></H2>\r
+<DL>\r
+<DT><A HREF="./org/openexi/schema/Characters.html#makeString()"><B>makeString()</B></A> - \r
+Method in class org.openexi.schema.<A HREF="./org/openexi/schema/Characters.html" title="class in org.openexi.schema">Characters</A>\r
+<DD>&nbsp;\r
+</DL>\r
+<HR>\r
+<A NAME="_N_"><!-- --></A><H2>\r
+<B>N</B></H2>\r
+<DL>\r
+<DT><A HREF="./org/openexi/proc/common/EventType.html#name"><B>name</B></A> - \r
+Variable in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EventType.html" title="class in org.openexi.proc.common">EventType</A>\r
+<DD>Local name of event type definition.\r
+<DT><A HREF="./org/openexi/proc/common/QName.html#namespaceName"><B>namespaceName</B></A> - \r
+Variable in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/QName.html" title="class in org.openexi.proc.common">QName</A>\r
+<DD>If  namespaceName is <i>null</i>, this indicates a failure of
+ namespace-prefix binding.\r
+<DT><A HREF="./org/openexi/proc/common/BinaryDataSource.html#next()"><B>next()</B></A> - \r
+Method in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/BinaryDataSource.html" title="class in org.openexi.proc.common">BinaryDataSource</A>\r
+<DD>&nbsp;\r
+<DT><A HREF="./org/openexi/proc/io/Scanner.html#nextEvent()"><B>nextEvent()</B></A> - \r
+Method in class org.openexi.proc.io.<A HREF="./org/openexi/proc/io/Scanner.html" title="class in org.openexi.proc.io">Scanner</A>\r
+<DD>Gets the next event from the EXI stream.\r
+</DL>\r
+<HR>\r
+<A NAME="_O_"><!-- --></A><H2>\r
+<B>O</B></H2>\r
+<DL>\r
+<DT><A HREF="./org/openexi/proc/common/GrammarOptions.html#OPTIONS_UNUSED"><B>OPTIONS_UNUSED</B></A> - \r
+Static variable in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/GrammarOptions.html" title="class in org.openexi.proc.common">GrammarOptions</A>\r
+<DD>OPTIONS_UNUSED is an internal value.\r
+<DT><A HREF="./org/openexi/proc/package-summary.html"><B>org.openexi.proc</B></A> - package org.openexi.proc<DD>\r
+<tr valign="top" cellpadding="3" border="0">\r
+\r
+The Proc (Processor) package contains the EXIDecoder, which is used to convert EXI streams to XML format.<DT><A HREF="./org/openexi/proc/common/package-summary.html"><B>org.openexi.proc.common</B></A> - package org.openexi.proc.common<DD>\r
+<tr valign="top" cellpadding="3" border="0">\r
+\r
+The common package contains classes, interfaces, and enumerators that define the vocabulary used to describe EXI streams (events, options, alignment, and character string values).<DT><A HREF="./org/openexi/proc/grammars/package-summary.html"><B>org.openexi.proc.grammars</B></A> - package org.openexi.proc.grammars<DD>\r
+<tr valign="top" cellpadding="3" border="0">\r
+\r
+The grammars package contains the GrammarCache, which combines an XML Schema Definition with EXI grammar options to create an EXI Schema.<DT><A HREF="./org/openexi/proc/io/package-summary.html"><B>org.openexi.proc.io</B></A> - package org.openexi.proc.io<DD>\r
+<tr valign="top" cellpadding="3" border="0">\r
+\r
+The IO package contains the Scanner, which is used by <code>EXIDecoder</code> to read and interpret EXI streams.<DT><A HREF="./org/openexi/sax/package-summary.html"><B>org.openexi.sax</B></A> - package org.openexi.sax<DD>\r
+<tr valign="top" cellpadding="3" border="0">\r
+\r
+The SAX package contains the <code>Transmogrifier</code>, which encodes an XML file to an EXI stream, and the <code>EXIReader</code>, which restores an EXI stream to its logical XML equivalent.<DT><A HREF="./org/openexi/schema/package-summary.html"><B>org.openexi.schema</B></A> - package org.openexi.schema<DD>\r
+<tr valign="top" cellpadding="3" border="0">\r
+\r
+The schema package contains classes that are used to represent XML Schema Documents (XSDs).<DT><A HREF="./org/openexi/scomp/package-summary.html"><B>org.openexi.scomp</B></A> - package org.openexi.scomp<DD>\r
+<tr valign="top" cellpadding="3" border="0">\r
+\r
+The <code>scomp</code> (schema compiler) package contains the EXISchemaFactory, which is used to compile XML Schema Documents (XSDs) to EXISchemas.</DL>\r
+<HR>\r
+<A NAME="_P_"><!-- --></A><H2>\r
+<B>P</B></H2>\r
+<DL>\r
+<DT><A HREF="./org/openexi/scomp/EXISchemaReader.html#parse(java.io.InputStream)"><B>parse(InputStream)</B></A> - \r
+Method in class org.openexi.scomp.<A HREF="./org/openexi/scomp/EXISchemaReader.html" title="class in org.openexi.scomp">EXISchemaReader</A>\r
+<DD>Parses EXI-encoded EXI Grammar into an EXISchema.\r
+<DT><A HREF="./org/openexi/sax/TransmogrifierException.html#PREFIX_BOUND_TO_ANOTHER_NAMESPACE"><B>PREFIX_BOUND_TO_ANOTHER_NAMESPACE</B></A> - \r
+Static variable in exception org.openexi.sax.<A HREF="./org/openexi/sax/TransmogrifierException.html" title="class in org.openexi.sax">TransmogrifierException</A>\r
+<DD>Prefix is bound to another namespace.\r
+<DT><A HREF="./org/openexi/sax/TransmogrifierException.html#PREFIX_NOT_BOUND"><B>PREFIX_NOT_BOUND</B></A> - \r
+Static variable in exception org.openexi.sax.<A HREF="./org/openexi/sax/TransmogrifierException.html" title="class in org.openexi.sax">TransmogrifierException</A>\r
+<DD>Prefix is not bound.\r
+<DT><A HREF="./org/openexi/proc/EXIDecoder.html#processHeader()"><B>processHeader()</B></A> - \r
+Method in class org.openexi.proc.<A HREF="./org/openexi/proc/EXIDecoder.html" title="class in org.openexi.proc">EXIDecoder</A>\r
+<DD>This method reads and configures any header options present
+ in the EXI stream, then returns a <A HREF="./org/openexi/proc/io/Scanner.html" title="class in org.openexi.proc.io"><CODE>Scanner</CODE></A> 
+ object you can use to parse the values from the EXI stream.\r
+</DL>\r
+<HR>\r
+<A NAME="_Q_"><!-- --></A><H2>\r
+<B>Q</B></H2>\r
+<DL>\r
+<DT><A HREF="./org/openexi/proc/common/QName.html" title="class in org.openexi.proc.common"><B>QName</B></A> - Class in <A HREF="./org/openexi/proc/common/package-summary.html">org.openexi.proc.common</A><DD>QName is a pair comprised of a namespace name and a local name  
+ to be used in a Datatype Representation Map (DTRM) definition
+ to denote an XSD datatype or an EXI datatype representation.<DT><A HREF="./org/openexi/proc/common/QName.html#QName()"><B>QName()</B></A> - \r
+Constructor for class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/QName.html" title="class in org.openexi.proc.common">QName</A>\r
+<DD>&nbsp;\r
+<DT><A HREF="./org/openexi/proc/common/QName.html#QName(java.lang.String, java.lang.String)"><B>QName(String, String)</B></A> - \r
+Constructor for class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/QName.html" title="class in org.openexi.proc.common">QName</A>\r
+<DD>Creates a QName based on its literal qualified name 
+ (see http://www.w3.org/TR/xml-names/#ns-qualnames 
+ for definition) and namespace name.\r
+</DL>\r
+<HR>\r
+<A NAME="_R_"><!-- --></A><H2>\r
+<B>R</B></H2>\r
+<DL>\r
+<DT><A HREF="./org/openexi/sax/ReaderSupport.html" title="class in org.openexi.sax"><B>ReaderSupport</B></A> - Class in <A HREF="./org/openexi/sax/package-summary.html">org.openexi.sax</A><DD>&nbsp;<DT><A HREF="./org/openexi/schema/EXISchema.html#readIn(java.io.DataInputStream)"><B>readIn(DataInputStream)</B></A> - \r
+Static method in class org.openexi.schema.<A HREF="./org/openexi/schema/EXISchema.html" title="class in org.openexi.schema">EXISchema</A>\r
+<DD>Reads an EXI Schema from a DataInputStream.\r
+<DT><A HREF="./org/openexi/scomp/EntityResolverEx.html#resolveEntity(java.lang.String, java.lang.String, java.lang.String)"><B>resolveEntity(String, String, String)</B></A> - \r
+Method in interface org.openexi.scomp.<A HREF="./org/openexi/scomp/EntityResolverEx.html" title="interface in org.openexi.scomp">EntityResolverEx</A>\r
+<DD>This method will be called for resolving schema documents upon
+ occurrences of XML Schema directives such as "include", "import" and
+ "redefine" within schemas.\r
+<DT><A HREF="./org/openexi/proc/EXISchemaResolver.html#resolveSchema(java.lang.String, short)"><B>resolveSchema(String, short)</B></A> - \r
+Method in interface org.openexi.proc.<A HREF="./org/openexi/proc/EXISchemaResolver.html" title="interface in org.openexi.proc">EXISchemaResolver</A>\r
+<DD>Return a GrammarCache based on a schemaId and grammar options discovered 
+ in the header options of an EXI stream.\r
+</DL>\r
+<HR>\r
+<A NAME="_S_"><!-- --></A><H2>\r
+<B>S</B></H2>\r
+<DL>\r
+<DT><A HREF="./org/openexi/sax/TransmogrifierException.html#SAX_ERROR"><B>SAX_ERROR</B></A> - \r
+Static variable in exception org.openexi.sax.<A HREF="./org/openexi/sax/TransmogrifierException.html" title="class in org.openexi.sax">TransmogrifierException</A>\r
+<DD>SAX error reported by XML parser.\r
+<DT><A HREF="./org/openexi/sax/SAXTransmogrifier.html" title="interface in org.openexi.sax"><B>SAXTransmogrifier</B></A> - Interface in <A HREF="./org/openexi/sax/package-summary.html">org.openexi.sax</A><DD>Applications can directly feed SAX events into a transmogrifier through SAXTransmogrifier.<DT><A HREF="./org/openexi/proc/io/Scanner.html" title="class in org.openexi.proc.io"><B>Scanner</B></A> - Class in <A HREF="./org/openexi/proc/io/package-summary.html">org.openexi.proc.io</A><DD>The Scanner class provides methods for scanning events 
+ in the body of an EXI stream.<DT><A HREF="./org/openexi/sax/TransmogrifierException.html#SCRIBER_ERROR"><B>SCRIBER_ERROR</B></A> - \r
+Static variable in exception org.openexi.sax.<A HREF="./org/openexi/sax/TransmogrifierException.html" title="class in org.openexi.sax">TransmogrifierException</A>\r
+<DD>Errors reported by Scriber.\r
+<DT><A HREF="./org/openexi/proc/EXIDecoder.html#setAlignmentType(org.openexi.proc.common.AlignmentType)"><B>setAlignmentType(AlignmentType)</B></A> - \r
+Method in class org.openexi.proc.<A HREF="./org/openexi/proc/EXIDecoder.html" title="class in org.openexi.proc">EXIDecoder</A>\r
+<DD>Set the bit alignment style of the stream to be decoded.\r
+<DT><A HREF="./org/openexi/sax/EXIReader.html#setAlignmentType(org.openexi.proc.common.AlignmentType)"><B>setAlignmentType(AlignmentType)</B></A> - \r
+Method in class org.openexi.sax.<A HREF="./org/openexi/sax/EXIReader.html" title="class in org.openexi.sax">EXIReader</A>\r
+<DD>Set the bit alignment style used to compile the EXI input stream.\r
+<DT><A HREF="./org/openexi/sax/Transmogrifier.html#setAlignmentType(org.openexi.proc.common.AlignmentType)"><B>setAlignmentType(AlignmentType)</B></A> - \r
+Method in class org.openexi.sax.<A HREF="./org/openexi/sax/Transmogrifier.html" title="class in org.openexi.sax">Transmogrifier</A>\r
+<DD>Set the bit alignment style for the encoded EXI stream.\r
+<DT><A HREF="./org/openexi/proc/io/Scanner.html#setBinaryChunkSize(int)"><B>setBinaryChunkSize(int)</B></A> - \r
+Method in class org.openexi.proc.io.<A HREF="./org/openexi/proc/io/Scanner.html" title="class in org.openexi.proc.io">Scanner</A>\r
+<DD>Binary values are read in chunks of the specified size when the
+ use of binary data is enabled.\r
+<DT><A HREF="./org/openexi/proc/EXIDecoder.html#setBlockSize(int)"><B>setBlockSize(int)</B></A> - \r
+Method in class org.openexi.proc.<A HREF="./org/openexi/proc/EXIDecoder.html" title="class in org.openexi.proc">EXIDecoder</A>\r
+<DD>Set the size, in number of values, of the information that will be 
+ processed as a chunk of the entire EXI stream.\r
+<DT><A HREF="./org/openexi/sax/EXIReader.html#setBlockSize(int)"><B>setBlockSize(int)</B></A> - \r
+Method in class org.openexi.sax.<A HREF="./org/openexi/sax/EXIReader.html" title="class in org.openexi.sax">EXIReader</A>\r
+<DD>Set the size, in number of values, of the information that will be 
+ processed as a chunk of the entire EXI stream.\r
+<DT><A HREF="./org/openexi/sax/Transmogrifier.html#setBlockSize(int)"><B>setBlockSize(int)</B></A> - \r
+Method in class org.openexi.sax.<A HREF="./org/openexi/sax/Transmogrifier.html" title="class in org.openexi.sax">Transmogrifier</A>\r
+<DD>Set the size, in number of values, of the information that will be 
+ processed as a chunk of the entire XML stream.\r
+<DT><A HREF="./org/openexi/scomp/EXISchemaFactory.html#setCompilerErrorHandler(org.openexi.scomp.EXISchemaFactoryErrorHandler)"><B>setCompilerErrorHandler(EXISchemaFactoryErrorHandler)</B></A> - \r
+Method in class org.openexi.scomp.<A HREF="./org/openexi/scomp/EXISchemaFactory.html" title="class in org.openexi.scomp">EXISchemaFactory</A>\r
+<DD>Set an error handler to report any errors encountered during
+ schema compilation.\r
+<DT><A HREF="./org/openexi/sax/ReaderSupport.html#setContentHandler(org.xml.sax.ContentHandler)"><B>setContentHandler(ContentHandler)</B></A> - \r
+Method in class org.openexi.sax.<A HREF="./org/openexi/sax/ReaderSupport.html" title="class in org.openexi.sax">ReaderSupport</A>\r
+<DD>Set a SAX content handler to receive SAX events.\r
+<DT><A HREF="./org/openexi/proc/EXIDecoder.html#setDatatypeRepresentationMap(org.openexi.proc.common.QName[], int)"><B>setDatatypeRepresentationMap(QName[], int)</B></A> - \r
+Method in class org.openexi.proc.<A HREF="./org/openexi/proc/EXIDecoder.html" title="class in org.openexi.proc">EXIDecoder</A>\r
+<DD>Set a datatype representation map (DTRM).\r
+<DT><A HREF="./org/openexi/sax/EXIReader.html#setDatatypeRepresentationMap(org.openexi.proc.common.QName[], int)"><B>setDatatypeRepresentationMap(QName[], int)</B></A> - \r
+Method in class org.openexi.sax.<A HREF="./org/openexi/sax/EXIReader.html" title="class in org.openexi.sax">EXIReader</A>\r
+<DD>Set a datatype representation map.\r
+<DT><A HREF="./org/openexi/sax/Transmogrifier.html#setDatatypeRepresentationMap(org.openexi.proc.common.QName[], int)"><B>setDatatypeRepresentationMap(QName[], int)</B></A> - \r
+Method in class org.openexi.sax.<A HREF="./org/openexi/sax/Transmogrifier.html" title="class in org.openexi.sax">Transmogrifier</A>\r
+<DD>Set a datatype representation map (DTRM).\r
+<DT><A HREF="./org/openexi/proc/EXIDecoder.html#setEnableBinaryData(boolean)"><B>setEnableBinaryData(boolean)</B></A> - \r
+Method in class org.openexi.proc.<A HREF="./org/openexi/proc/EXIDecoder.html" title="class in org.openexi.proc">EXIDecoder</A>\r
+<DD>Each binary value will be returned as in a EventDescription of EVENT_BLOB 
+ instead of EVENT_CH when enabled.\r
+<DT><A HREF="./org/openexi/sax/Transmogrifier.html#setEntityResolver(org.xml.sax.EntityResolver)"><B>setEntityResolver(EntityResolver)</B></A> - \r
+Method in class org.openexi.sax.<A HREF="./org/openexi/sax/Transmogrifier.html" title="class in org.openexi.sax">Transmogrifier</A>\r
+<DD>Set an external SAX entity resolver.\r
+<DT><A HREF="./org/openexi/scomp/EXISchemaFactory.html#setEntityResolver(org.openexi.scomp.EntityResolverEx)"><B>setEntityResolver(EntityResolverEx)</B></A> - \r
+Method in class org.openexi.scomp.<A HREF="./org/openexi/scomp/EXISchemaFactory.html" title="class in org.openexi.scomp">EXISchemaFactory</A>\r
+<DD>Set an entity resolver for use to resolve entities and schema documents.\r
+<DT><A HREF="./org/openexi/sax/EXIReader.html#setEXISchemaResolver(org.openexi.proc.EXISchemaResolver)"><B>setEXISchemaResolver(EXISchemaResolver)</B></A> - \r
+Method in class org.openexi.sax.<A HREF="./org/openexi/sax/EXIReader.html" title="class in org.openexi.sax">EXIReader</A>\r
+<DD>Set the EXISchemaResolver to retrieve the schema needed to decode the 
+ current EXI stream.\r
+<DT><A HREF="./org/openexi/sax/EXIReader.html#setFeature(java.lang.String, boolean)"><B>setFeature(String, boolean)</B></A> - \r
+Method in class org.openexi.sax.<A HREF="./org/openexi/sax/EXIReader.html" title="class in org.openexi.sax">EXIReader</A>\r
+<DD>Set features for the SAX parser.\r
+<DT><A HREF="./org/openexi/proc/EXIDecoder.html#setFragment(boolean)"><B>setFragment(boolean)</B></A> - \r
+Method in class org.openexi.proc.<A HREF="./org/openexi/proc/EXIDecoder.html" title="class in org.openexi.proc">EXIDecoder</A>\r
+<DD>Set whether the document is a fragment.\r
+<DT><A HREF="./org/openexi/sax/EXIReader.html#setFragment(boolean)"><B>setFragment(boolean)</B></A> - \r
+Method in class org.openexi.sax.<A HREF="./org/openexi/sax/EXIReader.html" title="class in org.openexi.sax">EXIReader</A>\r
+<DD>Set to true if the EXI input stream is an XML fragment (a non-compliant
+ XML document with multiple root elements).\r
+<DT><A HREF="./org/openexi/sax/Transmogrifier.html#setFragment(boolean)"><B>setFragment(boolean)</B></A> - \r
+Method in class org.openexi.sax.<A HREF="./org/openexi/sax/Transmogrifier.html" title="class in org.openexi.sax">Transmogrifier</A>\r
+<DD>Set to true if the XML input stream is an XML fragment (a non-compliant
+ XML document with multiple root elements).\r
+<DT><A HREF="./org/openexi/proc/EXIDecoder.html#setGrammarCache(org.openexi.proc.grammars.GrammarCache)"><B>setGrammarCache(GrammarCache)</B></A> - \r
+Method in class org.openexi.proc.<A HREF="./org/openexi/proc/EXIDecoder.html" title="class in org.openexi.proc">EXIDecoder</A>\r
+<DD>Set the GrammarCache used in decoding EXI streams.\r
+<DT><A HREF="./org/openexi/sax/ReaderSupport.html#setGrammarCache(org.openexi.proc.grammars.GrammarCache)"><B>setGrammarCache(GrammarCache)</B></A> - \r
+Method in class org.openexi.sax.<A HREF="./org/openexi/sax/ReaderSupport.html" title="class in org.openexi.sax">ReaderSupport</A>\r
+<DD>Set the GrammarCache used in parsing EXI streams.\r
+<DT><A HREF="./org/openexi/sax/Transmogrifier.html#setGrammarCache(org.openexi.proc.grammars.GrammarCache)"><B>setGrammarCache(GrammarCache)</B></A> - \r
+Method in class org.openexi.sax.<A HREF="./org/openexi/sax/Transmogrifier.html" title="class in org.openexi.sax">Transmogrifier</A>\r
+<DD>Set the GrammarCache used in transmogrifying XML data to EXI.\r
+<DT><A HREF="./org/openexi/sax/Transmogrifier.html#setGrammarCache(org.openexi.proc.grammars.GrammarCache, org.openexi.proc.common.SchemaId)"><B>setGrammarCache(GrammarCache, SchemaId)</B></A> - \r
+Method in class org.openexi.sax.<A HREF="./org/openexi/sax/Transmogrifier.html" title="class in org.openexi.sax">Transmogrifier</A>\r
+<DD>Set the GrammarCache to be used in encoding XML streams into EXI streams 
+ by the transmogrifier.\r
+<DT><A HREF="./org/openexi/proc/EXIDecoder.html#setInitialBinaryDataBufferSize(int)"><B>setInitialBinaryDataBufferSize(int)</B></A> - \r
+Method in class org.openexi.proc.<A HREF="./org/openexi/proc/EXIDecoder.html" title="class in org.openexi.proc">EXIDecoder</A>\r
+<DD>&nbsp;\r
+<DT><A HREF="./org/openexi/proc/EXIDecoder.html#setInputStream(java.io.InputStream)"><B>setInputStream(InputStream)</B></A> - \r
+Method in class org.openexi.proc.<A HREF="./org/openexi/proc/EXIDecoder.html" title="class in org.openexi.proc">EXIDecoder</A>\r
+<DD>Set an input stream from which the encoded stream is read.\r
+<DT><A HREF="./org/openexi/sax/EXIReader.html#setLexicalHandler(org.xml.sax.ext.LexicalHandler)"><B>setLexicalHandler(LexicalHandler)</B></A> - \r
+Method in class org.openexi.sax.<A HREF="./org/openexi/sax/EXIReader.html" title="class in org.openexi.sax">EXIReader</A>\r
+<DD>Set a SAX lexical handler to receive SAX lexical events.\r
+<DT><A HREF="./org/openexi/sax/Transmogrifier.html#setOutputCookie(boolean)"><B>setOutputCookie(boolean)</B></A> - \r
+Method in class org.openexi.sax.<A HREF="./org/openexi/sax/Transmogrifier.html" title="class in org.openexi.sax">Transmogrifier</A>\r
+<DD>Tells the encoder whether to or not to start the stream by
+ adding an EXI cookie.\r
+<DT><A HREF="./org/openexi/sax/Transmogrifier.html#setOutputOptions(org.openexi.proc.HeaderOptionsOutputType)"><B>setOutputOptions(HeaderOptionsOutputType)</B></A> - \r
+Method in class org.openexi.sax.<A HREF="./org/openexi/sax/Transmogrifier.html" title="class in org.openexi.sax">Transmogrifier</A>\r
+<DD>Set the header output options.\r
+<DT><A HREF="./org/openexi/sax/Transmogrifier.html#setOutputStream(java.io.OutputStream)"><B>setOutputStream(OutputStream)</B></A> - \r
+Method in class org.openexi.sax.<A HREF="./org/openexi/sax/Transmogrifier.html" title="class in org.openexi.sax">Transmogrifier</A>\r
+<DD>Set an output stream to which encoded streams are written.\r
+<DT><A HREF="./org/openexi/proc/EXIDecoder.html#setPreserveLexicalValues(boolean)"><B>setPreserveLexicalValues(boolean)</B></A> - \r
+Method in class org.openexi.proc.<A HREF="./org/openexi/proc/EXIDecoder.html" title="class in org.openexi.proc">EXIDecoder</A>\r
+<DD>Set to <i>true</i> to preserve the original string values from the EXI
+ stream.\r
+<DT><A HREF="./org/openexi/sax/EXIReader.html#setPreserveLexicalValues(boolean)"><B>setPreserveLexicalValues(boolean)</B></A> - \r
+Method in class org.openexi.sax.<A HREF="./org/openexi/sax/EXIReader.html" title="class in org.openexi.sax">EXIReader</A>\r
+<DD>Set to true if the EXI input stream was compiled with the Preserve Lexical
+ Values set to true.\r
+<DT><A HREF="./org/openexi/sax/Transmogrifier.html#setPreserveLexicalValues(boolean)"><B>setPreserveLexicalValues(boolean)</B></A> - \r
+Method in class org.openexi.sax.<A HREF="./org/openexi/sax/Transmogrifier.html" title="class in org.openexi.sax">Transmogrifier</A>\r
+<DD>Set to <i>true</i> to preserve the original string values from the XML
+ stream.\r
+<DT><A HREF="./org/openexi/sax/Transmogrifier.html#setPreserveWhitespaces(boolean)"><B>setPreserveWhitespaces(boolean)</B></A> - \r
+Method in class org.openexi.sax.<A HREF="./org/openexi/sax/Transmogrifier.html" title="class in org.openexi.sax">Transmogrifier</A>\r
+<DD>Set to true to preserve whitespace (for example, spaces, tabs, and
+ line breaks) in the encoded EXI stream.\r
+<DT><A HREF="./org/openexi/sax/EXIReader.html#setProperty(java.lang.String, java.lang.Object)"><B>setProperty(String, Object)</B></A> - \r
+Method in class org.openexi.sax.<A HREF="./org/openexi/sax/EXIReader.html" title="class in org.openexi.sax">EXIReader</A>\r
+<DD>This method wraps the friendlier setLexicalHandler method to provide 
+ syntax familiar to experienced SAX programmers.\r
+<DT><A HREF="./org/openexi/sax/Transmogrifier.html#setResolveExternalGeneralEntities(boolean)"><B>setResolveExternalGeneralEntities(boolean)</B></A> - \r
+Method in class org.openexi.sax.<A HREF="./org/openexi/sax/Transmogrifier.html" title="class in org.openexi.sax">Transmogrifier</A>\r
+<DD>Change the way a Transmogrifier handles external general entities.\r
+<DT><A HREF="./org/openexi/proc/io/Scanner.html#setSchema(org.openexi.schema.EXISchema, org.openexi.proc.common.QName[], int)"><B>setSchema(EXISchema, QName[], int)</B></A> - \r
+Method in class org.openexi.proc.io.<A HREF="./org/openexi/proc/io/Scanner.html" title="class in org.openexi.proc.io">Scanner</A>\r
+<DD>&nbsp;\r
+<DT><A HREF="./org/openexi/proc/EXIDecoder.html#setValueMaxLength(int)"><B>setValueMaxLength(int)</B></A> - \r
+Method in class org.openexi.proc.<A HREF="./org/openexi/proc/EXIDecoder.html" title="class in org.openexi.proc">EXIDecoder</A>\r
+<DD>Set the maximum length of a string that will be stored for reuse in the
+ String Table.\r
+<DT><A HREF="./org/openexi/sax/EXIReader.html#setValueMaxLength(int)"><B>setValueMaxLength(int)</B></A> - \r
+Method in class org.openexi.sax.<A HREF="./org/openexi/sax/EXIReader.html" title="class in org.openexi.sax">EXIReader</A>\r
+<DD>Set the maximum length of a string that will be stored for reuse in the
+ String Table.\r
+<DT><A HREF="./org/openexi/sax/Transmogrifier.html#setValueMaxLength(int)"><B>setValueMaxLength(int)</B></A> - \r
+Method in class org.openexi.sax.<A HREF="./org/openexi/sax/Transmogrifier.html" title="class in org.openexi.sax">Transmogrifier</A>\r
+<DD>Set the maximum length of a string that will be stored for reuse in the
+ String Table.\r
+<DT><A HREF="./org/openexi/proc/EXIDecoder.html#setValuePartitionCapacity(int)"><B>setValuePartitionCapacity(int)</B></A> - \r
+Method in class org.openexi.proc.<A HREF="./org/openexi/proc/EXIDecoder.html" title="class in org.openexi.proc">EXIDecoder</A>\r
+<DD>Set the maximum number of values in the String Table.\r
+<DT><A HREF="./org/openexi/sax/EXIReader.html#setValuePartitionCapacity(int)"><B>setValuePartitionCapacity(int)</B></A> - \r
+Method in class org.openexi.sax.<A HREF="./org/openexi/sax/EXIReader.html" title="class in org.openexi.sax">EXIReader</A>\r
+<DD>Set the maximum number of values in the String Table.\r
+<DT><A HREF="./org/openexi/sax/Transmogrifier.html#setValuePartitionCapacity(int)"><B>setValuePartitionCapacity(int)</B></A> - \r
+Method in class org.openexi.sax.<A HREF="./org/openexi/sax/Transmogrifier.html" title="class in org.openexi.sax">Transmogrifier</A>\r
+<DD>Set the maximum number of values in the String Table.\r
+<DT><A HREF="./org/openexi/sax/BinaryDataHandler.html#startBinaryData(long)"><B>startBinaryData(long)</B></A> - \r
+Method in interface org.openexi.sax.<A HREF="./org/openexi/sax/BinaryDataHandler.html" title="interface in org.openexi.sax">BinaryDataHandler</A>\r
+<DD>Mark the start of a binary value.\r
+<DT><A HREF="./org/openexi/schema/Characters.html#startIndex"><B>startIndex</B></A> - \r
+Variable in class org.openexi.schema.<A HREF="./org/openexi/schema/Characters.html" title="class in org.openexi.schema">Characters</A>\r
+<DD>&nbsp;\r
+<DT><A HREF="./org/openexi/proc/common/GrammarOptions.html#STRICT_OPTIONS"><B>STRICT_OPTIONS</B></A> - \r
+Static variable in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/GrammarOptions.html" title="class in org.openexi.proc.common">GrammarOptions</A>\r
+<DD>Indicates that undeclared elements and attributes will throw an
+ exception when the XML stream is encoded and decoded.\r
+<DT><A HREF="./org/openexi/schema/Characters.html#substring(int, int)"><B>substring(int, int)</B></A> - \r
+Method in class org.openexi.schema.<A HREF="./org/openexi/schema/Characters.html" title="class in org.openexi.schema">Characters</A>\r
+<DD>&nbsp;\r
+</DL>\r
+<HR>\r
+<A NAME="_T_"><!-- --></A><H2>\r
+<B>T</B></H2>\r
+<DL>\r
+<DT><A HREF="./org/openexi/sax/Transmogrifier.html" title="class in org.openexi.sax"><B>Transmogrifier</B></A> - Class in <A HREF="./org/openexi/sax/package-summary.html">org.openexi.sax</A><DD>The Transmogrifier converts an XML stream to an EXI stream.<DT><A HREF="./org/openexi/sax/Transmogrifier.html#Transmogrifier()"><B>Transmogrifier()</B></A> - \r
+Constructor for class org.openexi.sax.<A HREF="./org/openexi/sax/Transmogrifier.html" title="class in org.openexi.sax">Transmogrifier</A>\r
+<DD>Create an instance of the Transmogrifier with a default SAX parser.\r
+<DT><A HREF="./org/openexi/sax/Transmogrifier.html#Transmogrifier(javax.xml.parsers.SAXParserFactory)"><B>Transmogrifier(SAXParserFactory)</B></A> - \r
+Constructor for class org.openexi.sax.<A HREF="./org/openexi/sax/Transmogrifier.html" title="class in org.openexi.sax">Transmogrifier</A>\r
+<DD>Create an instance of the Transmogrifier, specifying the SAXParserFactory
+ from which to create the SAX parser.\r
+<DT><A HREF="./org/openexi/sax/TransmogrifierException.html" title="class in org.openexi.sax"><B>TransmogrifierException</B></A> - Exception in <A HREF="./org/openexi/sax/package-summary.html">org.openexi.sax</A><DD>Exception handler for the Transmogrifier.<DT><A HREF="./org/openexi/schema/Characters.html#turnPermanent()"><B>turnPermanent()</B></A> - \r
+Method in class org.openexi.schema.<A HREF="./org/openexi/schema/Characters.html" title="class in org.openexi.schema">Characters</A>\r
+<DD>&nbsp;\r
+</DL>\r
+<HR>\r
+<A NAME="_U_"><!-- --></A><H2>\r
+<B>U</B></H2>\r
+<DL>\r
+<DT><A HREF="./org/openexi/schema/Characters.html#ucsCount"><B>ucsCount</B></A> - \r
+Variable in class org.openexi.schema.<A HREF="./org/openexi/schema/Characters.html" title="class in org.openexi.schema">Characters</A>\r
+<DD>&nbsp;\r
+<DT><A HREF="./org/openexi/sax/TransmogrifierException.html#UNEXPECTED_ATTR"><B>UNEXPECTED_ATTR</B></A> - \r
+Static variable in exception org.openexi.sax.<A HREF="./org/openexi/sax/TransmogrifierException.html" title="class in org.openexi.sax">TransmogrifierException</A>\r
+<DD>Unexpected Attribute.\r
+<DT><A HREF="./org/openexi/sax/TransmogrifierException.html#UNEXPECTED_BINARY_VALUE"><B>UNEXPECTED_BINARY_VALUE</B></A> - \r
+Static variable in exception org.openexi.sax.<A HREF="./org/openexi/sax/TransmogrifierException.html" title="class in org.openexi.sax">TransmogrifierException</A>\r
+<DD>Unexpected Binary value.\r
+<DT><A HREF="./org/openexi/sax/TransmogrifierException.html#UNEXPECTED_CHARS"><B>UNEXPECTED_CHARS</B></A> - \r
+Static variable in exception org.openexi.sax.<A HREF="./org/openexi/sax/TransmogrifierException.html" title="class in org.openexi.sax">TransmogrifierException</A>\r
+<DD>Unexpected Character Sequence.\r
+<DT><A HREF="./org/openexi/sax/TransmogrifierException.html#UNEXPECTED_ED"><B>UNEXPECTED_ED</B></A> - \r
+Static variable in exception org.openexi.sax.<A HREF="./org/openexi/sax/TransmogrifierException.html" title="class in org.openexi.sax">TransmogrifierException</A>\r
+<DD>Unexpected End of Document event.\r
+<DT><A HREF="./org/openexi/sax/TransmogrifierException.html#UNEXPECTED_ELEM"><B>UNEXPECTED_ELEM</B></A> - \r
+Static variable in exception org.openexi.sax.<A HREF="./org/openexi/sax/TransmogrifierException.html" title="class in org.openexi.sax">TransmogrifierException</A>\r
+<DD>Unexpected Element.\r
+<DT><A HREF="./org/openexi/sax/TransmogrifierException.html#UNEXPECTED_END_ELEM"><B>UNEXPECTED_END_ELEM</B></A> - \r
+Static variable in exception org.openexi.sax.<A HREF="./org/openexi/sax/TransmogrifierException.html" title="class in org.openexi.sax">TransmogrifierException</A>\r
+<DD>Unexpected End of Element event.\r
+<DT><A HREF="./org/openexi/sax/TransmogrifierException.html#UNEXPECTED_SD"><B>UNEXPECTED_SD</B></A> - \r
+Static variable in exception org.openexi.sax.<A HREF="./org/openexi/sax/TransmogrifierException.html" title="class in org.openexi.sax">TransmogrifierException</A>\r
+<DD>Unexpected Start of Document event.\r
+<DT><A HREF="./org/openexi/sax/TransmogrifierException.html#UNHANDLED_SAXPARSER_FEATURE"><B>UNHANDLED_SAXPARSER_FEATURE</B></A> - \r
+Static variable in exception org.openexi.sax.<A HREF="./org/openexi/sax/TransmogrifierException.html" title="class in org.openexi.sax">TransmogrifierException</A>\r
+<DD>Unhandled SAX parser feature.\r
+<DT><A HREF="./org/openexi/proc/common/EventType.html#uri"><B>uri</B></A> - \r
+Variable in class org.openexi.proc.common.<A HREF="./org/openexi/proc/common/EventType.html" title="class in org.openexi.proc.common">EventType</A>\r
+<DD>URI of event type definition.\r
+</DL>\r
+<HR>\r
+<A NAME="_V_"><!-- --></A><H2>\r
+<B>V</B></H2>\r
+<DL>\r
+<DT><A HREF="./org/openexi/proc/common/AlignmentType.html#valueOf(java.lang.String)"><B>valueOf(String)</B></A> - \r
+Static method in enum org.openexi.proc.common.<A HREF="./org/openexi/proc/common/AlignmentType.html" title="enum in org.openexi.proc.common">AlignmentType</A>\r
+<DD>Returns the enum constant of this type with the specified name.\r
+<DT><A HREF="./org/openexi/proc/HeaderOptionsOutputType.html#valueOf(java.lang.String)"><B>valueOf(String)</B></A> - \r
+Static method in enum org.openexi.proc.<A HREF="./org/openexi/proc/HeaderOptionsOutputType.html" title="enum in org.openexi.proc">HeaderOptionsOutputType</A>\r
+<DD>Returns the enum constant of this type with the specified name.\r
+<DT><A HREF="./org/openexi/proc/common/AlignmentType.html#values()"><B>values()</B></A> - \r
+Static method in enum org.openexi.proc.common.<A HREF="./org/openexi/proc/common/AlignmentType.html" title="enum in org.openexi.proc.common">AlignmentType</A>\r
+<DD>Returns an array containing the constants of this enum type, in
+the order they're declared.\r
+<DT><A HREF="./org/openexi/proc/HeaderOptionsOutputType.html#values()"><B>values()</B></A> - \r
+Static method in enum org.openexi.proc.<A HREF="./org/openexi/proc/HeaderOptionsOutputType.html" title="enum in org.openexi.proc">HeaderOptionsOutputType</A>\r
+<DD>Returns an array containing the constants of this enum type, in
+the order they're declared.\r
+</DL>\r
+<HR>\r
+<A NAME="_W_"><!-- --></A><H2>\r
+<B>W</B></H2>\r
+<DL>\r
+<DT><A HREF="./org/openexi/scomp/EXISchemaFactoryErrorHandler.html#warning(org.openexi.scomp.EXISchemaFactoryException)"><B>warning(EXISchemaFactoryException)</B></A> - \r
+Method in interface org.openexi.scomp.<A HREF="./org/openexi/scomp/EXISchemaFactoryErrorHandler.html" title="interface in org.openexi.scomp">EXISchemaFactoryErrorHandler</A>\r
+<DD>Report a warning found during schema processing.\r
+<DT><A HREF="./org/openexi/schema/EXISchema.html#writeOut(java.io.DataOutputStream)"><B>writeOut(DataOutputStream)</B></A> - \r
+Method in class org.openexi.schema.<A HREF="./org/openexi/schema/EXISchema.html" title="class in org.openexi.schema">EXISchema</A>\r
+<DD>Writes out a serialized EXISchema.\r
+<DT><A HREF="./org/openexi/schema/EXISchema.html#writeXml(java.io.OutputStream, boolean)"><B>writeXml(OutputStream, boolean)</B></A> - \r
+Method in class org.openexi.schema.<A HREF="./org/openexi/schema/EXISchema.html" title="class in org.openexi.schema">EXISchema</A>\r
+<DD>&nbsp;\r
+</DL>\r
+<HR>\r
+<A NAME="_X_"><!-- --></A><H2>\r
+<B>X</B></H2>\r
+<DL>\r
+<DT><A HREF="./org/openexi/scomp/EXISchemaFactoryException.html#XMLSCHEMA_ERROR"><B>XMLSCHEMA_ERROR</B></A> - \r
+Static variable in exception org.openexi.scomp.<A HREF="./org/openexi/scomp/EXISchemaFactoryException.html" title="class in org.openexi.scomp">EXISchemaFactoryException</A>\r
+<DD>The underlying XMLSchema parser found an error in the schema.\r
+</DL>\r
+<HR>\r
+<A NAME="___"><!-- --></A><H2>\r
+<B>_</B></H2>\r
+<DL>\r
+<DT><A HREF="./org/openexi/schema/EXISchema.html#_isSimpleType(int, int[])"><B>_isSimpleType(int, int[])</B></A> - \r
+Static method in class org.openexi.schema.<A HREF="./org/openexi/schema/EXISchema.html" title="class in org.openexi.schema">EXISchema</A>\r
+<DD>&nbsp;\r
+</DL>\r
+<HR>\r
+<A HREF="#_A_">A</A> <A HREF="#_B_">B</A> <A HREF="#_C_">C</A> <A HREF="#_D_">D</A> <A HREF="#_E_">E</A> <A HREF="#_F_">F</A> <A HREF="#_G_">G</A> <A HREF="#_H_">H</A> <A HREF="#_I_">I</A> <A HREF="#_L_">L</A> <A HREF="#_M_">M</A> <A HREF="#_N_">N</A> <A HREF="#_O_">O</A> <A HREF="#_P_">P</A> <A HREF="#_Q_">Q</A> <A HREF="#_R_">R</A> <A HREF="#_S_">S</A> <A HREF="#_T_">T</A> <A HREF="#_U_">U</A> <A HREF="#_V_">V</A> <A HREF="#_W_">W</A> <A HREF="#_X_">X</A> <A HREF="#___">_</A> \r
+\r
+<!-- ======= START OF BOTTOM NAVBAR ====== -->\r
+<A NAME="navbar_bottom"><!-- --></A>\r
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_bottom_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="./overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="./overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="./deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="./help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;PREV&nbsp;\r
+&nbsp;NEXT</FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="./index.html?index-all.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="index-all.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="./allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="./allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_bottom"></A>\r
+<!-- ======== END OF BOTTOM NAVBAR ======= -->\r
+\r
+<HR>\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/index.html b/third-party/org.openexi/nagasena/src/main/resources/doc/index.html
new file mode 100644 (file)
index 0000000..f8c172c
--- /dev/null
@@ -0,0 +1,40 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc on Thu Apr 10 14:54:59 PDT 2014-->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+Generated Documentation (Untitled)\r
+</TITLE>\r
+<SCRIPT type="text/javascript">\r
+    targetPage = "" + window.location.search;\r
+    if (targetPage != "" && targetPage != "undefined")\r
+        targetPage = targetPage.substring(1);\r
+    if (targetPage.indexOf(":") != -1)\r
+        targetPage = "undefined";\r
+    function loadFrames() {\r
+        if (targetPage != "" && targetPage != "undefined")\r
+             top.classFrame.location = top.targetPage;\r
+    }\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+</NOSCRIPT>\r
+</HEAD>\r
+<FRAMESET cols="20%,80%" title="" onLoad="top.loadFrames()">\r
+<FRAMESET rows="30%,70%" title="" onLoad="top.loadFrames()">\r
+<FRAME src="overview-frame.html" name="packageListFrame" title="All Packages">\r
+<FRAME src="allclasses-frame.html" name="packageFrame" title="All classes and interfaces (except non-static nested types)">\r
+</FRAMESET>\r
+<FRAME src="overview-summary.html" name="classFrame" title="Package, class and interface descriptions" scrolling="yes">\r
+<NOFRAMES>\r
+<H2>\r
+Frame Alert</H2>\r
+\r
+<P>\r
+This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.\r
+<BR>\r
+Link to<A HREF="overview-summary.html">Non-frame version.</A>\r
+</NOFRAMES>\r
+</FRAMESET>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/EXIDecoder.html b/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/EXIDecoder.html
new file mode 100644 (file)
index 0000000..15bd150
--- /dev/null
@@ -0,0 +1,580 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:56 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+EXIDecoder\r
+</TITLE>\r
+\r
+<META NAME="keywords" CONTENT="org.openexi.proc.EXIDecoder class">\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">\r
+\r
+<SCRIPT type="text/javascript">\r
+function windowTitle()\r
+{\r
+    parent.document.title="EXIDecoder";\r
+}\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+</NOSCRIPT>\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white" onload="windowTitle();">\r
+\r
+\r
+<!-- ========= START OF TOP NAVBAR ======= -->\r
+<A NAME="navbar_top"><!-- --></A>\r
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_top_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;PREV CLASS&nbsp;\r
+&nbsp;<A HREF="../../../org/openexi/proc/EXISchemaResolver.html" title="interface in org.openexi.proc"><B>NEXT CLASS</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../index.html?org/openexi/proc/EXIDecoder.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="EXIDecoder.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_top"></A>\r
+<!-- ========= END OF TOP NAVBAR ========= -->\r
+\r
+<HR>\r
+<!-- ======== START OF CLASS DATA ======== -->\r
+<H2>\r
+<FONT SIZE="-1">\r
+org.openexi.proc</FONT>\r
+<BR>\r
+Class EXIDecoder</H2>\r
+<PRE>\r
+java.lang.Object\r
+  <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>org.openexi.proc.EXIDecoder</B>\r
+</PRE>\r
+<HR>\r
+<DL>\r
+<DT><PRE>public class <B>EXIDecoder</B><DT>extends java.lang.Object</DL>\r
+</PRE>\r
+\r
+<P>\r
+EXIDecoder provides methods to configure and 
+ instantiate a <A HREF="../../../org/openexi/proc/io/Scanner.html" title="class in org.openexi.proc.io"><CODE>Scanner</CODE></A> object
+ you can use to parse the contents of an EXI stream.\r
+<P>\r
+\r
+<P>\r
+<DL>\r
+<!-- yWorks UML Doclet   http://www.yworks.com/   b0ac8294d3f86ae0003f3a3a002ea3cf577df824efc6f2... -->
+</DL>\r
+<HR>\r
+\r
+<P>\r
+\r
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->\r
+\r
+<A NAME="constructor_summary"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Constructor Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE><B><A HREF="../../../org/openexi/proc/EXIDecoder.html#EXIDecoder()">EXIDecoder</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an instance of EXIDecoder with the default inflator 
+ buffer size of 8192 bytes.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE><B><A HREF="../../../org/openexi/proc/EXIDecoder.html#EXIDecoder(int, boolean)">EXIDecoder</A></B>(int&nbsp;inflatorBufSize,\r
+           boolean&nbsp;useThreadedInflater)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an instance of EXIDecoder with the specified inflator buffer 
+ size.</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+<!-- ========== METHOD SUMMARY =========== -->\r
+\r
+<A NAME="method_summary"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Method Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;<A HREF="../../../org/openexi/proc/io/Scanner.html" title="class in org.openexi.proc.io">Scanner</A></CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/proc/EXIDecoder.html#processHeader()">processHeader</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This method reads and configures any header options present
+ in the EXI stream, then returns a <A HREF="../../../org/openexi/proc/io/Scanner.html" title="class in org.openexi.proc.io"><CODE>Scanner</CODE></A> 
+ object you can use to parse the values from the EXI stream.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/proc/EXIDecoder.html#setAlignmentType(org.openexi.proc.common.AlignmentType)">setAlignmentType</A></B>(<A HREF="../../../org/openexi/proc/common/AlignmentType.html" title="enum in org.openexi.proc.common">AlignmentType</A>&nbsp;alignmentType)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the bit alignment style of the stream to be decoded.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/proc/EXIDecoder.html#setBlockSize(int)">setBlockSize</A></B>(int&nbsp;blockSize)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the size, in number of values, of the information that will be 
+ processed as a chunk of the entire EXI stream.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/proc/EXIDecoder.html#setDatatypeRepresentationMap(org.openexi.proc.common.QName[], int)">setDatatypeRepresentationMap</A></B>(<A HREF="../../../org/openexi/proc/common/QName.html" title="class in org.openexi.proc.common">QName</A>[]&nbsp;dtrm,\r
+                             int&nbsp;n_bindings)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set a datatype representation map (DTRM).</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/proc/EXIDecoder.html#setEnableBinaryData(boolean)">setEnableBinaryData</A></B>(boolean&nbsp;enable)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Each binary value will be returned as in a EventDescription of EVENT_BLOB 
+ instead of EVENT_CH when enabled.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/proc/EXIDecoder.html#setFragment(boolean)">setFragment</A></B>(boolean&nbsp;isFragment)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set whether the document is a fragment.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/proc/EXIDecoder.html#setGrammarCache(org.openexi.proc.grammars.GrammarCache)">setGrammarCache</A></B>(<A HREF="../../../org/openexi/proc/grammars/GrammarCache.html" title="class in org.openexi.proc.grammars">GrammarCache</A>&nbsp;grammarCache)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the GrammarCache used in decoding EXI streams.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/proc/EXIDecoder.html#setInitialBinaryDataBufferSize(int)">setInitialBinaryDataBufferSize</A></B>(int&nbsp;initialSize)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/proc/EXIDecoder.html#setInputStream(java.io.InputStream)">setInputStream</A></B>(java.io.InputStream&nbsp;istream)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set an input stream from which the encoded stream is read.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/proc/EXIDecoder.html#setPreserveLexicalValues(boolean)">setPreserveLexicalValues</A></B>(boolean&nbsp;preserveLexicalValues)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set to <i>true</i> to preserve the original string values from the EXI
+ stream.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/proc/EXIDecoder.html#setValueMaxLength(int)">setValueMaxLength</A></B>(int&nbsp;valueMaxLength)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the maximum length of a string that will be stored for reuse in the
+ String Table.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/proc/EXIDecoder.html#setValuePartitionCapacity(int)">setValuePartitionCapacity</A></B>(int&nbsp;valuePartitionCapacity)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the maximum number of values in the String Table.</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">\r
+<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+<P>\r
+\r
+<!-- ========= CONSTRUCTOR DETAIL ======== -->\r
+\r
+<A NAME="constructor_detail"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">\r
+<B>Constructor Detail</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<A NAME="EXIDecoder()"><!-- --></A><H3>\r
+EXIDecoder</H3>\r
+<PRE>\r
+public <B>EXIDecoder</B>()</PRE>\r
+<DL>\r
+<DD>Creates an instance of EXIDecoder with the default inflator 
+ buffer size of 8192 bytes.  Buffer size is only used when
+ the EXI stream is encoded with EXI compression.\r
+<P>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="EXIDecoder(int, boolean)"><!-- --></A><H3>\r
+EXIDecoder</H3>\r
+<PRE>\r
+public <B>EXIDecoder</B>(int&nbsp;inflatorBufSize,\r
+                  boolean&nbsp;useThreadedInflater)</PRE>\r
+<DL>\r
+<DD>Creates an instance of EXIDecoder with the specified inflator buffer 
+ size. When dynamic memory is limited on the target device, reducing 
+ the buffer size can improve performance and avoid runtime errors. Buffer 
+ size is only used when the EXI stream is encoded with EXI compression.\r
+<P>\r
+<DL>\r
+<DT><B>Parameters:</B><DD><CODE>inflatorBufSize</CODE> - size of the buffer, in bytes.<DD><CODE>useThreadedInflater</CODE> - Inflater will be run in its own thread if true</DL>\r
+</DL>\r
+\r
+<!-- ============ METHOD DETAIL ========== -->\r
+\r
+<A NAME="method_detail"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">\r
+<B>Method Detail</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<A NAME="setInputStream(java.io.InputStream)"><!-- --></A><H3>\r
+setInputStream</H3>\r
+<PRE>\r
+public final void <B>setInputStream</B>(java.io.InputStream&nbsp;istream)</PRE>\r
+<DL>\r
+<DD>Set an input stream from which the encoded stream is read.\r
+<P>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>istream</CODE> - InputSream to be read.</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="setAlignmentType(org.openexi.proc.common.AlignmentType)"><!-- --></A><H3>\r
+setAlignmentType</H3>\r
+<PRE>\r
+public final void <B>setAlignmentType</B>(<A HREF="../../../org/openexi/proc/common/AlignmentType.html" title="enum in org.openexi.proc.common">AlignmentType</A>&nbsp;alignmentType)\r
+                            throws org.openexi.proc.common.EXIOptionsException</PRE>\r
+<DL>\r
+<DD>Set the bit alignment style of the stream to be decoded.\r
+<P>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>alignmentType</CODE> - <A HREF="../../../org/openexi/proc/common/AlignmentType.html" title="enum in org.openexi.proc.common"><CODE>AlignmentType</CODE></A> object\r
+<DT><B>Throws:</B>\r
+<DD><CODE>org.openexi.proc.common.EXIOptionsException</CODE></DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="setFragment(boolean)"><!-- --></A><H3>\r
+setFragment</H3>\r
+<PRE>\r
+public final void <B>setFragment</B>(boolean&nbsp;isFragment)</PRE>\r
+<DL>\r
+<DD>Set whether the document is a fragment. Fragments are nonstandard
+ XML documents with multiple root elements. Default is false.\r
+<P>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>isFragment</CODE> - true if the stream is an XML fragment</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="setGrammarCache(org.openexi.proc.grammars.GrammarCache)"><!-- --></A><H3>\r
+setGrammarCache</H3>\r
+<PRE>\r
+public final void <B>setGrammarCache</B>(<A HREF="../../../org/openexi/proc/grammars/GrammarCache.html" title="class in org.openexi.proc.grammars">GrammarCache</A>&nbsp;grammarCache)\r
+                           throws org.openexi.proc.common.EXIOptionsException</PRE>\r
+<DL>\r
+<DD>Set the GrammarCache used in decoding EXI streams.\r
+<P>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>grammarCache</CODE> - <A HREF="../../../org/openexi/proc/grammars/GrammarCache.html" title="class in org.openexi.proc.grammars"><CODE>GrammarCache</CODE></A>\r
+<DT><B>Throws:</B>\r
+<DD><CODE>org.openexi.proc.common.EXIOptionsException</CODE></DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="setBlockSize(int)"><!-- --></A><H3>\r
+setBlockSize</H3>\r
+<PRE>\r
+public final void <B>setBlockSize</B>(int&nbsp;blockSize)\r
+                        throws org.openexi.proc.common.EXIOptionsException</PRE>\r
+<DL>\r
+<DD>Set the size, in number of values, of the information that will be 
+ processed as a chunk of the entire EXI stream. Reducing the block size 
+ can improve performance for devices with limited dynamic memory. 
+ Default is 1,000,000 items (not 1MB, but 1,000,000 complete Attribute 
+ and Element values). Block size is only used when the EXI stream is
+ encoded with EXI-compression.\r
+<P>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>blockSize</CODE> - number of values in each processing block. Default is 1,000,000.\r
+<DT><B>Throws:</B>\r
+<DD><CODE>org.openexi.proc.common.EXIOptionsException</CODE></DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="setValueMaxLength(int)"><!-- --></A><H3>\r
+setValueMaxLength</H3>\r
+<PRE>\r
+public final void <B>setValueMaxLength</B>(int&nbsp;valueMaxLength)</PRE>\r
+<DL>\r
+<DD>Set the maximum length of a string that will be stored for reuse in the
+ String Table. By default, there is no maximum length. However, in data
+ sets that have long, unique strings of information, you can improve
+ performance by limiting the size to the length of strings that are more
+ likely to appear more than once.\r
+<P>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>valueMaxLength</CODE> - maximum length of entries in the String Table.</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="setValuePartitionCapacity(int)"><!-- --></A><H3>\r
+setValuePartitionCapacity</H3>\r
+<PRE>\r
+public final void <B>setValuePartitionCapacity</B>(int&nbsp;valuePartitionCapacity)</PRE>\r
+<DL>\r
+<DD>Set the maximum number of values in the String Table. By default, there
+ is no limit. If the target device has limited dynamic memory, limiting 
+ the number of entries in the String Table can improve performance and
+ reduce the likelihood that you will exceed memory capacity.\r
+<P>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>valuePartitionCapacity</CODE> - maximum number of entries in the String Table</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="setPreserveLexicalValues(boolean)"><!-- --></A><H3>\r
+setPreserveLexicalValues</H3>\r
+<PRE>\r
+public final void <B>setPreserveLexicalValues</B>(boolean&nbsp;preserveLexicalValues)\r
+                                    throws org.openexi.proc.common.EXIOptionsException</PRE>\r
+<DL>\r
+<DD>Set to <i>true</i> to preserve the original string values from the EXI
+ stream. For example, a date string might be converted to a different
+ format when interpreted by the EXIDecoder. Preserving the lexical values
+ ensures that the identical strings are restored, and not just their 
+ logical values.\r
+<P>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>preserveLexicalValues</CODE> - true to keep original strings intact\r
+<DT><B>Throws:</B>\r
+<DD><CODE>org.openexi.proc.common.EXIOptionsException</CODE></DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="setDatatypeRepresentationMap(org.openexi.proc.common.QName[], int)"><!-- --></A><H3>\r
+setDatatypeRepresentationMap</H3>\r
+<PRE>\r
+public final void <B>setDatatypeRepresentationMap</B>(<A HREF="../../../org/openexi/proc/common/QName.html" title="class in org.openexi.proc.common">QName</A>[]&nbsp;dtrm,\r
+                                               int&nbsp;n_bindings)\r
+                                        throws org.openexi.proc.common.EXIOptionsException</PRE>\r
+<DL>\r
+<DD>Set a datatype representation map (DTRM). The DTRM allows you to remap
+ XMLSchema datatypes to EXI datatypes other than their default equivalents.
+ The map is created using a sequence of Qualified Name pairs that identify
+ a datatype definition in the XMLSchema namespace followed by the new 
+ corresponding datatype mapping in the EXI namespace.
+ <br /><br />
+ For example, the following lines map the boolean datatype from XMLSchema 
+ to the integer datatype in EXI.
+ <pre>
+   QName q1 = new QName("xsd:boolean","http://www.w3.org/2001/XMLSchema");
+   QName q2 = new QName("exi:integer","http://www.w3.org/2009/exi");
+   QName[] dtrm = new QName[2];
+   dtrm = {q1, q2}; // Each mapping requires 2 qualified names.
+   decoderInstance.setDatatypeRepresentationMap(dtrm, 1); // The array, and the number of pairs (1).
+ </pre>\r
+<P>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>dtrm</CODE> - a sequence of pairs of datatype QName and datatype representation QName<DD><CODE>n_bindings</CODE> - the number of QName pairs\r
+<DT><B>Throws:</B>\r
+<DD><CODE>org.openexi.proc.common.EXIOptionsException</CODE></DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="setEnableBinaryData(boolean)"><!-- --></A><H3>\r
+setEnableBinaryData</H3>\r
+<PRE>\r
+public final void <B>setEnableBinaryData</B>(boolean&nbsp;enable)</PRE>\r
+<DL>\r
+<DD>Each binary value will be returned as in a EventDescription of EVENT_BLOB 
+ instead of EVENT_CH when enabled.\r
+<P>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>enable</CODE> - </DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="setInitialBinaryDataBufferSize(int)"><!-- --></A><H3>\r
+setInitialBinaryDataBufferSize</H3>\r
+<PRE>\r
+public final void <B>setInitialBinaryDataBufferSize</B>(int&nbsp;initialSize)</PRE>\r
+<DL>\r
+<DD><DL>\r
+</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="processHeader()"><!-- --></A><H3>\r
+processHeader</H3>\r
+<PRE>\r
+public <A HREF="../../../org/openexi/proc/io/Scanner.html" title="class in org.openexi.proc.io">Scanner</A> <B>processHeader</B>()\r
+                      throws java.io.IOException,\r
+                             org.openexi.proc.common.EXIOptionsException</PRE>\r
+<DL>\r
+<DD>This method reads and configures any header options present
+ in the EXI stream, then returns a <A HREF="../../../org/openexi/proc/io/Scanner.html" title="class in org.openexi.proc.io"><CODE>Scanner</CODE></A> 
+ object you can use to parse the values from the EXI stream.\r
+<P>\r
+<DD><DL>\r
+\r
+<DT><B>Returns:</B><DD>Scanner parsable object with header options applied.\r
+<DT><B>Throws:</B>\r
+<DD><CODE>java.io.IOException</CODE>\r
+<DD><CODE>org.openexi.proc.common.EXIOptionsException</CODE></DL>\r
+</DD>\r
+</DL>\r
+<!-- ========= END OF CLASS DATA ========= -->\r
+<HR>\r
+\r
+\r
+<!-- ======= START OF BOTTOM NAVBAR ====== -->\r
+<A NAME="navbar_bottom"><!-- --></A>\r
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_bottom_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;PREV CLASS&nbsp;\r
+&nbsp;<A HREF="../../../org/openexi/proc/EXISchemaResolver.html" title="interface in org.openexi.proc"><B>NEXT CLASS</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../index.html?org/openexi/proc/EXIDecoder.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="EXIDecoder.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_bottom"></A>\r
+<!-- ======== END OF BOTTOM NAVBAR ======= -->\r
+\r
+<HR>\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/EXISchemaResolver.html b/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/EXISchemaResolver.html
new file mode 100644 (file)
index 0000000..7c90b7d
--- /dev/null
@@ -0,0 +1,218 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:56 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+EXISchemaResolver\r
+</TITLE>\r
+\r
+<META NAME="keywords" CONTENT="org.openexi.proc.EXISchemaResolver interface">\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">\r
+\r
+<SCRIPT type="text/javascript">\r
+function windowTitle()\r
+{\r
+    parent.document.title="EXISchemaResolver";\r
+}\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+</NOSCRIPT>\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white" onload="windowTitle();">\r
+\r
+\r
+<!-- ========= START OF TOP NAVBAR ======= -->\r
+<A NAME="navbar_top"><!-- --></A>\r
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_top_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../org/openexi/proc/EXIDecoder.html" title="class in org.openexi.proc"><B>PREV CLASS</B></A>&nbsp;\r
+&nbsp;<A HREF="../../../org/openexi/proc/HeaderOptionsOutputType.html" title="enum in org.openexi.proc"><B>NEXT CLASS</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../index.html?org/openexi/proc/EXISchemaResolver.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="EXISchemaResolver.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_top"></A>\r
+<!-- ========= END OF TOP NAVBAR ========= -->\r
+\r
+<HR>\r
+<!-- ======== START OF CLASS DATA ======== -->\r
+<H2>\r
+<FONT SIZE="-1">\r
+org.openexi.proc</FONT>\r
+<BR>\r
+Interface EXISchemaResolver</H2>\r
+<HR>\r
+<DL>\r
+<DT><PRE>public interface <B>EXISchemaResolver</B></DL>\r
+</PRE>\r
+\r
+<P>\r
+Developers have the option of implementing the EXISchemaResolver interface
+ to help EXIReader and EXIDecoder locate the correct grammar cache for parsing 
+ an EXI stream.\r
+<P>\r
+\r
+<P>\r
+<DL>\r
+<!-- yWorks UML Doclet   http://www.yworks.com/   b0ac8294d3f86ae0003f3a3a002ea3cf577df824efc6f2... -->
+</DL>\r
+<HR>\r
+\r
+<P>\r
+\r
+<!-- ========== METHOD SUMMARY =========== -->\r
+\r
+<A NAME="method_summary"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Method Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;<A HREF="../../../org/openexi/proc/grammars/GrammarCache.html" title="class in org.openexi.proc.grammars">GrammarCache</A></CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/proc/EXISchemaResolver.html#resolveSchema(java.lang.String, short)">resolveSchema</A></B>(java.lang.String&nbsp;schemaId,\r
+              short&nbsp;grammarOptions)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return a GrammarCache based on a schemaId and grammar options discovered 
+ in the header options of an EXI stream.</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+<P>\r
+\r
+<!-- ============ METHOD DETAIL ========== -->\r
+\r
+<A NAME="method_detail"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">\r
+<B>Method Detail</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<A NAME="resolveSchema(java.lang.String, short)"><!-- --></A><H3>\r
+resolveSchema</H3>\r
+<PRE>\r
+<A HREF="../../../org/openexi/proc/grammars/GrammarCache.html" title="class in org.openexi.proc.grammars">GrammarCache</A> <B>resolveSchema</B>(java.lang.String&nbsp;schemaId,\r
+                           short&nbsp;grammarOptions)</PRE>\r
+<DL>\r
+<DD>Return a GrammarCache based on a schemaId and grammar options discovered 
+ in the header options of an EXI stream.\r
+<P>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>schemaId</CODE> - the specific schema used to decode an EXI stream<DD><CODE>grammarOptions</CODE> - the specific grammar options used to decode an EXI stream\r
+<DT><B>Returns:</B><DD>a GrammarCache object</DL>\r
+</DD>\r
+</DL>\r
+<!-- ========= END OF CLASS DATA ========= -->\r
+<HR>\r
+\r
+\r
+<!-- ======= START OF BOTTOM NAVBAR ====== -->\r
+<A NAME="navbar_bottom"><!-- --></A>\r
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_bottom_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../org/openexi/proc/EXIDecoder.html" title="class in org.openexi.proc"><B>PREV CLASS</B></A>&nbsp;\r
+&nbsp;<A HREF="../../../org/openexi/proc/HeaderOptionsOutputType.html" title="enum in org.openexi.proc"><B>NEXT CLASS</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../index.html?org/openexi/proc/EXISchemaResolver.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="EXISchemaResolver.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_bottom"></A>\r
+<!-- ======== END OF BOTTOM NAVBAR ======= -->\r
+\r
+<HR>\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/HeaderOptionsOutputType.html b/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/HeaderOptionsOutputType.html
new file mode 100644 (file)
index 0000000..db42f8f
--- /dev/null
@@ -0,0 +1,357 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:56 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+HeaderOptionsOutputType\r
+</TITLE>\r
+\r
+<META NAME="keywords" CONTENT="org.openexi.proc.HeaderOptionsOutputType class">\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">\r
+\r
+<SCRIPT type="text/javascript">\r
+function windowTitle()\r
+{\r
+    parent.document.title="HeaderOptionsOutputType";\r
+}\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+</NOSCRIPT>\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white" onload="windowTitle();">\r
+\r
+\r
+<!-- ========= START OF TOP NAVBAR ======= -->\r
+<A NAME="navbar_top"><!-- --></A>\r
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_top_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../org/openexi/proc/EXISchemaResolver.html" title="interface in org.openexi.proc"><B>PREV CLASS</B></A>&nbsp;\r
+&nbsp;NEXT CLASS</FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../index.html?org/openexi/proc/HeaderOptionsOutputType.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="HeaderOptionsOutputType.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#enum_constant_summary">ENUM CONSTANTS</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;<A HREF="#enum_constant_detail">ENUM CONSTANTS</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_top"></A>\r
+<!-- ========= END OF TOP NAVBAR ========= -->\r
+\r
+<HR>\r
+<!-- ======== START OF CLASS DATA ======== -->\r
+<H2>\r
+<FONT SIZE="-1">\r
+org.openexi.proc</FONT>\r
+<BR>\r
+Enum HeaderOptionsOutputType</H2>\r
+<PRE>\r
+java.lang.Object\r
+  <IMG SRC="../../../resources/inherit.gif" ALT="extended by ">java.lang.Enum&lt;<A HREF="../../../org/openexi/proc/HeaderOptionsOutputType.html" title="enum in org.openexi.proc">HeaderOptionsOutputType</A>&gt;\r
+      <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>org.openexi.proc.HeaderOptionsOutputType</B>\r
+</PRE>\r
+<DL>\r
+<DT><B>All Implemented Interfaces:</B> <DD>java.io.Serializable, java.lang.Comparable&lt;<A HREF="../../../org/openexi/proc/HeaderOptionsOutputType.html" title="enum in org.openexi.proc">HeaderOptionsOutputType</A>&gt;</DD>\r
+</DL>\r
+<HR>\r
+<DL>\r
+<DT><PRE>public enum <B>HeaderOptionsOutputType</B><DT>extends java.lang.Enum&lt;<A HREF="../../../org/openexi/proc/HeaderOptionsOutputType.html" title="enum in org.openexi.proc">HeaderOptionsOutputType</A>&gt;</DL>\r
+</PRE>\r
+\r
+<P>\r
+This enumeration provides three possible settings for header options output.
+ <br /><br />
+ <ul>
+ <li><i>none</i> &ndash; Header options are not included in the header.
+ The receiver of the document must have precise knowledge of the 
+ settings used to encode the document.<br /><br />
+ </li>
+ <li>
+ <i>lessSchemaId</i> &ndash; Header options are present. Every
+ setting used is written out in the header options, except SchemaID.
+ The receiver of the document must know which schema is used to 
+ encode the document.<br /><br />
+ </li>
+ <li>
+ <i>all</i> &ndash; All header options are present. Every setting
+ used is written to the header options, including SchemaID.
+ </li>
+ </ul>\r
+<P>\r
+\r
+<P>\r
+<DL>\r
+<!-- yWorks UML Doclet   http://www.yworks.com/   b0ac8294d3f86ae0003f3a3a002ea3cf577df824efc6f2... -->
+</DL>\r
+<HR>\r
+\r
+<P>\r
+<!-- =========== ENUM CONSTANT SUMMARY =========== -->\r
+\r
+<A NAME="enum_constant_summary"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Enum Constant Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE><B><A HREF="../../../org/openexi/proc/HeaderOptionsOutputType.html#all">all</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE><B><A HREF="../../../org/openexi/proc/HeaderOptionsOutputType.html#lessSchemaId">lessSchemaId</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE><B><A HREF="../../../org/openexi/proc/HeaderOptionsOutputType.html#none">none</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+<!-- ========== METHOD SUMMARY =========== -->\r
+\r
+<A NAME="method_summary"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Method Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;<A HREF="../../../org/openexi/proc/HeaderOptionsOutputType.html" title="enum in org.openexi.proc">HeaderOptionsOutputType</A></CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/proc/HeaderOptionsOutputType.html#valueOf(java.lang.String)">valueOf</A></B>(java.lang.String&nbsp;name)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the enum constant of this type with the specified name.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;<A HREF="../../../org/openexi/proc/HeaderOptionsOutputType.html" title="enum in org.openexi.proc">HeaderOptionsOutputType</A>[]</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/proc/HeaderOptionsOutputType.html#values()">values</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an array containing the constants of this enum type, in
+the order they're declared.</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Enum"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">\r
+<TH ALIGN="left"><B>Methods inherited from class java.lang.Enum</B></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE>compareTo, equals, getDeclaringClass, hashCode, name, ordinal, toString, valueOf</CODE></TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">\r
+<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE>getClass, notify, notifyAll, wait, wait, wait</CODE></TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+<P>\r
+\r
+<!-- ============ ENUM CONSTANT DETAIL =========== -->\r
+\r
+<A NAME="enum_constant_detail"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">\r
+<B>Enum Constant Detail</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<A NAME="none"><!-- --></A><H3>\r
+none</H3>\r
+<PRE>\r
+public static final <A HREF="../../../org/openexi/proc/HeaderOptionsOutputType.html" title="enum in org.openexi.proc">HeaderOptionsOutputType</A> <B>none</B></PRE>\r
+<DL>\r
+<DL>\r
+</DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="lessSchemaId"><!-- --></A><H3>\r
+lessSchemaId</H3>\r
+<PRE>\r
+public static final <A HREF="../../../org/openexi/proc/HeaderOptionsOutputType.html" title="enum in org.openexi.proc">HeaderOptionsOutputType</A> <B>lessSchemaId</B></PRE>\r
+<DL>\r
+<DL>\r
+</DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="all"><!-- --></A><H3>\r
+all</H3>\r
+<PRE>\r
+public static final <A HREF="../../../org/openexi/proc/HeaderOptionsOutputType.html" title="enum in org.openexi.proc">HeaderOptionsOutputType</A> <B>all</B></PRE>\r
+<DL>\r
+<DL>\r
+</DL>\r
+</DL>\r
+\r
+<!-- ============ METHOD DETAIL ========== -->\r
+\r
+<A NAME="method_detail"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">\r
+<B>Method Detail</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<A NAME="values()"><!-- --></A><H3>\r
+values</H3>\r
+<PRE>\r
+public static final <A HREF="../../../org/openexi/proc/HeaderOptionsOutputType.html" title="enum in org.openexi.proc">HeaderOptionsOutputType</A>[] <B>values</B>()</PRE>\r
+<DL>\r
+<DD>Returns an array containing the constants of this enum type, in
+the order they're declared.  This method may be used to iterate
+over the constants as follows:
+<pre>
+for(HeaderOptionsOutputType c : HeaderOptionsOutputType.values())
+        System.out.println(c);
+</pre>\r
+<P>\r
+<DD><DL>\r
+\r
+<DT><B>Returns:</B><DD>an array containing the constants of this enum type, in
+the order they're declared</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="valueOf(java.lang.String)"><!-- --></A><H3>\r
+valueOf</H3>\r
+<PRE>\r
+public static <A HREF="../../../org/openexi/proc/HeaderOptionsOutputType.html" title="enum in org.openexi.proc">HeaderOptionsOutputType</A> <B>valueOf</B>(java.lang.String&nbsp;name)</PRE>\r
+<DL>\r
+<DD>Returns the enum constant of this type with the specified name.
+The string must match <I>exactly</I> an identifier used to declare an
+enum constant in this type.  (Extraneous whitespace characters are 
+not permitted.)\r
+<P>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>name</CODE> - the name of the enum constant to be returned.\r
+<DT><B>Returns:</B><DD>the enum constant with the specified name\r
+<DT><B>Throws:</B>\r
+<DD><CODE>java.lang.IllegalArgumentException</CODE> - if this enum type has no constant
+with the specified name</DL>\r
+</DD>\r
+</DL>\r
+<!-- ========= END OF CLASS DATA ========= -->\r
+<HR>\r
+\r
+\r
+<!-- ======= START OF BOTTOM NAVBAR ====== -->\r
+<A NAME="navbar_bottom"><!-- --></A>\r
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_bottom_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../org/openexi/proc/EXISchemaResolver.html" title="interface in org.openexi.proc"><B>PREV CLASS</B></A>&nbsp;\r
+&nbsp;NEXT CLASS</FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../index.html?org/openexi/proc/HeaderOptionsOutputType.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="HeaderOptionsOutputType.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#enum_constant_summary">ENUM CONSTANTS</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;<A HREF="#enum_constant_detail">ENUM CONSTANTS</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_bottom"></A>\r
+<!-- ======== END OF BOTTOM NAVBAR ======= -->\r
+\r
+<HR>\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/common/AlignmentType.html b/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/common/AlignmentType.html
new file mode 100644 (file)
index 0000000..cd6ca90
--- /dev/null
@@ -0,0 +1,379 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:57 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+AlignmentType\r
+</TITLE>\r
+\r
+<META NAME="keywords" CONTENT="org.openexi.proc.common.AlignmentType class">\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">\r
+\r
+<SCRIPT type="text/javascript">\r
+function windowTitle()\r
+{\r
+    parent.document.title="AlignmentType";\r
+}\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+</NOSCRIPT>\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white" onload="windowTitle();">\r
+\r
+\r
+<!-- ========= START OF TOP NAVBAR ======= -->\r
+<A NAME="navbar_top"><!-- --></A>\r
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_top_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;PREV CLASS&nbsp;\r
+&nbsp;<A HREF="../../../../org/openexi/proc/common/BinaryDataSource.html" title="class in org.openexi.proc.common"><B>NEXT CLASS</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../../index.html?org/openexi/proc/common/AlignmentType.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="AlignmentType.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#enum_constant_summary">ENUM CONSTANTS</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;<A HREF="#enum_constant_detail">ENUM CONSTANTS</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_top"></A>\r
+<!-- ========= END OF TOP NAVBAR ========= -->\r
+\r
+<HR>\r
+<!-- ======== START OF CLASS DATA ======== -->\r
+<H2>\r
+<FONT SIZE="-1">\r
+org.openexi.proc.common</FONT>\r
+<BR>\r
+Enum AlignmentType</H2>\r
+<PRE>\r
+java.lang.Object\r
+  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by ">java.lang.Enum&lt;<A HREF="../../../../org/openexi/proc/common/AlignmentType.html" title="enum in org.openexi.proc.common">AlignmentType</A>&gt;\r
+      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>org.openexi.proc.common.AlignmentType</B>\r
+</PRE>\r
+<DL>\r
+<DT><B>All Implemented Interfaces:</B> <DD>java.io.Serializable, java.lang.Comparable&lt;<A HREF="../../../../org/openexi/proc/common/AlignmentType.html" title="enum in org.openexi.proc.common">AlignmentType</A>&gt;</DD>\r
+</DL>\r
+<HR>\r
+<DL>\r
+<DT><PRE>public enum <B>AlignmentType</B><DT>extends java.lang.Enum&lt;<A HREF="../../../../org/openexi/proc/common/AlignmentType.html" title="enum in org.openexi.proc.common">AlignmentType</A>&gt;</DL>\r
+</PRE>\r
+\r
+<P>\r
+AlignmentType represents one of the following bit alignment 
+ styles so as to provide an extra degree of control over the
+ way information is stored in EXI format.
+ <br/>
+ <ul><li><i>bitPacked</i> is the default setting. Data are
+ stored in the fewest number of bits in sequential streams
+ that cross byte barriers. Conceptually, 8 boolean values
+ might be stored in a single byte, for example.</li><br/>
+ <li><i>byteAligned</i> stores data using EXI tags with 
+ byte barriers intact. Byte-aligned files are useful for
+ troubleshooting, because the data are often human-readable
+ when the values are literally encoded as strings. It
+ is not meant for data transfer, as the file has not been 
+ optimized.</li><br/>
+ <li><i>preCompress</i> is a byte-aligned format that arranges
+ the data into channels. It is intended for use cases where
+ file compression is part of the transfer process, so as
+ not to perform the compression step twice.</li><br/>
+ <li><i>compress</i> is not a bit alignment in and of itself,
+ but the Deflate algorithm requires that files be byte-aligned.
+ When compression is selected, byte-alignment is used, the
+ data are arranged in channels, and the file is compressed
+ at the end of processing.</li>
+ </ul>\r
+<P>\r
+\r
+<P>\r
+<DL>\r
+<!-- yWorks UML Doclet   http://www.yworks.com/   b0ac8294d3f86ae0003f3a3a002ea3cf577df824efc6f2... -->
+</DL>\r
+<HR>\r
+\r
+<P>\r
+<!-- =========== ENUM CONSTANT SUMMARY =========== -->\r
+\r
+<A NAME="enum_constant_summary"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Enum Constant Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/AlignmentType.html#bitPacked">bitPacked</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/AlignmentType.html#byteAligned">byteAligned</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/AlignmentType.html#compress">compress</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/AlignmentType.html#preCompress">preCompress</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+<!-- ========== METHOD SUMMARY =========== -->\r
+\r
+<A NAME="method_summary"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Method Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;<A HREF="../../../../org/openexi/proc/common/AlignmentType.html" title="enum in org.openexi.proc.common">AlignmentType</A></CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/AlignmentType.html#valueOf(java.lang.String)">valueOf</A></B>(java.lang.String&nbsp;name)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the enum constant of this type with the specified name.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;<A HREF="../../../../org/openexi/proc/common/AlignmentType.html" title="enum in org.openexi.proc.common">AlignmentType</A>[]</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/AlignmentType.html#values()">values</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an array containing the constants of this enum type, in
+the order they're declared.</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Enum"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">\r
+<TH ALIGN="left"><B>Methods inherited from class java.lang.Enum</B></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE>compareTo, equals, getDeclaringClass, hashCode, name, ordinal, toString, valueOf</CODE></TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">\r
+<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE>getClass, notify, notifyAll, wait, wait, wait</CODE></TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+<P>\r
+\r
+<!-- ============ ENUM CONSTANT DETAIL =========== -->\r
+\r
+<A NAME="enum_constant_detail"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">\r
+<B>Enum Constant Detail</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<A NAME="bitPacked"><!-- --></A><H3>\r
+bitPacked</H3>\r
+<PRE>\r
+public static final <A HREF="../../../../org/openexi/proc/common/AlignmentType.html" title="enum in org.openexi.proc.common">AlignmentType</A> <B>bitPacked</B></PRE>\r
+<DL>\r
+<DL>\r
+</DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="byteAligned"><!-- --></A><H3>\r
+byteAligned</H3>\r
+<PRE>\r
+public static final <A HREF="../../../../org/openexi/proc/common/AlignmentType.html" title="enum in org.openexi.proc.common">AlignmentType</A> <B>byteAligned</B></PRE>\r
+<DL>\r
+<DL>\r
+</DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="preCompress"><!-- --></A><H3>\r
+preCompress</H3>\r
+<PRE>\r
+public static final <A HREF="../../../../org/openexi/proc/common/AlignmentType.html" title="enum in org.openexi.proc.common">AlignmentType</A> <B>preCompress</B></PRE>\r
+<DL>\r
+<DL>\r
+</DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="compress"><!-- --></A><H3>\r
+compress</H3>\r
+<PRE>\r
+public static final <A HREF="../../../../org/openexi/proc/common/AlignmentType.html" title="enum in org.openexi.proc.common">AlignmentType</A> <B>compress</B></PRE>\r
+<DL>\r
+<DL>\r
+</DL>\r
+</DL>\r
+\r
+<!-- ============ METHOD DETAIL ========== -->\r
+\r
+<A NAME="method_detail"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">\r
+<B>Method Detail</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<A NAME="values()"><!-- --></A><H3>\r
+values</H3>\r
+<PRE>\r
+public static final <A HREF="../../../../org/openexi/proc/common/AlignmentType.html" title="enum in org.openexi.proc.common">AlignmentType</A>[] <B>values</B>()</PRE>\r
+<DL>\r
+<DD>Returns an array containing the constants of this enum type, in
+the order they're declared.  This method may be used to iterate
+over the constants as follows:
+<pre>
+for(AlignmentType c : AlignmentType.values())
+        System.out.println(c);
+</pre>\r
+<P>\r
+<DD><DL>\r
+\r
+<DT><B>Returns:</B><DD>an array containing the constants of this enum type, in
+the order they're declared</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="valueOf(java.lang.String)"><!-- --></A><H3>\r
+valueOf</H3>\r
+<PRE>\r
+public static <A HREF="../../../../org/openexi/proc/common/AlignmentType.html" title="enum in org.openexi.proc.common">AlignmentType</A> <B>valueOf</B>(java.lang.String&nbsp;name)</PRE>\r
+<DL>\r
+<DD>Returns the enum constant of this type with the specified name.
+The string must match <I>exactly</I> an identifier used to declare an
+enum constant in this type.  (Extraneous whitespace characters are 
+not permitted.)\r
+<P>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>name</CODE> - the name of the enum constant to be returned.\r
+<DT><B>Returns:</B><DD>the enum constant with the specified name\r
+<DT><B>Throws:</B>\r
+<DD><CODE>java.lang.IllegalArgumentException</CODE> - if this enum type has no constant
+with the specified name</DL>\r
+</DD>\r
+</DL>\r
+<!-- ========= END OF CLASS DATA ========= -->\r
+<HR>\r
+\r
+\r
+<!-- ======= START OF BOTTOM NAVBAR ====== -->\r
+<A NAME="navbar_bottom"><!-- --></A>\r
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_bottom_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;PREV CLASS&nbsp;\r
+&nbsp;<A HREF="../../../../org/openexi/proc/common/BinaryDataSource.html" title="class in org.openexi.proc.common"><B>NEXT CLASS</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../../index.html?org/openexi/proc/common/AlignmentType.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="AlignmentType.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#enum_constant_summary">ENUM CONSTANTS</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;<A HREF="#enum_constant_detail">ENUM CONSTANTS</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_bottom"></A>\r
+<!-- ======== END OF BOTTOM NAVBAR ======= -->\r
+\r
+<HR>\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/common/BinaryDataSource.html b/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/common/BinaryDataSource.html
new file mode 100644 (file)
index 0000000..27a32a0
--- /dev/null
@@ -0,0 +1,349 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:57 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+BinaryDataSource\r
+</TITLE>\r
+\r
+<META NAME="keywords" CONTENT="org.openexi.proc.common.BinaryDataSource class">\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">\r
+\r
+<SCRIPT type="text/javascript">\r
+function windowTitle()\r
+{\r
+    parent.document.title="BinaryDataSource";\r
+}\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+</NOSCRIPT>\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white" onload="windowTitle();">\r
+\r
+\r
+<!-- ========= START OF TOP NAVBAR ======= -->\r
+<A NAME="navbar_top"><!-- --></A>\r
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_top_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../../org/openexi/proc/common/AlignmentType.html" title="enum in org.openexi.proc.common"><B>PREV CLASS</B></A>&nbsp;\r
+&nbsp;<A HREF="../../../../org/openexi/proc/common/EventDescription.html" title="interface in org.openexi.proc.common"><B>NEXT CLASS</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../../index.html?org/openexi/proc/common/BinaryDataSource.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="BinaryDataSource.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_top"></A>\r
+<!-- ========= END OF TOP NAVBAR ========= -->\r
+\r
+<HR>\r
+<!-- ======== START OF CLASS DATA ======== -->\r
+<H2>\r
+<FONT SIZE="-1">\r
+org.openexi.proc.common</FONT>\r
+<BR>\r
+Class BinaryDataSource</H2>\r
+<PRE>\r
+java.lang.Object\r
+  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>org.openexi.proc.common.BinaryDataSource</B>\r
+</PRE>\r
+<HR>\r
+<DL>\r
+<DT><PRE>public final class <B>BinaryDataSource</B><DT>extends java.lang.Object</DL>\r
+</PRE>\r
+\r
+<P>\r
+<DL>\r
+<!-- yWorks UML Doclet   http://www.yworks.com/   b0ac8294d3f86ae0003f3a3a002ea3cf577df824efc6f2... -->
+</DL>\r
+<HR>\r
+\r
+<P>\r
+\r
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->\r
+\r
+<A NAME="constructor_summary"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Constructor Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/BinaryDataSource.html#BinaryDataSource()">BinaryDataSource</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+<!-- ========== METHOD SUMMARY =========== -->\r
+\r
+<A NAME="method_summary"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Method Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;byte[]</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/BinaryDataSource.html#getByteArray()">getByteArray</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;int</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/BinaryDataSource.html#getLength()">getLength</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;long</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/BinaryDataSource.html#getRemainingBytesCount()">getRemainingBytesCount</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;int</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/BinaryDataSource.html#getStartIndex()">getStartIndex</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;boolean</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/BinaryDataSource.html#hasNext()">hasNext</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;int</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/BinaryDataSource.html#next()">next</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">\r
+<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+<P>\r
+\r
+<!-- ========= CONSTRUCTOR DETAIL ======== -->\r
+\r
+<A NAME="constructor_detail"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">\r
+<B>Constructor Detail</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<A NAME="BinaryDataSource()"><!-- --></A><H3>\r
+BinaryDataSource</H3>\r
+<PRE>\r
+public <B>BinaryDataSource</B>()</PRE>\r
+<DL>\r
+</DL>\r
+\r
+<!-- ============ METHOD DETAIL ========== -->\r
+\r
+<A NAME="method_detail"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">\r
+<B>Method Detail</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<A NAME="getByteArray()"><!-- --></A><H3>\r
+getByteArray</H3>\r
+<PRE>\r
+public final byte[] <B>getByteArray</B>()</PRE>\r
+<DL>\r
+<DD><DL>\r
+</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="getStartIndex()"><!-- --></A><H3>\r
+getStartIndex</H3>\r
+<PRE>\r
+public final int <B>getStartIndex</B>()</PRE>\r
+<DL>\r
+<DD><DL>\r
+</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="getLength()"><!-- --></A><H3>\r
+getLength</H3>\r
+<PRE>\r
+public final int <B>getLength</B>()</PRE>\r
+<DL>\r
+<DD><DL>\r
+</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="getRemainingBytesCount()"><!-- --></A><H3>\r
+getRemainingBytesCount</H3>\r
+<PRE>\r
+public final long <B>getRemainingBytesCount</B>()</PRE>\r
+<DL>\r
+<DD><DL>\r
+</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="hasNext()"><!-- --></A><H3>\r
+hasNext</H3>\r
+<PRE>\r
+public boolean <B>hasNext</B>()</PRE>\r
+<DL>\r
+<DD><DL>\r
+</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="next()"><!-- --></A><H3>\r
+next</H3>\r
+<PRE>\r
+public int <B>next</B>()\r
+         throws java.io.IOException</PRE>\r
+<DL>\r
+<DD><DL>\r
+\r
+<DT><B>Throws:</B>\r
+<DD><CODE>java.io.IOException</CODE></DL>\r
+</DD>\r
+</DL>\r
+<!-- ========= END OF CLASS DATA ========= -->\r
+<HR>\r
+\r
+\r
+<!-- ======= START OF BOTTOM NAVBAR ====== -->\r
+<A NAME="navbar_bottom"><!-- --></A>\r
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_bottom_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../../org/openexi/proc/common/AlignmentType.html" title="enum in org.openexi.proc.common"><B>PREV CLASS</B></A>&nbsp;\r
+&nbsp;<A HREF="../../../../org/openexi/proc/common/EventDescription.html" title="interface in org.openexi.proc.common"><B>NEXT CLASS</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../../index.html?org/openexi/proc/common/BinaryDataSource.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="BinaryDataSource.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_bottom"></A>\r
+<!-- ======== END OF BOTTOM NAVBAR ======= -->\r
+\r
+<HR>\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/common/EXIOptions.html b/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/common/EXIOptions.html
new file mode 100644 (file)
index 0000000..27d78e0
--- /dev/null
@@ -0,0 +1,502 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:57 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+EXIOptions\r
+</TITLE>\r
+\r
+<META NAME="keywords" CONTENT="org.openexi.proc.common.EXIOptions class">\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">\r
+\r
+<SCRIPT type="text/javascript">\r
+function windowTitle()\r
+{\r
+    parent.document.title="EXIOptions";\r
+}\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+</NOSCRIPT>\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white" onload="windowTitle();">\r
+\r
+\r
+<!-- ========= START OF TOP NAVBAR ======= -->\r
+<A NAME="navbar_top"><!-- --></A>\r
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_top_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../../org/openexi/proc/common/EventType.html" title="class in org.openexi.proc.common"><B>PREV CLASS</B></A>&nbsp;\r
+&nbsp;<A HREF="../../../../org/openexi/proc/common/GrammarOptions.html" title="class in org.openexi.proc.common"><B>NEXT CLASS</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../../index.html?org/openexi/proc/common/EXIOptions.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="EXIOptions.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_top"></A>\r
+<!-- ========= END OF TOP NAVBAR ========= -->\r
+\r
+<HR>\r
+<!-- ======== START OF CLASS DATA ======== -->\r
+<H2>\r
+<FONT SIZE="-1">\r
+org.openexi.proc.common</FONT>\r
+<BR>\r
+Class EXIOptions</H2>\r
+<PRE>\r
+java.lang.Object\r
+  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>org.openexi.proc.common.EXIOptions</B>\r
+</PRE>\r
+<HR>\r
+<DL>\r
+<DT><PRE>public final class <B>EXIOptions</B><DT>extends java.lang.Object</DL>\r
+</PRE>\r
+\r
+<P>\r
+EXIOptions provides accessors for values associated with
+ EXI options in the EXI header of an EXI stream.\r
+<P>\r
+\r
+<P>\r
+<DL>\r
+<!-- yWorks UML Doclet   http://www.yworks.com/   b0ac8294d3f86ae0003f3a3a002ea3cf577df824efc6f2... -->
+</DL>\r
+<HR>\r
+\r
+<P>\r
+\r
+<!-- ========== METHOD SUMMARY =========== -->\r
+\r
+<A NAME="method_summary"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Method Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;<A HREF="../../../../org/openexi/proc/common/AlignmentType.html" title="enum in org.openexi.proc.common">AlignmentType</A></CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EXIOptions.html#getAlignmentType()">getAlignmentType</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get the bit alignment setting.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;int</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EXIOptions.html#getBlockSize()">getBlockSize</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of element and attribute values that are read and processed
+ as a group.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;<A HREF="../../../../org/openexi/proc/common/QName.html" title="class in org.openexi.proc.common">QName</A>[]</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EXIOptions.html#getDatatypeRepresentationMap()">getDatatypeRepresentationMap</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an array of qualified names that map XMLSchema datatypes to 
+ non-standard equivalents in EXI.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;int</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EXIOptions.html#getDatatypeRepresentationMapBindingsCount()">getDatatypeRepresentationMapBindingsCount</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of Datatype Representation Map QName pairs.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;boolean</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EXIOptions.html#getPreserveComments()">getPreserveComments</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns whether comments are conserved in the EXI Stream.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;boolean</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EXIOptions.html#getPreserveDTD()">getPreserveDTD</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns whether the document type definition is conserved in the EXI Stream.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;boolean</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EXIOptions.html#getPreserveLexicalValues()">getPreserveLexicalValues</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns whether lexical values (literal strings) are preserved rather 
+ than the logical values of elements and attributes.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;boolean</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EXIOptions.html#getPreserveNS()">getPreserveNS</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns whether the namespaces are preserved in the EXI stream.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;boolean</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EXIOptions.html#getPreservePIs()">getPreservePIs</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns whether processing instructions are conserved in the EXI Stream.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;int</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EXIOptions.html#getValueMaxLength()">getValueMaxLength</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the maximum length in characters of strings that will be included
+ in the String Table.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;int</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EXIOptions.html#getValuePartitionCapacity()">getValuePartitionCapacity</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the maximum number of entries in the String Table.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;boolean</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EXIOptions.html#isFragment()">isFragment</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An XML fragment is a non-compliant XML document with multiple root
+ elements.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;boolean</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EXIOptions.html#isStrict()">isStrict</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Strict option applies to streams that have an associated XML Schema
+ and the data in the XML stream is 100% compliant with the schema.</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">\r
+<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+<P>\r
+\r
+<!-- ============ METHOD DETAIL ========== -->\r
+\r
+<A NAME="method_detail"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">\r
+<B>Method Detail</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<A NAME="getAlignmentType()"><!-- --></A><H3>\r
+getAlignmentType</H3>\r
+<PRE>\r
+public <A HREF="../../../../org/openexi/proc/common/AlignmentType.html" title="enum in org.openexi.proc.common">AlignmentType</A> <B>getAlignmentType</B>()</PRE>\r
+<DL>\r
+<DD>Get the bit alignment setting.\r
+<P>\r
+<DD><DL>\r
+\r
+<DT><B>Returns:</B><DD><A HREF="../../../../org/openexi/proc/common/AlignmentType.html" title="enum in org.openexi.proc.common"><CODE>AlignmentType</CODE></A></DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="isFragment()"><!-- --></A><H3>\r
+isFragment</H3>\r
+<PRE>\r
+public boolean <B>isFragment</B>()</PRE>\r
+<DL>\r
+<DD>An XML fragment is a non-compliant XML document with multiple root
+ elements.\r
+<P>\r
+<DD><DL>\r
+\r
+<DT><B>Returns:</B><DD><i>true</i> if the stream is an XML fragment.</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="isStrict()"><!-- --></A><H3>\r
+isStrict</H3>\r
+<PRE>\r
+public boolean <B>isStrict</B>()</PRE>\r
+<DL>\r
+<DD>The Strict option applies to streams that have an associated XML Schema
+ and the data in the XML stream is 100% compliant with the schema.\r
+<P>\r
+<DD><DL>\r
+\r
+<DT><B>Returns:</B><DD><i>true</i> if using strict interpretation of an associated XML Schema.</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="getPreserveComments()"><!-- --></A><H3>\r
+getPreserveComments</H3>\r
+<PRE>\r
+public boolean <B>getPreserveComments</B>()</PRE>\r
+<DL>\r
+<DD>Returns whether comments are conserved in the EXI Stream.\r
+<P>\r
+<DD><DL>\r
+\r
+<DT><B>Returns:</B><DD><i>true</i> if comments are preserved.</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="getPreservePIs()"><!-- --></A><H3>\r
+getPreservePIs</H3>\r
+<PRE>\r
+public boolean <B>getPreservePIs</B>()</PRE>\r
+<DL>\r
+<DD>Returns whether processing instructions are conserved in the EXI Stream.\r
+<P>\r
+<DD><DL>\r
+\r
+<DT><B>Returns:</B><DD><i>true</i> if processing instructions are preserved.</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="getPreserveDTD()"><!-- --></A><H3>\r
+getPreserveDTD</H3>\r
+<PRE>\r
+public boolean <B>getPreserveDTD</B>()</PRE>\r
+<DL>\r
+<DD>Returns whether the document type definition is conserved in the EXI Stream.\r
+<P>\r
+<DD><DL>\r
+\r
+<DT><B>Returns:</B><DD><i>true</i> if the document type definition is preserved.</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="getPreserveNS()"><!-- --></A><H3>\r
+getPreserveNS</H3>\r
+<PRE>\r
+public boolean <B>getPreserveNS</B>()</PRE>\r
+<DL>\r
+<DD>Returns whether the namespaces are preserved in the EXI stream.\r
+<P>\r
+<DD><DL>\r
+\r
+<DT><B>Returns:</B><DD><i>true</i> if namespaces are preserved.</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="getBlockSize()"><!-- --></A><H3>\r
+getBlockSize</H3>\r
+<PRE>\r
+public int <B>getBlockSize</B>()</PRE>\r
+<DL>\r
+<DD>Returns the number of element and attribute values that are read and processed
+ as a group.\r
+<P>\r
+<DD><DL>\r
+\r
+<DT><B>Returns:</B><DD>the current block size. Default is 1,000,000.</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="getValueMaxLength()"><!-- --></A><H3>\r
+getValueMaxLength</H3>\r
+<PRE>\r
+public int <B>getValueMaxLength</B>()</PRE>\r
+<DL>\r
+<DD>Returns the maximum length in characters of strings that will be included
+ in the String Table.\r
+<P>\r
+<DD><DL>\r
+\r
+<DT><B>Returns:</B><DD>the maximum length of values added to the String Table. Default is unbounded (-1).</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="getValuePartitionCapacity()"><!-- --></A><H3>\r
+getValuePartitionCapacity</H3>\r
+<PRE>\r
+public int <B>getValuePartitionCapacity</B>()</PRE>\r
+<DL>\r
+<DD>Returns the maximum number of entries in the String Table.\r
+<P>\r
+<DD><DL>\r
+\r
+<DT><B>Returns:</B><DD>the maximum number of partitions (entries) in the String Table. Default is unbounded (-1).</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="getPreserveLexicalValues()"><!-- --></A><H3>\r
+getPreserveLexicalValues</H3>\r
+<PRE>\r
+public boolean <B>getPreserveLexicalValues</B>()</PRE>\r
+<DL>\r
+<DD>Returns whether lexical values (literal strings) are preserved rather 
+ than the logical values of elements and attributes.\r
+<P>\r
+<DD><DL>\r
+\r
+<DT><B>Returns:</B><DD><i>true</i> if lexical values are preserved.</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="getDatatypeRepresentationMapBindingsCount()"><!-- --></A><H3>\r
+getDatatypeRepresentationMapBindingsCount</H3>\r
+<PRE>\r
+public int <B>getDatatypeRepresentationMapBindingsCount</B>()</PRE>\r
+<DL>\r
+<DD>Returns the number of Datatype Representation Map QName pairs.\r
+<P>\r
+<DD><DL>\r
+\r
+<DT><B>Returns:</B><DD>the number of DTRM bindings.</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="getDatatypeRepresentationMap()"><!-- --></A><H3>\r
+getDatatypeRepresentationMap</H3>\r
+<PRE>\r
+public <A HREF="../../../../org/openexi/proc/common/QName.html" title="class in org.openexi.proc.common">QName</A>[] <B>getDatatypeRepresentationMap</B>()</PRE>\r
+<DL>\r
+<DD>Returns an array of qualified names that map XMLSchema datatypes to 
+ non-standard equivalents in EXI.\r
+<P>\r
+<DD><DL>\r
+\r
+<DT><B>Returns:</B><DD>an array of qualified names comprising a DTRM.</DL>\r
+</DD>\r
+</DL>\r
+<!-- ========= END OF CLASS DATA ========= -->\r
+<HR>\r
+\r
+\r
+<!-- ======= START OF BOTTOM NAVBAR ====== -->\r
+<A NAME="navbar_bottom"><!-- --></A>\r
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_bottom_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../../org/openexi/proc/common/EventType.html" title="class in org.openexi.proc.common"><B>PREV CLASS</B></A>&nbsp;\r
+&nbsp;<A HREF="../../../../org/openexi/proc/common/GrammarOptions.html" title="class in org.openexi.proc.common"><B>NEXT CLASS</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../../index.html?org/openexi/proc/common/EXIOptions.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="EXIOptions.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_bottom"></A>\r
+<!-- ======== END OF BOTTOM NAVBAR ======= -->\r
+\r
+<HR>\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/common/EventDescription.html b/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/common/EventDescription.html
new file mode 100644 (file)
index 0000000..396802f
--- /dev/null
@@ -0,0 +1,653 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:57 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+EventDescription\r
+</TITLE>\r
+\r
+<META NAME="keywords" CONTENT="org.openexi.proc.common.EventDescription interface">\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">\r
+\r
+<SCRIPT type="text/javascript">\r
+function windowTitle()\r
+{\r
+    parent.document.title="EventDescription";\r
+}\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+</NOSCRIPT>\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white" onload="windowTitle();">\r
+\r
+\r
+<!-- ========= START OF TOP NAVBAR ======= -->\r
+<A NAME="navbar_top"><!-- --></A>\r
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_top_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../../org/openexi/proc/common/BinaryDataSource.html" title="class in org.openexi.proc.common"><B>PREV CLASS</B></A>&nbsp;\r
+&nbsp;<A HREF="../../../../org/openexi/proc/common/EventType.html" title="class in org.openexi.proc.common"><B>NEXT CLASS</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../../index.html?org/openexi/proc/common/EventDescription.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="EventDescription.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_top"></A>\r
+<!-- ========= END OF TOP NAVBAR ========= -->\r
+\r
+<HR>\r
+<!-- ======== START OF CLASS DATA ======== -->\r
+<H2>\r
+<FONT SIZE="-1">\r
+org.openexi.proc.common</FONT>\r
+<BR>\r
+Interface EventDescription</H2>\r
+<DL>\r
+<DT><B>All Known Implementing Classes:</B> <DD><A HREF="../../../../org/openexi/proc/common/EventType.html" title="class in org.openexi.proc.common">EventType</A></DD>\r
+</DL>\r
+<HR>\r
+<DL>\r
+<DT><PRE>public interface <B>EventDescription</B></DL>\r
+</PRE>\r
+\r
+<P>\r
+<p>EventDescription provides accessors to the current EXI event data
+ during the decode process.</p>
+ <p>Note that the content of EventDescription is transient, which means
+ its content may change when the decoder is asked for access to the
+ next EXI event data.</p>\r
+<P>\r
+\r
+<P>\r
+<DL>\r
+<!-- yWorks UML Doclet   http://www.yworks.com/   b0ac8294d3f86ae0003f3a3a002ea3cf577df824efc6f2... -->
+</DL>\r
+<HR>\r
+\r
+<P>\r
+<!-- =========== FIELD SUMMARY =========== -->\r
+\r
+<A NAME="field_summary"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Field Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;byte</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EventDescription.html#EVENT_AT">EVENT_AT</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Attribute event.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;byte</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EventDescription.html#EVENT_BLOB">EVENT_BLOB</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BLOB event (content of an element).</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;byte</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EventDescription.html#EVENT_CH">EVENT_CH</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Character event (content of an element).</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;byte</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EventDescription.html#EVENT_CM">EVENT_CM</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Comment event.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;byte</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EventDescription.html#EVENT_DTD">EVENT_DTD</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Document Type Definition event.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;byte</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EventDescription.html#EVENT_ED">EVENT_ED</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End Document event.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;byte</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EventDescription.html#EVENT_EE">EVENT_EE</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End Element event.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;byte</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EventDescription.html#EVENT_ER">EVENT_ER</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Entity Reference event.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;byte</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EventDescription.html#EVENT_NL">EVENT_NL</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Attribute <i>xsi:nil</i>.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;byte</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EventDescription.html#EVENT_NS">EVENT_NS</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Namespace declaration event.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;byte</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EventDescription.html#EVENT_PI">EVENT_PI</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Processing Instruction event.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;byte</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EventDescription.html#EVENT_SD">EVENT_SD</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Start Document event.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;byte</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EventDescription.html#EVENT_SE">EVENT_SE</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Start Element event.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;byte</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EventDescription.html#EVENT_TP">EVENT_TP</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Attribute <i>xsi:type</i>.</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+<!-- ========== METHOD SUMMARY =========== -->\r
+\r
+<A NAME="method_summary"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Method Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;<A HREF="../../../../org/openexi/proc/common/BinaryDataSource.html" title="class in org.openexi.proc.common">BinaryDataSource</A></CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EventDescription.html#getBinaryDataSource()">getBinaryDataSource</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gets the value of an EVENT_BLOB.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;<A HREF="../../../../org/openexi/schema/Characters.html" title="class in org.openexi.schema">Characters</A></CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EventDescription.html#getCharacters()">getCharacters</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gets the value of an EVENT_CH, 
+ Attribute (EVENT_AT, EVENT_NL, EVENT_TP), EVENT_CM,
+ EVENT_DTD or EVENT_PI event.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;byte</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EventDescription.html#getEventKind()">getEventKind</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gets the event kind of which instance data this EventDescription is describing.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;<A HREF="../../../../org/openexi/proc/common/EventType.html" title="class in org.openexi.proc.common">EventType</A></CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EventDescription.html#getEventType()">getEventType</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the EventType from which this event is derived.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;java.lang.String</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EventDescription.html#getName()">getName</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gets the name of the EXI event.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;java.lang.String</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EventDescription.html#getPrefix()">getPrefix</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gets the namespace prefix of the event.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;java.lang.String</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EventDescription.html#getURI()">getURI</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gets the URI of the EXI event.</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+<P>\r
+\r
+<!-- ============ FIELD DETAIL =========== -->\r
+\r
+<A NAME="field_detail"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">\r
+<B>Field Detail</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<A NAME="EVENT_SD"><!-- --></A><H3>\r
+EVENT_SD</H3>\r
+<PRE>\r
+static final byte <B>EVENT_SD</B></PRE>\r
+<DL>\r
+<DD>Start Document event.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.openexi.proc.common.EventDescription.EVENT_SD">Constant Field Values</A></DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="EVENT_ED"><!-- --></A><H3>\r
+EVENT_ED</H3>\r
+<PRE>\r
+static final byte <B>EVENT_ED</B></PRE>\r
+<DL>\r
+<DD>End Document event.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.openexi.proc.common.EventDescription.EVENT_ED">Constant Field Values</A></DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="EVENT_SE"><!-- --></A><H3>\r
+EVENT_SE</H3>\r
+<PRE>\r
+static final byte <B>EVENT_SE</B></PRE>\r
+<DL>\r
+<DD>Start Element event.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.openexi.proc.common.EventDescription.EVENT_SE">Constant Field Values</A></DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="EVENT_AT"><!-- --></A><H3>\r
+EVENT_AT</H3>\r
+<PRE>\r
+static final byte <B>EVENT_AT</B></PRE>\r
+<DL>\r
+<DD>Attribute event.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.openexi.proc.common.EventDescription.EVENT_AT">Constant Field Values</A></DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="EVENT_TP"><!-- --></A><H3>\r
+EVENT_TP</H3>\r
+<PRE>\r
+static final byte <B>EVENT_TP</B></PRE>\r
+<DL>\r
+<DD>Attribute <i>xsi:type</i>.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.openexi.proc.common.EventDescription.EVENT_TP">Constant Field Values</A></DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="EVENT_NL"><!-- --></A><H3>\r
+EVENT_NL</H3>\r
+<PRE>\r
+static final byte <B>EVENT_NL</B></PRE>\r
+<DL>\r
+<DD>Attribute <i>xsi:nil</i>.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.openexi.proc.common.EventDescription.EVENT_NL">Constant Field Values</A></DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="EVENT_CH"><!-- --></A><H3>\r
+EVENT_CH</H3>\r
+<PRE>\r
+static final byte <B>EVENT_CH</B></PRE>\r
+<DL>\r
+<DD>Character event (content of an element).\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.openexi.proc.common.EventDescription.EVENT_CH">Constant Field Values</A></DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="EVENT_EE"><!-- --></A><H3>\r
+EVENT_EE</H3>\r
+<PRE>\r
+static final byte <B>EVENT_EE</B></PRE>\r
+<DL>\r
+<DD>End Element event.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.openexi.proc.common.EventDescription.EVENT_EE">Constant Field Values</A></DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="EVENT_NS"><!-- --></A><H3>\r
+EVENT_NS</H3>\r
+<PRE>\r
+static final byte <B>EVENT_NS</B></PRE>\r
+<DL>\r
+<DD>Namespace declaration event.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.openexi.proc.common.EventDescription.EVENT_NS">Constant Field Values</A></DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="EVENT_PI"><!-- --></A><H3>\r
+EVENT_PI</H3>\r
+<PRE>\r
+static final byte <B>EVENT_PI</B></PRE>\r
+<DL>\r
+<DD>Processing Instruction event.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.openexi.proc.common.EventDescription.EVENT_PI">Constant Field Values</A></DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="EVENT_CM"><!-- --></A><H3>\r
+EVENT_CM</H3>\r
+<PRE>\r
+static final byte <B>EVENT_CM</B></PRE>\r
+<DL>\r
+<DD>Comment event.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.openexi.proc.common.EventDescription.EVENT_CM">Constant Field Values</A></DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="EVENT_ER"><!-- --></A><H3>\r
+EVENT_ER</H3>\r
+<PRE>\r
+static final byte <B>EVENT_ER</B></PRE>\r
+<DL>\r
+<DD>Entity Reference event.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.openexi.proc.common.EventDescription.EVENT_ER">Constant Field Values</A></DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="EVENT_DTD"><!-- --></A><H3>\r
+EVENT_DTD</H3>\r
+<PRE>\r
+static final byte <B>EVENT_DTD</B></PRE>\r
+<DL>\r
+<DD>Document Type Definition event.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.openexi.proc.common.EventDescription.EVENT_DTD">Constant Field Values</A></DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="EVENT_BLOB"><!-- --></A><H3>\r
+EVENT_BLOB</H3>\r
+<PRE>\r
+static final byte <B>EVENT_BLOB</B></PRE>\r
+<DL>\r
+<DD>BLOB event (content of an element).\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.openexi.proc.common.EventDescription.EVENT_BLOB">Constant Field Values</A></DL>\r
+</DL>\r
+\r
+<!-- ============ METHOD DETAIL ========== -->\r
+\r
+<A NAME="method_detail"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">\r
+<B>Method Detail</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<A NAME="getEventKind()"><!-- --></A><H3>\r
+getEventKind</H3>\r
+<PRE>\r
+byte <B>getEventKind</B>()</PRE>\r
+<DL>\r
+<DD>Gets the event kind of which instance data this EventDescription is describing.\r
+<P>\r
+<DD><DL>\r
+\r
+<DT><B>Returns:</B><DD>a byte representing the event kind.</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="getURI()"><!-- --></A><H3>\r
+getURI</H3>\r
+<PRE>\r
+java.lang.String <B>getURI</B>()</PRE>\r
+<DL>\r
+<DD>Gets the URI of the EXI event.\r
+<P>\r
+<DD><DL>\r
+\r
+<DT><B>Returns:</B><DD>the URI as a String.</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="getName()"><!-- --></A><H3>\r
+getName</H3>\r
+<PRE>\r
+java.lang.String <B>getName</B>()</PRE>\r
+<DL>\r
+<DD>Gets the name of the EXI event.\r
+<P>\r
+<DD><DL>\r
+\r
+<DT><B>Returns:</B><DD>the name of the event as a String.</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="getPrefix()"><!-- --></A><H3>\r
+getPrefix</H3>\r
+<PRE>\r
+java.lang.String <B>getPrefix</B>()</PRE>\r
+<DL>\r
+<DD>Gets the namespace prefix of the event.\r
+<P>\r
+<DD><DL>\r
+\r
+<DT><B>Returns:</B><DD>the prefix as a String.</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="getCharacters()"><!-- --></A><H3>\r
+getCharacters</H3>\r
+<PRE>\r
+<A HREF="../../../../org/openexi/schema/Characters.html" title="class in org.openexi.schema">Characters</A> <B>getCharacters</B>()</PRE>\r
+<DL>\r
+<DD>Gets the value of an EVENT_CH, 
+ Attribute (EVENT_AT, EVENT_NL, EVENT_TP), EVENT_CM,
+ EVENT_DTD or EVENT_PI event.\r
+<P>\r
+<DD><DL>\r
+\r
+<DT><B>Returns:</B><DD>a Characters of the corresponding value</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="getBinaryDataSource()"><!-- --></A><H3>\r
+getBinaryDataSource</H3>\r
+<PRE>\r
+<A HREF="../../../../org/openexi/proc/common/BinaryDataSource.html" title="class in org.openexi.proc.common">BinaryDataSource</A> <B>getBinaryDataSource</B>()</PRE>\r
+<DL>\r
+<DD>Gets the value of an EVENT_BLOB.\r
+<P>\r
+<DD><DL>\r
+\r
+<DT><B>Returns:</B><DD>a BinaryData of the corresponding value</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="getEventType()"><!-- --></A><H3>\r
+getEventType</H3>\r
+<PRE>\r
+<A HREF="../../../../org/openexi/proc/common/EventType.html" title="class in org.openexi.proc.common">EventType</A> <B>getEventType</B>()</PRE>\r
+<DL>\r
+<DD>Returns the EventType from which this event is derived.\r
+<P>\r
+<DD><DL>\r
+</DL>\r
+</DD>\r
+</DL>\r
+<!-- ========= END OF CLASS DATA ========= -->\r
+<HR>\r
+\r
+\r
+<!-- ======= START OF BOTTOM NAVBAR ====== -->\r
+<A NAME="navbar_bottom"><!-- --></A>\r
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_bottom_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../../org/openexi/proc/common/BinaryDataSource.html" title="class in org.openexi.proc.common"><B>PREV CLASS</B></A>&nbsp;\r
+&nbsp;<A HREF="../../../../org/openexi/proc/common/EventType.html" title="class in org.openexi.proc.common"><B>NEXT CLASS</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../../index.html?org/openexi/proc/common/EventDescription.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="EventDescription.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_bottom"></A>\r
+<!-- ======== END OF BOTTOM NAVBAR ======= -->\r
+\r
+<HR>\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/common/EventType.html b/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/common/EventType.html
new file mode 100644 (file)
index 0000000..aaef0c4
--- /dev/null
@@ -0,0 +1,829 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:57 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+EventType\r
+</TITLE>\r
+\r
+<META NAME="keywords" CONTENT="org.openexi.proc.common.EventType class">\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">\r
+\r
+<SCRIPT type="text/javascript">\r
+function windowTitle()\r
+{\r
+    parent.document.title="EventType";\r
+}\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+</NOSCRIPT>\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white" onload="windowTitle();">\r
+\r
+\r
+<!-- ========= START OF TOP NAVBAR ======= -->\r
+<A NAME="navbar_top"><!-- --></A>\r
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_top_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../../org/openexi/proc/common/EventDescription.html" title="interface in org.openexi.proc.common"><B>PREV CLASS</B></A>&nbsp;\r
+&nbsp;<A HREF="../../../../org/openexi/proc/common/EXIOptions.html" title="class in org.openexi.proc.common"><B>NEXT CLASS</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../../index.html?org/openexi/proc/common/EventType.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="EventType.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_org.openexi.proc.common.EventCode">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;METHOD</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_top"></A>\r
+<!-- ========= END OF TOP NAVBAR ========= -->\r
+\r
+<HR>\r
+<!-- ======== START OF CLASS DATA ======== -->\r
+<H2>\r
+<FONT SIZE="-1">\r
+org.openexi.proc.common</FONT>\r
+<BR>\r
+Class EventType</H2>\r
+<PRE>\r
+java.lang.Object\r
+  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by ">org.openexi.proc.common.EventCode\r
+      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>org.openexi.proc.common.EventType</B>\r
+</PRE>\r
+<DL>\r
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../org/openexi/proc/common/EventDescription.html" title="interface in org.openexi.proc.common">EventDescription</A></DD>\r
+</DL>\r
+<HR>\r
+<DL>\r
+<DT><PRE>public class <B>EventType</B><DT>extends org.openexi.proc.common.EventCode<DT>implements <A HREF="../../../../org/openexi/proc/common/EventDescription.html" title="interface in org.openexi.proc.common">EventDescription</A></DL>\r
+</PRE>\r
+\r
+<P>\r
+EventType denotes terminal symbols of grammar productions  
+ defined in the EXI 1.0 specification.\r
+<P>\r
+\r
+<P>\r
+<DL>\r
+<!-- yWorks UML Doclet   http://www.yworks.com/   b0ac8294d3f86ae0003f3a3a002ea3cf577df824efc6f2... -->
+</DL>\r
+<HR>\r
+\r
+<P>\r
+<!-- =========== FIELD SUMMARY =========== -->\r
+\r
+<A NAME="field_summary"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Field Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;byte</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EventType.html#ITEM_AT">ITEM_AT</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Event type for an Attribute learned by built-in element grammars 
+ from prior attribute occurrences.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;byte</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EventType.html#ITEM_AT_WC_ANY_UNTYPED">ITEM_AT_WC_ANY_UNTYPED</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Wildcard event type for an Attribute where the attribute's defined 
+  datatype (if any) is disregarded.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;byte</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EventType.html#ITEM_CH">ITEM_CH</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Event type for a Character event (character events store values as strings).</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;byte</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EventType.html#ITEM_CM">ITEM_CM</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Event type for a Comment.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;byte</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EventType.html#ITEM_DTD">ITEM_DTD</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Event type for a Document Type Definition.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;byte</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EventType.html#ITEM_ED">ITEM_ED</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Event type for End of Document.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;byte</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EventType.html#ITEM_EE">ITEM_EE</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Event type for End of Element.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;byte</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EventType.html#ITEM_ER">ITEM_ER</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Event type for an Entity Reference.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;byte</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EventType.html#ITEM_NS">ITEM_NS</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Event type for a Namespace declaration.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;byte</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EventType.html#ITEM_PI">ITEM_PI</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Event type for a Processing Instruction.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;byte</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EventType.html#ITEM_SC">ITEM_SC</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Self-contained items are not supported in this release of OpenEXI.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;byte</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EventType.html#ITEM_SCHEMA_AT">ITEM_SCHEMA_AT</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Event type for AttributeUse that matches an attribute event with
+ a valid value.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;byte</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EventType.html#ITEM_SCHEMA_AT_INVALID_VALUE">ITEM_SCHEMA_AT_INVALID_VALUE</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Event type for AttributeUse that matches an attribute event with an 
+ invalid value.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;byte</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EventType.html#ITEM_SCHEMA_AT_WC_ANY">ITEM_SCHEMA_AT_WC_ANY</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Attribute wildcard event type stemming from a schema, where the attribute's 
+ defined datatype (if any) is applied.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;byte</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EventType.html#ITEM_SCHEMA_AT_WC_NS">ITEM_SCHEMA_AT_WC_NS</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Attribute wildcard event type, qualified with a specific namespace, stemming
+ from a schema where the attribute's defined datatype (if any) is applied.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;byte</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EventType.html#ITEM_SCHEMA_CH">ITEM_SCHEMA_CH</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Event type for a defined Character event in an EXI stream processed
+ using a schema.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;byte</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EventType.html#ITEM_SCHEMA_CH_MIXED">ITEM_SCHEMA_CH_MIXED</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Event type for a Character event that occurs in the context of an element 
+ defined so as to permit mixed content (mark up and data) in an EXI 
+ stream processed using a schema.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;byte</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EventType.html#ITEM_SCHEMA_NIL">ITEM_SCHEMA_NIL</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Special Attribute that indicates the value of the associated element is
+ explicitly <i>nil</i> rather than an empty string.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;byte</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EventType.html#ITEM_SCHEMA_TYPE">ITEM_SCHEMA_TYPE</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Special Attribute that describes a data type for the associated
+ element.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;byte</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EventType.html#ITEM_SCHEMA_WC_ANY">ITEM_SCHEMA_WC_ANY</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Attribute wildcard event type stemming from a schema where the 
+ attribute's defined datatype (if any) is applied.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;byte</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EventType.html#ITEM_SCHEMA_WC_NS">ITEM_SCHEMA_WC_NS</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Event type for an element defined in a namespace in an EXI stream
+ processed using a schema.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;byte</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EventType.html#ITEM_SD">ITEM_SD</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Event type for Start Document.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;byte</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EventType.html#ITEM_SE">ITEM_SE</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Event type for Start Element.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;byte</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EventType.html#ITEM_SE_WC">ITEM_SE_WC</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Wildcard event type for an element.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;java.lang.String</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EventType.html#name">name</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Local name of event type definition.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;java.lang.String</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/EventType.html#uri">uri</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;URI of event type definition.</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;<A NAME="fields_inherited_from_class_org.openexi.proc.common.EventCode"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">\r
+<TH ALIGN="left"><B>Fields inherited from class org.openexi.proc.common.EventCode</B></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE>EVENT_CODE_DEPTH_ONE, EVENT_CODE_DEPTH_THREE, EVENT_CODE_DEPTH_TWO, ITEM_TUPLE, itemType, parent, position</CODE></TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;<A NAME="fields_inherited_from_class_org.openexi.proc.common.EventDescription"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">\r
+<TH ALIGN="left"><B>Fields inherited from interface org.openexi.proc.common.<A HREF="../../../../org/openexi/proc/common/EventDescription.html" title="interface in org.openexi.proc.common">EventDescription</A></B></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE><A HREF="../../../../org/openexi/proc/common/EventDescription.html#EVENT_AT">EVENT_AT</A>, <A HREF="../../../../org/openexi/proc/common/EventDescription.html#EVENT_BLOB">EVENT_BLOB</A>, <A HREF="../../../../org/openexi/proc/common/EventDescription.html#EVENT_CH">EVENT_CH</A>, <A HREF="../../../../org/openexi/proc/common/EventDescription.html#EVENT_CM">EVENT_CM</A>, <A HREF="../../../../org/openexi/proc/common/EventDescription.html#EVENT_DTD">EVENT_DTD</A>, <A HREF="../../../../org/openexi/proc/common/EventDescription.html#EVENT_ED">EVENT_ED</A>, <A HREF="../../../../org/openexi/proc/common/EventDescription.html#EVENT_EE">EVENT_EE</A>, <A HREF="../../../../org/openexi/proc/common/EventDescription.html#EVENT_ER">EVENT_ER</A>, <A HREF="../../../../org/openexi/proc/common/EventDescription.html#EVENT_NL">EVENT_NL</A>, <A HREF="../../../../org/openexi/proc/common/EventDescription.html#EVENT_NS">EVENT_NS</A>, <A HREF="../../../../org/openexi/proc/common/EventDescription.html#EVENT_PI">EVENT_PI</A>, <A HREF="../../../../org/openexi/proc/common/EventDescription.html#EVENT_SD">EVENT_SD</A>, <A HREF="../../../../org/openexi/proc/common/EventDescription.html#EVENT_SE">EVENT_SE</A>, <A HREF="../../../../org/openexi/proc/common/EventDescription.html#EVENT_TP">EVENT_TP</A></CODE></TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+<!-- ========== METHOD SUMMARY =========== -->\r
+\r
+<A NAME="method_summary"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Method Summary</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+&nbsp;<A NAME="methods_inherited_from_class_org.openexi.proc.common.EventCode"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">\r
+<TH ALIGN="left"><B>Methods inherited from class org.openexi.proc.common.EventCode</B></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE>setParentalContext</CODE></TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">\r
+<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;<A NAME="methods_inherited_from_class_org.openexi.proc.common.EventDescription"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">\r
+<TH ALIGN="left"><B>Methods inherited from interface org.openexi.proc.common.<A HREF="../../../../org/openexi/proc/common/EventDescription.html" title="interface in org.openexi.proc.common">EventDescription</A></B></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE><A HREF="../../../../org/openexi/proc/common/EventDescription.html#getBinaryDataSource()">getBinaryDataSource</A>, <A HREF="../../../../org/openexi/proc/common/EventDescription.html#getCharacters()">getCharacters</A>, <A HREF="../../../../org/openexi/proc/common/EventDescription.html#getEventKind()">getEventKind</A>, <A HREF="../../../../org/openexi/proc/common/EventDescription.html#getEventType()">getEventType</A>, <A HREF="../../../../org/openexi/proc/common/EventDescription.html#getName()">getName</A>, <A HREF="../../../../org/openexi/proc/common/EventDescription.html#getPrefix()">getPrefix</A>, <A HREF="../../../../org/openexi/proc/common/EventDescription.html#getURI()">getURI</A></CODE></TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+<P>\r
+\r
+<!-- ============ FIELD DETAIL =========== -->\r
+\r
+<A NAME="field_detail"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">\r
+<B>Field Detail</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<A NAME="ITEM_PI"><!-- --></A><H3>\r
+ITEM_PI</H3>\r
+<PRE>\r
+public static final byte <B>ITEM_PI</B></PRE>\r
+<DL>\r
+<DD>Event type for a Processing Instruction. Value is 0.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.openexi.proc.common.EventType.ITEM_PI">Constant Field Values</A></DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="ITEM_CM"><!-- --></A><H3>\r
+ITEM_CM</H3>\r
+<PRE>\r
+public static final byte <B>ITEM_CM</B></PRE>\r
+<DL>\r
+<DD>Event type for a Comment.
+ <br/>Value is 1.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.openexi.proc.common.EventType.ITEM_CM">Constant Field Values</A></DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="ITEM_ER"><!-- --></A><H3>\r
+ITEM_ER</H3>\r
+<PRE>\r
+public static final byte <B>ITEM_ER</B></PRE>\r
+<DL>\r
+<DD>Event type for an Entity Reference.
+ <br/>Value is 2.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.openexi.proc.common.EventType.ITEM_ER">Constant Field Values</A></DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="ITEM_CH"><!-- --></A><H3>\r
+ITEM_CH</H3>\r
+<PRE>\r
+public static final byte <B>ITEM_CH</B></PRE>\r
+<DL>\r
+<DD>Event type for a Character event (character events store values as strings).
+ <br/>Value is 3.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.openexi.proc.common.EventType.ITEM_CH">Constant Field Values</A></DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="ITEM_ED"><!-- --></A><H3>\r
+ITEM_ED</H3>\r
+<PRE>\r
+public static final byte <B>ITEM_ED</B></PRE>\r
+<DL>\r
+<DD>Event type for End of Document.
+ <br/>Value is 4.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.openexi.proc.common.EventType.ITEM_ED">Constant Field Values</A></DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="ITEM_SE_WC"><!-- --></A><H3>\r
+ITEM_SE_WC</H3>\r
+<PRE>\r
+public static final byte <B>ITEM_SE_WC</B></PRE>\r
+<DL>\r
+<DD>Wildcard event type for an element. OpenEXI will first attempt
+ to find a corresponding element name in the schema, if present. If 
+ no definition is available, it is given this tag.
+ <br/>Value is 5.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.openexi.proc.common.EventType.ITEM_SE_WC">Constant Field Values</A></DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="ITEM_SC"><!-- --></A><H3>\r
+ITEM_SC</H3>\r
+<PRE>\r
+public static final byte <B>ITEM_SC</B></PRE>\r
+<DL>\r
+<DD>Self-contained items are not supported in this release of OpenEXI. 
+ Event type for self-contained item.
+ <br/>Value is 6.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.openexi.proc.common.EventType.ITEM_SC">Constant Field Values</A></DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="ITEM_NS"><!-- --></A><H3>\r
+ITEM_NS</H3>\r
+<PRE>\r
+public static final byte <B>ITEM_NS</B></PRE>\r
+<DL>\r
+<DD>Event type for a Namespace declaration.<br/>
+ <br/>Value is 7.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.openexi.proc.common.EventType.ITEM_NS">Constant Field Values</A></DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="ITEM_AT_WC_ANY_UNTYPED"><!-- --></A><H3>\r
+ITEM_AT_WC_ANY_UNTYPED</H3>\r
+<PRE>\r
+public static final byte <B>ITEM_AT_WC_ANY_UNTYPED</B></PRE>\r
+<DL>\r
+<DD>Wildcard event type for an Attribute where the attribute's defined 
+  datatype (if any) is disregarded. 
+  This is the "catch-all" for Attributes that do not match any of the 
+  other Event Types in an EXI stream processed using Default options. 
+  <br />Value is 8.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.openexi.proc.common.EventType.ITEM_AT_WC_ANY_UNTYPED">Constant Field Values</A></DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="ITEM_EE"><!-- --></A><H3>\r
+ITEM_EE</H3>\r
+<PRE>\r
+public static final byte <B>ITEM_EE</B></PRE>\r
+<DL>\r
+<DD>Event type for End of Element.
+ <br />Value is 9.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.openexi.proc.common.EventType.ITEM_EE">Constant Field Values</A></DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="ITEM_DTD"><!-- --></A><H3>\r
+ITEM_DTD</H3>\r
+<PRE>\r
+public static final byte <B>ITEM_DTD</B></PRE>\r
+<DL>\r
+<DD>Event type for a Document Type Definition.
+ <br />Value is 10.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.openexi.proc.common.EventType.ITEM_DTD">Constant Field Values</A></DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="ITEM_SE"><!-- --></A><H3>\r
+ITEM_SE</H3>\r
+<PRE>\r
+public static final byte <B>ITEM_SE</B></PRE>\r
+<DL>\r
+<DD>Event type for Start Element.
+ <br/>Value is 11.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.openexi.proc.common.EventType.ITEM_SE">Constant Field Values</A></DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="ITEM_AT"><!-- --></A><H3>\r
+ITEM_AT</H3>\r
+<PRE>\r
+public static final byte <B>ITEM_AT</B></PRE>\r
+<DL>\r
+<DD>Event type for an Attribute learned by built-in element grammars 
+ from prior attribute occurrences.
+ <br/>Value is 12.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.openexi.proc.common.EventType.ITEM_AT">Constant Field Values</A></DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="ITEM_SD"><!-- --></A><H3>\r
+ITEM_SD</H3>\r
+<PRE>\r
+public static final byte <B>ITEM_SD</B></PRE>\r
+<DL>\r
+<DD>Event type for Start Document.
+ <br/>Value is 13.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.openexi.proc.common.EventType.ITEM_SD">Constant Field Values</A></DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="ITEM_SCHEMA_WC_ANY"><!-- --></A><H3>\r
+ITEM_SCHEMA_WC_ANY</H3>\r
+<PRE>\r
+public static final byte <B>ITEM_SCHEMA_WC_ANY</B></PRE>\r
+<DL>\r
+<DD>Attribute wildcard event type stemming from a schema where the 
+ attribute's defined datatype (if any) is applied. 
+ <br/>Value is 14.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.openexi.proc.common.EventType.ITEM_SCHEMA_WC_ANY">Constant Field Values</A></DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="ITEM_SCHEMA_WC_NS"><!-- --></A><H3>\r
+ITEM_SCHEMA_WC_NS</H3>\r
+<PRE>\r
+public static final byte <B>ITEM_SCHEMA_WC_NS</B></PRE>\r
+<DL>\r
+<DD>Event type for an element defined in a namespace in an EXI stream
+ processed using a schema. 
+ <br/>Value is 15.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.openexi.proc.common.EventType.ITEM_SCHEMA_WC_NS">Constant Field Values</A></DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="ITEM_SCHEMA_AT"><!-- --></A><H3>\r
+ITEM_SCHEMA_AT</H3>\r
+<PRE>\r
+public static final byte <B>ITEM_SCHEMA_AT</B></PRE>\r
+<DL>\r
+<DD>Event type for AttributeUse that matches an attribute event with
+ a valid value.
+ <br/>Value is 16.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.openexi.proc.common.EventType.ITEM_SCHEMA_AT">Constant Field Values</A></DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="ITEM_SCHEMA_AT_WC_ANY"><!-- --></A><H3>\r
+ITEM_SCHEMA_AT_WC_ANY</H3>\r
+<PRE>\r
+public static final byte <B>ITEM_SCHEMA_AT_WC_ANY</B></PRE>\r
+<DL>\r
+<DD>Attribute wildcard event type stemming from a schema, where the attribute's 
+ defined datatype (if any) is applied.
+ <br/>Value is 17.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.openexi.proc.common.EventType.ITEM_SCHEMA_AT_WC_ANY">Constant Field Values</A></DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="ITEM_SCHEMA_AT_WC_NS"><!-- --></A><H3>\r
+ITEM_SCHEMA_AT_WC_NS</H3>\r
+<PRE>\r
+public static final byte <B>ITEM_SCHEMA_AT_WC_NS</B></PRE>\r
+<DL>\r
+<DD>Attribute wildcard event type, qualified with a specific namespace, stemming
+ from a schema where the attribute's defined datatype (if any) is applied. 
+ <br/>Value is 18.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.openexi.proc.common.EventType.ITEM_SCHEMA_AT_WC_NS">Constant Field Values</A></DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="ITEM_SCHEMA_CH"><!-- --></A><H3>\r
+ITEM_SCHEMA_CH</H3>\r
+<PRE>\r
+public static final byte <B>ITEM_SCHEMA_CH</B></PRE>\r
+<DL>\r
+<DD>Event type for a defined Character event in an EXI stream processed
+ using a schema. 
+ <br/>Value is 19.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.openexi.proc.common.EventType.ITEM_SCHEMA_CH">Constant Field Values</A></DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="ITEM_SCHEMA_CH_MIXED"><!-- --></A><H3>\r
+ITEM_SCHEMA_CH_MIXED</H3>\r
+<PRE>\r
+public static final byte <B>ITEM_SCHEMA_CH_MIXED</B></PRE>\r
+<DL>\r
+<DD>Event type for a Character event that occurs in the context of an element 
+ defined so as to permit mixed content (mark up and data) in an EXI 
+ stream processed using a schema. 
+ <br/>Value is 20.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.openexi.proc.common.EventType.ITEM_SCHEMA_CH_MIXED">Constant Field Values</A></DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="ITEM_SCHEMA_NIL"><!-- --></A><H3>\r
+ITEM_SCHEMA_NIL</H3>\r
+<PRE>\r
+public static final byte <B>ITEM_SCHEMA_NIL</B></PRE>\r
+<DL>\r
+<DD>Special Attribute that indicates the value of the associated element is
+ explicitly <i>nil</i> rather than an empty string.
+ <br/>Value is 21.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.openexi.proc.common.EventType.ITEM_SCHEMA_NIL">Constant Field Values</A></DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="ITEM_SCHEMA_TYPE"><!-- --></A><H3>\r
+ITEM_SCHEMA_TYPE</H3>\r
+<PRE>\r
+public static final byte <B>ITEM_SCHEMA_TYPE</B></PRE>\r
+<DL>\r
+<DD>Special Attribute that describes a data type for the associated
+ element. For example, the schema might define a String value, but
+ the XML document being processed can declare that the element contains a
+ date-time field.
+ <br/>Value is 22.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.openexi.proc.common.EventType.ITEM_SCHEMA_TYPE">Constant Field Values</A></DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="ITEM_SCHEMA_AT_INVALID_VALUE"><!-- --></A><H3>\r
+ITEM_SCHEMA_AT_INVALID_VALUE</H3>\r
+<PRE>\r
+public static final byte <B>ITEM_SCHEMA_AT_INVALID_VALUE</B></PRE>\r
+<DL>\r
+<DD>Event type for AttributeUse that matches an attribute event with an 
+ invalid value. 
+ <br/>Value is 23.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.openexi.proc.common.EventType.ITEM_SCHEMA_AT_INVALID_VALUE">Constant Field Values</A></DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="uri"><!-- --></A><H3>\r
+uri</H3>\r
+<PRE>\r
+public final java.lang.String <B>uri</B></PRE>\r
+<DL>\r
+<DD>URI of event type definition.\r
+<P>\r
+<DL>\r
+</DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="name"><!-- --></A><H3>\r
+name</H3>\r
+<PRE>\r
+public final java.lang.String <B>name</B></PRE>\r
+<DL>\r
+<DD>Local name of event type definition.\r
+<P>\r
+<DL>\r
+</DL>\r
+</DL>\r
+<!-- ========= END OF CLASS DATA ========= -->\r
+<HR>\r
+\r
+\r
+<!-- ======= START OF BOTTOM NAVBAR ====== -->\r
+<A NAME="navbar_bottom"><!-- --></A>\r
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_bottom_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../../org/openexi/proc/common/EventDescription.html" title="interface in org.openexi.proc.common"><B>PREV CLASS</B></A>&nbsp;\r
+&nbsp;<A HREF="../../../../org/openexi/proc/common/EXIOptions.html" title="class in org.openexi.proc.common"><B>NEXT CLASS</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../../index.html?org/openexi/proc/common/EventType.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="EventType.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_org.openexi.proc.common.EventCode">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;METHOD</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_bottom"></A>\r
+<!-- ======== END OF BOTTOM NAVBAR ======= -->\r
+\r
+<HR>\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/common/GrammarOptions.html b/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/common/GrammarOptions.html
new file mode 100644 (file)
index 0000000..7ea6e13
--- /dev/null
@@ -0,0 +1,528 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:57 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+GrammarOptions\r
+</TITLE>\r
+\r
+<META NAME="keywords" CONTENT="org.openexi.proc.common.GrammarOptions class">\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">\r
+\r
+<SCRIPT type="text/javascript">\r
+function windowTitle()\r
+{\r
+    parent.document.title="GrammarOptions";\r
+}\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+</NOSCRIPT>\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white" onload="windowTitle();">\r
+\r
+\r
+<!-- ========= START OF TOP NAVBAR ======= -->\r
+<A NAME="navbar_top"><!-- --></A>\r
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_top_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../../org/openexi/proc/common/EXIOptions.html" title="class in org.openexi.proc.common"><B>PREV CLASS</B></A>&nbsp;\r
+&nbsp;<A HREF="../../../../org/openexi/proc/common/QName.html" title="class in org.openexi.proc.common"><B>NEXT CLASS</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../../index.html?org/openexi/proc/common/GrammarOptions.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="GrammarOptions.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_top"></A>\r
+<!-- ========= END OF TOP NAVBAR ========= -->\r
+\r
+<HR>\r
+<!-- ======== START OF CLASS DATA ======== -->\r
+<H2>\r
+<FONT SIZE="-1">\r
+org.openexi.proc.common</FONT>\r
+<BR>\r
+Class GrammarOptions</H2>\r
+<PRE>\r
+java.lang.Object\r
+  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>org.openexi.proc.common.GrammarOptions</B>\r
+</PRE>\r
+<HR>\r
+<DL>\r
+<DT><PRE>public final class <B>GrammarOptions</B><DT>extends java.lang.Object</DL>\r
+</PRE>\r
+\r
+<P>\r
+GrammarOptions computes a short integer that represents settings in the EXI Grammar settings
+ that determine how an EXI file will be encoded or decoded.
+<br/><br/>
+ Values are set using binary switch values (represented as short integers).
+ <br /><br />
+ If no options have been set, the value is 0 (this is an temporary internal
+ value, rather than a valid setting).
+ <br/><br/>
+ If an XSD is available, and the file to be processed is 100% compatible with the XSD, choosing
+ STRICT_OPTIONS (1) provides the best performance. No other options can be set 
+ when files are encoded or decoded in strict mode.
+ <br/><br/>
+ The DEFAULT_OPTIONS setting is 2. The following table lists all of the options and their values. 
+ <br/><br/>
+ <table align="center" border="1" cellpadding="3" width="640"><tr>
+ <th>Constant</th><th>Value</th>
+ </tr><tr>
+ <td>STRICT_OPTIONS</td><td>1</td>
+ </tr><tr>
+ <td>DEFAULT_OPTIONS</td><td>2</td>
+ </tr><tr><td>
+ ADD_NS</td><td>4
+ </td></tr><tr><td>
+ ADD_SC</td><td>N/A*
+ </td></tr><tr><td>
+ ADD_DTD</td><td>16
+ </td></tr><tr><td>
+ ADD_CM</td><td>32
+ </td></tr><tr><td>
+ ADD_PI</td><td>64
+ </td></tr>
+ <tr><td colspan="2">*The self-contained option is not supported in this release.
+ </td></tr>
+ </table>
+ <br/><br/>
+ The value of DEFAULT_OPTIONS is 2. When you pass the options variable to an add[??] method, 
+ the binary switch value is added to the current value of the options variable.  
+ The sum of all additional switches becomes a concise list of the selected options. 
+ <br/><br/>
+ For example, if you preserve comments and processing instructions, the total is
+ 98 (2 + 32 + 64). The bitwise options are set correctly, because there is one and only one 
+ combination of options that sums up to 98.
+ <br/><br/>
+ If your application uses the same options every time, you can hard code the numeric value 
+ as a short integer and use it to create your GrammarCache. For example:
+ <pre>
+ GrammarCache gc = new GrammarCache((EXISchema)null,98);
+ </pre>
+ Be careful to use the correct numeric value, to avoid unexpected results.\r
+<P>\r
+\r
+<P>\r
+<DL>\r
+<!-- yWorks UML Doclet   http://www.yworks.com/   b0ac8294d3f86ae0003f3a3a002ea3cf577df824efc6f2... -->
+</DL>\r
+<HR>\r
+\r
+<P>\r
+<!-- =========== FIELD SUMMARY =========== -->\r
+\r
+<A NAME="field_summary"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Field Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;short</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/GrammarOptions.html#DEFAULT_OPTIONS">DEFAULT_OPTIONS</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Indicates that undeclared elements and attributes will be 
+ processed when the XML stream is encoded and decoded.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;short</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/GrammarOptions.html#OPTIONS_UNUSED">OPTIONS_UNUSED</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OPTIONS_UNUSED is an internal value.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;short</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/GrammarOptions.html#STRICT_OPTIONS">STRICT_OPTIONS</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Indicates that undeclared elements and attributes will throw an
+ exception when the XML stream is encoded and decoded.</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+<!-- ========== METHOD SUMMARY =========== -->\r
+\r
+<A NAME="method_summary"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Method Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;short</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/GrammarOptions.html#addCM(short)">addCM</A></B>(short&nbsp;options)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sets Preserve Comments to <i>true</i>.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;short</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/GrammarOptions.html#addDTD(short)">addDTD</A></B>(short&nbsp;options)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sets Preserve Document Type Definition to <i>true</i>.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;short</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/GrammarOptions.html#addNS(short)">addNS</A></B>(short&nbsp;options)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sets Preserve Namespaces to <i>true</i>.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;short</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/GrammarOptions.html#addPI(short)">addPI</A></B>(short&nbsp;options)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sets Preserve Processing Instructions to <i>true</i>.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;boolean</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/GrammarOptions.html#hasCM(short)">hasCM</A></B>(short&nbsp;options)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <i>true</i> if Preserve Comments is true.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;boolean</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/GrammarOptions.html#hasDTD(short)">hasDTD</A></B>(short&nbsp;options)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <i>true</i> if Preserve Document Type Definition is true.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;boolean</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/GrammarOptions.html#hasNS(short)">hasNS</A></B>(short&nbsp;options)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <i>true</i> if Preserve Namespaces is true.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;boolean</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/GrammarOptions.html#hasPI(short)">hasPI</A></B>(short&nbsp;options)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <i>true</i> if Preserve Processing Instructions is true.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;boolean</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/GrammarOptions.html#isPermitDeviation(short)">isPermitDeviation</A></B>(short&nbsp;options)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <i>true</i> if DEFAULT_OPTIONS is set to true.</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">\r
+<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+<P>\r
+\r
+<!-- ============ FIELD DETAIL =========== -->\r
+\r
+<A NAME="field_detail"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">\r
+<B>Field Detail</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<A NAME="OPTIONS_UNUSED"><!-- --></A><H3>\r
+OPTIONS_UNUSED</H3>\r
+<PRE>\r
+public static final short <B>OPTIONS_UNUSED</B></PRE>\r
+<DL>\r
+<DD>OPTIONS_UNUSED is an internal value.
+ It indicates that the grammar options value has not yet been set.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.openexi.proc.common.GrammarOptions.OPTIONS_UNUSED">Constant Field Values</A></DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="DEFAULT_OPTIONS"><!-- --></A><H3>\r
+DEFAULT_OPTIONS</H3>\r
+<PRE>\r
+public static final short <B>DEFAULT_OPTIONS</B></PRE>\r
+<DL>\r
+<DD>Indicates that undeclared elements and attributes will be 
+ processed when the XML stream is encoded and decoded.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.openexi.proc.common.GrammarOptions.DEFAULT_OPTIONS">Constant Field Values</A></DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="STRICT_OPTIONS"><!-- --></A><H3>\r
+STRICT_OPTIONS</H3>\r
+<PRE>\r
+public static final short <B>STRICT_OPTIONS</B></PRE>\r
+<DL>\r
+<DD>Indicates that undeclared elements and attributes will throw an
+ exception when the XML stream is encoded and decoded. When 
+ STRICT_OPTIONS is set, all other Grammar Options are ignored.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.openexi.proc.common.GrammarOptions.STRICT_OPTIONS">Constant Field Values</A></DL>\r
+</DL>\r
+\r
+<!-- ============ METHOD DETAIL ========== -->\r
+\r
+<A NAME="method_detail"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">\r
+<B>Method Detail</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<A NAME="isPermitDeviation(short)"><!-- --></A><H3>\r
+isPermitDeviation</H3>\r
+<PRE>\r
+public static boolean <B>isPermitDeviation</B>(short&nbsp;options)</PRE>\r
+<DL>\r
+<DD>Returns <i>true</i> if DEFAULT_OPTIONS is set to true.\r
+<P>\r
+<DD><DL>\r
+</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="hasNS(short)"><!-- --></A><H3>\r
+hasNS</H3>\r
+<PRE>\r
+public static boolean <B>hasNS</B>(short&nbsp;options)</PRE>\r
+<DL>\r
+<DD>Returns <i>true</i> if Preserve Namespaces is true.\r
+<P>\r
+<DD><DL>\r
+</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="hasDTD(short)"><!-- --></A><H3>\r
+hasDTD</H3>\r
+<PRE>\r
+public static boolean <B>hasDTD</B>(short&nbsp;options)</PRE>\r
+<DL>\r
+<DD>Returns <i>true</i> if Preserve Document Type Definition is true.\r
+<P>\r
+<DD><DL>\r
+</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="hasCM(short)"><!-- --></A><H3>\r
+hasCM</H3>\r
+<PRE>\r
+public static boolean <B>hasCM</B>(short&nbsp;options)</PRE>\r
+<DL>\r
+<DD>Returns <i>true</i> if Preserve Comments is true.\r
+<P>\r
+<DD><DL>\r
+</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="hasPI(short)"><!-- --></A><H3>\r
+hasPI</H3>\r
+<PRE>\r
+public static boolean <B>hasPI</B>(short&nbsp;options)</PRE>\r
+<DL>\r
+<DD>Returns <i>true</i> if Preserve Processing Instructions is true.\r
+<P>\r
+<DD><DL>\r
+</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="addNS(short)"><!-- --></A><H3>\r
+addNS</H3>\r
+<PRE>\r
+public static short <B>addNS</B>(short&nbsp;options)</PRE>\r
+<DL>\r
+<DD>Sets Preserve Namespaces to <i>true</i>. (Adds 4 to the <i>options</i> value.)\r
+<P>\r
+<DD><DL>\r
+\r
+<DT><B>Returns:</B><DD>the new <i>options</i> short integer value</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="addDTD(short)"><!-- --></A><H3>\r
+addDTD</H3>\r
+<PRE>\r
+public static short <B>addDTD</B>(short&nbsp;options)</PRE>\r
+<DL>\r
+<DD>Sets Preserve Document Type Definition to <i>true</i>. (Adds 16 to the <i>options</i> value.)\r
+<P>\r
+<DD><DL>\r
+\r
+<DT><B>Returns:</B><DD>the new <i>options</i> short integer value</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="addCM(short)"><!-- --></A><H3>\r
+addCM</H3>\r
+<PRE>\r
+public static short <B>addCM</B>(short&nbsp;options)</PRE>\r
+<DL>\r
+<DD>Sets Preserve Comments to <i>true</i>. (Adds 32 to the <i>options</i> value.)\r
+<P>\r
+<DD><DL>\r
+\r
+<DT><B>Returns:</B><DD>the new <i>options</i> short integer value</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="addPI(short)"><!-- --></A><H3>\r
+addPI</H3>\r
+<PRE>\r
+public static short <B>addPI</B>(short&nbsp;options)</PRE>\r
+<DL>\r
+<DD>Sets Preserve Processing Instructions to <i>true</i>. (Adds 64 to the <i>options</i> value.)\r
+<P>\r
+<DD><DL>\r
+\r
+<DT><B>Returns:</B><DD>the new <i>options</i> short integer value</DL>\r
+</DD>\r
+</DL>\r
+<!-- ========= END OF CLASS DATA ========= -->\r
+<HR>\r
+\r
+\r
+<!-- ======= START OF BOTTOM NAVBAR ====== -->\r
+<A NAME="navbar_bottom"><!-- --></A>\r
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_bottom_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../../org/openexi/proc/common/EXIOptions.html" title="class in org.openexi.proc.common"><B>PREV CLASS</B></A>&nbsp;\r
+&nbsp;<A HREF="../../../../org/openexi/proc/common/QName.html" title="class in org.openexi.proc.common"><B>NEXT CLASS</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../../index.html?org/openexi/proc/common/GrammarOptions.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="GrammarOptions.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_bottom"></A>\r
+<!-- ======== END OF BOTTOM NAVBAR ======= -->\r
+\r
+<HR>\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/common/QName.html b/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/common/QName.html
new file mode 100644 (file)
index 0000000..61485ec
--- /dev/null
@@ -0,0 +1,346 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:57 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+QName\r
+</TITLE>\r
+\r
+<META NAME="keywords" CONTENT="org.openexi.proc.common.QName class">\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">\r
+\r
+<SCRIPT type="text/javascript">\r
+function windowTitle()\r
+{\r
+    parent.document.title="QName";\r
+}\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+</NOSCRIPT>\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white" onload="windowTitle();">\r
+\r
+\r
+<!-- ========= START OF TOP NAVBAR ======= -->\r
+<A NAME="navbar_top"><!-- --></A>\r
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_top_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../../org/openexi/proc/common/GrammarOptions.html" title="class in org.openexi.proc.common"><B>PREV CLASS</B></A>&nbsp;\r
+&nbsp;NEXT CLASS</FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../../index.html?org/openexi/proc/common/QName.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="QName.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_top"></A>\r
+<!-- ========= END OF TOP NAVBAR ========= -->\r
+\r
+<HR>\r
+<!-- ======== START OF CLASS DATA ======== -->\r
+<H2>\r
+<FONT SIZE="-1">\r
+org.openexi.proc.common</FONT>\r
+<BR>\r
+Class QName</H2>\r
+<PRE>\r
+java.lang.Object\r
+  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>org.openexi.proc.common.QName</B>\r
+</PRE>\r
+<HR>\r
+<DL>\r
+<DT><PRE>public final class <B>QName</B><DT>extends java.lang.Object</DL>\r
+</PRE>\r
+\r
+<P>\r
+QName is a pair comprised of a namespace name and a local name  
+ to be used in a Datatype Representation Map (DTRM) definition
+ to denote an XSD datatype or an EXI datatype representation.\r
+<P>\r
+\r
+<P>\r
+<DL>\r
+<!-- yWorks UML Doclet   http://www.yworks.com/   b0ac8294d3f86ae0003f3a3a002ea3cf577df824efc6f2... -->
+</DL>\r
+<HR>\r
+\r
+<P>\r
+<!-- =========== FIELD SUMMARY =========== -->\r
+\r
+<A NAME="field_summary"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Field Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;java.lang.String</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/QName.html#localName">localName</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Local name of the datatype.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;java.lang.String</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/QName.html#namespaceName">namespaceName</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If  namespaceName is <i>null</i>, this indicates a failure of
+ namespace-prefix binding.</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->\r
+\r
+<A NAME="constructor_summary"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Constructor Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/QName.html#QName()">QName</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/QName.html#QName(java.lang.String, java.lang.String)">QName</A></B>(java.lang.String&nbsp;qname,\r
+      java.lang.String&nbsp;uri)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a QName based on its literal qualified name 
+ (see http://www.w3.org/TR/xml-names/#ns-qualnames 
+ for definition) and namespace name.</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+<!-- ========== METHOD SUMMARY =========== -->\r
+\r
+<A NAME="method_summary"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Method Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;boolean</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/common/QName.html#equals(java.lang.Object)">equals</A></B>(java.lang.Object&nbsp;obj)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">\r
+<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE>getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+<P>\r
+\r
+<!-- ============ FIELD DETAIL =========== -->\r
+\r
+<A NAME="field_detail"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">\r
+<B>Field Detail</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<A NAME="namespaceName"><!-- --></A><H3>\r
+namespaceName</H3>\r
+<PRE>\r
+public java.lang.String <B>namespaceName</B></PRE>\r
+<DL>\r
+<DD>If  namespaceName is <i>null</i>, this indicates a failure of
+ namespace-prefix binding. No namespace binding for the
+ unprefixed QName is indicated by an empty namespace
+ name "".\r
+<P>\r
+<DL>\r
+</DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="localName"><!-- --></A><H3>\r
+localName</H3>\r
+<PRE>\r
+public java.lang.String <B>localName</B></PRE>\r
+<DL>\r
+<DD>Local name of the datatype.\r
+<P>\r
+<DL>\r
+</DL>\r
+</DL>\r
+\r
+<!-- ========= CONSTRUCTOR DETAIL ======== -->\r
+\r
+<A NAME="constructor_detail"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">\r
+<B>Constructor Detail</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<A NAME="QName()"><!-- --></A><H3>\r
+QName</H3>\r
+<PRE>\r
+public <B>QName</B>()</PRE>\r
+<DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="QName(java.lang.String, java.lang.String)"><!-- --></A><H3>\r
+QName</H3>\r
+<PRE>\r
+public <B>QName</B>(java.lang.String&nbsp;qname,\r
+             java.lang.String&nbsp;uri)</PRE>\r
+<DL>\r
+<DD>Creates a QName based on its literal qualified name 
+ (see http://www.w3.org/TR/xml-names/#ns-qualnames 
+ for definition) and namespace name.\r
+<P>\r
+<DL>\r
+<DT><B>Parameters:</B><DD><CODE>qname</CODE> - literal qualified name in its entirety<DD><CODE>uri</CODE> - namespace name (nullable) of the QName<DT><B>See Also:</B><DD><CODE>http://www.w3.org/TR/xml-names/#ns-qualnames</CODE></DL>\r
+</DL>\r
+\r
+<!-- ============ METHOD DETAIL ========== -->\r
+\r
+<A NAME="method_detail"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">\r
+<B>Method Detail</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<A NAME="equals(java.lang.Object)"><!-- --></A><H3>\r
+equals</H3>\r
+<PRE>\r
+public boolean <B>equals</B>(java.lang.Object&nbsp;obj)</PRE>\r
+<DL>\r
+<DD><DL>\r
+<DT><B>Overrides:</B><DD><CODE>equals</CODE> in class <CODE>java.lang.Object</CODE></DL>\r
+</DD>\r
+<DD><DL>\r
+</DL>\r
+</DD>\r
+</DL>\r
+<!-- ========= END OF CLASS DATA ========= -->\r
+<HR>\r
+\r
+\r
+<!-- ======= START OF BOTTOM NAVBAR ====== -->\r
+<A NAME="navbar_bottom"><!-- --></A>\r
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_bottom_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../../org/openexi/proc/common/GrammarOptions.html" title="class in org.openexi.proc.common"><B>PREV CLASS</B></A>&nbsp;\r
+&nbsp;NEXT CLASS</FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../../index.html?org/openexi/proc/common/QName.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="QName.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_bottom"></A>\r
+<!-- ======== END OF BOTTOM NAVBAR ======= -->\r
+\r
+<HR>\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/common/package-frame.html b/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/common/package-frame.html
new file mode 100644 (file)
index 0000000..fcab610
--- /dev/null
@@ -0,0 +1,63 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:58 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+org.openexi.proc.common\r
+</TITLE>\r
+\r
+<META NAME="keywords" CONTENT="org.openexi.proc.common package">\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">\r
+\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white">\r
+<FONT size="+1" CLASS="FrameTitleFont">\r
+<A HREF="../../../../org/openexi/proc/common/package-summary.html" target="classFrame">org.openexi.proc.common</A></FONT>\r
+<TABLE BORDER="0" WIDTH="100%" SUMMARY="">\r
+<TR>\r
+<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">\r
+Interfaces</FONT>&nbsp;\r
+<FONT CLASS="FrameItemFont">\r
+<BR>\r
+<A HREF="EventDescription.html" title="interface in org.openexi.proc.common" target="classFrame"><I>EventDescription</I></A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+\r
+\r
+<TABLE BORDER="0" WIDTH="100%" SUMMARY="">\r
+<TR>\r
+<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">\r
+Classes</FONT>&nbsp;\r
+<FONT CLASS="FrameItemFont">\r
+<BR>\r
+<A HREF="BinaryDataSource.html" title="class in org.openexi.proc.common" target="classFrame">BinaryDataSource</A>\r
+<BR>\r
+<A HREF="EventType.html" title="class in org.openexi.proc.common" target="classFrame">EventType</A>\r
+<BR>\r
+<A HREF="EXIOptions.html" title="class in org.openexi.proc.common" target="classFrame">EXIOptions</A>\r
+<BR>\r
+<A HREF="GrammarOptions.html" title="class in org.openexi.proc.common" target="classFrame">GrammarOptions</A>\r
+<BR>\r
+<A HREF="QName.html" title="class in org.openexi.proc.common" target="classFrame">QName</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+\r
+\r
+<TABLE BORDER="0" WIDTH="100%" SUMMARY="">\r
+<TR>\r
+<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">\r
+Enums</FONT>&nbsp;\r
+<FONT CLASS="FrameItemFont">\r
+<BR>\r
+<A HREF="AlignmentType.html" title="enum in org.openexi.proc.common" target="classFrame">AlignmentType</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/common/package-summary.html b/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/common/package-summary.html
new file mode 100644 (file)
index 0000000..c4f3e1c
--- /dev/null
@@ -0,0 +1,235 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:58 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+org.openexi.proc.common\r
+</TITLE>\r
+\r
+<META NAME="keywords" CONTENT="org.openexi.proc.common package">\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">\r
+\r
+<SCRIPT type="text/javascript">\r
+function windowTitle()\r
+{\r
+    parent.document.title="org.openexi.proc.common";\r
+}\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+</NOSCRIPT>\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white" onload="windowTitle();">\r
+\r
+\r
+<!-- ========= START OF TOP NAVBAR ======= -->\r
+<A NAME="navbar_top"><!-- --></A>\r
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_top_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../../org/openexi/proc/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;\r
+&nbsp;<A HREF="../../../../org/openexi/proc/grammars/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../../index.html?org/openexi/proc/common/package-summary.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_top"></A>\r
+<!-- ========= END OF TOP NAVBAR ========= -->\r
+\r
+<HR>\r
+<H2>\r
+Package org.openexi.proc.common\r
+</H2>\r
+\r
+<tr valign="top" cellpadding="3" border="0">\r
+\r
+The common package contains classes, interfaces, and enumerators that define the vocabulary used to describe EXI streams (events, options, alignment, and character string values).\r
+<P>\r
+<B>See:</B>\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<A HREF="#package_description"><B>Description</B></A>\r
+<P>\r
+\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Interface Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD WIDTH="15%"><B><A HREF="../../../../org/openexi/proc/common/EventDescription.html" title="interface in org.openexi.proc.common">EventDescription</A></B></TD>\r
+<TD>EventDescription provides accessors to the current EXI event data
+ during the decode process.</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+\r
+<P>\r
+\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Class Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD WIDTH="15%"><B><A HREF="../../../../org/openexi/proc/common/BinaryDataSource.html" title="class in org.openexi.proc.common">BinaryDataSource</A></B></TD>\r
+<TD>&nbsp;</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD WIDTH="15%"><B><A HREF="../../../../org/openexi/proc/common/EventType.html" title="class in org.openexi.proc.common">EventType</A></B></TD>\r
+<TD>EventType denotes terminal symbols of grammar productions  
+ defined in the EXI 1.0 specification.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD WIDTH="15%"><B><A HREF="../../../../org/openexi/proc/common/EXIOptions.html" title="class in org.openexi.proc.common">EXIOptions</A></B></TD>\r
+<TD>EXIOptions provides accessors for values associated with
+ EXI options in the EXI header of an EXI stream.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD WIDTH="15%"><B><A HREF="../../../../org/openexi/proc/common/GrammarOptions.html" title="class in org.openexi.proc.common">GrammarOptions</A></B></TD>\r
+<TD>GrammarOptions computes a short integer that represents settings in the EXI Grammar settings
+ that determine how an EXI file will be encoded or decoded.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD WIDTH="15%"><B><A HREF="../../../../org/openexi/proc/common/QName.html" title="class in org.openexi.proc.common">QName</A></B></TD>\r
+<TD>QName is a pair comprised of a namespace name and a local name  
+ to be used in a Datatype Representation Map (DTRM) definition
+ to denote an XSD datatype or an EXI datatype representation.</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+\r
+<P>\r
+\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Enum Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD WIDTH="15%"><B><A HREF="../../../../org/openexi/proc/common/AlignmentType.html" title="enum in org.openexi.proc.common">AlignmentType</A></B></TD>\r
+<TD>AlignmentType represents one of the following bit alignment 
+ styles so as to provide an extra degree of control over the
+ way information is stored in EXI format.</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+\r
+<P>\r
+<A NAME="package_description"><!-- --></A><H2>\r
+Package org.openexi.proc.common Description\r
+</H2>\r
+\r
+<P>\r
+<table>\r
+<tr valign="top" cellpadding="3" border="0">\r
+<td>\r
+<p>The common package contains classes, interfaces, and enumerators that define the vocabulary used to describe EXI streams (events, options, alignment, and character string values).\r
+</p>\r
+</td>\r
+<td width="385">\r
+<img src="http://openexi.sourceforge.net/images/OpenEXI_Architecture_Common.PNG" width="375" height="280" />\r
+</td>\r
+</tr>\r
+</table>\r
+</p>\r
+<P>\r
+\r
+<P>\r
+<DL>\r
+<!-- yWorks UML Doclet   http://www.yworks.com/   b0ac8294d3f86ae0003f3a3a002ea3cf577df824efc6f2... -->
+</DL>\r
+<HR>\r
+\r
+\r
+<!-- ======= START OF BOTTOM NAVBAR ====== -->\r
+<A NAME="navbar_bottom"><!-- --></A>\r
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_bottom_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../../org/openexi/proc/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;\r
+&nbsp;<A HREF="../../../../org/openexi/proc/grammars/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../../index.html?org/openexi/proc/common/package-summary.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_bottom"></A>\r
+<!-- ======== END OF BOTTOM NAVBAR ======= -->\r
+\r
+<HR>\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/common/package-tree.html b/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/common/package-tree.html
new file mode 100644 (file)
index 0000000..778ae7c
--- /dev/null
@@ -0,0 +1,166 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:58 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+org.openexi.proc.common Class Hierarchy\r
+</TITLE>\r
+\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">\r
+\r
+<SCRIPT type="text/javascript">\r
+function windowTitle()\r
+{\r
+    parent.document.title="org.openexi.proc.common Class Hierarchy";\r
+}\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+</NOSCRIPT>\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white" onload="windowTitle();">\r
+\r
+\r
+<!-- ========= START OF TOP NAVBAR ======= -->\r
+<A NAME="navbar_top"><!-- --></A>\r
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_top_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../../org/openexi/proc/package-tree.html"><B>PREV</B></A>&nbsp;\r
+&nbsp;<A HREF="../../../../org/openexi/proc/grammars/package-tree.html"><B>NEXT</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../../index.html?org/openexi/proc/common/package-tree.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_top"></A>\r
+<!-- ========= END OF TOP NAVBAR ========= -->\r
+\r
+<HR>\r
+<CENTER>\r
+<H2>\r
+Hierarchy For Package org.openexi.proc.common\r
+</H2>\r
+</CENTER>\r
+<DL>\r
+<DT><B>Package Hierarchies:</B><DD><A HREF="../../../../overview-tree.html">All Packages</A></DL>\r
+<HR>\r
+<H2>\r
+Class Hierarchy\r
+</H2>\r
+<UL>\r
+<LI TYPE="circle">java.lang.Object<UL>\r
+<LI TYPE="circle">org.openexi.proc.common.<A HREF="../../../../org/openexi/proc/common/BinaryDataSource.html" title="class in org.openexi.proc.common"><B>BinaryDataSource</B></A><LI TYPE="circle">org.openexi.proc.common.EventCode<UL>\r
+<LI TYPE="circle">org.openexi.proc.common.<A HREF="../../../../org/openexi/proc/common/EventType.html" title="class in org.openexi.proc.common"><B>EventType</B></A> (implements org.openexi.proc.common.<A HREF="../../../../org/openexi/proc/common/EventDescription.html" title="interface in org.openexi.proc.common">EventDescription</A>)\r
+</UL>\r
+<LI TYPE="circle">org.openexi.proc.common.<A HREF="../../../../org/openexi/proc/common/EXIOptions.html" title="class in org.openexi.proc.common"><B>EXIOptions</B></A><LI TYPE="circle">org.openexi.proc.common.<A HREF="../../../../org/openexi/proc/common/GrammarOptions.html" title="class in org.openexi.proc.common"><B>GrammarOptions</B></A><LI TYPE="circle">org.openexi.proc.common.<A HREF="../../../../org/openexi/proc/common/QName.html" title="class in org.openexi.proc.common"><B>QName</B></A></UL>\r
+</UL>\r
+<H2>\r
+Interface Hierarchy\r
+</H2>\r
+<UL>\r
+<LI TYPE="circle">org.openexi.proc.common.<A HREF="../../../../org/openexi/proc/common/EventDescription.html" title="interface in org.openexi.proc.common"><B>EventDescription</B></A></UL>\r
+<H2>\r
+Enum Hierarchy\r
+</H2>\r
+<UL>\r
+<LI TYPE="circle">java.lang.Object<UL>\r
+<LI TYPE="circle">java.lang.Enum&lt;E&gt; (implements java.lang.Comparable&lt;T&gt;, java.io.Serializable)\r
+<UL>\r
+<LI TYPE="circle">org.openexi.proc.common.<A HREF="../../../../org/openexi/proc/common/AlignmentType.html" title="enum in org.openexi.proc.common"><B>AlignmentType</B></A></UL>\r
+</UL>\r
+</UL>\r
+<HR>\r
+\r
+\r
+<!-- ======= START OF BOTTOM NAVBAR ====== -->\r
+<A NAME="navbar_bottom"><!-- --></A>\r
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_bottom_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../../org/openexi/proc/package-tree.html"><B>PREV</B></A>&nbsp;\r
+&nbsp;<A HREF="../../../../org/openexi/proc/grammars/package-tree.html"><B>NEXT</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../../index.html?org/openexi/proc/common/package-tree.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_bottom"></A>\r
+<!-- ======== END OF BOTTOM NAVBAR ======= -->\r
+\r
+<HR>\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/grammars/GrammarCache.html b/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/grammars/GrammarCache.html
new file mode 100644 (file)
index 0000000..55b03fa
--- /dev/null
@@ -0,0 +1,362 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:57 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+GrammarCache\r
+</TITLE>\r
+\r
+<META NAME="keywords" CONTENT="org.openexi.proc.grammars.GrammarCache class">\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">\r
+\r
+<SCRIPT type="text/javascript">\r
+function windowTitle()\r
+{\r
+    parent.document.title="GrammarCache";\r
+}\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+</NOSCRIPT>\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white" onload="windowTitle();">\r
+\r
+\r
+<!-- ========= START OF TOP NAVBAR ======= -->\r
+<A NAME="navbar_top"><!-- --></A>\r
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_top_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;PREV CLASS&nbsp;\r
+&nbsp;NEXT CLASS</FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../../index.html?org/openexi/proc/grammars/GrammarCache.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="GrammarCache.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_top"></A>\r
+<!-- ========= END OF TOP NAVBAR ========= -->\r
+\r
+<HR>\r
+<!-- ======== START OF CLASS DATA ======== -->\r
+<H2>\r
+<FONT SIZE="-1">\r
+org.openexi.proc.grammars</FONT>\r
+<BR>\r
+Class GrammarCache</H2>\r
+<PRE>\r
+java.lang.Object\r
+  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>org.openexi.proc.grammars.GrammarCache</B>\r
+</PRE>\r
+<DL>\r
+<DT><B>All Implemented Interfaces:</B> <DD>org.openexi.proc.common.IGrammarCache</DD>\r
+</DL>\r
+<HR>\r
+<DL>\r
+<DT><PRE>public final class <B>GrammarCache</B><DT>extends java.lang.Object<DT>implements org.openexi.proc.common.IGrammarCache</DL>\r
+</PRE>\r
+\r
+<P>\r
+A GrammarCache object represents a set of EXI grammars used 
+ for processing EXI streams using specific grammar options. 
+ The GrammarCache is passed as an argument to 
+ the EXIReader and Transmogrifier prior to processing an EXI stream.\r
+<P>\r
+\r
+<P>\r
+<DL>\r
+<!-- yWorks UML Doclet   http://www.yworks.com/   b0ac8294d3f86ae0003f3a3a002ea3cf577df824efc6f2... -->
+</DL>\r
+<HR>\r
+\r
+<P>\r
+<!-- =========== FIELD SUMMARY =========== -->\r
+\r
+<A NAME="field_summary"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Field Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;short</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/grammars/GrammarCache.html#grammarOptions">grammarOptions</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Short integer that encapsulates <A HREF="../../../../org/openexi/proc/common/GrammarOptions.html" title="class in org.openexi.proc.common"><CODE>GrammarOptions</CODE></A>
+ for the EXI stream.</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->\r
+\r
+<A NAME="constructor_summary"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Constructor Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/grammars/GrammarCache.html#GrammarCache(org.openexi.schema.EXISchema)">GrammarCache</A></B>(<A HREF="../../../../org/openexi/schema/EXISchema.html" title="class in org.openexi.schema">EXISchema</A>&nbsp;schema)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an instance of GrammarCache informed by a schema with default 
+ grammar options.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/grammars/GrammarCache.html#GrammarCache(org.openexi.schema.EXISchema, short)">GrammarCache</A></B>(<A HREF="../../../../org/openexi/schema/EXISchema.html" title="class in org.openexi.schema">EXISchema</A>&nbsp;schema,\r
+             short&nbsp;grammarOptions)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an instance of GrammarCache informed by a schema with the
+ specified grammar options.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/grammars/GrammarCache.html#GrammarCache(short)">GrammarCache</A></B>(short&nbsp;grammarOptions)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an instance of GrammarCache with the specified grammar options.</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+<!-- ========== METHOD SUMMARY =========== -->\r
+\r
+<A NAME="method_summary"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Method Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;<A HREF="../../../../org/openexi/schema/EXISchema.html" title="class in org.openexi.schema">EXISchema</A></CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/grammars/GrammarCache.html#getEXISchema()">getEXISchema</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gets the compiled EXI Schema.</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">\r
+<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;<A NAME="methods_inherited_from_class_org.openexi.proc.common.IGrammarCache"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">\r
+<TH ALIGN="left"><B>Methods inherited from interface org.openexi.proc.common.IGrammarCache</B></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE>getElementGrammarUse</CODE></TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+<P>\r
+\r
+<!-- ============ FIELD DETAIL =========== -->\r
+\r
+<A NAME="field_detail"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">\r
+<B>Field Detail</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<A NAME="grammarOptions"><!-- --></A><H3>\r
+grammarOptions</H3>\r
+<PRE>\r
+public final short <B>grammarOptions</B></PRE>\r
+<DL>\r
+<DD>Short integer that encapsulates <A HREF="../../../../org/openexi/proc/common/GrammarOptions.html" title="class in org.openexi.proc.common"><CODE>GrammarOptions</CODE></A>
+ for the EXI stream.\r
+<P>\r
+<DL>\r
+</DL>\r
+</DL>\r
+\r
+<!-- ========= CONSTRUCTOR DETAIL ======== -->\r
+\r
+<A NAME="constructor_detail"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">\r
+<B>Constructor Detail</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<A NAME="GrammarCache(org.openexi.schema.EXISchema)"><!-- --></A><H3>\r
+GrammarCache</H3>\r
+<PRE>\r
+public <B>GrammarCache</B>(<A HREF="../../../../org/openexi/schema/EXISchema.html" title="class in org.openexi.schema">EXISchema</A>&nbsp;schema)</PRE>\r
+<DL>\r
+<DD>Creates an instance of GrammarCache informed by a schema with default 
+ grammar options.\r
+<P>\r
+<DL>\r
+<DT><B>Parameters:</B><DD><CODE>EXISchema</CODE> - compiled schema</DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="GrammarCache(short)"><!-- --></A><H3>\r
+GrammarCache</H3>\r
+<PRE>\r
+public <B>GrammarCache</B>(short&nbsp;grammarOptions)</PRE>\r
+<DL>\r
+<DD>Creates an instance of GrammarCache with the specified grammar options.\r
+<P>\r
+<DL>\r
+<DT><B>Parameters:</B><DD><CODE>grammarOptions</CODE> - integer value that represents a grammar option configuration</DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="GrammarCache(org.openexi.schema.EXISchema, short)"><!-- --></A><H3>\r
+GrammarCache</H3>\r
+<PRE>\r
+public <B>GrammarCache</B>(<A HREF="../../../../org/openexi/schema/EXISchema.html" title="class in org.openexi.schema">EXISchema</A>&nbsp;schema,\r
+                    short&nbsp;grammarOptions)</PRE>\r
+<DL>\r
+<DD>Creates an instance of GrammarCache informed by a schema with the
+ specified grammar options.\r
+<P>\r
+<DL>\r
+<DT><B>Parameters:</B><DD><CODE>EXISchema</CODE> - compiled schema<DD><CODE>grammarOptions</CODE> - integer value that represents a grammar option configuration</DL>\r
+</DL>\r
+\r
+<!-- ============ METHOD DETAIL ========== -->\r
+\r
+<A NAME="method_detail"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">\r
+<B>Method Detail</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<A NAME="getEXISchema()"><!-- --></A><H3>\r
+getEXISchema</H3>\r
+<PRE>\r
+public <A HREF="../../../../org/openexi/schema/EXISchema.html" title="class in org.openexi.schema">EXISchema</A> <B>getEXISchema</B>()</PRE>\r
+<DL>\r
+<DD>Gets the compiled EXI Schema.\r
+<P>\r
+<DD><DL>\r
+<DT><B>Specified by:</B><DD><CODE>getEXISchema</CODE> in interface <CODE>org.openexi.proc.common.IGrammarCache</CODE></DL>\r
+</DD>\r
+<DD><DL>\r
+\r
+<DT><B>Returns:</B><DD>an EXI schema.</DL>\r
+</DD>\r
+</DL>\r
+<!-- ========= END OF CLASS DATA ========= -->\r
+<HR>\r
+\r
+\r
+<!-- ======= START OF BOTTOM NAVBAR ====== -->\r
+<A NAME="navbar_bottom"><!-- --></A>\r
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_bottom_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;PREV CLASS&nbsp;\r
+&nbsp;NEXT CLASS</FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../../index.html?org/openexi/proc/grammars/GrammarCache.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="GrammarCache.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_bottom"></A>\r
+<!-- ======== END OF BOTTOM NAVBAR ======= -->\r
+\r
+<HR>\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/grammars/package-frame.html b/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/grammars/package-frame.html
new file mode 100644 (file)
index 0000000..5eb44a3
--- /dev/null
@@ -0,0 +1,33 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:58 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+org.openexi.proc.grammars\r
+</TITLE>\r
+\r
+<META NAME="keywords" CONTENT="org.openexi.proc.grammars package">\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">\r
+\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white">\r
+<FONT size="+1" CLASS="FrameTitleFont">\r
+<A HREF="../../../../org/openexi/proc/grammars/package-summary.html" target="classFrame">org.openexi.proc.grammars</A></FONT>\r
+<TABLE BORDER="0" WIDTH="100%" SUMMARY="">\r
+<TR>\r
+<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">\r
+Classes</FONT>&nbsp;\r
+<FONT CLASS="FrameItemFont">\r
+<BR>\r
+<A HREF="GrammarCache.html" title="class in org.openexi.proc.grammars" target="classFrame">GrammarCache</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/grammars/package-summary.html b/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/grammars/package-summary.html
new file mode 100644 (file)
index 0000000..3ae5291
--- /dev/null
@@ -0,0 +1,184 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:58 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+org.openexi.proc.grammars\r
+</TITLE>\r
+\r
+<META NAME="keywords" CONTENT="org.openexi.proc.grammars package">\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">\r
+\r
+<SCRIPT type="text/javascript">\r
+function windowTitle()\r
+{\r
+    parent.document.title="org.openexi.proc.grammars";\r
+}\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+</NOSCRIPT>\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white" onload="windowTitle();">\r
+\r
+\r
+<!-- ========= START OF TOP NAVBAR ======= -->\r
+<A NAME="navbar_top"><!-- --></A>\r
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_top_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../../org/openexi/proc/common/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;\r
+&nbsp;<A HREF="../../../../org/openexi/proc/io/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../../index.html?org/openexi/proc/grammars/package-summary.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_top"></A>\r
+<!-- ========= END OF TOP NAVBAR ========= -->\r
+\r
+<HR>\r
+<H2>\r
+Package org.openexi.proc.grammars\r
+</H2>\r
+\r
+<tr valign="top" cellpadding="3" border="0">\r
+\r
+The grammars package contains the GrammarCache, which combines an XML Schema Definition with EXI grammar options to create an EXI Schema.\r
+<P>\r
+<B>See:</B>\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<A HREF="#package_description"><B>Description</B></A>\r
+<P>\r
+\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Class Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD WIDTH="15%"><B><A HREF="../../../../org/openexi/proc/grammars/GrammarCache.html" title="class in org.openexi.proc.grammars">GrammarCache</A></B></TD>\r
+<TD>A GrammarCache object represents a set of EXI grammars used 
+ for processing EXI streams using specific grammar options.</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+\r
+<P>\r
+<A NAME="package_description"><!-- --></A><H2>\r
+Package org.openexi.proc.grammars Description\r
+</H2>\r
+\r
+<P>\r
+<table>\r
+<tr valign="top" cellpadding="3" border="0">\r
+<td>\r
+<p>The grammars package contains the GrammarCache, which combines an XML Schema Definition with EXI grammar options to create an EXI Schema.\r
+</p>\r
+</td>\r
+<td width="385">\r
+<img src="http://openexi.sourceforge.net/images/OpenEXI_Architecture_Grammars.PNG" width="375" height="280" />\r
+</td>\r
+</tr>\r
+</table>\r
+</p>\r
+<P>\r
+\r
+<P>\r
+<DL>\r
+<!-- yWorks UML Doclet   http://www.yworks.com/   b0ac8294d3f86ae0003f3a3a002ea3cf577df824efc6f2... -->
+</DL>\r
+<HR>\r
+\r
+\r
+<!-- ======= START OF BOTTOM NAVBAR ====== -->\r
+<A NAME="navbar_bottom"><!-- --></A>\r
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_bottom_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../../org/openexi/proc/common/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;\r
+&nbsp;<A HREF="../../../../org/openexi/proc/io/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../../index.html?org/openexi/proc/grammars/package-summary.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_bottom"></A>\r
+<!-- ======== END OF BOTTOM NAVBAR ======= -->\r
+\r
+<HR>\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/grammars/package-tree.html b/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/grammars/package-tree.html
new file mode 100644 (file)
index 0000000..5425149
--- /dev/null
@@ -0,0 +1,149 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:58 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+org.openexi.proc.grammars Class Hierarchy\r
+</TITLE>\r
+\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">\r
+\r
+<SCRIPT type="text/javascript">\r
+function windowTitle()\r
+{\r
+    parent.document.title="org.openexi.proc.grammars Class Hierarchy";\r
+}\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+</NOSCRIPT>\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white" onload="windowTitle();">\r
+\r
+\r
+<!-- ========= START OF TOP NAVBAR ======= -->\r
+<A NAME="navbar_top"><!-- --></A>\r
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_top_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../../org/openexi/proc/common/package-tree.html"><B>PREV</B></A>&nbsp;\r
+&nbsp;<A HREF="../../../../org/openexi/proc/io/package-tree.html"><B>NEXT</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../../index.html?org/openexi/proc/grammars/package-tree.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_top"></A>\r
+<!-- ========= END OF TOP NAVBAR ========= -->\r
+\r
+<HR>\r
+<CENTER>\r
+<H2>\r
+Hierarchy For Package org.openexi.proc.grammars\r
+</H2>\r
+</CENTER>\r
+<DL>\r
+<DT><B>Package Hierarchies:</B><DD><A HREF="../../../../overview-tree.html">All Packages</A></DL>\r
+<HR>\r
+<H2>\r
+Class Hierarchy\r
+</H2>\r
+<UL>\r
+<LI TYPE="circle">java.lang.Object<UL>\r
+<LI TYPE="circle">org.openexi.proc.grammars.<A HREF="../../../../org/openexi/proc/grammars/GrammarCache.html" title="class in org.openexi.proc.grammars"><B>GrammarCache</B></A> (implements org.openexi.proc.common.IGrammarCache)\r
+</UL>\r
+</UL>\r
+<HR>\r
+\r
+\r
+<!-- ======= START OF BOTTOM NAVBAR ====== -->\r
+<A NAME="navbar_bottom"><!-- --></A>\r
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_bottom_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../../org/openexi/proc/common/package-tree.html"><B>PREV</B></A>&nbsp;\r
+&nbsp;<A HREF="../../../../org/openexi/proc/io/package-tree.html"><B>NEXT</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../../index.html?org/openexi/proc/grammars/package-tree.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_bottom"></A>\r
+<!-- ======== END OF BOTTOM NAVBAR ======= -->\r
+\r
+<HR>\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/io/BinaryDataSink.html b/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/io/BinaryDataSink.html
new file mode 100644 (file)
index 0000000..0f9e531
--- /dev/null
@@ -0,0 +1,171 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:57 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+BinaryDataSink\r
+</TITLE>\r
+\r
+<META NAME="keywords" CONTENT="org.openexi.proc.io.BinaryDataSink interface">\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">\r
+\r
+<SCRIPT type="text/javascript">\r
+function windowTitle()\r
+{\r
+    parent.document.title="BinaryDataSink";\r
+}\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+</NOSCRIPT>\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white" onload="windowTitle();">\r
+\r
+\r
+<!-- ========= START OF TOP NAVBAR ======= -->\r
+<A NAME="navbar_top"><!-- --></A>\r
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_top_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;PREV CLASS&nbsp;\r
+&nbsp;<A HREF="../../../../org/openexi/proc/io/CharacterBuffer.html" title="class in org.openexi.proc.io"><B>NEXT CLASS</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../../index.html?org/openexi/proc/io/BinaryDataSink.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="BinaryDataSink.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;METHOD</FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;METHOD</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_top"></A>\r
+<!-- ========= END OF TOP NAVBAR ========= -->\r
+\r
+<HR>\r
+<!-- ======== START OF CLASS DATA ======== -->\r
+<H2>\r
+<FONT SIZE="-1">\r
+org.openexi.proc.io</FONT>\r
+<BR>\r
+Interface BinaryDataSink</H2>\r
+<HR>\r
+<DL>\r
+<DT><PRE>public interface <B>BinaryDataSink</B></DL>\r
+</PRE>\r
+\r
+<P>\r
+BinaryDataSink represents a sink that accepts successive chunks of binary data.\r
+<P>\r
+\r
+<P>\r
+<DL>\r
+<!-- yWorks UML Doclet   http://www.yworks.com/   b0ac8294d3f86ae0003f3a3a002ea3cf577df824efc6f2... -->
+</DL>\r
+<HR>\r
+\r
+<P>\r
+\r
+<P>\r
+<!-- ========= END OF CLASS DATA ========= -->\r
+<HR>\r
+\r
+\r
+<!-- ======= START OF BOTTOM NAVBAR ====== -->\r
+<A NAME="navbar_bottom"><!-- --></A>\r
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_bottom_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;PREV CLASS&nbsp;\r
+&nbsp;<A HREF="../../../../org/openexi/proc/io/CharacterBuffer.html" title="class in org.openexi.proc.io"><B>NEXT CLASS</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../../index.html?org/openexi/proc/io/BinaryDataSink.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="BinaryDataSink.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;METHOD</FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;METHOD</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_bottom"></A>\r
+<!-- ======== END OF BOTTOM NAVBAR ======= -->\r
+\r
+<HR>\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/io/CharacterBuffer.html b/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/io/CharacterBuffer.html
new file mode 100644 (file)
index 0000000..7b7e75e
--- /dev/null
@@ -0,0 +1,259 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:57 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+CharacterBuffer\r
+</TITLE>\r
+\r
+<META NAME="keywords" CONTENT="org.openexi.proc.io.CharacterBuffer class">\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">\r
+\r
+<SCRIPT type="text/javascript">\r
+function windowTitle()\r
+{\r
+    parent.document.title="CharacterBuffer";\r
+}\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+</NOSCRIPT>\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white" onload="windowTitle();">\r
+\r
+\r
+<!-- ========= START OF TOP NAVBAR ======= -->\r
+<A NAME="navbar_top"><!-- --></A>\r
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_top_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../../org/openexi/proc/io/BinaryDataSink.html" title="interface in org.openexi.proc.io"><B>PREV CLASS</B></A>&nbsp;\r
+&nbsp;<A HREF="../../../../org/openexi/proc/io/Scanner.html" title="class in org.openexi.proc.io"><B>NEXT CLASS</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../../index.html?org/openexi/proc/io/CharacterBuffer.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="CharacterBuffer.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.Object">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_top"></A>\r
+<!-- ========= END OF TOP NAVBAR ========= -->\r
+\r
+<HR>\r
+<!-- ======== START OF CLASS DATA ======== -->\r
+<H2>\r
+<FONT SIZE="-1">\r
+org.openexi.proc.io</FONT>\r
+<BR>\r
+Class CharacterBuffer</H2>\r
+<PRE>\r
+java.lang.Object\r
+  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>org.openexi.proc.io.CharacterBuffer</B>\r
+</PRE>\r
+<HR>\r
+<DL>\r
+<DT><PRE>public final class <B>CharacterBuffer</B><DT>extends java.lang.Object</DL>\r
+</PRE>\r
+\r
+<P>\r
+<DL>\r
+<!-- yWorks UML Doclet   http://www.yworks.com/   b0ac8294d3f86ae0003f3a3a002ea3cf577df824efc6f2... -->
+</DL>\r
+<HR>\r
+\r
+<P>\r
+<!-- =========== FIELD SUMMARY =========== -->\r
+\r
+<A NAME="field_summary"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Field Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;int</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/io/CharacterBuffer.html#BUFSIZE_DEFAULT">BUFSIZE_DEFAULT</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->\r
+\r
+<A NAME="constructor_summary"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Constructor Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/io/CharacterBuffer.html#CharacterBuffer(int)">CharacterBuffer</A></B>(int&nbsp;bufSize)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+<!-- ========== METHOD SUMMARY =========== -->\r
+\r
+<A NAME="method_summary"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Method Summary</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">\r
+<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+<P>\r
+\r
+<!-- ============ FIELD DETAIL =========== -->\r
+\r
+<A NAME="field_detail"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">\r
+<B>Field Detail</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<A NAME="BUFSIZE_DEFAULT"><!-- --></A><H3>\r
+BUFSIZE_DEFAULT</H3>\r
+<PRE>\r
+public static final int <B>BUFSIZE_DEFAULT</B></PRE>\r
+<DL>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.openexi.proc.io.CharacterBuffer.BUFSIZE_DEFAULT">Constant Field Values</A></DL>\r
+</DL>\r
+\r
+<!-- ========= CONSTRUCTOR DETAIL ======== -->\r
+\r
+<A NAME="constructor_detail"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">\r
+<B>Constructor Detail</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<A NAME="CharacterBuffer(int)"><!-- --></A><H3>\r
+CharacterBuffer</H3>\r
+<PRE>\r
+public <B>CharacterBuffer</B>(int&nbsp;bufSize)</PRE>\r
+<DL>\r
+</DL>\r
+<!-- ========= END OF CLASS DATA ========= -->\r
+<HR>\r
+\r
+\r
+<!-- ======= START OF BOTTOM NAVBAR ====== -->\r
+<A NAME="navbar_bottom"><!-- --></A>\r
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_bottom_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../../org/openexi/proc/io/BinaryDataSink.html" title="interface in org.openexi.proc.io"><B>PREV CLASS</B></A>&nbsp;\r
+&nbsp;<A HREF="../../../../org/openexi/proc/io/Scanner.html" title="class in org.openexi.proc.io"><B>NEXT CLASS</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../../index.html?org/openexi/proc/io/CharacterBuffer.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="CharacterBuffer.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.Object">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_bottom"></A>\r
+<!-- ======== END OF BOTTOM NAVBAR ======= -->\r
+\r
+<HR>\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/io/Scanner.html b/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/io/Scanner.html
new file mode 100644 (file)
index 0000000..82b5128
--- /dev/null
@@ -0,0 +1,354 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:57 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+Scanner\r
+</TITLE>\r
+\r
+<META NAME="keywords" CONTENT="org.openexi.proc.io.Scanner class">\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">\r
+\r
+<SCRIPT type="text/javascript">\r
+function windowTitle()\r
+{\r
+    parent.document.title="Scanner";\r
+}\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+</NOSCRIPT>\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white" onload="windowTitle();">\r
+\r
+\r
+<!-- ========= START OF TOP NAVBAR ======= -->\r
+<A NAME="navbar_top"><!-- --></A>\r
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_top_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../../org/openexi/proc/io/CharacterBuffer.html" title="class in org.openexi.proc.io"><B>PREV CLASS</B></A>&nbsp;\r
+&nbsp;NEXT CLASS</FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../../index.html?org/openexi/proc/io/Scanner.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="Scanner.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_org.openexi.proc.grammars.Apparatus">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_top"></A>\r
+<!-- ========= END OF TOP NAVBAR ========= -->\r
+\r
+<HR>\r
+<!-- ======== START OF CLASS DATA ======== -->\r
+<H2>\r
+<FONT SIZE="-1">\r
+org.openexi.proc.io</FONT>\r
+<BR>\r
+Class Scanner</H2>\r
+<PRE>\r
+java.lang.Object\r
+  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by ">org.openexi.proc.grammars.Apparatus\r
+      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>org.openexi.proc.io.Scanner</B>\r
+</PRE>\r
+<HR>\r
+<DL>\r
+<DT><PRE>public abstract class <B>Scanner</B><DT>extends org.openexi.proc.grammars.Apparatus</DL>\r
+</PRE>\r
+\r
+<P>\r
+The Scanner class provides methods for scanning events 
+ in the body of an EXI stream.\r
+<P>\r
+\r
+<P>\r
+<DL>\r
+<!-- yWorks UML Doclet   http://www.yworks.com/   b0ac8294d3f86ae0003f3a3a002ea3cf577df824efc6f2... -->
+</DL>\r
+<HR>\r
+\r
+<P>\r
+<!-- =========== FIELD SUMMARY =========== -->\r
+\r
+<A NAME="field_summary"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Field Summary</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+&nbsp;<A NAME="fields_inherited_from_class_org.openexi.proc.grammars.Apparatus"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">\r
+<TH ALIGN="left"><B>Fields inherited from class org.openexi.proc.grammars.Apparatus</B></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE>CODEC_BASE64BINARY, CODEC_BOOLEAN, CODEC_DATE, CODEC_DATETIME, CODEC_DECIMAL, CODEC_DOUBLE, CODEC_ENUMERATION, CODEC_GDAY, CODEC_GMONTH, CODEC_GMONTHDAY, CODEC_GYEAR, CODEC_GYEARMONTH, CODEC_HEXBINARY, CODEC_INTEGER, CODEC_LEXICAL, CODEC_LIST, CODEC_STRING, CODEC_TIME, currentState, eventTypesWorkSpace, schema, stringTable</CODE></TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+<!-- ========== METHOD SUMMARY =========== -->\r
+\r
+<A NAME="method_summary"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Method Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/io/Scanner.html#closeInputStream()">closeInputStream</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Close the input stream.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;<A HREF="../../../../org/openexi/proc/common/EXIOptions.html" title="class in org.openexi.proc.common">EXIOptions</A></CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/io/Scanner.html#getHeaderOptions()">getHeaderOptions</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the EXI Header options from the header of the
+ EXI stream, if present.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>abstract &nbsp;<A HREF="../../../../org/openexi/proc/common/EventDescription.html" title="interface in org.openexi.proc.common">EventDescription</A></CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/io/Scanner.html#nextEvent()">nextEvent</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gets the next event from the EXI stream.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>abstract &nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/io/Scanner.html#setBinaryChunkSize(int)">setBinaryChunkSize</A></B>(int&nbsp;chunkSize)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Binary values are read in chunks of the specified size when the
+ use of binary data is enabled.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../../org/openexi/proc/io/Scanner.html#setSchema(org.openexi.schema.EXISchema, org.openexi.proc.common.QName[], int)">setSchema</A></B>(<A HREF="../../../../org/openexi/schema/EXISchema.html" title="class in org.openexi.schema">EXISchema</A>&nbsp;schema,\r
+          <A HREF="../../../../org/openexi/proc/common/QName.html" title="class in org.openexi.proc.common">QName</A>[]&nbsp;dtrm,\r
+          int&nbsp;n_bindings)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;<A NAME="methods_inherited_from_class_org.openexi.proc.grammars.Apparatus"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">\r
+<TH ALIGN="left"><B>Methods inherited from class org.openexi.proc.grammars.Apparatus</B></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE>attribute, characters, endDocument, endElement, getAlignmentType, getNextEventCodes, getNextEventTypes, getPreserveLexicalValues, miscContent, nillify, reset, setPreserveLexicalValues, setStringTable, startDocument, startElement, startWildcardElement, undeclaredCharacters, wildcardAttribute, xsitp</CODE></TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">\r
+<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+<P>\r
+\r
+<!-- ============ METHOD DETAIL ========== -->\r
+\r
+<A NAME="method_detail"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">\r
+<B>Method Detail</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<A NAME="setSchema(org.openexi.schema.EXISchema, org.openexi.proc.common.QName[], int)"><!-- --></A><H3>\r
+setSchema</H3>\r
+<PRE>\r
+public void <B>setSchema</B>(<A HREF="../../../../org/openexi/schema/EXISchema.html" title="class in org.openexi.schema">EXISchema</A>&nbsp;schema,\r
+                      <A HREF="../../../../org/openexi/proc/common/QName.html" title="class in org.openexi.proc.common">QName</A>[]&nbsp;dtrm,\r
+                      int&nbsp;n_bindings)</PRE>\r
+<DL>\r
+<DD><DL>\r
+<DT><B>Overrides:</B><DD><CODE>setSchema</CODE> in class <CODE>org.openexi.proc.grammars.Apparatus</CODE></DL>\r
+</DD>\r
+<DD><DL>\r
+</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="nextEvent()"><!-- --></A><H3>\r
+nextEvent</H3>\r
+<PRE>\r
+public abstract <A HREF="../../../../org/openexi/proc/common/EventDescription.html" title="interface in org.openexi.proc.common">EventDescription</A> <B>nextEvent</B>()\r
+                                    throws java.io.IOException</PRE>\r
+<DL>\r
+<DD>Gets the next event from the EXI stream.\r
+<P>\r
+<DD><DL>\r
+\r
+<DT><B>Returns:</B><DD>EXIEvent\r
+<DT><B>Throws:</B>\r
+<DD><CODE>java.io.IOException</CODE></DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="closeInputStream()"><!-- --></A><H3>\r
+closeInputStream</H3>\r
+<PRE>\r
+public void <B>closeInputStream</B>()\r
+                      throws java.io.IOException</PRE>\r
+<DL>\r
+<DD>Close the input stream.\r
+<P>\r
+<DD><DL>\r
+\r
+<DT><B>Throws:</B>\r
+<DD><CODE>java.io.IOException</CODE></DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="getHeaderOptions()"><!-- --></A><H3>\r
+getHeaderOptions</H3>\r
+<PRE>\r
+public final <A HREF="../../../../org/openexi/proc/common/EXIOptions.html" title="class in org.openexi.proc.common">EXIOptions</A> <B>getHeaderOptions</B>()</PRE>\r
+<DL>\r
+<DD>Returns the EXI Header options from the header of the
+ EXI stream, if present. Otherwise, returns null.\r
+<P>\r
+<DD><DL>\r
+\r
+<DT><B>Returns:</B><DD>EXIOptions or <i>null</i> if no header options are set.</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="setBinaryChunkSize(int)"><!-- --></A><H3>\r
+setBinaryChunkSize</H3>\r
+<PRE>\r
+public abstract void <B>setBinaryChunkSize</B>(int&nbsp;chunkSize)</PRE>\r
+<DL>\r
+<DD>Binary values are read in chunks of the specified size when the
+ use of binary data is enabled.\r
+<P>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>chunkSize</CODE> - </DL>\r
+</DD>\r
+</DL>\r
+<!-- ========= END OF CLASS DATA ========= -->\r
+<HR>\r
+\r
+\r
+<!-- ======= START OF BOTTOM NAVBAR ====== -->\r
+<A NAME="navbar_bottom"><!-- --></A>\r
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_bottom_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../../org/openexi/proc/io/CharacterBuffer.html" title="class in org.openexi.proc.io"><B>PREV CLASS</B></A>&nbsp;\r
+&nbsp;NEXT CLASS</FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../../index.html?org/openexi/proc/io/Scanner.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="Scanner.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_org.openexi.proc.grammars.Apparatus">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_bottom"></A>\r
+<!-- ======== END OF BOTTOM NAVBAR ======= -->\r
+\r
+<HR>\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/io/package-frame.html b/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/io/package-frame.html
new file mode 100644 (file)
index 0000000..fe7bf70
--- /dev/null
@@ -0,0 +1,46 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:58 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+org.openexi.proc.io\r
+</TITLE>\r
+\r
+<META NAME="keywords" CONTENT="org.openexi.proc.io package">\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">\r
+\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white">\r
+<FONT size="+1" CLASS="FrameTitleFont">\r
+<A HREF="../../../../org/openexi/proc/io/package-summary.html" target="classFrame">org.openexi.proc.io</A></FONT>\r
+<TABLE BORDER="0" WIDTH="100%" SUMMARY="">\r
+<TR>\r
+<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">\r
+Interfaces</FONT>&nbsp;\r
+<FONT CLASS="FrameItemFont">\r
+<BR>\r
+<A HREF="BinaryDataSink.html" title="interface in org.openexi.proc.io" target="classFrame"><I>BinaryDataSink</I></A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+\r
+\r
+<TABLE BORDER="0" WIDTH="100%" SUMMARY="">\r
+<TR>\r
+<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">\r
+Classes</FONT>&nbsp;\r
+<FONT CLASS="FrameItemFont">\r
+<BR>\r
+<A HREF="CharacterBuffer.html" title="class in org.openexi.proc.io" target="classFrame">CharacterBuffer</A>\r
+<BR>\r
+<A HREF="Scanner.html" title="class in org.openexi.proc.io" target="classFrame">Scanner</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/io/package-summary.html b/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/io/package-summary.html
new file mode 100644 (file)
index 0000000..42831b8
--- /dev/null
@@ -0,0 +1,205 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:58 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+org.openexi.proc.io\r
+</TITLE>\r
+\r
+<META NAME="keywords" CONTENT="org.openexi.proc.io package">\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">\r
+\r
+<SCRIPT type="text/javascript">\r
+function windowTitle()\r
+{\r
+    parent.document.title="org.openexi.proc.io";\r
+}\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+</NOSCRIPT>\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white" onload="windowTitle();">\r
+\r
+\r
+<!-- ========= START OF TOP NAVBAR ======= -->\r
+<A NAME="navbar_top"><!-- --></A>\r
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_top_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../../org/openexi/proc/grammars/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;\r
+&nbsp;<A HREF="../../../../org/openexi/sax/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../../index.html?org/openexi/proc/io/package-summary.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_top"></A>\r
+<!-- ========= END OF TOP NAVBAR ========= -->\r
+\r
+<HR>\r
+<H2>\r
+Package org.openexi.proc.io\r
+</H2>\r
+\r
+<tr valign="top" cellpadding="3" border="0">\r
+\r
+The IO package contains the Scanner, which is used by <code>EXIDecoder</code> to read and interpret EXI streams.\r
+<P>\r
+<B>See:</B>\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<A HREF="#package_description"><B>Description</B></A>\r
+<P>\r
+\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Interface Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD WIDTH="15%"><B><A HREF="../../../../org/openexi/proc/io/BinaryDataSink.html" title="interface in org.openexi.proc.io">BinaryDataSink</A></B></TD>\r
+<TD>BinaryDataSink represents a sink that accepts successive chunks of binary data.</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+\r
+<P>\r
+\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Class Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD WIDTH="15%"><B><A HREF="../../../../org/openexi/proc/io/CharacterBuffer.html" title="class in org.openexi.proc.io">CharacterBuffer</A></B></TD>\r
+<TD>&nbsp;</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD WIDTH="15%"><B><A HREF="../../../../org/openexi/proc/io/Scanner.html" title="class in org.openexi.proc.io">Scanner</A></B></TD>\r
+<TD>The Scanner class provides methods for scanning events 
+ in the body of an EXI stream.</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+\r
+<P>\r
+<A NAME="package_description"><!-- --></A><H2>\r
+Package org.openexi.proc.io Description\r
+</H2>\r
+\r
+<P>\r
+<table>\r
+<tr valign="top" cellpadding="3" border="0">\r
+<td>\r
+<p>The IO package contains the Scanner, which is used by <code>EXIDecoder</code> to read and interpret EXI streams.\r
+</p>\r
+<p>\r
+The IO package also contains the non-public <code>Scriber</code> class, which is used by the <code>Transmogrifier</code> to encode EXI streams (which is why this is called the IO package). <code>Scriber</code> settings are fully implemented in the <code>Transmogrifier</code>.\r
+</p>\r
+</td>\r
+<td width="385">\r
+<img src="http://openexi.sourceforge.net/images/OpenEXI_Architecture_IO.PNG" width="375" height="280" />\r
+</td>\r
+</tr>\r
+</table>\r
+</p>\r
+<P>\r
+\r
+<P>\r
+<DL>\r
+<!-- yWorks UML Doclet   http://www.yworks.com/   b0ac8294d3f86ae0003f3a3a002ea3cf577df824efc6f2... -->
+</DL>\r
+<HR>\r
+\r
+\r
+<!-- ======= START OF BOTTOM NAVBAR ====== -->\r
+<A NAME="navbar_bottom"><!-- --></A>\r
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_bottom_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../../org/openexi/proc/grammars/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;\r
+&nbsp;<A HREF="../../../../org/openexi/sax/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../../index.html?org/openexi/proc/io/package-summary.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_bottom"></A>\r
+<!-- ======== END OF BOTTOM NAVBAR ======= -->\r
+\r
+<HR>\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/io/package-tree.html b/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/io/package-tree.html
new file mode 100644 (file)
index 0000000..b0cbe12
--- /dev/null
@@ -0,0 +1,155 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:58 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+org.openexi.proc.io Class Hierarchy\r
+</TITLE>\r
+\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">\r
+\r
+<SCRIPT type="text/javascript">\r
+function windowTitle()\r
+{\r
+    parent.document.title="org.openexi.proc.io Class Hierarchy";\r
+}\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+</NOSCRIPT>\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white" onload="windowTitle();">\r
+\r
+\r
+<!-- ========= START OF TOP NAVBAR ======= -->\r
+<A NAME="navbar_top"><!-- --></A>\r
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_top_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../../org/openexi/proc/grammars/package-tree.html"><B>PREV</B></A>&nbsp;\r
+&nbsp;<A HREF="../../../../org/openexi/sax/package-tree.html"><B>NEXT</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../../index.html?org/openexi/proc/io/package-tree.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_top"></A>\r
+<!-- ========= END OF TOP NAVBAR ========= -->\r
+\r
+<HR>\r
+<CENTER>\r
+<H2>\r
+Hierarchy For Package org.openexi.proc.io\r
+</H2>\r
+</CENTER>\r
+<DL>\r
+<DT><B>Package Hierarchies:</B><DD><A HREF="../../../../overview-tree.html">All Packages</A></DL>\r
+<HR>\r
+<H2>\r
+Class Hierarchy\r
+</H2>\r
+<UL>\r
+<LI TYPE="circle">java.lang.Object<UL>\r
+<LI TYPE="circle">org.openexi.proc.grammars.Apparatus<UL>\r
+<LI TYPE="circle">org.openexi.proc.io.<A HREF="../../../../org/openexi/proc/io/Scanner.html" title="class in org.openexi.proc.io"><B>Scanner</B></A></UL>\r
+<LI TYPE="circle">org.openexi.proc.io.<A HREF="../../../../org/openexi/proc/io/CharacterBuffer.html" title="class in org.openexi.proc.io"><B>CharacterBuffer</B></A></UL>\r
+</UL>\r
+<H2>\r
+Interface Hierarchy\r
+</H2>\r
+<UL>\r
+<LI TYPE="circle">org.openexi.proc.io.<A HREF="../../../../org/openexi/proc/io/BinaryDataSink.html" title="interface in org.openexi.proc.io"><B>BinaryDataSink</B></A></UL>\r
+<HR>\r
+\r
+\r
+<!-- ======= START OF BOTTOM NAVBAR ====== -->\r
+<A NAME="navbar_bottom"><!-- --></A>\r
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_bottom_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../../org/openexi/proc/grammars/package-tree.html"><B>PREV</B></A>&nbsp;\r
+&nbsp;<A HREF="../../../../org/openexi/sax/package-tree.html"><B>NEXT</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../../index.html?org/openexi/proc/io/package-tree.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_bottom"></A>\r
+<!-- ======== END OF BOTTOM NAVBAR ======= -->\r
+\r
+<HR>\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/package-frame.html b/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/package-frame.html
new file mode 100644 (file)
index 0000000..31406d3
--- /dev/null
@@ -0,0 +1,55 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:58 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+org.openexi.proc\r
+</TITLE>\r
+\r
+<META NAME="keywords" CONTENT="org.openexi.proc package">\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">\r
+\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white">\r
+<FONT size="+1" CLASS="FrameTitleFont">\r
+<A HREF="../../../org/openexi/proc/package-summary.html" target="classFrame">org.openexi.proc</A></FONT>\r
+<TABLE BORDER="0" WIDTH="100%" SUMMARY="">\r
+<TR>\r
+<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">\r
+Interfaces</FONT>&nbsp;\r
+<FONT CLASS="FrameItemFont">\r
+<BR>\r
+<A HREF="EXISchemaResolver.html" title="interface in org.openexi.proc" target="classFrame"><I>EXISchemaResolver</I></A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+\r
+\r
+<TABLE BORDER="0" WIDTH="100%" SUMMARY="">\r
+<TR>\r
+<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">\r
+Classes</FONT>&nbsp;\r
+<FONT CLASS="FrameItemFont">\r
+<BR>\r
+<A HREF="EXIDecoder.html" title="class in org.openexi.proc" target="classFrame">EXIDecoder</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+\r
+\r
+<TABLE BORDER="0" WIDTH="100%" SUMMARY="">\r
+<TR>\r
+<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">\r
+Enums</FONT>&nbsp;\r
+<FONT CLASS="FrameItemFont">\r
+<BR>\r
+<A HREF="HeaderOptionsOutputType.html" title="enum in org.openexi.proc" target="classFrame">HeaderOptionsOutputType</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/package-summary.html b/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/package-summary.html
new file mode 100644 (file)
index 0000000..957e54a
--- /dev/null
@@ -0,0 +1,219 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:58 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+org.openexi.proc\r
+</TITLE>\r
+\r
+<META NAME="keywords" CONTENT="org.openexi.proc package">\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">\r
+\r
+<SCRIPT type="text/javascript">\r
+function windowTitle()\r
+{\r
+    parent.document.title="org.openexi.proc";\r
+}\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+</NOSCRIPT>\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white" onload="windowTitle();">\r
+\r
+\r
+<!-- ========= START OF TOP NAVBAR ======= -->\r
+<A NAME="navbar_top"><!-- --></A>\r
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_top_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;PREV PACKAGE&nbsp;\r
+&nbsp;<A HREF="../../../org/openexi/proc/common/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../index.html?org/openexi/proc/package-summary.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_top"></A>\r
+<!-- ========= END OF TOP NAVBAR ========= -->\r
+\r
+<HR>\r
+<H2>\r
+Package org.openexi.proc\r
+</H2>\r
+\r
+<tr valign="top" cellpadding="3" border="0">\r
+\r
+The Proc (Processor) package contains the EXIDecoder, which is used to convert EXI streams to XML format.\r
+<P>\r
+<B>See:</B>\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<A HREF="#package_description"><B>Description</B></A>\r
+<P>\r
+\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Interface Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD WIDTH="15%"><B><A HREF="../../../org/openexi/proc/EXISchemaResolver.html" title="interface in org.openexi.proc">EXISchemaResolver</A></B></TD>\r
+<TD>Developers have the option of implementing the EXISchemaResolver interface
+ to help EXIReader and EXIDecoder locate the correct grammar cache for parsing 
+ an EXI stream.</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+\r
+<P>\r
+\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Class Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD WIDTH="15%"><B><A HREF="../../../org/openexi/proc/EXIDecoder.html" title="class in org.openexi.proc">EXIDecoder</A></B></TD>\r
+<TD>EXIDecoder provides methods to configure and 
+ instantiate a <A HREF="../../../org/openexi/proc/io/Scanner.html" title="class in org.openexi.proc.io"><CODE>Scanner</CODE></A> object
+ you can use to parse the contents of an EXI stream.</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+\r
+<P>\r
+\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Enum Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD WIDTH="15%"><B><A HREF="../../../org/openexi/proc/HeaderOptionsOutputType.html" title="enum in org.openexi.proc">HeaderOptionsOutputType</A></B></TD>\r
+<TD>This enumeration provides three possible settings for header options output.</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+\r
+<P>\r
+<A NAME="package_description"><!-- --></A><H2>\r
+Package org.openexi.proc Description\r
+</H2>\r
+\r
+<P>\r
+<table>\r
+<tr valign="top" cellpadding="3" border="0">\r
+<td>\r
+<p>The Proc (Processor) package contains the EXIDecoder, which is used to convert EXI streams to XML format.\r
+EXIDecoder uses the org.openexi.proc.io.Scanner to parse EXI streams into a sequence of XML events. org.openexi.sax.EXIReader wraps EXIDecoder to provide a SAX interface for accessing the XML content.\r
+</p>\r
+<p>\r
+The EXISchemaResolver interface can be implemented and used to add a hint in the EXI header to help EXIDecoder locate the EXISchema.\r
+</p>\r
+<p>The HeaderOptionsOutputType enumerator is used to set the header output options in the Transmogrifier.</td>\r
+<td width="385">\r
+<img src="http://openexi.sourceforge.net/images/OpenEXI_Architecture_Proc.PNG" width="375" height="280" />\r
+</td>\r
+</tr>\r
+</table>\r
+</p>\r
+<P>\r
+\r
+<P>\r
+<DL>\r
+<!-- yWorks UML Doclet   http://www.yworks.com/   b0ac8294d3f86ae0003f3a3a002ea3cf577df824efc6f2... -->
+</DL>\r
+<HR>\r
+\r
+\r
+<!-- ======= START OF BOTTOM NAVBAR ====== -->\r
+<A NAME="navbar_bottom"><!-- --></A>\r
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_bottom_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;PREV PACKAGE&nbsp;\r
+&nbsp;<A HREF="../../../org/openexi/proc/common/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../index.html?org/openexi/proc/package-summary.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_bottom"></A>\r
+<!-- ======== END OF BOTTOM NAVBAR ======= -->\r
+\r
+<HR>\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/package-tree.html b/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/package-tree.html
new file mode 100644 (file)
index 0000000..3bf180e
--- /dev/null
@@ -0,0 +1,163 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:58 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+org.openexi.proc Class Hierarchy\r
+</TITLE>\r
+\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">\r
+\r
+<SCRIPT type="text/javascript">\r
+function windowTitle()\r
+{\r
+    parent.document.title="org.openexi.proc Class Hierarchy";\r
+}\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+</NOSCRIPT>\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white" onload="windowTitle();">\r
+\r
+\r
+<!-- ========= START OF TOP NAVBAR ======= -->\r
+<A NAME="navbar_top"><!-- --></A>\r
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_top_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;PREV&nbsp;\r
+&nbsp;<A HREF="../../../org/openexi/proc/common/package-tree.html"><B>NEXT</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../index.html?org/openexi/proc/package-tree.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_top"></A>\r
+<!-- ========= END OF TOP NAVBAR ========= -->\r
+\r
+<HR>\r
+<CENTER>\r
+<H2>\r
+Hierarchy For Package org.openexi.proc\r
+</H2>\r
+</CENTER>\r
+<DL>\r
+<DT><B>Package Hierarchies:</B><DD><A HREF="../../../overview-tree.html">All Packages</A></DL>\r
+<HR>\r
+<H2>\r
+Class Hierarchy\r
+</H2>\r
+<UL>\r
+<LI TYPE="circle">java.lang.Object<UL>\r
+<LI TYPE="circle">org.openexi.proc.<A HREF="../../../org/openexi/proc/EXIDecoder.html" title="class in org.openexi.proc"><B>EXIDecoder</B></A></UL>\r
+</UL>\r
+<H2>\r
+Interface Hierarchy\r
+</H2>\r
+<UL>\r
+<LI TYPE="circle">org.openexi.proc.<A HREF="../../../org/openexi/proc/EXISchemaResolver.html" title="interface in org.openexi.proc"><B>EXISchemaResolver</B></A></UL>\r
+<H2>\r
+Enum Hierarchy\r
+</H2>\r
+<UL>\r
+<LI TYPE="circle">java.lang.Object<UL>\r
+<LI TYPE="circle">java.lang.Enum&lt;E&gt; (implements java.lang.Comparable&lt;T&gt;, java.io.Serializable)\r
+<UL>\r
+<LI TYPE="circle">org.openexi.proc.<A HREF="../../../org/openexi/proc/HeaderOptionsOutputType.html" title="enum in org.openexi.proc"><B>HeaderOptionsOutputType</B></A></UL>\r
+</UL>\r
+</UL>\r
+<HR>\r
+\r
+\r
+<!-- ======= START OF BOTTOM NAVBAR ====== -->\r
+<A NAME="navbar_bottom"><!-- --></A>\r
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_bottom_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;PREV&nbsp;\r
+&nbsp;<A HREF="../../../org/openexi/proc/common/package-tree.html"><B>NEXT</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../index.html?org/openexi/proc/package-tree.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_bottom"></A>\r
+<!-- ======== END OF BOTTOM NAVBAR ======= -->\r
+\r
+<HR>\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/sax/BinaryDataHandler.html b/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/sax/BinaryDataHandler.html
new file mode 100644 (file)
index 0000000..b73a833
--- /dev/null
@@ -0,0 +1,267 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:57 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+BinaryDataHandler\r
+</TITLE>\r
+\r
+<META NAME="keywords" CONTENT="org.openexi.sax.BinaryDataHandler interface">\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">\r
+\r
+<SCRIPT type="text/javascript">\r
+function windowTitle()\r
+{\r
+    parent.document.title="BinaryDataHandler";\r
+}\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+</NOSCRIPT>\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white" onload="windowTitle();">\r
+\r
+\r
+<!-- ========= START OF TOP NAVBAR ======= -->\r
+<A NAME="navbar_top"><!-- --></A>\r
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_top_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;PREV CLASS&nbsp;\r
+&nbsp;<A HREF="../../../org/openexi/sax/EXIReader.html" title="class in org.openexi.sax"><B>NEXT CLASS</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../index.html?org/openexi/sax/BinaryDataHandler.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="BinaryDataHandler.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_top"></A>\r
+<!-- ========= END OF TOP NAVBAR ========= -->\r
+\r
+<HR>\r
+<!-- ======== START OF CLASS DATA ======== -->\r
+<H2>\r
+<FONT SIZE="-1">\r
+org.openexi.sax</FONT>\r
+<BR>\r
+Interface BinaryDataHandler</H2>\r
+<DL>\r
+<DT><B>All Known Subinterfaces:</B> <DD><A HREF="../../../org/openexi/sax/SAXTransmogrifier.html" title="interface in org.openexi.sax">SAXTransmogrifier</A></DD>\r
+</DL>\r
+<HR>\r
+<DL>\r
+<DT><PRE>public interface <B>BinaryDataHandler</B></DL>\r
+</PRE>\r
+\r
+<P>\r
+<DL>\r
+<!-- yWorks UML Doclet   http://www.yworks.com/   b0ac8294d3f86ae0003f3a3a002ea3cf577df824efc6f2... -->
+</DL>\r
+<HR>\r
+\r
+<P>\r
+\r
+<!-- ========== METHOD SUMMARY =========== -->\r
+\r
+<A NAME="method_summary"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Method Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/BinaryDataHandler.html#binaryData(byte[], int, int, org.openexi.proc.io.BinaryDataSink)">binaryData</A></B>(byte[]&nbsp;byteArray,\r
+           int&nbsp;offset,\r
+           int&nbsp;length,\r
+           <A HREF="../../../org/openexi/proc/io/BinaryDataSink.html" title="interface in org.openexi.proc.io">BinaryDataSink</A>&nbsp;binaryDataSink)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Writes a binary value where the schema expects a binary value.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/BinaryDataHandler.html#endBinaryData(org.openexi.proc.io.BinaryDataSink)">endBinaryData</A></B>(<A HREF="../../../org/openexi/proc/io/BinaryDataSink.html" title="interface in org.openexi.proc.io">BinaryDataSink</A>&nbsp;binaryDataSink)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Mark the end of a binary value.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;<A HREF="../../../org/openexi/proc/io/BinaryDataSink.html" title="interface in org.openexi.proc.io">BinaryDataSink</A></CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/BinaryDataHandler.html#startBinaryData(long)">startBinaryData</A></B>(long&nbsp;totalSize)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Mark the start of a binary value.</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+<P>\r
+\r
+<!-- ============ METHOD DETAIL ========== -->\r
+\r
+<A NAME="method_detail"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">\r
+<B>Method Detail</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<A NAME="startBinaryData(long)"><!-- --></A><H3>\r
+startBinaryData</H3>\r
+<PRE>\r
+<A HREF="../../../org/openexi/proc/io/BinaryDataSink.html" title="interface in org.openexi.proc.io">BinaryDataSink</A> <B>startBinaryData</B>(long&nbsp;totalSize)\r
+                               throws org.xml.sax.SAXException</PRE>\r
+<DL>\r
+<DD>Mark the start of a binary value.\r
+<P>\r
+<DD><DL>\r
+\r
+<DT><B>Throws:</B>\r
+<DD><CODE>org.xml.sax.SAXException</CODE></DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="binaryData(byte[], int, int, org.openexi.proc.io.BinaryDataSink)"><!-- --></A><H3>\r
+binaryData</H3>\r
+<PRE>\r
+void <B>binaryData</B>(byte[]&nbsp;byteArray,\r
+                int&nbsp;offset,\r
+                int&nbsp;length,\r
+                <A HREF="../../../org/openexi/proc/io/BinaryDataSink.html" title="interface in org.openexi.proc.io">BinaryDataSink</A>&nbsp;binaryDataSink)\r
+                throws org.xml.sax.SAXException</PRE>\r
+<DL>\r
+<DD>Writes a binary value where the schema expects a binary value.\r
+<P>\r
+<DD><DL>\r
+\r
+<DT><B>Throws:</B>\r
+<DD><CODE>org.xml.sax.SAXException</CODE></DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="endBinaryData(org.openexi.proc.io.BinaryDataSink)"><!-- --></A><H3>\r
+endBinaryData</H3>\r
+<PRE>\r
+void <B>endBinaryData</B>(<A HREF="../../../org/openexi/proc/io/BinaryDataSink.html" title="interface in org.openexi.proc.io">BinaryDataSink</A>&nbsp;binaryDataSink)\r
+                   throws org.xml.sax.SAXException</PRE>\r
+<DL>\r
+<DD>Mark the end of a binary value.\r
+<P>\r
+<DD><DL>\r
+\r
+<DT><B>Throws:</B>\r
+<DD><CODE>org.xml.sax.SAXException</CODE></DL>\r
+</DD>\r
+</DL>\r
+<!-- ========= END OF CLASS DATA ========= -->\r
+<HR>\r
+\r
+\r
+<!-- ======= START OF BOTTOM NAVBAR ====== -->\r
+<A NAME="navbar_bottom"><!-- --></A>\r
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_bottom_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;PREV CLASS&nbsp;\r
+&nbsp;<A HREF="../../../org/openexi/sax/EXIReader.html" title="class in org.openexi.sax"><B>NEXT CLASS</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../index.html?org/openexi/sax/BinaryDataHandler.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="BinaryDataHandler.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_bottom"></A>\r
+<!-- ======== END OF BOTTOM NAVBAR ======= -->\r
+\r
+<HR>\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/sax/EXIReader.html b/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/sax/EXIReader.html
new file mode 100644 (file)
index 0000000..228aa75
--- /dev/null
@@ -0,0 +1,645 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:57 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+EXIReader\r
+</TITLE>\r
+\r
+<META NAME="keywords" CONTENT="org.openexi.sax.EXIReader class">\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">\r
+\r
+<SCRIPT type="text/javascript">\r
+function windowTitle()\r
+{\r
+    parent.document.title="EXIReader";\r
+}\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+</NOSCRIPT>\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white" onload="windowTitle();">\r
+\r
+\r
+<!-- ========= START OF TOP NAVBAR ======= -->\r
+<A NAME="navbar_top"><!-- --></A>\r
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_top_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../org/openexi/sax/BinaryDataHandler.html" title="interface in org.openexi.sax"><B>PREV CLASS</B></A>&nbsp;\r
+&nbsp;<A HREF="../../../org/openexi/sax/ReaderSupport.html" title="class in org.openexi.sax"><B>NEXT CLASS</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../index.html?org/openexi/sax/EXIReader.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="EXIReader.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_top"></A>\r
+<!-- ========= END OF TOP NAVBAR ========= -->\r
+\r
+<HR>\r
+<!-- ======== START OF CLASS DATA ======== -->\r
+<H2>\r
+<FONT SIZE="-1">\r
+org.openexi.sax</FONT>\r
+<BR>\r
+Class EXIReader</H2>\r
+<PRE>\r
+java.lang.Object\r
+  <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../org/openexi/sax/ReaderSupport.html" title="class in org.openexi.sax">org.openexi.sax.ReaderSupport</A>\r
+      <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>org.openexi.sax.EXIReader</B>\r
+</PRE>\r
+<DL>\r
+<DT><B>All Implemented Interfaces:</B> <DD>org.xml.sax.Attributes, org.xml.sax.XMLReader</DD>\r
+</DL>\r
+<HR>\r
+<DL>\r
+<DT><PRE>public final class <B>EXIReader</B><DT>extends <A HREF="../../../org/openexi/sax/ReaderSupport.html" title="class in org.openexi.sax">ReaderSupport</A><DT>implements org.xml.sax.XMLReader</DL>\r
+</PRE>\r
+\r
+<P>\r
+EXIReader implements the SAX XMLReader to provide a convenient and 
+ familiar interface for decoding an EXI stream.\r
+<P>\r
+\r
+<P>\r
+<DL>\r
+<!-- yWorks UML Doclet   http://www.yworks.com/   b0ac8294d3f86ae0003f3a3a002ea3cf577df824efc6f2... -->
+</DL>\r
+<HR>\r
+\r
+<P>\r
+\r
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->\r
+\r
+<A NAME="constructor_summary"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Constructor Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/EXIReader.html#EXIReader()">EXIReader</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+<!-- ========== METHOD SUMMARY =========== -->\r
+\r
+<A NAME="method_summary"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Method Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;boolean</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/EXIReader.html#getFeature(java.lang.String)">getFeature</A></B>(java.lang.String&nbsp;name)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get features for the SAX parser.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;java.lang.Object</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/EXIReader.html#getProperty(java.lang.String)">getProperty</A></B>(java.lang.String&nbsp;name)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Use to retrieve the name of the lexical handler, currently the only
+ property recognized by this class.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/EXIReader.html#setAlignmentType(org.openexi.proc.common.AlignmentType)">setAlignmentType</A></B>(<A HREF="../../../org/openexi/proc/common/AlignmentType.html" title="enum in org.openexi.proc.common">AlignmentType</A>&nbsp;alignmentType)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the bit alignment style used to compile the EXI input stream.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/EXIReader.html#setBlockSize(int)">setBlockSize</A></B>(int&nbsp;blockSize)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the size, in number of values, of the information that will be 
+ processed as a chunk of the entire EXI stream.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/EXIReader.html#setDatatypeRepresentationMap(org.openexi.proc.common.QName[], int)">setDatatypeRepresentationMap</A></B>(<A HREF="../../../org/openexi/proc/common/QName.html" title="class in org.openexi.proc.common">QName</A>[]&nbsp;dtrm,\r
+                             int&nbsp;n_bindings)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set a datatype representation map.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/EXIReader.html#setEXISchemaResolver(org.openexi.proc.EXISchemaResolver)">setEXISchemaResolver</A></B>(<A HREF="../../../org/openexi/proc/EXISchemaResolver.html" title="interface in org.openexi.proc">EXISchemaResolver</A>&nbsp;schemaResolver)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the EXISchemaResolver to retrieve the schema needed to decode the 
+ current EXI stream.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/EXIReader.html#setFeature(java.lang.String, boolean)">setFeature</A></B>(java.lang.String&nbsp;name,\r
+           boolean&nbsp;value)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set features for the SAX parser.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/EXIReader.html#setFragment(boolean)">setFragment</A></B>(boolean&nbsp;isFragment)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set to true if the EXI input stream is an XML fragment (a non-compliant
+ XML document with multiple root elements).</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/EXIReader.html#setLexicalHandler(org.xml.sax.ext.LexicalHandler)">setLexicalHandler</A></B>(org.xml.sax.ext.LexicalHandler&nbsp;lexicalHandler)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set a SAX lexical handler to receive SAX lexical events.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/EXIReader.html#setPreserveLexicalValues(boolean)">setPreserveLexicalValues</A></B>(boolean&nbsp;preserveLexicalValues)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set to true if the EXI input stream was compiled with the Preserve Lexical
+ Values set to true.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/EXIReader.html#setProperty(java.lang.String, java.lang.Object)">setProperty</A></B>(java.lang.String&nbsp;name,\r
+            java.lang.Object&nbsp;value)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This method wraps the friendlier setLexicalHandler method to provide 
+ syntax familiar to experienced SAX programmers.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/EXIReader.html#setValueMaxLength(int)">setValueMaxLength</A></B>(int&nbsp;valueMaxLength)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the maximum length of a string that will be stored for reuse in the
+ String Table.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/EXIReader.html#setValuePartitionCapacity(int)">setValuePartitionCapacity</A></B>(int&nbsp;valuePartitionCapacity)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the maximum number of values in the String Table.</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;<A NAME="methods_inherited_from_class_org.openexi.sax.ReaderSupport"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">\r
+<TH ALIGN="left"><B>Methods inherited from class org.openexi.sax.<A HREF="../../../org/openexi/sax/ReaderSupport.html" title="class in org.openexi.sax">ReaderSupport</A></B></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE><A HREF="../../../org/openexi/sax/ReaderSupport.html#getContentHandler()">getContentHandler</A>, <A HREF="../../../org/openexi/sax/ReaderSupport.html#setContentHandler(org.xml.sax.ContentHandler)">setContentHandler</A>, <A HREF="../../../org/openexi/sax/ReaderSupport.html#setGrammarCache(org.openexi.proc.grammars.GrammarCache)">setGrammarCache</A></CODE></TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">\r
+<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;<A NAME="methods_inherited_from_class_org.xml.sax.XMLReader"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">\r
+<TH ALIGN="left"><B>Methods inherited from interface org.xml.sax.XMLReader</B></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE>getContentHandler, getDTDHandler, getEntityResolver, getErrorHandler, parse, parse, setContentHandler, setDTDHandler, setEntityResolver, setErrorHandler</CODE></TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;<A NAME="methods_inherited_from_class_org.xml.sax.Attributes"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">\r
+<TH ALIGN="left"><B>Methods inherited from interface org.xml.sax.Attributes</B></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE>getIndex, getIndex, getLength, getLocalName, getQName, getType, getType, getType, getURI, getValue, getValue, getValue</CODE></TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+<P>\r
+\r
+<!-- ========= CONSTRUCTOR DETAIL ======== -->\r
+\r
+<A NAME="constructor_detail"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">\r
+<B>Constructor Detail</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<A NAME="EXIReader()"><!-- --></A><H3>\r
+EXIReader</H3>\r
+<PRE>\r
+public <B>EXIReader</B>()</PRE>\r
+<DL>\r
+</DL>\r
+\r
+<!-- ============ METHOD DETAIL ========== -->\r
+\r
+<A NAME="method_detail"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">\r
+<B>Method Detail</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<A NAME="setProperty(java.lang.String, java.lang.Object)"><!-- --></A><H3>\r
+setProperty</H3>\r
+<PRE>\r
+public final void <B>setProperty</B>(java.lang.String&nbsp;name,\r
+                              java.lang.Object&nbsp;value)\r
+                       throws org.xml.sax.SAXNotRecognizedException</PRE>\r
+<DL>\r
+<DD>This method wraps the friendlier setLexicalHandler method to provide 
+ syntax familiar to experienced SAX programmers. The only property 
+ supported is: <pre>http://xml.org/sax/properties/lexical-handler</pre>\r
+<P>\r
+<DD><DL>\r
+<DT><B>Specified by:</B><DD><CODE>setProperty</CODE> in interface <CODE>org.xml.sax.XMLReader</CODE></DL>\r
+</DD>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>name</CODE> - must equal "http://xml.org/sax/properties/lexical-handler"<DD><CODE>value</CODE> - an org.xml.sax.ext.LexicalHandler object\r
+<DT><B>Throws:</B>\r
+<DD><CODE>org.xml.sax.SAXNotRecognizedException</CODE></DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="getProperty(java.lang.String)"><!-- --></A><H3>\r
+getProperty</H3>\r
+<PRE>\r
+public final java.lang.Object <B>getProperty</B>(java.lang.String&nbsp;name)\r
+                                   throws org.xml.sax.SAXNotRecognizedException</PRE>\r
+<DL>\r
+<DD>Use to retrieve the name of the lexical handler, currently the only
+ property recognized by this class. Pass the String
+ "http://xml.org/sax/properties/lexical-handler" as the name.\r
+<P>\r
+<DD><DL>\r
+<DT><B>Specified by:</B><DD><CODE>getProperty</CODE> in interface <CODE>org.xml.sax.XMLReader</CODE></DL>\r
+</DD>\r
+<DD><DL>\r
+\r
+<DT><B>Returns:</B><DD>String name of the lexical handler\r
+<DT><B>Throws:</B>\r
+<DD><CODE>org.xml.sax.SAXNotRecognizedException</CODE></DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="setFeature(java.lang.String, boolean)"><!-- --></A><H3>\r
+setFeature</H3>\r
+<PRE>\r
+public final void <B>setFeature</B>(java.lang.String&nbsp;name,\r
+                             boolean&nbsp;value)\r
+                      throws org.xml.sax.SAXNotRecognizedException,\r
+                             org.xml.sax.SAXNotSupportedException</PRE>\r
+<DL>\r
+<DD>Set features for the SAX parser. The only supported arguments are <pre>
+ EXIReader.setFeature("http://xml.org/sax/features/namespaces", true);</pre> and <pre>
+ EXIReader.setFeature("http://xml.org/sax/features/namespace-prefixes", false);</pre>\r
+<P>\r
+<DD><DL>\r
+<DT><B>Specified by:</B><DD><CODE>setFeature</CODE> in interface <CODE>org.xml.sax.XMLReader</CODE></DL>\r
+</DD>\r
+<DD><DL>\r
+\r
+<DT><B>Throws:</B>\r
+<DD><CODE>org.xml.sax.SAXNotRecognizedException</CODE>\r
+<DD><CODE>org.xml.sax.SAXNotSupportedException</CODE></DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="getFeature(java.lang.String)"><!-- --></A><H3>\r
+getFeature</H3>\r
+<PRE>\r
+public final boolean <B>getFeature</B>(java.lang.String&nbsp;name)\r
+                         throws org.xml.sax.SAXNotRecognizedException</PRE>\r
+<DL>\r
+<DD>Get features for the SAX parser.\r
+<P>\r
+<DD><DL>\r
+<DT><B>Specified by:</B><DD><CODE>getFeature</CODE> in interface <CODE>org.xml.sax.XMLReader</CODE></DL>\r
+</DD>\r
+<DD><DL>\r
+\r
+<DT><B>Returns:</B><DD><i>true</i> if the feature is "http://xml.org/sax/features/namespaces"
+ and <i>false</i> if the feature is "http://xml.org/sax/features/namespace-prefixes"\r
+<DT><B>Throws:</B>\r
+<DD><CODE>org.xml.sax.SAXNotRecognizedException</CODE></DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="setAlignmentType(org.openexi.proc.common.AlignmentType)"><!-- --></A><H3>\r
+setAlignmentType</H3>\r
+<PRE>\r
+public final void <B>setAlignmentType</B>(<A HREF="../../../org/openexi/proc/common/AlignmentType.html" title="enum in org.openexi.proc.common">AlignmentType</A>&nbsp;alignmentType)\r
+                            throws org.openexi.proc.common.EXIOptionsException</PRE>\r
+<DL>\r
+<DD>Set the bit alignment style used to compile the EXI input stream.\r
+<P>\r
+<DD><DL>\r
+</DL>\r
+</DD>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>alignmentType</CODE> - <A HREF="../../../org/openexi/proc/common/AlignmentType.html" title="enum in org.openexi.proc.common"><CODE>AlignmentType</CODE></A>\r
+<DT><B>Throws:</B>\r
+<DD><CODE>org.openexi.proc.common.EXIOptionsException</CODE></DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="setFragment(boolean)"><!-- --></A><H3>\r
+setFragment</H3>\r
+<PRE>\r
+public final void <B>setFragment</B>(boolean&nbsp;isFragment)</PRE>\r
+<DL>\r
+<DD>Set to true if the EXI input stream is an XML fragment (a non-compliant
+ XML document with multiple root elements).\r
+<P>\r
+<DD><DL>\r
+</DL>\r
+</DD>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>isFragment</CODE> - true if the EXI input stream is an XML fragment.</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="setPreserveLexicalValues(boolean)"><!-- --></A><H3>\r
+setPreserveLexicalValues</H3>\r
+<PRE>\r
+public final void <B>setPreserveLexicalValues</B>(boolean&nbsp;preserveLexicalValues)\r
+                                    throws org.openexi.proc.common.EXIOptionsException</PRE>\r
+<DL>\r
+<DD>Set to true if the EXI input stream was compiled with the Preserve Lexical
+ Values set to true. The original strings, rather than logical XML
+ equivalents, are restored in the XML output stream.\r
+<P>\r
+<DD><DL>\r
+</DL>\r
+</DD>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>preserveLexicalValues</CODE> - set to true if the EXI input stream was compiled with 
+ Preserve Lexical Values set to true.\r
+<DT><B>Throws:</B>\r
+<DD><CODE>org.openexi.proc.common.EXIOptionsException</CODE></DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="setEXISchemaResolver(org.openexi.proc.EXISchemaResolver)"><!-- --></A><H3>\r
+setEXISchemaResolver</H3>\r
+<PRE>\r
+public final void <B>setEXISchemaResolver</B>(<A HREF="../../../org/openexi/proc/EXISchemaResolver.html" title="interface in org.openexi.proc">EXISchemaResolver</A>&nbsp;schemaResolver)</PRE>\r
+<DL>\r
+<DD>Set the EXISchemaResolver to retrieve the schema needed to decode the 
+ current EXI stream.\r
+<P>\r
+<DD><DL>\r
+</DL>\r
+</DD>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>schemaResolver</CODE> - <A HREF="../../../org/openexi/proc/EXISchemaResolver.html" title="interface in org.openexi.proc"><CODE>EXISchemaResolver</CODE></A></DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="setDatatypeRepresentationMap(org.openexi.proc.common.QName[], int)"><!-- --></A><H3>\r
+setDatatypeRepresentationMap</H3>\r
+<PRE>\r
+public final void <B>setDatatypeRepresentationMap</B>(<A HREF="../../../org/openexi/proc/common/QName.html" title="class in org.openexi.proc.common">QName</A>[]&nbsp;dtrm,\r
+                                               int&nbsp;n_bindings)\r
+                                        throws org.openexi.proc.common.EXIOptionsException</PRE>\r
+<DL>\r
+<DD>Set a datatype representation map.\r
+<P>\r
+<DD><DL>\r
+</DL>\r
+</DD>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>dtrm</CODE> - a sequence of pairs of datatype qname and datatype representation qname<DD><CODE>n_bindings</CODE> - the number of qname pairs\r
+<DT><B>Throws:</B>\r
+<DD><CODE>org.openexi.proc.common.EXIOptionsException</CODE></DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="setBlockSize(int)"><!-- --></A><H3>\r
+setBlockSize</H3>\r
+<PRE>\r
+public final void <B>setBlockSize</B>(int&nbsp;blockSize)\r
+                        throws org.openexi.proc.common.EXIOptionsException</PRE>\r
+<DL>\r
+<DD>Set the size, in number of values, of the information that will be 
+ processed as a chunk of the entire EXI stream. Reducing the block size 
+ can improve performance for devices with limited dynamic memory. 
+ Default is 1,000,000 items (not 1MB, but 1,000,000 complete Attribute 
+ and Element values). Block size is only used when the EXI stream is
+ encoded with EXI-compression.\r
+<P>\r
+<DD><DL>\r
+</DL>\r
+</DD>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>blockSize</CODE> - number of values in each processing block. Default is 1,000,000.\r
+<DT><B>Throws:</B>\r
+<DD><CODE>org.openexi.proc.common.EXIOptionsException</CODE></DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="setValueMaxLength(int)"><!-- --></A><H3>\r
+setValueMaxLength</H3>\r
+<PRE>\r
+public final void <B>setValueMaxLength</B>(int&nbsp;valueMaxLength)</PRE>\r
+<DL>\r
+<DD>Set the maximum length of a string that will be stored for reuse in the
+ String Table. By default, there is no maximum length. However, in data
+ sets that have long, unique strings of information, you can improve
+ performance by limiting the size to the length of strings that are more
+ likely to appear more than once.\r
+<P>\r
+<DD><DL>\r
+</DL>\r
+</DD>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>valueMaxLength</CODE> - maximum length of entries in the String Table.</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="setValuePartitionCapacity(int)"><!-- --></A><H3>\r
+setValuePartitionCapacity</H3>\r
+<PRE>\r
+public final void <B>setValuePartitionCapacity</B>(int&nbsp;valuePartitionCapacity)</PRE>\r
+<DL>\r
+<DD>Set the maximum number of values in the String Table. By default, there
+ is no limit. If the target device has limited dynamic memory, limiting 
+ the number of entries in the String Table can improve performance and
+ reduce the likelihood that you will exceed memory capacity.\r
+<P>\r
+<DD><DL>\r
+</DL>\r
+</DD>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>valuePartitionCapacity</CODE> - maximum number of entries in the String Table</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="setLexicalHandler(org.xml.sax.ext.LexicalHandler)"><!-- --></A><H3>\r
+setLexicalHandler</H3>\r
+<PRE>\r
+public void <B>setLexicalHandler</B>(org.xml.sax.ext.LexicalHandler&nbsp;lexicalHandler)</PRE>\r
+<DL>\r
+<DD>Set a SAX lexical handler to receive SAX lexical events.\r
+<P>\r
+<DD><DL>\r
+</DL>\r
+</DD>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>lexicalHandler</CODE> - SAX lexical handler</DL>\r
+</DD>\r
+</DL>\r
+<!-- ========= END OF CLASS DATA ========= -->\r
+<HR>\r
+\r
+\r
+<!-- ======= START OF BOTTOM NAVBAR ====== -->\r
+<A NAME="navbar_bottom"><!-- --></A>\r
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_bottom_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../org/openexi/sax/BinaryDataHandler.html" title="interface in org.openexi.sax"><B>PREV CLASS</B></A>&nbsp;\r
+&nbsp;<A HREF="../../../org/openexi/sax/ReaderSupport.html" title="class in org.openexi.sax"><B>NEXT CLASS</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../index.html?org/openexi/sax/EXIReader.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="EXIReader.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_bottom"></A>\r
+<!-- ======== END OF BOTTOM NAVBAR ======= -->\r
+\r
+<HR>\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/sax/ReaderSupport.html b/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/sax/ReaderSupport.html
new file mode 100644 (file)
index 0000000..7d392bb
--- /dev/null
@@ -0,0 +1,290 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:57 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+ReaderSupport\r
+</TITLE>\r
+\r
+<META NAME="keywords" CONTENT="org.openexi.sax.ReaderSupport class">\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">\r
+\r
+<SCRIPT type="text/javascript">\r
+function windowTitle()\r
+{\r
+    parent.document.title="ReaderSupport";\r
+}\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+</NOSCRIPT>\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white" onload="windowTitle();">\r
+\r
+\r
+<!-- ========= START OF TOP NAVBAR ======= -->\r
+<A NAME="navbar_top"><!-- --></A>\r
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_top_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../org/openexi/sax/EXIReader.html" title="class in org.openexi.sax"><B>PREV CLASS</B></A>&nbsp;\r
+&nbsp;<A HREF="../../../org/openexi/sax/SAXTransmogrifier.html" title="interface in org.openexi.sax"><B>NEXT CLASS</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../index.html?org/openexi/sax/ReaderSupport.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="ReaderSupport.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_top"></A>\r
+<!-- ========= END OF TOP NAVBAR ========= -->\r
+\r
+<HR>\r
+<!-- ======== START OF CLASS DATA ======== -->\r
+<H2>\r
+<FONT SIZE="-1">\r
+org.openexi.sax</FONT>\r
+<BR>\r
+Class ReaderSupport</H2>\r
+<PRE>\r
+java.lang.Object\r
+  <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>org.openexi.sax.ReaderSupport</B>\r
+</PRE>\r
+<DL>\r
+<DT><B>All Implemented Interfaces:</B> <DD>org.xml.sax.Attributes</DD>\r
+</DL>\r
+<DL>\r
+<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../org/openexi/sax/EXIReader.html" title="class in org.openexi.sax">EXIReader</A></DD>\r
+</DL>\r
+<HR>\r
+<DL>\r
+<DT><PRE>public abstract class <B>ReaderSupport</B><DT>extends java.lang.Object<DT>implements org.xml.sax.Attributes</DL>\r
+</PRE>\r
+\r
+<P>\r
+<DL>\r
+<!-- yWorks UML Doclet   http://www.yworks.com/   b0ac8294d3f86ae0003f3a3a002ea3cf577df824efc6f2... -->
+</DL>\r
+<HR>\r
+\r
+<P>\r
+\r
+<!-- ========== METHOD SUMMARY =========== -->\r
+\r
+<A NAME="method_summary"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Method Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;org.xml.sax.ContentHandler</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/ReaderSupport.html#getContentHandler()">getContentHandler</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get the SAX content handler currently in use.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/ReaderSupport.html#setContentHandler(org.xml.sax.ContentHandler)">setContentHandler</A></B>(org.xml.sax.ContentHandler&nbsp;contentHandler)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set a SAX content handler to receive SAX events.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/ReaderSupport.html#setGrammarCache(org.openexi.proc.grammars.GrammarCache)">setGrammarCache</A></B>(<A HREF="../../../org/openexi/proc/grammars/GrammarCache.html" title="class in org.openexi.proc.grammars">GrammarCache</A>&nbsp;grammarCache)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the GrammarCache used in parsing EXI streams.</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">\r
+<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;<A NAME="methods_inherited_from_class_org.xml.sax.Attributes"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">\r
+<TH ALIGN="left"><B>Methods inherited from interface org.xml.sax.Attributes</B></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE>getIndex, getIndex, getLength, getLocalName, getQName, getType, getType, getType, getURI, getValue, getValue, getValue</CODE></TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+<P>\r
+\r
+<!-- ============ METHOD DETAIL ========== -->\r
+\r
+<A NAME="method_detail"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">\r
+<B>Method Detail</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<A NAME="setContentHandler(org.xml.sax.ContentHandler)"><!-- --></A><H3>\r
+setContentHandler</H3>\r
+<PRE>\r
+public final void <B>setContentHandler</B>(org.xml.sax.ContentHandler&nbsp;contentHandler)</PRE>\r
+<DL>\r
+<DD>Set a SAX content handler to receive SAX events.\r
+<P>\r
+<DD><DL>\r
+</DL>\r
+</DD>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>contentHandler</CODE> - SAX content handler</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="getContentHandler()"><!-- --></A><H3>\r
+getContentHandler</H3>\r
+<PRE>\r
+public final org.xml.sax.ContentHandler <B>getContentHandler</B>()</PRE>\r
+<DL>\r
+<DD>Get the SAX content handler currently in use.\r
+<P>\r
+<DD><DL>\r
+</DL>\r
+</DD>\r
+<DD><DL>\r
+\r
+<DT><B>Returns:</B><DD>ContentHandler SAX content handler.</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="setGrammarCache(org.openexi.proc.grammars.GrammarCache)"><!-- --></A><H3>\r
+setGrammarCache</H3>\r
+<PRE>\r
+public void <B>setGrammarCache</B>(<A HREF="../../../org/openexi/proc/grammars/GrammarCache.html" title="class in org.openexi.proc.grammars">GrammarCache</A>&nbsp;grammarCache)\r
+                     throws org.openexi.proc.common.EXIOptionsException</PRE>\r
+<DL>\r
+<DD>Set the GrammarCache used in parsing EXI streams.\r
+<P>\r
+<DD><DL>\r
+</DL>\r
+</DD>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>grammarCache</CODE> - <A HREF="../../../org/openexi/proc/grammars/GrammarCache.html" title="class in org.openexi.proc.grammars"><CODE>GrammarCache</CODE></A>\r
+<DT><B>Throws:</B>\r
+<DD><CODE>org.openexi.proc.common.EXIOptionsException</CODE></DL>\r
+</DD>\r
+</DL>\r
+<!-- ========= END OF CLASS DATA ========= -->\r
+<HR>\r
+\r
+\r
+<!-- ======= START OF BOTTOM NAVBAR ====== -->\r
+<A NAME="navbar_bottom"><!-- --></A>\r
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_bottom_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../org/openexi/sax/EXIReader.html" title="class in org.openexi.sax"><B>PREV CLASS</B></A>&nbsp;\r
+&nbsp;<A HREF="../../../org/openexi/sax/SAXTransmogrifier.html" title="interface in org.openexi.sax"><B>NEXT CLASS</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../index.html?org/openexi/sax/ReaderSupport.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="ReaderSupport.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_bottom"></A>\r
+<!-- ======== END OF BOTTOM NAVBAR ======= -->\r
+\r
+<HR>\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/sax/SAXTransmogrifier.html b/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/sax/SAXTransmogrifier.html
new file mode 100644 (file)
index 0000000..15e2e7d
--- /dev/null
@@ -0,0 +1,245 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:57 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+SAXTransmogrifier\r
+</TITLE>\r
+\r
+<META NAME="keywords" CONTENT="org.openexi.sax.SAXTransmogrifier interface">\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">\r
+\r
+<SCRIPT type="text/javascript">\r
+function windowTitle()\r
+{\r
+    parent.document.title="SAXTransmogrifier";\r
+}\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+</NOSCRIPT>\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white" onload="windowTitle();">\r
+\r
+\r
+<!-- ========= START OF TOP NAVBAR ======= -->\r
+<A NAME="navbar_top"><!-- --></A>\r
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_top_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../org/openexi/sax/ReaderSupport.html" title="class in org.openexi.sax"><B>PREV CLASS</B></A>&nbsp;\r
+&nbsp;<A HREF="../../../org/openexi/sax/Transmogrifier.html" title="class in org.openexi.sax"><B>NEXT CLASS</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../index.html?org/openexi/sax/SAXTransmogrifier.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="SAXTransmogrifier.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_top"></A>\r
+<!-- ========= END OF TOP NAVBAR ========= -->\r
+\r
+<HR>\r
+<!-- ======== START OF CLASS DATA ======== -->\r
+<H2>\r
+<FONT SIZE="-1">\r
+org.openexi.sax</FONT>\r
+<BR>\r
+Interface SAXTransmogrifier</H2>\r
+<DL>\r
+<DT><B>All Superinterfaces:</B> <DD><A HREF="../../../org/openexi/sax/BinaryDataHandler.html" title="interface in org.openexi.sax">BinaryDataHandler</A>, org.xml.sax.ContentHandler, org.xml.sax.ext.LexicalHandler</DD>\r
+</DL>\r
+<HR>\r
+<DL>\r
+<DT><PRE>public interface <B>SAXTransmogrifier</B><DT>extends org.xml.sax.ContentHandler, org.xml.sax.ext.LexicalHandler, <A HREF="../../../org/openexi/sax/BinaryDataHandler.html" title="interface in org.openexi.sax">BinaryDataHandler</A></DL>\r
+</PRE>\r
+\r
+<P>\r
+Applications can directly feed SAX events into a transmogrifier through SAXTransmogrifier.\r
+<P>\r
+\r
+<P>\r
+<DL>\r
+<!-- yWorks UML Doclet   http://www.yworks.com/   b0ac8294d3f86ae0003f3a3a002ea3cf577df824efc6f2... -->
+</DL>\r
+<HR>\r
+\r
+<P>\r
+\r
+<!-- ========== METHOD SUMMARY =========== -->\r
+\r
+<A NAME="method_summary"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Method Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;<A HREF="../../../org/openexi/proc/grammars/GrammarCache.html" title="class in org.openexi.proc.grammars">GrammarCache</A></CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/SAXTransmogrifier.html#getGrammarCache()">getGrammarCache</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the GrammarCache that is in use by this SAXTransmogrifier.</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;<A NAME="methods_inherited_from_class_org.xml.sax.ContentHandler"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">\r
+<TH ALIGN="left"><B>Methods inherited from interface org.xml.sax.ContentHandler</B></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE>characters, endDocument, endElement, endPrefixMapping, ignorableWhitespace, processingInstruction, setDocumentLocator, skippedEntity, startDocument, startElement, startPrefixMapping</CODE></TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;<A NAME="methods_inherited_from_class_org.xml.sax.ext.LexicalHandler"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">\r
+<TH ALIGN="left"><B>Methods inherited from interface org.xml.sax.ext.LexicalHandler</B></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE>comment, endCDATA, endDTD, endEntity, startCDATA, startDTD, startEntity</CODE></TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;<A NAME="methods_inherited_from_class_org.openexi.sax.BinaryDataHandler"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">\r
+<TH ALIGN="left"><B>Methods inherited from interface org.openexi.sax.<A HREF="../../../org/openexi/sax/BinaryDataHandler.html" title="interface in org.openexi.sax">BinaryDataHandler</A></B></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE><A HREF="../../../org/openexi/sax/BinaryDataHandler.html#binaryData(byte[], int, int, org.openexi.proc.io.BinaryDataSink)">binaryData</A>, <A HREF="../../../org/openexi/sax/BinaryDataHandler.html#endBinaryData(org.openexi.proc.io.BinaryDataSink)">endBinaryData</A>, <A HREF="../../../org/openexi/sax/BinaryDataHandler.html#startBinaryData(long)">startBinaryData</A></CODE></TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+<P>\r
+\r
+<!-- ============ METHOD DETAIL ========== -->\r
+\r
+<A NAME="method_detail"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">\r
+<B>Method Detail</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<A NAME="getGrammarCache()"><!-- --></A><H3>\r
+getGrammarCache</H3>\r
+<PRE>\r
+<A HREF="../../../org/openexi/proc/grammars/GrammarCache.html" title="class in org.openexi.proc.grammars">GrammarCache</A> <B>getGrammarCache</B>()</PRE>\r
+<DL>\r
+<DD>Returns the GrammarCache that is in use by this SAXTransmogrifier.\r
+<P>\r
+<DD><DL>\r
+</DL>\r
+</DD>\r
+<DD><DL>\r
+\r
+<DT><B>Returns:</B><DD>a GrammarCache</DL>\r
+</DD>\r
+</DL>\r
+<!-- ========= END OF CLASS DATA ========= -->\r
+<HR>\r
+\r
+\r
+<!-- ======= START OF BOTTOM NAVBAR ====== -->\r
+<A NAME="navbar_bottom"><!-- --></A>\r
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_bottom_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../org/openexi/sax/ReaderSupport.html" title="class in org.openexi.sax"><B>PREV CLASS</B></A>&nbsp;\r
+&nbsp;<A HREF="../../../org/openexi/sax/Transmogrifier.html" title="class in org.openexi.sax"><B>NEXT CLASS</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../index.html?org/openexi/sax/SAXTransmogrifier.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="SAXTransmogrifier.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_bottom"></A>\r
+<!-- ======== END OF BOTTOM NAVBAR ======= -->\r
+\r
+<HR>\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/sax/Transmogrifier.html b/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/sax/Transmogrifier.html
new file mode 100644 (file)
index 0000000..b857aab
--- /dev/null
@@ -0,0 +1,735 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:57 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+Transmogrifier\r
+</TITLE>\r
+\r
+<META NAME="keywords" CONTENT="org.openexi.sax.Transmogrifier class">\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">\r
+\r
+<SCRIPT type="text/javascript">\r
+function windowTitle()\r
+{\r
+    parent.document.title="Transmogrifier";\r
+}\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+</NOSCRIPT>\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white" onload="windowTitle();">\r
+\r
+\r
+<!-- ========= START OF TOP NAVBAR ======= -->\r
+<A NAME="navbar_top"><!-- --></A>\r
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_top_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../org/openexi/sax/SAXTransmogrifier.html" title="interface in org.openexi.sax"><B>PREV CLASS</B></A>&nbsp;\r
+&nbsp;<A HREF="../../../org/openexi/sax/TransmogrifierException.html" title="class in org.openexi.sax"><B>NEXT CLASS</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../index.html?org/openexi/sax/Transmogrifier.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="Transmogrifier.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_top"></A>\r
+<!-- ========= END OF TOP NAVBAR ========= -->\r
+\r
+<HR>\r
+<!-- ======== START OF CLASS DATA ======== -->\r
+<H2>\r
+<FONT SIZE="-1">\r
+org.openexi.sax</FONT>\r
+<BR>\r
+Class Transmogrifier</H2>\r
+<PRE>\r
+java.lang.Object\r
+  <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>org.openexi.sax.Transmogrifier</B>\r
+</PRE>\r
+<HR>\r
+<DL>\r
+<DT><PRE>public final class <B>Transmogrifier</B><DT>extends java.lang.Object</DL>\r
+</PRE>\r
+\r
+<P>\r
+The Transmogrifier converts an XML stream to an EXI stream.\r
+<P>\r
+\r
+<P>\r
+<DL>\r
+<!-- yWorks UML Doclet   http://www.yworks.com/   b0ac8294d3f86ae0003f3a3a002ea3cf577df824efc6f2... -->
+</DL>\r
+<HR>\r
+\r
+<P>\r
+\r
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->\r
+\r
+<A NAME="constructor_summary"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Constructor Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/Transmogrifier.html#Transmogrifier()">Transmogrifier</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Create an instance of the Transmogrifier with a default SAX parser.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/Transmogrifier.html#Transmogrifier(javax.xml.parsers.SAXParserFactory)">Transmogrifier</A></B>(javax.xml.parsers.SAXParserFactory&nbsp;saxParserFactory)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Create an instance of the Transmogrifier, specifying the SAXParserFactory
+ from which to create the SAX parser.</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+<!-- ========== METHOD SUMMARY =========== -->\r
+\r
+<A NAME="method_summary"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Method Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/Transmogrifier.html#encode(org.xml.sax.InputSource)">encode</A></B>(org.xml.sax.InputSource&nbsp;is)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Parses XML input source and converts it to an EXI stream.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;<A HREF="../../../org/openexi/proc/grammars/GrammarCache.html" title="class in org.openexi.proc.grammars">GrammarCache</A></CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/Transmogrifier.html#getGrammarCache()">getGrammarCache</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the GrammarCache that was previously set.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;<A HREF="../../../org/openexi/sax/SAXTransmogrifier.html" title="interface in org.openexi.sax">SAXTransmogrifier</A></CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/Transmogrifier.html#getSAXTransmogrifier()">getSAXTransmogrifier</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the SAXTransmogrifier, which implements both the ContentHandler
+ and LexicalHandler.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/Transmogrifier.html#setAlignmentType(org.openexi.proc.common.AlignmentType)">setAlignmentType</A></B>(<A HREF="../../../org/openexi/proc/common/AlignmentType.html" title="enum in org.openexi.proc.common">AlignmentType</A>&nbsp;alignmentType)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the bit alignment style for the encoded EXI stream.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/Transmogrifier.html#setBlockSize(int)">setBlockSize</A></B>(int&nbsp;blockSize)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the size, in number of values, of the information that will be 
+ processed as a chunk of the entire XML stream.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/Transmogrifier.html#setDatatypeRepresentationMap(org.openexi.proc.common.QName[], int)">setDatatypeRepresentationMap</A></B>(<A HREF="../../../org/openexi/proc/common/QName.html" title="class in org.openexi.proc.common">QName</A>[]&nbsp;dtrm,\r
+                             int&nbsp;n_bindings)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set a datatype representation map (DTRM).</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/Transmogrifier.html#setEntityResolver(org.xml.sax.EntityResolver)">setEntityResolver</A></B>(org.xml.sax.EntityResolver&nbsp;entityResolver)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set an external SAX entity resolver.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/Transmogrifier.html#setFragment(boolean)">setFragment</A></B>(boolean&nbsp;isFragment)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set to true if the XML input stream is an XML fragment (a non-compliant
+ XML document with multiple root elements).</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/Transmogrifier.html#setGrammarCache(org.openexi.proc.grammars.GrammarCache)">setGrammarCache</A></B>(<A HREF="../../../org/openexi/proc/grammars/GrammarCache.html" title="class in org.openexi.proc.grammars">GrammarCache</A>&nbsp;grammarCache)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the GrammarCache used in transmogrifying XML data to EXI.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/Transmogrifier.html#setGrammarCache(org.openexi.proc.grammars.GrammarCache, org.openexi.proc.common.SchemaId)">setGrammarCache</A></B>(<A HREF="../../../org/openexi/proc/grammars/GrammarCache.html" title="class in org.openexi.proc.grammars">GrammarCache</A>&nbsp;grammarCache,\r
+                org.openexi.proc.common.SchemaId&nbsp;schemaId)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the GrammarCache to be used in encoding XML streams into EXI streams 
+ by the transmogrifier.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/Transmogrifier.html#setOutputCookie(boolean)">setOutputCookie</A></B>(boolean&nbsp;outputCookie)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tells the encoder whether to or not to start the stream by
+ adding an EXI cookie.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/Transmogrifier.html#setOutputOptions(org.openexi.proc.HeaderOptionsOutputType)">setOutputOptions</A></B>(<A HREF="../../../org/openexi/proc/HeaderOptionsOutputType.html" title="enum in org.openexi.proc">HeaderOptionsOutputType</A>&nbsp;outputOptions)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the header output options.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/Transmogrifier.html#setOutputStream(java.io.OutputStream)">setOutputStream</A></B>(java.io.OutputStream&nbsp;ostream)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set an output stream to which encoded streams are written.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/Transmogrifier.html#setPreserveLexicalValues(boolean)">setPreserveLexicalValues</A></B>(boolean&nbsp;preserveLexicalValues)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set to <i>true</i> to preserve the original string values from the XML
+ stream.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/Transmogrifier.html#setPreserveWhitespaces(boolean)">setPreserveWhitespaces</A></B>(boolean&nbsp;preserveWhitespaces)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set to true to preserve whitespace (for example, spaces, tabs, and
+ line breaks) in the encoded EXI stream.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/Transmogrifier.html#setResolveExternalGeneralEntities(boolean)">setResolveExternalGeneralEntities</A></B>(boolean&nbsp;resolveExternalGeneralEntities)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Change the way a Transmogrifier handles external general entities.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/Transmogrifier.html#setValueMaxLength(int)">setValueMaxLength</A></B>(int&nbsp;valueMaxLength)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the maximum length of a string that will be stored for reuse in the
+ String Table.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/Transmogrifier.html#setValuePartitionCapacity(int)">setValuePartitionCapacity</A></B>(int&nbsp;valuePartitionCapacity)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the maximum number of values in the String Table.</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">\r
+<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+<P>\r
+\r
+<!-- ========= CONSTRUCTOR DETAIL ======== -->\r
+\r
+<A NAME="constructor_detail"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">\r
+<B>Constructor Detail</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<A NAME="Transmogrifier()"><!-- --></A><H3>\r
+Transmogrifier</H3>\r
+<PRE>\r
+public <B>Transmogrifier</B>()\r
+               throws org.openexi.sax.TransmogrifierRuntimeException</PRE>\r
+<DL>\r
+<DD>Create an instance of the Transmogrifier with a default SAX parser.\r
+<P>\r
+<DL>\r
+\r
+<DT><B>Throws:</B>\r
+<DD><CODE><A HREF="../../../org/openexi/sax/TransmogrifierException.html" title="class in org.openexi.sax">TransmogrifierException</A></CODE>\r
+<DD><CODE>org.openexi.sax.TransmogrifierRuntimeException</CODE></DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="Transmogrifier(javax.xml.parsers.SAXParserFactory)"><!-- --></A><H3>\r
+Transmogrifier</H3>\r
+<PRE>\r
+public <B>Transmogrifier</B>(javax.xml.parsers.SAXParserFactory&nbsp;saxParserFactory)\r
+               throws org.openexi.sax.TransmogrifierRuntimeException</PRE>\r
+<DL>\r
+<DD>Create an instance of the Transmogrifier, specifying the SAXParserFactory
+ from which to create the SAX parser.\r
+<P>\r
+<DL>\r
+<DT><B>Parameters:</B><DD><CODE>saxParserFactory</CODE> - \r
+<DT><B>Throws:</B>\r
+<DD><CODE><A HREF="../../../org/openexi/sax/TransmogrifierException.html" title="class in org.openexi.sax">TransmogrifierException</A></CODE>\r
+<DD><CODE>org.openexi.sax.TransmogrifierRuntimeException</CODE></DL>\r
+</DL>\r
+\r
+<!-- ============ METHOD DETAIL ========== -->\r
+\r
+<A NAME="method_detail"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">\r
+<B>Method Detail</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<A NAME="setResolveExternalGeneralEntities(boolean)"><!-- --></A><H3>\r
+setResolveExternalGeneralEntities</H3>\r
+<PRE>\r
+public void <B>setResolveExternalGeneralEntities</B>(boolean&nbsp;resolveExternalGeneralEntities)\r
+                                       throws <A HREF="../../../org/openexi/sax/TransmogrifierException.html" title="class in org.openexi.sax">TransmogrifierException</A></PRE>\r
+<DL>\r
+<DD>Change the way a Transmogrifier handles external general entities. When the value
+ of resolveExternalGeneralEntities is set to true, a Transmogrifier will try to 
+ resolve external general entities. Otherwise, external general entities will not
+ be resolved.\r
+<P>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>resolveExternalGeneralEntities</CODE> - \r
+<DT><B>Throws:</B>\r
+<DD><CODE><A HREF="../../../org/openexi/sax/TransmogrifierException.html" title="class in org.openexi.sax">TransmogrifierException</A></CODE> - Thrown when the underlying XMLReader does not 
+ support the specified behavior.</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="setOutputStream(java.io.OutputStream)"><!-- --></A><H3>\r
+setOutputStream</H3>\r
+<PRE>\r
+public final void <B>setOutputStream</B>(java.io.OutputStream&nbsp;ostream)</PRE>\r
+<DL>\r
+<DD>Set an output stream to which encoded streams are written.\r
+<P>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>ostream</CODE> - output stream</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="setAlignmentType(org.openexi.proc.common.AlignmentType)"><!-- --></A><H3>\r
+setAlignmentType</H3>\r
+<PRE>\r
+public final void <B>setAlignmentType</B>(<A HREF="../../../org/openexi/proc/common/AlignmentType.html" title="enum in org.openexi.proc.common">AlignmentType</A>&nbsp;alignmentType)\r
+                            throws org.openexi.proc.common.EXIOptionsException</PRE>\r
+<DL>\r
+<DD>Set the bit alignment style for the encoded EXI stream.\r
+<P>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>alignmentType</CODE> - <A HREF="../../../org/openexi/proc/common/AlignmentType.html" title="enum in org.openexi.proc.common"><CODE>AlignmentType</CODE></A>. 
+ Default is <i>bit-packed</i>.\r
+<DT><B>Throws:</B>\r
+<DD><CODE>org.openexi.proc.common.EXIOptionsException</CODE></DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="setFragment(boolean)"><!-- --></A><H3>\r
+setFragment</H3>\r
+<PRE>\r
+public final void <B>setFragment</B>(boolean&nbsp;isFragment)</PRE>\r
+<DL>\r
+<DD>Set to true if the XML input stream is an XML fragment (a non-compliant
+ XML document with multiple root elements).\r
+<P>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>isFragment</CODE> - true if the XML input stream is an XML fragment.</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="setBlockSize(int)"><!-- --></A><H3>\r
+setBlockSize</H3>\r
+<PRE>\r
+public final void <B>setBlockSize</B>(int&nbsp;blockSize)\r
+                        throws org.openexi.proc.common.EXIOptionsException</PRE>\r
+<DL>\r
+<DD>Set the size, in number of values, of the information that will be 
+ processed as a chunk of the entire XML stream. Reducing the block size 
+ can improve performance for devices with limited dynamic memory. 
+ Default is 1,000,000 items (not 1MB, but 1,000,000 complete Attribute 
+ and Element values). Block size is only used when the EXI stream is
+ encoded with EXI-compression.\r
+<P>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>blockSize</CODE> - number of values in each processing block. Default is 1,000,000.\r
+<DT><B>Throws:</B>\r
+<DD><CODE>org.openexi.proc.common.EXIOptionsException</CODE></DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="setValueMaxLength(int)"><!-- --></A><H3>\r
+setValueMaxLength</H3>\r
+<PRE>\r
+public final void <B>setValueMaxLength</B>(int&nbsp;valueMaxLength)</PRE>\r
+<DL>\r
+<DD>Set the maximum length of a string that will be stored for reuse in the
+ String Table. By default, there is no maximum length. However, in data
+ sets that have long, unique strings of information, you can improve
+ performance by limiting the size to the length of strings that are more
+ likely to appear more than once.\r
+<P>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>valueMaxLength</CODE> - maximum length of entries in the String Table.</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="setValuePartitionCapacity(int)"><!-- --></A><H3>\r
+setValuePartitionCapacity</H3>\r
+<PRE>\r
+public final void <B>setValuePartitionCapacity</B>(int&nbsp;valuePartitionCapacity)</PRE>\r
+<DL>\r
+<DD>Set the maximum number of values in the String Table. By default, there
+ is no limit. If the target device has limited dynamic memory, limiting 
+ the number of entries in the String Table can improve performance and
+ reduce the likelihood that you will exceed memory capacity.\r
+<P>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>valuePartitionCapacity</CODE> - maximum number of entries in the String Table</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="setPreserveLexicalValues(boolean)"><!-- --></A><H3>\r
+setPreserveLexicalValues</H3>\r
+<PRE>\r
+public final void <B>setPreserveLexicalValues</B>(boolean&nbsp;preserveLexicalValues)\r
+                                    throws org.openexi.proc.common.EXIOptionsException</PRE>\r
+<DL>\r
+<DD>Set to <i>true</i> to preserve the original string values from the XML
+ stream. For example, a date string might be converted to a different
+ format when interpreted by the Transmogrifier. Preserving the lexical values
+ ensures that the identical strings are restored, and not just their 
+ logical values.\r
+<P>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>preserveLexicalValues</CODE> - <i>true</i> to keep original strings intact\r
+<DT><B>Throws:</B>\r
+<DD><CODE>org.openexi.proc.common.EXIOptionsException</CODE></DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="setGrammarCache(org.openexi.proc.grammars.GrammarCache)"><!-- --></A><H3>\r
+setGrammarCache</H3>\r
+<PRE>\r
+public final void <B>setGrammarCache</B>(<A HREF="../../../org/openexi/proc/grammars/GrammarCache.html" title="class in org.openexi.proc.grammars">GrammarCache</A>&nbsp;grammarCache)\r
+                           throws org.openexi.proc.common.EXIOptionsException</PRE>\r
+<DL>\r
+<DD>Set the GrammarCache used in transmogrifying XML data to EXI.\r
+<P>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>grammarCache</CODE> - <A HREF="../../../org/openexi/proc/grammars/GrammarCache.html" title="class in org.openexi.proc.grammars"><CODE>GrammarCache</CODE></A>\r
+<DT><B>Throws:</B>\r
+<DD><CODE>org.openexi.proc.common.EXIOptionsException</CODE></DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="setGrammarCache(org.openexi.proc.grammars.GrammarCache, org.openexi.proc.common.SchemaId)"><!-- --></A><H3>\r
+setGrammarCache</H3>\r
+<PRE>\r
+public final void <B>setGrammarCache</B>(<A HREF="../../../org/openexi/proc/grammars/GrammarCache.html" title="class in org.openexi.proc.grammars">GrammarCache</A>&nbsp;grammarCache,\r
+                                  org.openexi.proc.common.SchemaId&nbsp;schemaId)\r
+                           throws org.openexi.proc.common.EXIOptionsException</PRE>\r
+<DL>\r
+<DD>Set the GrammarCache to be used in encoding XML streams into EXI streams 
+ by the transmogrifier. 
+ The SchemaId contains the string that is written in the header when
+ <i>HeaderOptionsOutputType.all</i> is set.\r
+<P>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>grammarCache</CODE> - <A HREF="../../../org/openexi/proc/grammars/GrammarCache.html" title="class in org.openexi.proc.grammars"><CODE>GrammarCache</CODE></A><DD><CODE>schemaId</CODE> - \r
+<DT><B>Throws:</B>\r
+<DD><CODE>org.openexi.proc.common.EXIOptionsException</CODE></DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="getGrammarCache()"><!-- --></A><H3>\r
+getGrammarCache</H3>\r
+<PRE>\r
+public final <A HREF="../../../org/openexi/proc/grammars/GrammarCache.html" title="class in org.openexi.proc.grammars">GrammarCache</A> <B>getGrammarCache</B>()</PRE>\r
+<DL>\r
+<DD>Returns the GrammarCache that was previously set.\r
+<P>\r
+<DD><DL>\r
+\r
+<DT><B>Returns:</B><DD>a GrammarCache</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="setDatatypeRepresentationMap(org.openexi.proc.common.QName[], int)"><!-- --></A><H3>\r
+setDatatypeRepresentationMap</H3>\r
+<PRE>\r
+public final void <B>setDatatypeRepresentationMap</B>(<A HREF="../../../org/openexi/proc/common/QName.html" title="class in org.openexi.proc.common">QName</A>[]&nbsp;dtrm,\r
+                                               int&nbsp;n_bindings)\r
+                                        throws org.openexi.proc.common.EXIOptionsException</PRE>\r
+<DL>\r
+<DD>Set a datatype representation map (DTRM). The DTRM allows you to remap
+ XMLSchema datatypes to EXI datatypes other than their default equivalents.
+ The map is created using a sequence of Qualified Name pairs that identify
+ a datatype definition in the XMLSchema namespace followed by the new 
+ corresponding datatype mapping in the EXI namespace.
+ <br /><br />
+ For example, the following lines map the boolean datatype from XMLSchema 
+ to the integer datatype in EXI.
+ <pre>
+   QName q1 = new QName("xsd:boolean","http://www.w3.org/2001/XMLSchema");
+   QName q2 = new QName("exi:integer","http://www.w3.org/2009/exi");
+   QName[] dtrm = new QName[2];
+   dtrm = {q1, q2}; // Each mapping requires 2 qualified names.
+   transmogrifierInstance.setDatatypeRepresentationMap(dtrm, 1); // The array, and the number of pairs (1).
+ </pre>\r
+<P>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>dtrm</CODE> - a sequence of pairs of datatype QName and datatype representation QName<DD><CODE>n_bindings</CODE> - the number of QName pairs\r
+<DT><B>Throws:</B>\r
+<DD><CODE>org.openexi.proc.common.EXIOptionsException</CODE></DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="setEntityResolver(org.xml.sax.EntityResolver)"><!-- --></A><H3>\r
+setEntityResolver</H3>\r
+<PRE>\r
+public final void <B>setEntityResolver</B>(org.xml.sax.EntityResolver&nbsp;entityResolver)</PRE>\r
+<DL>\r
+<DD>Set an external SAX entity resolver.\r
+<P>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>entityResolver</CODE> - <CODE>EntityResolver</CODE></DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="setOutputCookie(boolean)"><!-- --></A><H3>\r
+setOutputCookie</H3>\r
+<PRE>\r
+public final void <B>setOutputCookie</B>(boolean&nbsp;outputCookie)</PRE>\r
+<DL>\r
+<DD>Tells the encoder whether to or not to start the stream by
+ adding an EXI cookie.\r
+<P>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>outputCookie</CODE> - <i>true</i> to include the EXI cookie</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="setOutputOptions(org.openexi.proc.HeaderOptionsOutputType)"><!-- --></A><H3>\r
+setOutputOptions</H3>\r
+<PRE>\r
+public final void <B>setOutputOptions</B>(<A HREF="../../../org/openexi/proc/HeaderOptionsOutputType.html" title="enum in org.openexi.proc">HeaderOptionsOutputType</A>&nbsp;outputOptions)\r
+                            throws org.openexi.proc.common.EXIOptionsException</PRE>\r
+<DL>\r
+<DD>Set the header output options. Choices are set using the 
+ <A HREF="../../../org/openexi/proc/HeaderOptionsOutputType.html" title="enum in org.openexi.proc"><CODE>HeaderOptionsOutputType</CODE></A> enumeration.
+ Options are <i>all, lessSchemaID</i> (that is, all values
+ except for the SchemaId), or <i>none.</i>\r
+<P>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>outputOptions</CODE> - <A HREF="../../../org/openexi/proc/HeaderOptionsOutputType.html" title="enum in org.openexi.proc"><CODE>HeaderOptionsOutputType</CODE></A>\r
+<DT><B>Throws:</B>\r
+<DD><CODE>org.openexi.proc.common.EXIOptionsException</CODE></DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="setPreserveWhitespaces(boolean)"><!-- --></A><H3>\r
+setPreserveWhitespaces</H3>\r
+<PRE>\r
+public final void <B>setPreserveWhitespaces</B>(boolean&nbsp;preserveWhitespaces)</PRE>\r
+<DL>\r
+<DD>Set to true to preserve whitespace (for example, spaces, tabs, and
+ line breaks) in the encoded EXI stream. By default, non-essential whitespace
+ is removed from the encoded stream.\r
+<P>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>preserveWhitespaces</CODE> - <i>true</i> to retain whitespace in the encoded EXI stream</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="encode(org.xml.sax.InputSource)"><!-- --></A><H3>\r
+encode</H3>\r
+<PRE>\r
+public void <B>encode</B>(org.xml.sax.InputSource&nbsp;is)\r
+            throws <A HREF="../../../org/openexi/sax/TransmogrifierException.html" title="class in org.openexi.sax">TransmogrifierException</A>,\r
+                   java.io.IOException</PRE>\r
+<DL>\r
+<DD>Parses XML input source and converts it to an EXI stream.\r
+<P>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>is</CODE> - XML input source\r
+<DT><B>Throws:</B>\r
+<DD><CODE><A HREF="../../../org/openexi/sax/TransmogrifierException.html" title="class in org.openexi.sax">TransmogrifierException</A></CODE>\r
+<DD><CODE>java.io.IOException</CODE></DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="getSAXTransmogrifier()"><!-- --></A><H3>\r
+getSAXTransmogrifier</H3>\r
+<PRE>\r
+public <A HREF="../../../org/openexi/sax/SAXTransmogrifier.html" title="interface in org.openexi.sax">SAXTransmogrifier</A> <B>getSAXTransmogrifier</B>()</PRE>\r
+<DL>\r
+<DD>Returns the SAXTransmogrifier, which implements both the ContentHandler
+ and LexicalHandler. SAX programmers can connect the SAXTransmogrifier to
+ their favorite XML Parser to convert SAX events into an EXI stream.\r
+<P>\r
+<DD><DL>\r
+</DL>\r
+</DD>\r
+</DL>\r
+<!-- ========= END OF CLASS DATA ========= -->\r
+<HR>\r
+\r
+\r
+<!-- ======= START OF BOTTOM NAVBAR ====== -->\r
+<A NAME="navbar_bottom"><!-- --></A>\r
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_bottom_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../org/openexi/sax/SAXTransmogrifier.html" title="interface in org.openexi.sax"><B>PREV CLASS</B></A>&nbsp;\r
+&nbsp;<A HREF="../../../org/openexi/sax/TransmogrifierException.html" title="class in org.openexi.sax"><B>NEXT CLASS</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../index.html?org/openexi/sax/Transmogrifier.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="Transmogrifier.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_bottom"></A>\r
+<!-- ======== END OF BOTTOM NAVBAR ======= -->\r
+\r
+<HR>\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/sax/TransmogrifierException.html b/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/sax/TransmogrifierException.html
new file mode 100644 (file)
index 0000000..55e1e1f
--- /dev/null
@@ -0,0 +1,566 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:57 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+TransmogrifierException\r
+</TITLE>\r
+\r
+<META NAME="keywords" CONTENT="org.openexi.sax.TransmogrifierException class">\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">\r
+\r
+<SCRIPT type="text/javascript">\r
+function windowTitle()\r
+{\r
+    parent.document.title="TransmogrifierException";\r
+}\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+</NOSCRIPT>\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white" onload="windowTitle();">\r
+\r
+\r
+<!-- ========= START OF TOP NAVBAR ======= -->\r
+<A NAME="navbar_top"><!-- --></A>\r
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_top_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../org/openexi/sax/Transmogrifier.html" title="class in org.openexi.sax"><B>PREV CLASS</B></A>&nbsp;\r
+&nbsp;NEXT CLASS</FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../index.html?org/openexi/sax/TransmogrifierException.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="TransmogrifierException.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_top"></A>\r
+<!-- ========= END OF TOP NAVBAR ========= -->\r
+\r
+<HR>\r
+<!-- ======== START OF CLASS DATA ======== -->\r
+<H2>\r
+<FONT SIZE="-1">\r
+org.openexi.sax</FONT>\r
+<BR>\r
+Class TransmogrifierException</H2>\r
+<PRE>\r
+java.lang.Object\r
+  <IMG SRC="../../../resources/inherit.gif" ALT="extended by ">java.lang.Throwable\r
+      <IMG SRC="../../../resources/inherit.gif" ALT="extended by ">java.lang.Exception\r
+          <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>org.openexi.sax.TransmogrifierException</B>\r
+</PRE>\r
+<DL>\r
+<DT><B>All Implemented Interfaces:</B> <DD>java.io.Serializable</DD>\r
+</DL>\r
+<HR>\r
+<DL>\r
+<DT><PRE>public final class <B>TransmogrifierException</B><DT>extends java.lang.Exception</DL>\r
+</PRE>\r
+\r
+<P>\r
+Exception handler for the Transmogrifier.\r
+<P>\r
+\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../serialized-form.html#org.openexi.sax.TransmogrifierException">Serialized Form</A><!-- yWorks UML Doclet   http://www.yworks.com/   b0ac8294d3f86ae0003f3a3a002ea3cf577df824efc6f2... -->
+</DL>\r
+<HR>\r
+\r
+<P>\r
+<!-- =========== FIELD SUMMARY =========== -->\r
+\r
+<A NAME="field_summary"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Field Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;int</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/TransmogrifierException.html#PREFIX_BOUND_TO_ANOTHER_NAMESPACE">PREFIX_BOUND_TO_ANOTHER_NAMESPACE</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Prefix is bound to another namespace.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;int</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/TransmogrifierException.html#PREFIX_NOT_BOUND">PREFIX_NOT_BOUND</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Prefix is not bound.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;int</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/TransmogrifierException.html#SAX_ERROR">SAX_ERROR</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SAX error reported by XML parser.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;int</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/TransmogrifierException.html#SCRIBER_ERROR">SCRIBER_ERROR</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Errors reported by Scriber.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;int</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/TransmogrifierException.html#UNEXPECTED_ATTR">UNEXPECTED_ATTR</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Unexpected Attribute.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;int</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/TransmogrifierException.html#UNEXPECTED_BINARY_VALUE">UNEXPECTED_BINARY_VALUE</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Unexpected Binary value.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;int</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/TransmogrifierException.html#UNEXPECTED_CHARS">UNEXPECTED_CHARS</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Unexpected Character Sequence.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;int</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/TransmogrifierException.html#UNEXPECTED_ED">UNEXPECTED_ED</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Unexpected End of Document event.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;int</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/TransmogrifierException.html#UNEXPECTED_ELEM">UNEXPECTED_ELEM</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Unexpected Element.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;int</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/TransmogrifierException.html#UNEXPECTED_END_ELEM">UNEXPECTED_END_ELEM</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Unexpected End of Element event.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;int</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/TransmogrifierException.html#UNEXPECTED_SD">UNEXPECTED_SD</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Unexpected Start of Document event.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;int</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/TransmogrifierException.html#UNHANDLED_SAXPARSER_FEATURE">UNHANDLED_SAXPARSER_FEATURE</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Unhandled SAX parser feature.</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+<!-- ========== METHOD SUMMARY =========== -->\r
+\r
+<A NAME="method_summary"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Method Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;int</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/TransmogrifierException.html#getCode()">getCode</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a code that represents the type of the exception.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;java.lang.Exception</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/TransmogrifierException.html#getException()">getException</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an Exception object.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;org.xml.sax.Locator</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/TransmogrifierException.html#getLocator()">getLocator</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the locator that is associated with this compilation error.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;java.lang.String</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/sax/TransmogrifierException.html#getMessage()">getMessage</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a message that describes the exception.</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Throwable"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">\r
+<TH ALIGN="left"><B>Methods inherited from class java.lang.Throwable</B></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE>fillInStackTrace, getCause, getLocalizedMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString</CODE></TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">\r
+<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE>equals, getClass, hashCode, notify, notifyAll, wait, wait, wait</CODE></TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+<P>\r
+\r
+<!-- ============ FIELD DETAIL =========== -->\r
+\r
+<A NAME="field_detail"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">\r
+<B>Field Detail</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<A NAME="UNEXPECTED_ELEM"><!-- --></A><H3>\r
+UNEXPECTED_ELEM</H3>\r
+<PRE>\r
+public static final int <B>UNEXPECTED_ELEM</B></PRE>\r
+<DL>\r
+<DD>Unexpected Element.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#org.openexi.sax.TransmogrifierException.UNEXPECTED_ELEM">Constant Field Values</A></DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="UNEXPECTED_ATTR"><!-- --></A><H3>\r
+UNEXPECTED_ATTR</H3>\r
+<PRE>\r
+public static final int <B>UNEXPECTED_ATTR</B></PRE>\r
+<DL>\r
+<DD>Unexpected Attribute.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#org.openexi.sax.TransmogrifierException.UNEXPECTED_ATTR">Constant Field Values</A></DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="UNEXPECTED_CHARS"><!-- --></A><H3>\r
+UNEXPECTED_CHARS</H3>\r
+<PRE>\r
+public static final int <B>UNEXPECTED_CHARS</B></PRE>\r
+<DL>\r
+<DD>Unexpected Character Sequence.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#org.openexi.sax.TransmogrifierException.UNEXPECTED_CHARS">Constant Field Values</A></DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="UNEXPECTED_BINARY_VALUE"><!-- --></A><H3>\r
+UNEXPECTED_BINARY_VALUE</H3>\r
+<PRE>\r
+public static final int <B>UNEXPECTED_BINARY_VALUE</B></PRE>\r
+<DL>\r
+<DD>Unexpected Binary value.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#org.openexi.sax.TransmogrifierException.UNEXPECTED_BINARY_VALUE">Constant Field Values</A></DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="UNHANDLED_SAXPARSER_FEATURE"><!-- --></A><H3>\r
+UNHANDLED_SAXPARSER_FEATURE</H3>\r
+<PRE>\r
+public static final int <B>UNHANDLED_SAXPARSER_FEATURE</B></PRE>\r
+<DL>\r
+<DD>Unhandled SAX parser feature.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#org.openexi.sax.TransmogrifierException.UNHANDLED_SAXPARSER_FEATURE">Constant Field Values</A></DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="SAX_ERROR"><!-- --></A><H3>\r
+SAX_ERROR</H3>\r
+<PRE>\r
+public static final int <B>SAX_ERROR</B></PRE>\r
+<DL>\r
+<DD>SAX error reported by XML parser.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#org.openexi.sax.TransmogrifierException.SAX_ERROR">Constant Field Values</A></DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="UNEXPECTED_END_ELEM"><!-- --></A><H3>\r
+UNEXPECTED_END_ELEM</H3>\r
+<PRE>\r
+public static final int <B>UNEXPECTED_END_ELEM</B></PRE>\r
+<DL>\r
+<DD>Unexpected End of Element event.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#org.openexi.sax.TransmogrifierException.UNEXPECTED_END_ELEM">Constant Field Values</A></DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="UNEXPECTED_ED"><!-- --></A><H3>\r
+UNEXPECTED_ED</H3>\r
+<PRE>\r
+public static final int <B>UNEXPECTED_ED</B></PRE>\r
+<DL>\r
+<DD>Unexpected End of Document event.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#org.openexi.sax.TransmogrifierException.UNEXPECTED_ED">Constant Field Values</A></DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="UNEXPECTED_SD"><!-- --></A><H3>\r
+UNEXPECTED_SD</H3>\r
+<PRE>\r
+public static final int <B>UNEXPECTED_SD</B></PRE>\r
+<DL>\r
+<DD>Unexpected Start of Document event.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#org.openexi.sax.TransmogrifierException.UNEXPECTED_SD">Constant Field Values</A></DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="PREFIX_NOT_BOUND"><!-- --></A><H3>\r
+PREFIX_NOT_BOUND</H3>\r
+<PRE>\r
+public static final int <B>PREFIX_NOT_BOUND</B></PRE>\r
+<DL>\r
+<DD>Prefix is not bound.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#org.openexi.sax.TransmogrifierException.PREFIX_NOT_BOUND">Constant Field Values</A></DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="PREFIX_BOUND_TO_ANOTHER_NAMESPACE"><!-- --></A><H3>\r
+PREFIX_BOUND_TO_ANOTHER_NAMESPACE</H3>\r
+<PRE>\r
+public static final int <B>PREFIX_BOUND_TO_ANOTHER_NAMESPACE</B></PRE>\r
+<DL>\r
+<DD>Prefix is bound to another namespace.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#org.openexi.sax.TransmogrifierException.PREFIX_BOUND_TO_ANOTHER_NAMESPACE">Constant Field Values</A></DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="SCRIBER_ERROR"><!-- --></A><H3>\r
+SCRIBER_ERROR</H3>\r
+<PRE>\r
+public static final int <B>SCRIBER_ERROR</B></PRE>\r
+<DL>\r
+<DD>Errors reported by Scriber.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#org.openexi.sax.TransmogrifierException.SCRIBER_ERROR">Constant Field Values</A></DL>\r
+</DL>\r
+\r
+<!-- ============ METHOD DETAIL ========== -->\r
+\r
+<A NAME="method_detail"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">\r
+<B>Method Detail</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<A NAME="getCode()"><!-- --></A><H3>\r
+getCode</H3>\r
+<PRE>\r
+public int <B>getCode</B>()</PRE>\r
+<DL>\r
+<DD>Returns a code that represents the type of the exception.\r
+<P>\r
+<DD><DL>\r
+\r
+<DT><B>Returns:</B><DD>error code</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="getMessage()"><!-- --></A><H3>\r
+getMessage</H3>\r
+<PRE>\r
+public java.lang.String <B>getMessage</B>()</PRE>\r
+<DL>\r
+<DD>Returns a message that describes the exception.\r
+<P>\r
+<DD><DL>\r
+<DT><B>Overrides:</B><DD><CODE>getMessage</CODE> in class <CODE>java.lang.Throwable</CODE></DL>\r
+</DD>\r
+<DD><DL>\r
+\r
+<DT><B>Returns:</B><DD>error message</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="getException()"><!-- --></A><H3>\r
+getException</H3>\r
+<PRE>\r
+public java.lang.Exception <B>getException</B>()</PRE>\r
+<DL>\r
+<DD>Returns an Exception object.\r
+<P>\r
+<DD><DL>\r
+\r
+<DT><B>Returns:</B><DD>the error as an Exception instance</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="getLocator()"><!-- --></A><H3>\r
+getLocator</H3>\r
+<PRE>\r
+public org.xml.sax.Locator <B>getLocator</B>()</PRE>\r
+<DL>\r
+<DD>Returns the locator that is associated with this compilation error.\r
+<P>\r
+<DD><DL>\r
+\r
+<DT><B>Returns:</B><DD>a Locator if available, otherwise null</DL>\r
+</DD>\r
+</DL>\r
+<!-- ========= END OF CLASS DATA ========= -->\r
+<HR>\r
+\r
+\r
+<!-- ======= START OF BOTTOM NAVBAR ====== -->\r
+<A NAME="navbar_bottom"><!-- --></A>\r
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_bottom_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../org/openexi/sax/Transmogrifier.html" title="class in org.openexi.sax"><B>PREV CLASS</B></A>&nbsp;\r
+&nbsp;NEXT CLASS</FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../index.html?org/openexi/sax/TransmogrifierException.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="TransmogrifierException.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_bottom"></A>\r
+<!-- ======== END OF BOTTOM NAVBAR ======= -->\r
+\r
+<HR>\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/sax/package-frame.html b/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/sax/package-frame.html
new file mode 100644 (file)
index 0000000..22e45d6
--- /dev/null
@@ -0,0 +1,61 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:58 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+org.openexi.sax\r
+</TITLE>\r
+\r
+<META NAME="keywords" CONTENT="org.openexi.sax package">\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">\r
+\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white">\r
+<FONT size="+1" CLASS="FrameTitleFont">\r
+<A HREF="../../../org/openexi/sax/package-summary.html" target="classFrame">org.openexi.sax</A></FONT>\r
+<TABLE BORDER="0" WIDTH="100%" SUMMARY="">\r
+<TR>\r
+<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">\r
+Interfaces</FONT>&nbsp;\r
+<FONT CLASS="FrameItemFont">\r
+<BR>\r
+<A HREF="BinaryDataHandler.html" title="interface in org.openexi.sax" target="classFrame"><I>BinaryDataHandler</I></A>\r
+<BR>\r
+<A HREF="SAXTransmogrifier.html" title="interface in org.openexi.sax" target="classFrame"><I>SAXTransmogrifier</I></A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+\r
+\r
+<TABLE BORDER="0" WIDTH="100%" SUMMARY="">\r
+<TR>\r
+<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">\r
+Classes</FONT>&nbsp;\r
+<FONT CLASS="FrameItemFont">\r
+<BR>\r
+<A HREF="EXIReader.html" title="class in org.openexi.sax" target="classFrame">EXIReader</A>\r
+<BR>\r
+<A HREF="ReaderSupport.html" title="class in org.openexi.sax" target="classFrame">ReaderSupport</A>\r
+<BR>\r
+<A HREF="Transmogrifier.html" title="class in org.openexi.sax" target="classFrame">Transmogrifier</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+\r
+\r
+<TABLE BORDER="0" WIDTH="100%" SUMMARY="">\r
+<TR>\r
+<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">\r
+Exceptions</FONT>&nbsp;\r
+<FONT CLASS="FrameItemFont">\r
+<BR>\r
+<A HREF="TransmogrifierException.html" title="class in org.openexi.sax" target="classFrame">TransmogrifierException</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/sax/package-summary.html b/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/sax/package-summary.html
new file mode 100644 (file)
index 0000000..b0e7208
--- /dev/null
@@ -0,0 +1,224 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:58 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+org.openexi.sax\r
+</TITLE>\r
+\r
+<META NAME="keywords" CONTENT="org.openexi.sax package">\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">\r
+\r
+<SCRIPT type="text/javascript">\r
+function windowTitle()\r
+{\r
+    parent.document.title="org.openexi.sax";\r
+}\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+</NOSCRIPT>\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white" onload="windowTitle();">\r
+\r
+\r
+<!-- ========= START OF TOP NAVBAR ======= -->\r
+<A NAME="navbar_top"><!-- --></A>\r
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_top_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../org/openexi/proc/io/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;\r
+&nbsp;<A HREF="../../../org/openexi/schema/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../index.html?org/openexi/sax/package-summary.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_top"></A>\r
+<!-- ========= END OF TOP NAVBAR ========= -->\r
+\r
+<HR>\r
+<H2>\r
+Package org.openexi.sax\r
+</H2>\r
+\r
+<tr valign="top" cellpadding="3" border="0">\r
+\r
+The SAX package contains the <code>Transmogrifier</code>, which encodes an XML file to an EXI stream, and the <code>EXIReader</code>, which restores an EXI stream to its logical XML equivalent.\r
+<P>\r
+<B>See:</B>\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<A HREF="#package_description"><B>Description</B></A>\r
+<P>\r
+\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Interface Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD WIDTH="15%"><B><A HREF="../../../org/openexi/sax/BinaryDataHandler.html" title="interface in org.openexi.sax">BinaryDataHandler</A></B></TD>\r
+<TD>&nbsp;</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD WIDTH="15%"><B><A HREF="../../../org/openexi/sax/SAXTransmogrifier.html" title="interface in org.openexi.sax">SAXTransmogrifier</A></B></TD>\r
+<TD>Applications can directly feed SAX events into a transmogrifier through SAXTransmogrifier.</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+\r
+<P>\r
+\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Class Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD WIDTH="15%"><B><A HREF="../../../org/openexi/sax/EXIReader.html" title="class in org.openexi.sax">EXIReader</A></B></TD>\r
+<TD>EXIReader implements the SAX XMLReader to provide a convenient and 
+ familiar interface for decoding an EXI stream.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD WIDTH="15%"><B><A HREF="../../../org/openexi/sax/ReaderSupport.html" title="class in org.openexi.sax">ReaderSupport</A></B></TD>\r
+<TD>&nbsp;</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD WIDTH="15%"><B><A HREF="../../../org/openexi/sax/Transmogrifier.html" title="class in org.openexi.sax">Transmogrifier</A></B></TD>\r
+<TD>The Transmogrifier converts an XML stream to an EXI stream.</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+\r
+<P>\r
+\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Exception Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD WIDTH="15%"><B><A HREF="../../../org/openexi/sax/TransmogrifierException.html" title="class in org.openexi.sax">TransmogrifierException</A></B></TD>\r
+<TD>Exception handler for the Transmogrifier.</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+\r
+<P>\r
+<A NAME="package_description"><!-- --></A><H2>\r
+Package org.openexi.sax Description\r
+</H2>\r
+\r
+<P>\r
+<table>\r
+<tr valign="top" cellpadding="3" border="0">\r
+<td>\r
+<p>The SAX package contains the <code>Transmogrifier</code>, which encodes an XML file to an EXI stream, and the <code>EXIReader</code>, which restores an EXI stream to its logical XML equivalent. These classes are wrappers for the <code>Scriber</code> and <code>EXIDecoder</code>, respectively, and are primarily meant to provide access to EXI using familiar SAX syntax.\r
+</p>\r
+</td>\r
+<td width="385">\r
+<img src="http://openexi.sourceforge.net/images/OpenEXI_Architecture_SAX.PNG" width="375" height="280" />\r
+</td>\r
+</tr>\r
+</table>\r
+</p>\r
+<P>\r
+\r
+<P>\r
+<DL>\r
+<!-- yWorks UML Doclet   http://www.yworks.com/   b0ac8294d3f86ae0003f3a3a002ea3cf577df824efc6f2... -->
+</DL>\r
+<HR>\r
+\r
+\r
+<!-- ======= START OF BOTTOM NAVBAR ====== -->\r
+<A NAME="navbar_bottom"><!-- --></A>\r
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_bottom_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../org/openexi/proc/io/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;\r
+&nbsp;<A HREF="../../../org/openexi/schema/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../index.html?org/openexi/sax/package-summary.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_bottom"></A>\r
+<!-- ======== END OF BOTTOM NAVBAR ======= -->\r
+\r
+<HR>\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/sax/package-tree.html b/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/sax/package-tree.html
new file mode 100644 (file)
index 0000000..f4184bf
--- /dev/null
@@ -0,0 +1,171 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:58 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+org.openexi.sax Class Hierarchy\r
+</TITLE>\r
+\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">\r
+\r
+<SCRIPT type="text/javascript">\r
+function windowTitle()\r
+{\r
+    parent.document.title="org.openexi.sax Class Hierarchy";\r
+}\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+</NOSCRIPT>\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white" onload="windowTitle();">\r
+\r
+\r
+<!-- ========= START OF TOP NAVBAR ======= -->\r
+<A NAME="navbar_top"><!-- --></A>\r
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_top_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../org/openexi/proc/io/package-tree.html"><B>PREV</B></A>&nbsp;\r
+&nbsp;<A HREF="../../../org/openexi/schema/package-tree.html"><B>NEXT</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../index.html?org/openexi/sax/package-tree.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_top"></A>\r
+<!-- ========= END OF TOP NAVBAR ========= -->\r
+\r
+<HR>\r
+<CENTER>\r
+<H2>\r
+Hierarchy For Package org.openexi.sax\r
+</H2>\r
+</CENTER>\r
+<DL>\r
+<DT><B>Package Hierarchies:</B><DD><A HREF="../../../overview-tree.html">All Packages</A></DL>\r
+<HR>\r
+<H2>\r
+Class Hierarchy\r
+</H2>\r
+<UL>\r
+<LI TYPE="circle">java.lang.Object<UL>\r
+<LI TYPE="circle">org.openexi.sax.<A HREF="../../../org/openexi/sax/ReaderSupport.html" title="class in org.openexi.sax"><B>ReaderSupport</B></A> (implements org.xml.sax.Attributes)\r
+<UL>\r
+<LI TYPE="circle">org.openexi.sax.<A HREF="../../../org/openexi/sax/EXIReader.html" title="class in org.openexi.sax"><B>EXIReader</B></A> (implements org.xml.sax.XMLReader)\r
+</UL>\r
+<LI TYPE="circle">java.lang.Throwable (implements java.io.Serializable)\r
+<UL>\r
+<LI TYPE="circle">java.lang.Exception<UL>\r
+<LI TYPE="circle">org.openexi.sax.<A HREF="../../../org/openexi/sax/TransmogrifierException.html" title="class in org.openexi.sax"><B>TransmogrifierException</B></A></UL>\r
+</UL>\r
+<LI TYPE="circle">org.openexi.sax.<A HREF="../../../org/openexi/sax/Transmogrifier.html" title="class in org.openexi.sax"><B>Transmogrifier</B></A></UL>\r
+</UL>\r
+<H2>\r
+Interface Hierarchy\r
+</H2>\r
+<UL>\r
+<LI TYPE="circle">org.openexi.sax.<A HREF="../../../org/openexi/sax/BinaryDataHandler.html" title="interface in org.openexi.sax"><B>BinaryDataHandler</B></A><UL>\r
+<LI TYPE="circle">org.openexi.sax.<A HREF="../../../org/openexi/sax/SAXTransmogrifier.html" title="interface in org.openexi.sax"><B>SAXTransmogrifier</B></A> (also extends org.xml.sax.ContentHandler, org.xml.sax.ext.LexicalHandler)\r
+</UL>\r
+<LI TYPE="circle">org.xml.sax.ContentHandler<UL>\r
+<LI TYPE="circle">org.openexi.sax.<A HREF="../../../org/openexi/sax/SAXTransmogrifier.html" title="interface in org.openexi.sax"><B>SAXTransmogrifier</B></A> (also extends org.openexi.sax.<A HREF="../../../org/openexi/sax/BinaryDataHandler.html" title="interface in org.openexi.sax">BinaryDataHandler</A>, org.xml.sax.ext.LexicalHandler)\r
+</UL>\r
+<LI TYPE="circle">org.xml.sax.ext.LexicalHandler<UL>\r
+<LI TYPE="circle">org.openexi.sax.<A HREF="../../../org/openexi/sax/SAXTransmogrifier.html" title="interface in org.openexi.sax"><B>SAXTransmogrifier</B></A> (also extends org.openexi.sax.<A HREF="../../../org/openexi/sax/BinaryDataHandler.html" title="interface in org.openexi.sax">BinaryDataHandler</A>, org.xml.sax.ContentHandler)\r
+</UL>\r
+</UL>\r
+<HR>\r
+\r
+\r
+<!-- ======= START OF BOTTOM NAVBAR ====== -->\r
+<A NAME="navbar_bottom"><!-- --></A>\r
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_bottom_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../org/openexi/proc/io/package-tree.html"><B>PREV</B></A>&nbsp;\r
+&nbsp;<A HREF="../../../org/openexi/schema/package-tree.html"><B>NEXT</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../index.html?org/openexi/sax/package-tree.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_bottom"></A>\r
+<!-- ======== END OF BOTTOM NAVBAR ======= -->\r
+\r
+<HR>\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/schema/Characters.html b/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/schema/Characters.html
new file mode 100644 (file)
index 0000000..022f5be
--- /dev/null
@@ -0,0 +1,486 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:57 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+Characters\r
+</TITLE>\r
+\r
+<META NAME="keywords" CONTENT="org.openexi.schema.Characters class">\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">\r
+\r
+<SCRIPT type="text/javascript">\r
+function windowTitle()\r
+{\r
+    parent.document.title="Characters";\r
+}\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+</NOSCRIPT>\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white" onload="windowTitle();">\r
+\r
+\r
+<!-- ========= START OF TOP NAVBAR ======= -->\r
+<A NAME="navbar_top"><!-- --></A>\r
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_top_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;PREV CLASS&nbsp;\r
+&nbsp;<A HREF="../../../org/openexi/schema/EmptySchema.html" title="class in org.openexi.schema"><B>NEXT CLASS</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../index.html?org/openexi/schema/Characters.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="Characters.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_top"></A>\r
+<!-- ========= END OF TOP NAVBAR ========= -->\r
+\r
+<HR>\r
+<!-- ======== START OF CLASS DATA ======== -->\r
+<H2>\r
+<FONT SIZE="-1">\r
+org.openexi.schema</FONT>\r
+<BR>\r
+Class Characters</H2>\r
+<PRE>\r
+java.lang.Object\r
+  <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>org.openexi.schema.Characters</B>\r
+</PRE>\r
+<HR>\r
+<DL>\r
+<DT><PRE>public final class <B>Characters</B><DT>extends java.lang.Object</DL>\r
+</PRE>\r
+\r
+<P>\r
+<DL>\r
+<!-- yWorks UML Doclet   http://www.yworks.com/   b0ac8294d3f86ae0003f3a3a002ea3cf577df824efc6f2... -->
+</DL>\r
+<HR>\r
+\r
+<P>\r
+<!-- =========== FIELD SUMMARY =========== -->\r
+\r
+<A NAME="field_summary"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Field Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;char[]</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/schema/Characters.html#characters">characters</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;<A HREF="../../../org/openexi/schema/Characters.html" title="class in org.openexi.schema">Characters</A></CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/schema/Characters.html#CHARACTERS_EMPTY">CHARACTERS_EMPTY</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;boolean</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/schema/Characters.html#isVolatile">isVolatile</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;int</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/schema/Characters.html#length">length</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;int</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/schema/Characters.html#startIndex">startIndex</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;int</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/schema/Characters.html#ucsCount">ucsCount</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->\r
+\r
+<A NAME="constructor_summary"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Constructor Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE><B><A HREF="../../../org/openexi/schema/Characters.html#Characters(char[], int, int, boolean)">Characters</A></B>(char[]&nbsp;characters,\r
+           int&nbsp;startIndex,\r
+           int&nbsp;length,\r
+           boolean&nbsp;isVolatile)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+<!-- ========== METHOD SUMMARY =========== -->\r
+\r
+<A NAME="method_summary"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Method Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;boolean</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/schema/Characters.html#equals(java.lang.Object)">equals</A></B>(java.lang.Object&nbsp;object)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;int</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/schema/Characters.html#hashCode()">hashCode</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;int</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/schema/Characters.html#indexOf(char)">indexOf</A></B>(char&nbsp;c)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;java.lang.String</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/schema/Characters.html#makeString()">makeString</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;java.lang.String</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/schema/Characters.html#substring(int, int)">substring</A></B>(int&nbsp;beginIndex,\r
+          int&nbsp;endIndex)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/schema/Characters.html#turnPermanent()">turnPermanent</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">\r
+<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE>getClass, notify, notifyAll, toString, wait, wait, wait</CODE></TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+<P>\r
+\r
+<!-- ============ FIELD DETAIL =========== -->\r
+\r
+<A NAME="field_detail"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">\r
+<B>Field Detail</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<A NAME="isVolatile"><!-- --></A><H3>\r
+isVolatile</H3>\r
+<PRE>\r
+public boolean <B>isVolatile</B></PRE>\r
+<DL>\r
+<DL>\r
+</DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="characters"><!-- --></A><H3>\r
+characters</H3>\r
+<PRE>\r
+public char[] <B>characters</B></PRE>\r
+<DL>\r
+<DL>\r
+</DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="startIndex"><!-- --></A><H3>\r
+startIndex</H3>\r
+<PRE>\r
+public int <B>startIndex</B></PRE>\r
+<DL>\r
+<DL>\r
+</DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="length"><!-- --></A><H3>\r
+length</H3>\r
+<PRE>\r
+public final int <B>length</B></PRE>\r
+<DL>\r
+<DL>\r
+</DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="ucsCount"><!-- --></A><H3>\r
+ucsCount</H3>\r
+<PRE>\r
+public final int <B>ucsCount</B></PRE>\r
+<DL>\r
+<DL>\r
+</DL>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="CHARACTERS_EMPTY"><!-- --></A><H3>\r
+CHARACTERS_EMPTY</H3>\r
+<PRE>\r
+public static final <A HREF="../../../org/openexi/schema/Characters.html" title="class in org.openexi.schema">Characters</A> <B>CHARACTERS_EMPTY</B></PRE>\r
+<DL>\r
+<DL>\r
+</DL>\r
+</DL>\r
+\r
+<!-- ========= CONSTRUCTOR DETAIL ======== -->\r
+\r
+<A NAME="constructor_detail"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">\r
+<B>Constructor Detail</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<A NAME="Characters(char[], int, int, boolean)"><!-- --></A><H3>\r
+Characters</H3>\r
+<PRE>\r
+public <B>Characters</B>(char[]&nbsp;characters,\r
+                  int&nbsp;startIndex,\r
+                  int&nbsp;length,\r
+                  boolean&nbsp;isVolatile)</PRE>\r
+<DL>\r
+</DL>\r
+\r
+<!-- ============ METHOD DETAIL ========== -->\r
+\r
+<A NAME="method_detail"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">\r
+<B>Method Detail</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<A NAME="turnPermanent()"><!-- --></A><H3>\r
+turnPermanent</H3>\r
+<PRE>\r
+public void <B>turnPermanent</B>()</PRE>\r
+<DL>\r
+<DD><DL>\r
+</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="indexOf(char)"><!-- --></A><H3>\r
+indexOf</H3>\r
+<PRE>\r
+public int <B>indexOf</B>(char&nbsp;c)</PRE>\r
+<DL>\r
+<DD><DL>\r
+</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="substring(int, int)"><!-- --></A><H3>\r
+substring</H3>\r
+<PRE>\r
+public java.lang.String <B>substring</B>(int&nbsp;beginIndex,\r
+                                  int&nbsp;endIndex)</PRE>\r
+<DL>\r
+<DD><DL>\r
+</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="hashCode()"><!-- --></A><H3>\r
+hashCode</H3>\r
+<PRE>\r
+public int <B>hashCode</B>()</PRE>\r
+<DL>\r
+<DD><DL>\r
+<DT><B>Overrides:</B><DD><CODE>hashCode</CODE> in class <CODE>java.lang.Object</CODE></DL>\r
+</DD>\r
+<DD><DL>\r
+</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="equals(java.lang.Object)"><!-- --></A><H3>\r
+equals</H3>\r
+<PRE>\r
+public boolean <B>equals</B>(java.lang.Object&nbsp;object)</PRE>\r
+<DL>\r
+<DD><DL>\r
+<DT><B>Overrides:</B><DD><CODE>equals</CODE> in class <CODE>java.lang.Object</CODE></DL>\r
+</DD>\r
+<DD><DL>\r
+</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="makeString()"><!-- --></A><H3>\r
+makeString</H3>\r
+<PRE>\r
+public java.lang.String <B>makeString</B>()</PRE>\r
+<DL>\r
+<DD><DL>\r
+</DL>\r
+</DD>\r
+</DL>\r
+<!-- ========= END OF CLASS DATA ========= -->\r
+<HR>\r
+\r
+\r
+<!-- ======= START OF BOTTOM NAVBAR ====== -->\r
+<A NAME="navbar_bottom"><!-- --></A>\r
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_bottom_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;PREV CLASS&nbsp;\r
+&nbsp;<A HREF="../../../org/openexi/schema/EmptySchema.html" title="class in org.openexi.schema"><B>NEXT CLASS</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../index.html?org/openexi/schema/Characters.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="Characters.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_bottom"></A>\r
+<!-- ======== END OF BOTTOM NAVBAR ======= -->\r
+\r
+<HR>\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/schema/EXISchema.html b/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/schema/EXISchema.html
new file mode 100644 (file)
index 0000000..f3c472e
--- /dev/null
@@ -0,0 +1,355 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:58 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+EXISchema\r
+</TITLE>\r
+\r
+<META NAME="keywords" CONTENT="org.openexi.schema.EXISchema class">\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">\r
+\r
+<SCRIPT type="text/javascript">\r
+function windowTitle()\r
+{\r
+    parent.document.title="EXISchema";\r
+}\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+</NOSCRIPT>\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white" onload="windowTitle();">\r
+\r
+\r
+<!-- ========= START OF TOP NAVBAR ======= -->\r
+<A NAME="navbar_top"><!-- --></A>\r
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_top_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../org/openexi/schema/EmptySchema.html" title="class in org.openexi.schema"><B>PREV CLASS</B></A>&nbsp;\r
+&nbsp;NEXT CLASS</FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../index.html?org/openexi/schema/EXISchema.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="EXISchema.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_top"></A>\r
+<!-- ========= END OF TOP NAVBAR ========= -->\r
+\r
+<HR>\r
+<!-- ======== START OF CLASS DATA ======== -->\r
+<H2>\r
+<FONT SIZE="-1">\r
+org.openexi.schema</FONT>\r
+<BR>\r
+Class EXISchema</H2>\r
+<PRE>\r
+java.lang.Object\r
+  <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>org.openexi.schema.EXISchema</B>\r
+</PRE>\r
+<HR>\r
+<DL>\r
+<DT><PRE>public final class <B>EXISchema</B><DT>extends java.lang.Object</DL>\r
+</PRE>\r
+\r
+<P>\r
+EXISchema provides methods to read and write compiled EXI schemas.\r
+<P>\r
+\r
+<P>\r
+<DL>\r
+<!-- yWorks UML Doclet   http://www.yworks.com/   b0ac8294d3f86ae0003f3a3a002ea3cf577df824efc6f2... -->
+</DL>\r
+<HR>\r
+\r
+<P>\r
+<!-- =========== FIELD SUMMARY =========== -->\r
+\r
+<A NAME="field_summary"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Field Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;byte[]</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/schema/EXISchema.html#ancestryIds">ancestryIds</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+<!-- ========== METHOD SUMMARY =========== -->\r
+\r
+<A NAME="method_summary"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Method Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;boolean</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/schema/EXISchema.html#_isSimpleType(int, int[])">_isSimpleType</A></B>(int&nbsp;tp,\r
+              int[]&nbsp;types)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;boolean</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/schema/EXISchema.html#isSimpleType(int)">isSimpleType</A></B>(int&nbsp;tp)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;<A HREF="../../../org/openexi/schema/EXISchema.html" title="class in org.openexi.schema">EXISchema</A></CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/schema/EXISchema.html#readIn(java.io.DataInputStream)">readIn</A></B>(java.io.DataInputStream&nbsp;in)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reads an EXI Schema from a DataInputStream.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/schema/EXISchema.html#writeOut(java.io.DataOutputStream)">writeOut</A></B>(java.io.DataOutputStream&nbsp;out)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Writes out a serialized EXISchema.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/schema/EXISchema.html#writeXml(java.io.OutputStream, boolean)">writeXml</A></B>(java.io.OutputStream&nbsp;out,\r
+         boolean&nbsp;whole)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">\r
+<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+<P>\r
+\r
+<!-- ============ FIELD DETAIL =========== -->\r
+\r
+<A NAME="field_detail"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">\r
+<B>Field Detail</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<A NAME="ancestryIds"><!-- --></A><H3>\r
+ancestryIds</H3>\r
+<PRE>\r
+public transient byte[] <B>ancestryIds</B></PRE>\r
+<DL>\r
+<DL>\r
+</DL>\r
+</DL>\r
+\r
+<!-- ============ METHOD DETAIL ========== -->\r
+\r
+<A NAME="method_detail"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">\r
+<B>Method Detail</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<A NAME="isSimpleType(int)"><!-- --></A><H3>\r
+isSimpleType</H3>\r
+<PRE>\r
+public boolean <B>isSimpleType</B>(int&nbsp;tp)</PRE>\r
+<DL>\r
+<DD><DL>\r
+</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="_isSimpleType(int, int[])"><!-- --></A><H3>\r
+_isSimpleType</H3>\r
+<PRE>\r
+public static boolean <B>_isSimpleType</B>(int&nbsp;tp,\r
+                                    int[]&nbsp;types)</PRE>\r
+<DL>\r
+<DD><DL>\r
+</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="readIn(java.io.DataInputStream)"><!-- --></A><H3>\r
+readIn</H3>\r
+<PRE>\r
+public static <A HREF="../../../org/openexi/schema/EXISchema.html" title="class in org.openexi.schema">EXISchema</A> <B>readIn</B>(java.io.DataInputStream&nbsp;in)\r
+                        throws java.io.IOException,\r
+                               java.lang.ClassNotFoundException</PRE>\r
+<DL>\r
+<DD>Reads an EXI Schema from a DataInputStream.\r
+<P>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>in</CODE> - DataInputStream containing a serialized EXISchema\r
+<DT><B>Returns:</B><DD><A HREF="../../../org/openexi/schema/EXISchema.html" title="class in org.openexi.schema"><CODE>EXISchema</CODE></A>\r
+<DT><B>Throws:</B>\r
+<DD><CODE>IOException,</CODE> - ClassNotFoundException\r
+<DD><CODE>java.io.IOException</CODE>\r
+<DD><CODE>java.lang.ClassNotFoundException</CODE></DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="writeOut(java.io.DataOutputStream)"><!-- --></A><H3>\r
+writeOut</H3>\r
+<PRE>\r
+public void <B>writeOut</B>(java.io.DataOutputStream&nbsp;out)\r
+              throws java.io.IOException</PRE>\r
+<DL>\r
+<DD>Writes out a serialized EXISchema.\r
+<P>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>out</CODE> - DataOutputStream to receive the serialized EXISchema\r
+<DT><B>Throws:</B>\r
+<DD><CODE>java.io.IOException</CODE></DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="writeXml(java.io.OutputStream, boolean)"><!-- --></A><H3>\r
+writeXml</H3>\r
+<PRE>\r
+public void <B>writeXml</B>(java.io.OutputStream&nbsp;out,\r
+                     boolean&nbsp;whole)\r
+              throws java.io.IOException</PRE>\r
+<DL>\r
+<DD><DL>\r
+\r
+<DT><B>Throws:</B>\r
+<DD><CODE>java.io.IOException</CODE></DL>\r
+</DD>\r
+</DL>\r
+<!-- ========= END OF CLASS DATA ========= -->\r
+<HR>\r
+\r
+\r
+<!-- ======= START OF BOTTOM NAVBAR ====== -->\r
+<A NAME="navbar_bottom"><!-- --></A>\r
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_bottom_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../org/openexi/schema/EmptySchema.html" title="class in org.openexi.schema"><B>PREV CLASS</B></A>&nbsp;\r
+&nbsp;NEXT CLASS</FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../index.html?org/openexi/schema/EXISchema.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="EXISchema.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_bottom"></A>\r
+<!-- ======== END OF BOTTOM NAVBAR ======= -->\r
+\r
+<HR>\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/schema/EmptySchema.html b/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/schema/EmptySchema.html
new file mode 100644 (file)
index 0000000..2a932cc
--- /dev/null
@@ -0,0 +1,229 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:57 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+EmptySchema\r
+</TITLE>\r
+\r
+<META NAME="keywords" CONTENT="org.openexi.schema.EmptySchema class">\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">\r
+\r
+<SCRIPT type="text/javascript">\r
+function windowTitle()\r
+{\r
+    parent.document.title="EmptySchema";\r
+}\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+</NOSCRIPT>\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white" onload="windowTitle();">\r
+\r
+\r
+<!-- ========= START OF TOP NAVBAR ======= -->\r
+<A NAME="navbar_top"><!-- --></A>\r
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_top_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../org/openexi/schema/Characters.html" title="class in org.openexi.schema"><B>PREV CLASS</B></A>&nbsp;\r
+&nbsp;<A HREF="../../../org/openexi/schema/EXISchema.html" title="class in org.openexi.schema"><B>NEXT CLASS</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../index.html?org/openexi/schema/EmptySchema.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="EmptySchema.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_top"></A>\r
+<!-- ========= END OF TOP NAVBAR ========= -->\r
+\r
+<HR>\r
+<!-- ======== START OF CLASS DATA ======== -->\r
+<H2>\r
+<FONT SIZE="-1">\r
+org.openexi.schema</FONT>\r
+<BR>\r
+Class EmptySchema</H2>\r
+<PRE>\r
+java.lang.Object\r
+  <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>org.openexi.schema.EmptySchema</B>\r
+</PRE>\r
+<HR>\r
+<DL>\r
+<DT><PRE>public final class <B>EmptySchema</B><DT>extends java.lang.Object</DL>\r
+</PRE>\r
+\r
+<P>\r
+EmptySchema provides an EXISchema that supports all datatypes inherent
+ in XML Schema such as xsd:int and xsd:dateTime, but with no 
+ user-specific definitions. This is to support the use of dynamic 
+ datatype associations discovered within elements during processing.\r
+<P>\r
+\r
+<P>\r
+<DL>\r
+<!-- yWorks UML Doclet   http://www.yworks.com/   b0ac8294d3f86ae0003f3a3a002ea3cf577df824efc6f2... -->
+</DL>\r
+<HR>\r
+\r
+<P>\r
+\r
+<!-- ========== METHOD SUMMARY =========== -->\r
+\r
+<A NAME="method_summary"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Method Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;<A HREF="../../../org/openexi/schema/EXISchema.html" title="class in org.openexi.schema">EXISchema</A></CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/schema/EmptySchema.html#getEXISchema()">getEXISchema</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an EXISchema that supports all datatypes inherent in XML Schema.</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">\r
+<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+<P>\r
+\r
+<!-- ============ METHOD DETAIL ========== -->\r
+\r
+<A NAME="method_detail"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">\r
+<B>Method Detail</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<A NAME="getEXISchema()"><!-- --></A><H3>\r
+getEXISchema</H3>\r
+<PRE>\r
+public static <A HREF="../../../org/openexi/schema/EXISchema.html" title="class in org.openexi.schema">EXISchema</A> <B>getEXISchema</B>()</PRE>\r
+<DL>\r
+<DD>Returns an EXISchema that supports all datatypes inherent in XML Schema.
+ Calls to this method always return the same object.\r
+<P>\r
+<DD><DL>\r
+\r
+<DT><B>Returns:</B><DD></DL>\r
+</DD>\r
+</DL>\r
+<!-- ========= END OF CLASS DATA ========= -->\r
+<HR>\r
+\r
+\r
+<!-- ======= START OF BOTTOM NAVBAR ====== -->\r
+<A NAME="navbar_bottom"><!-- --></A>\r
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_bottom_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../org/openexi/schema/Characters.html" title="class in org.openexi.schema"><B>PREV CLASS</B></A>&nbsp;\r
+&nbsp;<A HREF="../../../org/openexi/schema/EXISchema.html" title="class in org.openexi.schema"><B>NEXT CLASS</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../index.html?org/openexi/schema/EmptySchema.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="EmptySchema.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_bottom"></A>\r
+<!-- ======== END OF BOTTOM NAVBAR ======= -->\r
+\r
+<HR>\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/schema/package-frame.html b/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/schema/package-frame.html
new file mode 100644 (file)
index 0000000..4fdd831
--- /dev/null
@@ -0,0 +1,37 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:58 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+org.openexi.schema\r
+</TITLE>\r
+\r
+<META NAME="keywords" CONTENT="org.openexi.schema package">\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">\r
+\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white">\r
+<FONT size="+1" CLASS="FrameTitleFont">\r
+<A HREF="../../../org/openexi/schema/package-summary.html" target="classFrame">org.openexi.schema</A></FONT>\r
+<TABLE BORDER="0" WIDTH="100%" SUMMARY="">\r
+<TR>\r
+<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">\r
+Classes</FONT>&nbsp;\r
+<FONT CLASS="FrameItemFont">\r
+<BR>\r
+<A HREF="Characters.html" title="class in org.openexi.schema" target="classFrame">Characters</A>\r
+<BR>\r
+<A HREF="EmptySchema.html" title="class in org.openexi.schema" target="classFrame">EmptySchema</A>\r
+<BR>\r
+<A HREF="EXISchema.html" title="class in org.openexi.schema" target="classFrame">EXISchema</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/schema/package-summary.html b/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/schema/package-summary.html
new file mode 100644 (file)
index 0000000..53242f2
--- /dev/null
@@ -0,0 +1,195 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:58 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+org.openexi.schema\r
+</TITLE>\r
+\r
+<META NAME="keywords" CONTENT="org.openexi.schema package">\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">\r
+\r
+<SCRIPT type="text/javascript">\r
+function windowTitle()\r
+{\r
+    parent.document.title="org.openexi.schema";\r
+}\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+</NOSCRIPT>\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white" onload="windowTitle();">\r
+\r
+\r
+<!-- ========= START OF TOP NAVBAR ======= -->\r
+<A NAME="navbar_top"><!-- --></A>\r
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_top_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../org/openexi/sax/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;\r
+&nbsp;<A HREF="../../../org/openexi/scomp/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../index.html?org/openexi/schema/package-summary.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_top"></A>\r
+<!-- ========= END OF TOP NAVBAR ========= -->\r
+\r
+<HR>\r
+<H2>\r
+Package org.openexi.schema\r
+</H2>\r
+\r
+<tr valign="top" cellpadding="3" border="0">\r
+\r
+The schema package contains classes that are used to represent XML Schema Documents (XSDs).\r
+<P>\r
+<B>See:</B>\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<A HREF="#package_description"><B>Description</B></A>\r
+<P>\r
+\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Class Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD WIDTH="15%"><B><A HREF="../../../org/openexi/schema/Characters.html" title="class in org.openexi.schema">Characters</A></B></TD>\r
+<TD>&nbsp;</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD WIDTH="15%"><B><A HREF="../../../org/openexi/schema/EmptySchema.html" title="class in org.openexi.schema">EmptySchema</A></B></TD>\r
+<TD>EmptySchema provides an EXISchema that supports all datatypes inherent
+ in XML Schema such as xsd:int and xsd:dateTime, but with no 
+ user-specific definitions.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD WIDTH="15%"><B><A HREF="../../../org/openexi/schema/EXISchema.html" title="class in org.openexi.schema">EXISchema</A></B></TD>\r
+<TD>EXISchema provides methods to read and write compiled EXI schemas.</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+\r
+<P>\r
+<A NAME="package_description"><!-- --></A><H2>\r
+Package org.openexi.schema Description\r
+</H2>\r
+\r
+<P>\r
+<table>\r
+<tr valign="top" cellpadding="3" border="0">\r
+<td>\r
+<p>The schema package contains classes that are used to represent XML Schema Documents (XSDs). <code>EXISchema.writeOut</code> writes an EXISchema to a <code>DataOutputStream</code> (which is typically saved to disk). <code>EXISchema.readIn</code> returns an <code>EXISchema</code> from a <code>DataInputStream</code> (typically from a file on disk), saving the step of processing the schema at runtime.\r
+</p>\r
+<p>\r
+<code>EmptySchema</code> is used to create an explicit schema object with default settings. This is to enable the <code>EXIDecoder</code> and <code>Transmogrifier</code> to process element tags that have embedded datatype overrides.\r
+</td>\r
+<td width="385">\r
+<img src="http://openexi.sourceforge.net/images/OpenEXI_Architecture_Schema.PNG" width="375" height="280" />\r
+</td>\r
+</tr>\r
+</table>\r
+</p>\r
+<P>\r
+\r
+<P>\r
+<DL>\r
+<!-- yWorks UML Doclet   http://www.yworks.com/   b0ac8294d3f86ae0003f3a3a002ea3cf577df824efc6f2... -->
+</DL>\r
+<HR>\r
+\r
+\r
+<!-- ======= START OF BOTTOM NAVBAR ====== -->\r
+<A NAME="navbar_bottom"><!-- --></A>\r
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_bottom_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../org/openexi/sax/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;\r
+&nbsp;<A HREF="../../../org/openexi/scomp/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../index.html?org/openexi/schema/package-summary.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_bottom"></A>\r
+<!-- ======== END OF BOTTOM NAVBAR ======= -->\r
+\r
+<HR>\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/schema/package-tree.html b/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/schema/package-tree.html
new file mode 100644 (file)
index 0000000..dda7f62
--- /dev/null
@@ -0,0 +1,148 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:58 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+org.openexi.schema Class Hierarchy\r
+</TITLE>\r
+\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">\r
+\r
+<SCRIPT type="text/javascript">\r
+function windowTitle()\r
+{\r
+    parent.document.title="org.openexi.schema Class Hierarchy";\r
+}\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+</NOSCRIPT>\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white" onload="windowTitle();">\r
+\r
+\r
+<!-- ========= START OF TOP NAVBAR ======= -->\r
+<A NAME="navbar_top"><!-- --></A>\r
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_top_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../org/openexi/sax/package-tree.html"><B>PREV</B></A>&nbsp;\r
+&nbsp;<A HREF="../../../org/openexi/scomp/package-tree.html"><B>NEXT</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../index.html?org/openexi/schema/package-tree.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_top"></A>\r
+<!-- ========= END OF TOP NAVBAR ========= -->\r
+\r
+<HR>\r
+<CENTER>\r
+<H2>\r
+Hierarchy For Package org.openexi.schema\r
+</H2>\r
+</CENTER>\r
+<DL>\r
+<DT><B>Package Hierarchies:</B><DD><A HREF="../../../overview-tree.html">All Packages</A></DL>\r
+<HR>\r
+<H2>\r
+Class Hierarchy\r
+</H2>\r
+<UL>\r
+<LI TYPE="circle">java.lang.Object<UL>\r
+<LI TYPE="circle">org.openexi.schema.<A HREF="../../../org/openexi/schema/Characters.html" title="class in org.openexi.schema"><B>Characters</B></A><LI TYPE="circle">org.openexi.schema.<A HREF="../../../org/openexi/schema/EmptySchema.html" title="class in org.openexi.schema"><B>EmptySchema</B></A><LI TYPE="circle">org.openexi.schema.<A HREF="../../../org/openexi/schema/EXISchema.html" title="class in org.openexi.schema"><B>EXISchema</B></A></UL>\r
+</UL>\r
+<HR>\r
+\r
+\r
+<!-- ======= START OF BOTTOM NAVBAR ====== -->\r
+<A NAME="navbar_bottom"><!-- --></A>\r
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_bottom_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../org/openexi/sax/package-tree.html"><B>PREV</B></A>&nbsp;\r
+&nbsp;<A HREF="../../../org/openexi/scomp/package-tree.html"><B>NEXT</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../index.html?org/openexi/schema/package-tree.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_bottom"></A>\r
+<!-- ======== END OF BOTTOM NAVBAR ======= -->\r
+\r
+<HR>\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/scomp/EXISchemaFactory.html b/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/scomp/EXISchemaFactory.html
new file mode 100644 (file)
index 0000000..7a95df8
--- /dev/null
@@ -0,0 +1,308 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:58 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+EXISchemaFactory\r
+</TITLE>\r
+\r
+<META NAME="keywords" CONTENT="org.openexi.scomp.EXISchemaFactory class">\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">\r
+\r
+<SCRIPT type="text/javascript">\r
+function windowTitle()\r
+{\r
+    parent.document.title="EXISchemaFactory";\r
+}\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+</NOSCRIPT>\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white" onload="windowTitle();">\r
+\r
+\r
+<!-- ========= START OF TOP NAVBAR ======= -->\r
+<A NAME="navbar_top"><!-- --></A>\r
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_top_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../org/openexi/scomp/EntityResolverEx.html" title="interface in org.openexi.scomp"><B>PREV CLASS</B></A>&nbsp;\r
+&nbsp;<A HREF="../../../org/openexi/scomp/EXISchemaFactoryErrorHandler.html" title="interface in org.openexi.scomp"><B>NEXT CLASS</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../index.html?org/openexi/scomp/EXISchemaFactory.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="EXISchemaFactory.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_top"></A>\r
+<!-- ========= END OF TOP NAVBAR ========= -->\r
+\r
+<HR>\r
+<!-- ======== START OF CLASS DATA ======== -->\r
+<H2>\r
+<FONT SIZE="-1">\r
+org.openexi.scomp</FONT>\r
+<BR>\r
+Class EXISchemaFactory</H2>\r
+<PRE>\r
+java.lang.Object\r
+  <IMG SRC="../../../resources/inherit.gif" ALT="extended by ">EXISchemaStruct\r
+      <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>org.openexi.scomp.EXISchemaFactory</B>\r
+</PRE>\r
+<HR>\r
+<DL>\r
+<DT><PRE>public class <B>EXISchemaFactory</B><DT>extends EXISchemaStruct</DL>\r
+</PRE>\r
+\r
+<P>\r
+EXISchemaFactory compiles XML Schema into an EXISchema instance.\r
+<P>\r
+\r
+<P>\r
+<DL>\r
+<!-- yWorks UML Doclet   http://www.yworks.com/   b0ac8294d3f86ae0003f3a3a002ea3cf577df824efc6f2... -->
+</DL>\r
+<HR>\r
+\r
+<P>\r
+\r
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->\r
+\r
+<A NAME="constructor_summary"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Constructor Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE><B><A HREF="../../../org/openexi/scomp/EXISchemaFactory.html#EXISchemaFactory()">EXISchemaFactory</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+<!-- ========== METHOD SUMMARY =========== -->\r
+\r
+<A NAME="method_summary"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Method Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;<A HREF="../../../org/openexi/schema/EXISchema.html" title="class in org.openexi.schema">EXISchema</A></CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/scomp/EXISchemaFactory.html#compile(org.xml.sax.InputSource)">compile</A></B>(org.xml.sax.InputSource&nbsp;inputSource)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compile an XML Schema Document into an EXISchema.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/scomp/EXISchemaFactory.html#setCompilerErrorHandler(org.openexi.scomp.EXISchemaFactoryErrorHandler)">setCompilerErrorHandler</A></B>(<A HREF="../../../org/openexi/scomp/EXISchemaFactoryErrorHandler.html" title="interface in org.openexi.scomp">EXISchemaFactoryErrorHandler</A>&nbsp;errorHandler)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set an error handler to report any errors encountered during
+ schema compilation.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/scomp/EXISchemaFactory.html#setEntityResolver(org.openexi.scomp.EntityResolverEx)">setEntityResolver</A></B>(<A HREF="../../../org/openexi/scomp/EntityResolverEx.html" title="interface in org.openexi.scomp">EntityResolverEx</A>&nbsp;entityResolver)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set an entity resolver for use to resolve entities and schema documents.</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">\r
+<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+<P>\r
+\r
+<!-- ========= CONSTRUCTOR DETAIL ======== -->\r
+\r
+<A NAME="constructor_detail"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">\r
+<B>Constructor Detail</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<A NAME="EXISchemaFactory()"><!-- --></A><H3>\r
+EXISchemaFactory</H3>\r
+<PRE>\r
+public <B>EXISchemaFactory</B>()</PRE>\r
+<DL>\r
+</DL>\r
+\r
+<!-- ============ METHOD DETAIL ========== -->\r
+\r
+<A NAME="method_detail"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">\r
+<B>Method Detail</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<A NAME="setCompilerErrorHandler(org.openexi.scomp.EXISchemaFactoryErrorHandler)"><!-- --></A><H3>\r
+setCompilerErrorHandler</H3>\r
+<PRE>\r
+public void <B>setCompilerErrorHandler</B>(<A HREF="../../../org/openexi/scomp/EXISchemaFactoryErrorHandler.html" title="interface in org.openexi.scomp">EXISchemaFactoryErrorHandler</A>&nbsp;errorHandler)</PRE>\r
+<DL>\r
+<DD>Set an error handler to report any errors encountered during
+ schema compilation.\r
+<P>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>errorHandler</CODE> - Error handler</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="setEntityResolver(org.openexi.scomp.EntityResolverEx)"><!-- --></A><H3>\r
+setEntityResolver</H3>\r
+<PRE>\r
+public void <B>setEntityResolver</B>(<A HREF="../../../org/openexi/scomp/EntityResolverEx.html" title="interface in org.openexi.scomp">EntityResolverEx</A>&nbsp;entityResolver)</PRE>\r
+<DL>\r
+<DD>Set an entity resolver for use to resolve entities and schema documents.\r
+<P>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>entityResolverEx</CODE> - extended SAX entity resolver</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="compile(org.xml.sax.InputSource)"><!-- --></A><H3>\r
+compile</H3>\r
+<PRE>\r
+public final <A HREF="../../../org/openexi/schema/EXISchema.html" title="class in org.openexi.schema">EXISchema</A> <B>compile</B>(org.xml.sax.InputSource&nbsp;inputSource)\r
+                        throws java.io.IOException,\r
+                               <A HREF="../../../org/openexi/scomp/EXISchemaFactoryException.html" title="class in org.openexi.scomp">EXISchemaFactoryException</A></PRE>\r
+<DL>\r
+<DD>Compile an XML Schema Document into an EXISchema.\r
+<P>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>is</CODE> - XML Schema Document stream from an InputSource\r
+<DT><B>Returns:</B><DD>an EXISchema instance\r
+<DT><B>Throws:</B>\r
+<DD><CODE>java.io.IOException</CODE>\r
+<DD><CODE><A HREF="../../../org/openexi/scomp/EXISchemaFactoryException.html" title="class in org.openexi.scomp">EXISchemaFactoryException</A></CODE></DL>\r
+</DD>\r
+</DL>\r
+<!-- ========= END OF CLASS DATA ========= -->\r
+<HR>\r
+\r
+\r
+<!-- ======= START OF BOTTOM NAVBAR ====== -->\r
+<A NAME="navbar_bottom"><!-- --></A>\r
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_bottom_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../org/openexi/scomp/EntityResolverEx.html" title="interface in org.openexi.scomp"><B>PREV CLASS</B></A>&nbsp;\r
+&nbsp;<A HREF="../../../org/openexi/scomp/EXISchemaFactoryErrorHandler.html" title="interface in org.openexi.scomp"><B>NEXT CLASS</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../index.html?org/openexi/scomp/EXISchemaFactory.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="EXISchemaFactory.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_bottom"></A>\r
+<!-- ======== END OF BOTTOM NAVBAR ======= -->\r
+\r
+<HR>\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/scomp/EXISchemaFactoryErrorHandler.html b/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/scomp/EXISchemaFactoryErrorHandler.html
new file mode 100644 (file)
index 0000000..48648e4
--- /dev/null
@@ -0,0 +1,268 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:58 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+EXISchemaFactoryErrorHandler\r
+</TITLE>\r
+\r
+<META NAME="keywords" CONTENT="org.openexi.scomp.EXISchemaFactoryErrorHandler interface">\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">\r
+\r
+<SCRIPT type="text/javascript">\r
+function windowTitle()\r
+{\r
+    parent.document.title="EXISchemaFactoryErrorHandler";\r
+}\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+</NOSCRIPT>\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white" onload="windowTitle();">\r
+\r
+\r
+<!-- ========= START OF TOP NAVBAR ======= -->\r
+<A NAME="navbar_top"><!-- --></A>\r
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_top_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../org/openexi/scomp/EXISchemaFactory.html" title="class in org.openexi.scomp"><B>PREV CLASS</B></A>&nbsp;\r
+&nbsp;<A HREF="../../../org/openexi/scomp/EXISchemaFactoryException.html" title="class in org.openexi.scomp"><B>NEXT CLASS</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../index.html?org/openexi/scomp/EXISchemaFactoryErrorHandler.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="EXISchemaFactoryErrorHandler.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_top"></A>\r
+<!-- ========= END OF TOP NAVBAR ========= -->\r
+\r
+<HR>\r
+<!-- ======== START OF CLASS DATA ======== -->\r
+<H2>\r
+<FONT SIZE="-1">\r
+org.openexi.scomp</FONT>\r
+<BR>\r
+Interface EXISchemaFactoryErrorHandler</H2>\r
+<HR>\r
+<DL>\r
+<DT><PRE>public interface <B>EXISchemaFactoryErrorHandler</B></DL>\r
+</PRE>\r
+\r
+<P>\r
+This interface reports exceptions from EXISchemaFactory during schema 
+ processing. Users of EXISchemaFactory need to provide an
+ implementation of this interface to receive errors from EXISchemaFactory.\r
+<P>\r
+\r
+<P>\r
+<DL>\r
+<DT><B>Author:</B></DT>\r
+  <DD>Dennis Dawson</DD>\r
+<!-- yWorks UML Doclet   http://www.yworks.com/   b0ac8294d3f86ae0003f3a3a002ea3cf577df824efc6f2... -->
+</DL>\r
+<HR>\r
+\r
+<P>\r
+\r
+<!-- ========== METHOD SUMMARY =========== -->\r
+\r
+<A NAME="method_summary"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Method Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/scomp/EXISchemaFactoryErrorHandler.html#error(org.openexi.scomp.EXISchemaFactoryException)">error</A></B>(<A HREF="../../../org/openexi/scomp/EXISchemaFactoryException.html" title="class in org.openexi.scomp">EXISchemaFactoryException</A>&nbsp;exc)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Report an error found during schema processing.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/scomp/EXISchemaFactoryErrorHandler.html#fatalError(org.openexi.scomp.EXISchemaFactoryException)">fatalError</A></B>(<A HREF="../../../org/openexi/scomp/EXISchemaFactoryException.html" title="class in org.openexi.scomp">EXISchemaFactoryException</A>&nbsp;exc)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Report a fatal error found during schema processing.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;void</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/scomp/EXISchemaFactoryErrorHandler.html#warning(org.openexi.scomp.EXISchemaFactoryException)">warning</A></B>(<A HREF="../../../org/openexi/scomp/EXISchemaFactoryException.html" title="class in org.openexi.scomp">EXISchemaFactoryException</A>&nbsp;exc)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Report a warning found during schema processing.</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+<P>\r
+\r
+<!-- ============ METHOD DETAIL ========== -->\r
+\r
+<A NAME="method_detail"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">\r
+<B>Method Detail</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<A NAME="warning(org.openexi.scomp.EXISchemaFactoryException)"><!-- --></A><H3>\r
+warning</H3>\r
+<PRE>\r
+void <B>warning</B>(<A HREF="../../../org/openexi/scomp/EXISchemaFactoryException.html" title="class in org.openexi.scomp">EXISchemaFactoryException</A>&nbsp;exc)\r
+             throws <A HREF="../../../org/openexi/scomp/EXISchemaFactoryException.html" title="class in org.openexi.scomp">EXISchemaFactoryException</A></PRE>\r
+<DL>\r
+<DD>Report a warning found during schema processing.\r
+<P>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>exc</CODE> - warning found\r
+<DT><B>Throws:</B>\r
+<DD><CODE><A HREF="../../../org/openexi/scomp/EXISchemaFactoryException.html" title="class in org.openexi.scomp">EXISchemaFactoryException</A></CODE> - at the discretion of the application</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="error(org.openexi.scomp.EXISchemaFactoryException)"><!-- --></A><H3>\r
+error</H3>\r
+<PRE>\r
+void <B>error</B>(<A HREF="../../../org/openexi/scomp/EXISchemaFactoryException.html" title="class in org.openexi.scomp">EXISchemaFactoryException</A>&nbsp;exc)\r
+           throws <A HREF="../../../org/openexi/scomp/EXISchemaFactoryException.html" title="class in org.openexi.scomp">EXISchemaFactoryException</A></PRE>\r
+<DL>\r
+<DD>Report an error found during schema processing. Note that errors are
+ recoverable only as far as the schema processor is concerned. They might
+ be fatal at the application level.\r
+<P>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>exc</CODE> - error found\r
+<DT><B>Throws:</B>\r
+<DD><CODE><A HREF="../../../org/openexi/scomp/EXISchemaFactoryException.html" title="class in org.openexi.scomp">EXISchemaFactoryException</A></CODE> - at the discretion of the application</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="fatalError(org.openexi.scomp.EXISchemaFactoryException)"><!-- --></A><H3>\r
+fatalError</H3>\r
+<PRE>\r
+void <B>fatalError</B>(<A HREF="../../../org/openexi/scomp/EXISchemaFactoryException.html" title="class in org.openexi.scomp">EXISchemaFactoryException</A>&nbsp;exc)\r
+                throws <A HREF="../../../org/openexi/scomp/EXISchemaFactoryException.html" title="class in org.openexi.scomp">EXISchemaFactoryException</A></PRE>\r
+<DL>\r
+<DD>Report a fatal error found during schema processing.\r
+<P>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>exc</CODE> - fatal error found\r
+<DT><B>Throws:</B>\r
+<DD><CODE><A HREF="../../../org/openexi/scomp/EXISchemaFactoryException.html" title="class in org.openexi.scomp">EXISchemaFactoryException</A></CODE> - at the discretion of the application</DL>\r
+</DD>\r
+</DL>\r
+<!-- ========= END OF CLASS DATA ========= -->\r
+<HR>\r
+\r
+\r
+<!-- ======= START OF BOTTOM NAVBAR ====== -->\r
+<A NAME="navbar_bottom"><!-- --></A>\r
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_bottom_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../org/openexi/scomp/EXISchemaFactory.html" title="class in org.openexi.scomp"><B>PREV CLASS</B></A>&nbsp;\r
+&nbsp;<A HREF="../../../org/openexi/scomp/EXISchemaFactoryException.html" title="class in org.openexi.scomp"><B>NEXT CLASS</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../index.html?org/openexi/scomp/EXISchemaFactoryErrorHandler.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="EXISchemaFactoryErrorHandler.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_bottom"></A>\r
+<!-- ======== END OF BOTTOM NAVBAR ======= -->\r
+\r
+<HR>\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/scomp/EXISchemaFactoryException.html b/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/scomp/EXISchemaFactoryException.html
new file mode 100644 (file)
index 0000000..598f7db
--- /dev/null
@@ -0,0 +1,350 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:58 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+EXISchemaFactoryException\r
+</TITLE>\r
+\r
+<META NAME="keywords" CONTENT="org.openexi.scomp.EXISchemaFactoryException class">\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">\r
+\r
+<SCRIPT type="text/javascript">\r
+function windowTitle()\r
+{\r
+    parent.document.title="EXISchemaFactoryException";\r
+}\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+</NOSCRIPT>\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white" onload="windowTitle();">\r
+\r
+\r
+<!-- ========= START OF TOP NAVBAR ======= -->\r
+<A NAME="navbar_top"><!-- --></A>\r
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_top_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../org/openexi/scomp/EXISchemaFactoryErrorHandler.html" title="interface in org.openexi.scomp"><B>PREV CLASS</B></A>&nbsp;\r
+&nbsp;<A HREF="../../../org/openexi/scomp/EXISchemaReader.html" title="class in org.openexi.scomp"><B>NEXT CLASS</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../index.html?org/openexi/scomp/EXISchemaFactoryException.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="EXISchemaFactoryException.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_top"></A>\r
+<!-- ========= END OF TOP NAVBAR ========= -->\r
+\r
+<HR>\r
+<!-- ======== START OF CLASS DATA ======== -->\r
+<H2>\r
+<FONT SIZE="-1">\r
+org.openexi.scomp</FONT>\r
+<BR>\r
+Class EXISchemaFactoryException</H2>\r
+<PRE>\r
+java.lang.Object\r
+  <IMG SRC="../../../resources/inherit.gif" ALT="extended by ">java.lang.Throwable\r
+      <IMG SRC="../../../resources/inherit.gif" ALT="extended by ">java.lang.Exception\r
+          <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>org.openexi.scomp.EXISchemaFactoryException</B>\r
+</PRE>\r
+<DL>\r
+<DT><B>All Implemented Interfaces:</B> <DD>java.io.Serializable</DD>\r
+</DL>\r
+<HR>\r
+<DL>\r
+<DT><PRE>public class <B>EXISchemaFactoryException</B><DT>extends java.lang.Exception</DL>\r
+</PRE>\r
+\r
+<P>\r
+Any errors encountered during schema compilation are communicated to
+ an application as EXISchemaFactoryException objects.\r
+<P>\r
+\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../org/openexi/scomp/EXISchemaFactoryErrorHandler.html" title="interface in org.openexi.scomp"><CODE>EXISchemaFactoryErrorHandler</CODE></A>, \r
+<A HREF="../../../serialized-form.html#org.openexi.scomp.EXISchemaFactoryException">Serialized Form</A><DT><B>Author:</B></DT>\r
+  <DD>Dennis Dawson</DD>\r
+<!-- yWorks UML Doclet   http://www.yworks.com/   b0ac8294d3f86ae0003f3a3a002ea3cf577df824efc6f2... -->
+</DL>\r
+<HR>\r
+\r
+<P>\r
+<!-- =========== FIELD SUMMARY =========== -->\r
+\r
+<A NAME="field_summary"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Field Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>static&nbsp;int</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/scomp/EXISchemaFactoryException.html#XMLSCHEMA_ERROR">XMLSCHEMA_ERROR</A></B></CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The underlying XMLSchema parser found an error in the schema.</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+<!-- ========== METHOD SUMMARY =========== -->\r
+\r
+<A NAME="method_summary"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Method Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;int</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/scomp/EXISchemaFactoryException.html#getCode()">getCode</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a code that represents the type of the exception.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;java.lang.Exception</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/scomp/EXISchemaFactoryException.html#getException()">getException</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an Exception object.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;org.xml.sax.Locator</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/scomp/EXISchemaFactoryException.html#getLocator()">getLocator</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the locator that is associated with this compilation error.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;java.lang.String</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/scomp/EXISchemaFactoryException.html#getMessage()">getMessage</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a message that describes the exception.</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Throwable"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">\r
+<TH ALIGN="left"><B>Methods inherited from class java.lang.Throwable</B></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE>fillInStackTrace, getCause, getLocalizedMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString</CODE></TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">\r
+<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE>equals, getClass, hashCode, notify, notifyAll, wait, wait, wait</CODE></TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+<P>\r
+\r
+<!-- ============ FIELD DETAIL =========== -->\r
+\r
+<A NAME="field_detail"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">\r
+<B>Field Detail</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<A NAME="XMLSCHEMA_ERROR"><!-- --></A><H3>\r
+XMLSCHEMA_ERROR</H3>\r
+<PRE>\r
+public static final int <B>XMLSCHEMA_ERROR</B></PRE>\r
+<DL>\r
+<DD>The underlying XMLSchema parser found an error in the schema.\r
+<P>\r
+<DL>\r
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#org.openexi.scomp.EXISchemaFactoryException.XMLSCHEMA_ERROR">Constant Field Values</A></DL>\r
+</DL>\r
+\r
+<!-- ============ METHOD DETAIL ========== -->\r
+\r
+<A NAME="method_detail"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">\r
+<B>Method Detail</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<A NAME="getCode()"><!-- --></A><H3>\r
+getCode</H3>\r
+<PRE>\r
+public int <B>getCode</B>()</PRE>\r
+<DL>\r
+<DD>Returns a code that represents the type of the exception.\r
+<P>\r
+<DD><DL>\r
+\r
+<DT><B>Returns:</B><DD>error code</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="getMessage()"><!-- --></A><H3>\r
+getMessage</H3>\r
+<PRE>\r
+public java.lang.String <B>getMessage</B>()</PRE>\r
+<DL>\r
+<DD>Returns a message that describes the exception.\r
+<P>\r
+<DD><DL>\r
+<DT><B>Overrides:</B><DD><CODE>getMessage</CODE> in class <CODE>java.lang.Throwable</CODE></DL>\r
+</DD>\r
+<DD><DL>\r
+\r
+<DT><B>Returns:</B><DD>error message</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="getException()"><!-- --></A><H3>\r
+getException</H3>\r
+<PRE>\r
+public java.lang.Exception <B>getException</B>()</PRE>\r
+<DL>\r
+<DD>Returns an Exception object.\r
+<P>\r
+<DD><DL>\r
+\r
+<DT><B>Returns:</B><DD>an Exception instance for the current exception.</DL>\r
+</DD>\r
+</DL>\r
+<HR>\r
+\r
+<A NAME="getLocator()"><!-- --></A><H3>\r
+getLocator</H3>\r
+<PRE>\r
+public org.xml.sax.Locator <B>getLocator</B>()</PRE>\r
+<DL>\r
+<DD>Returns the locator that is associated with this compilation error.\r
+<P>\r
+<DD><DL>\r
+\r
+<DT><B>Returns:</B><DD>a Locator if available, otherwise null</DL>\r
+</DD>\r
+</DL>\r
+<!-- ========= END OF CLASS DATA ========= -->\r
+<HR>\r
+\r
+\r
+<!-- ======= START OF BOTTOM NAVBAR ====== -->\r
+<A NAME="navbar_bottom"><!-- --></A>\r
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_bottom_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../org/openexi/scomp/EXISchemaFactoryErrorHandler.html" title="interface in org.openexi.scomp"><B>PREV CLASS</B></A>&nbsp;\r
+&nbsp;<A HREF="../../../org/openexi/scomp/EXISchemaReader.html" title="class in org.openexi.scomp"><B>NEXT CLASS</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../index.html?org/openexi/scomp/EXISchemaFactoryException.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="EXISchemaFactoryException.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_bottom"></A>\r
+<!-- ======== END OF BOTTOM NAVBAR ======= -->\r
+\r
+<HR>\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/scomp/EXISchemaReader.html b/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/scomp/EXISchemaReader.html
new file mode 100644 (file)
index 0000000..6249b50
--- /dev/null
@@ -0,0 +1,264 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:58 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+EXISchemaReader\r
+</TITLE>\r
+\r
+<META NAME="keywords" CONTENT="org.openexi.scomp.EXISchemaReader class">\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">\r
+\r
+<SCRIPT type="text/javascript">\r
+function windowTitle()\r
+{\r
+    parent.document.title="EXISchemaReader";\r
+}\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+</NOSCRIPT>\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white" onload="windowTitle();">\r
+\r
+\r
+<!-- ========= START OF TOP NAVBAR ======= -->\r
+<A NAME="navbar_top"><!-- --></A>\r
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_top_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../org/openexi/scomp/EXISchemaFactoryException.html" title="class in org.openexi.scomp"><B>PREV CLASS</B></A>&nbsp;\r
+&nbsp;NEXT CLASS</FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../index.html?org/openexi/scomp/EXISchemaReader.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="EXISchemaReader.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_top"></A>\r
+<!-- ========= END OF TOP NAVBAR ========= -->\r
+\r
+<HR>\r
+<!-- ======== START OF CLASS DATA ======== -->\r
+<H2>\r
+<FONT SIZE="-1">\r
+org.openexi.scomp</FONT>\r
+<BR>\r
+Class EXISchemaReader</H2>\r
+<PRE>\r
+java.lang.Object\r
+  <IMG SRC="../../../resources/inherit.gif" ALT="extended by ">EXISchemaStruct\r
+      <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>org.openexi.scomp.EXISchemaReader</B>\r
+</PRE>\r
+<HR>\r
+<DL>\r
+<DT><PRE>public final class <B>EXISchemaReader</B><DT>extends EXISchemaStruct</DL>\r
+</PRE>\r
+\r
+<P>\r
+EXISchemaReader parses EXI-encoded EXI Grammar into an EXISchema.\r
+<P>\r
+\r
+<P>\r
+<DL>\r
+<!-- yWorks UML Doclet   http://www.yworks.com/   b0ac8294d3f86ae0003f3a3a002ea3cf577df824efc6f2... -->
+</DL>\r
+<HR>\r
+\r
+<P>\r
+\r
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->\r
+\r
+<A NAME="constructor_summary"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Constructor Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE><B><A HREF="../../../org/openexi/scomp/EXISchemaReader.html#EXISchemaReader()">EXISchemaReader</A></B>()</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+<!-- ========== METHOD SUMMARY =========== -->\r
+\r
+<A NAME="method_summary"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Method Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;<A HREF="../../../org/openexi/schema/EXISchema.html" title="class in org.openexi.schema">EXISchema</A></CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/scomp/EXISchemaReader.html#parse(java.io.InputStream)">parse</A></B>(java.io.InputStream&nbsp;inputStream)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Parses EXI-encoded EXI Grammar into an EXISchema.</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">\r
+<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+<P>\r
+\r
+<!-- ========= CONSTRUCTOR DETAIL ======== -->\r
+\r
+<A NAME="constructor_detail"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">\r
+<B>Constructor Detail</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<A NAME="EXISchemaReader()"><!-- --></A><H3>\r
+EXISchemaReader</H3>\r
+<PRE>\r
+public <B>EXISchemaReader</B>()</PRE>\r
+<DL>\r
+</DL>\r
+\r
+<!-- ============ METHOD DETAIL ========== -->\r
+\r
+<A NAME="method_detail"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">\r
+<B>Method Detail</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<A NAME="parse(java.io.InputStream)"><!-- --></A><H3>\r
+parse</H3>\r
+<PRE>\r
+public <A HREF="../../../org/openexi/schema/EXISchema.html" title="class in org.openexi.schema">EXISchema</A> <B>parse</B>(java.io.InputStream&nbsp;inputStream)\r
+                throws java.io.IOException,\r
+                       org.openexi.proc.common.EXIOptionsException</PRE>\r
+<DL>\r
+<DD>Parses EXI-encoded EXI Grammar into an EXISchema.\r
+<P>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>inputStream</CODE> - EXI-encoded EXI Grammar\r
+<DT><B>Returns:</B><DD>EXISchema\r
+<DT><B>Throws:</B>\r
+<DD><CODE>java.io.IOException</CODE>\r
+<DD><CODE>org.openexi.proc.common.EXIOptionsException</CODE></DL>\r
+</DD>\r
+</DL>\r
+<!-- ========= END OF CLASS DATA ========= -->\r
+<HR>\r
+\r
+\r
+<!-- ======= START OF BOTTOM NAVBAR ====== -->\r
+<A NAME="navbar_bottom"><!-- --></A>\r
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_bottom_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../org/openexi/scomp/EXISchemaFactoryException.html" title="class in org.openexi.scomp"><B>PREV CLASS</B></A>&nbsp;\r
+&nbsp;NEXT CLASS</FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../index.html?org/openexi/scomp/EXISchemaReader.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="EXISchemaReader.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_bottom"></A>\r
+<!-- ======== END OF BOTTOM NAVBAR ======= -->\r
+\r
+<HR>\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/scomp/EntityResolverEx.html b/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/scomp/EntityResolverEx.html
new file mode 100644 (file)
index 0000000..cd12bdd
--- /dev/null
@@ -0,0 +1,241 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:58 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+EntityResolverEx\r
+</TITLE>\r
+\r
+<META NAME="keywords" CONTENT="org.openexi.scomp.EntityResolverEx interface">\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">\r
+\r
+<SCRIPT type="text/javascript">\r
+function windowTitle()\r
+{\r
+    parent.document.title="EntityResolverEx";\r
+}\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+</NOSCRIPT>\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white" onload="windowTitle();">\r
+\r
+\r
+<!-- ========= START OF TOP NAVBAR ======= -->\r
+<A NAME="navbar_top"><!-- --></A>\r
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_top_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;PREV CLASS&nbsp;\r
+&nbsp;<A HREF="../../../org/openexi/scomp/EXISchemaFactory.html" title="class in org.openexi.scomp"><B>NEXT CLASS</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../index.html?org/openexi/scomp/EntityResolverEx.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="EntityResolverEx.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_top"></A>\r
+<!-- ========= END OF TOP NAVBAR ========= -->\r
+\r
+<HR>\r
+<!-- ======== START OF CLASS DATA ======== -->\r
+<H2>\r
+<FONT SIZE="-1">\r
+org.openexi.scomp</FONT>\r
+<BR>\r
+Interface EntityResolverEx</H2>\r
+<DL>\r
+<DT><B>All Superinterfaces:</B> <DD>org.xml.sax.EntityResolver</DD>\r
+</DL>\r
+<HR>\r
+<DL>\r
+<DT><PRE>public interface <B>EntityResolverEx</B><DT>extends org.xml.sax.EntityResolver</DL>\r
+</PRE>\r
+\r
+<P>\r
+Extended SAX EntityResolver interface for resolving entities and
+ schema documents.\r
+<P>\r
+\r
+<P>\r
+<DL>\r
+<!-- yWorks UML Doclet   http://www.yworks.com/   b0ac8294d3f86ae0003f3a3a002ea3cf577df824efc6f2... -->
+</DL>\r
+<HR>\r
+\r
+<P>\r
+\r
+<!-- ========== METHOD SUMMARY =========== -->\r
+\r
+<A NAME="method_summary"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Method Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">\r
+<CODE>&nbsp;org.xml.sax.InputSource</CODE></FONT></TD>\r
+<TD><CODE><B><A HREF="../../../org/openexi/scomp/EntityResolverEx.html#resolveEntity(java.lang.String, java.lang.String, java.lang.String)">resolveEntity</A></B>(java.lang.String&nbsp;publicId,\r
+              java.lang.String&nbsp;systemId,\r
+              java.lang.String&nbsp;namespaceURI)</CODE>\r
+\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This method will be called for resolving schema documents upon
+ occurrences of XML Schema directives such as "include", "import" and
+ "redefine" within schemas.</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;<A NAME="methods_inherited_from_class_org.xml.sax.EntityResolver"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">\r
+<TH ALIGN="left"><B>Methods inherited from interface org.xml.sax.EntityResolver</B></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD><CODE>resolveEntity</CODE></TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+<P>\r
+\r
+<!-- ============ METHOD DETAIL ========== -->\r
+\r
+<A NAME="method_detail"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">\r
+<B>Method Detail</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<A NAME="resolveEntity(java.lang.String, java.lang.String, java.lang.String)"><!-- --></A><H3>\r
+resolveEntity</H3>\r
+<PRE>\r
+org.xml.sax.InputSource <B>resolveEntity</B>(java.lang.String&nbsp;publicId,\r
+                                      java.lang.String&nbsp;systemId,\r
+                                      java.lang.String&nbsp;namespaceURI)\r
+                                      throws org.xml.sax.SAXException,\r
+                                             java.io.IOException</PRE>\r
+<DL>\r
+<DD>This method will be called for resolving schema documents upon
+ occurrences of XML Schema directives such as "include", "import" and
+ "redefine" within schemas.\r
+<P>\r
+<DD><DL>\r
+</DL>\r
+</DD>\r
+<DD><DL>\r
+<DT><B>Parameters:</B><DD><CODE>publicId</CODE> - Public identifier of the schema document that is being resolved<DD><CODE>systemId</CODE> - System identifier of the schema document that is being resolved<DD><CODE>namespaceURI</CODE> - Target namespace name of the schema document that is being resolved\r
+<DT><B>Returns:</B><DD>InputSource that represents the schema document if resolved otherwise null\r
+<DT><B>Throws:</B>\r
+<DD><CODE>org.xml.sax.SAXException</CODE>\r
+<DD><CODE>java.io.IOException</CODE></DL>\r
+</DD>\r
+</DL>\r
+<!-- ========= END OF CLASS DATA ========= -->\r
+<HR>\r
+\r
+\r
+<!-- ======= START OF BOTTOM NAVBAR ====== -->\r
+<A NAME="navbar_bottom"><!-- --></A>\r
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_bottom_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;PREV CLASS&nbsp;\r
+&nbsp;<A HREF="../../../org/openexi/scomp/EXISchemaFactory.html" title="class in org.openexi.scomp"><B>NEXT CLASS</B></A></FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../index.html?org/openexi/scomp/EntityResolverEx.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="EntityResolverEx.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+<TR>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>\r
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">\r
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_bottom"></A>\r
+<!-- ======== END OF BOTTOM NAVBAR ======= -->\r
+\r
+<HR>\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/scomp/package-frame.html b/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/scomp/package-frame.html
new file mode 100644 (file)
index 0000000..65600a9
--- /dev/null
@@ -0,0 +1,59 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:58 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+org.openexi.scomp\r
+</TITLE>\r
+\r
+<META NAME="keywords" CONTENT="org.openexi.scomp package">\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">\r
+\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white">\r
+<FONT size="+1" CLASS="FrameTitleFont">\r
+<A HREF="../../../org/openexi/scomp/package-summary.html" target="classFrame">org.openexi.scomp</A></FONT>\r
+<TABLE BORDER="0" WIDTH="100%" SUMMARY="">\r
+<TR>\r
+<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">\r
+Interfaces</FONT>&nbsp;\r
+<FONT CLASS="FrameItemFont">\r
+<BR>\r
+<A HREF="EntityResolverEx.html" title="interface in org.openexi.scomp" target="classFrame"><I>EntityResolverEx</I></A>\r
+<BR>\r
+<A HREF="EXISchemaFactoryErrorHandler.html" title="interface in org.openexi.scomp" target="classFrame"><I>EXISchemaFactoryErrorHandler</I></A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+\r
+\r
+<TABLE BORDER="0" WIDTH="100%" SUMMARY="">\r
+<TR>\r
+<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">\r
+Classes</FONT>&nbsp;\r
+<FONT CLASS="FrameItemFont">\r
+<BR>\r
+<A HREF="EXISchemaFactory.html" title="class in org.openexi.scomp" target="classFrame">EXISchemaFactory</A>\r
+<BR>\r
+<A HREF="EXISchemaReader.html" title="class in org.openexi.scomp" target="classFrame">EXISchemaReader</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+\r
+\r
+<TABLE BORDER="0" WIDTH="100%" SUMMARY="">\r
+<TR>\r
+<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">\r
+Exceptions</FONT>&nbsp;\r
+<FONT CLASS="FrameItemFont">\r
+<BR>\r
+<A HREF="EXISchemaFactoryException.html" title="class in org.openexi.scomp" target="classFrame">EXISchemaFactoryException</A></FONT></TD>\r
+</TR>\r
+</TABLE>\r
+\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/scomp/package-summary.html b/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/scomp/package-summary.html
new file mode 100644 (file)
index 0000000..a35b92a
--- /dev/null
@@ -0,0 +1,222 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:58 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+org.openexi.scomp\r
+</TITLE>\r
+\r
+<META NAME="keywords" CONTENT="org.openexi.scomp package">\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">\r
+\r
+<SCRIPT type="text/javascript">\r
+function windowTitle()\r
+{\r
+    parent.document.title="org.openexi.scomp";\r
+}\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+</NOSCRIPT>\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white" onload="windowTitle();">\r
+\r
+\r
+<!-- ========= START OF TOP NAVBAR ======= -->\r
+<A NAME="navbar_top"><!-- --></A>\r
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_top_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../org/openexi/schema/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;\r
+&nbsp;NEXT PACKAGE</FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../index.html?org/openexi/scomp/package-summary.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_top"></A>\r
+<!-- ========= END OF TOP NAVBAR ========= -->\r
+\r
+<HR>\r
+<H2>\r
+Package org.openexi.scomp\r
+</H2>\r
+\r
+<tr valign="top" cellpadding="3" border="0">\r
+\r
+The <code>scomp</code> (schema compiler) package contains the EXISchemaFactory, which is used to compile XML Schema Documents (XSDs) to EXISchemas.\r
+<P>\r
+<B>See:</B>\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<A HREF="#package_description"><B>Description</B></A>\r
+<P>\r
+\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Interface Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD WIDTH="15%"><B><A HREF="../../../org/openexi/scomp/EntityResolverEx.html" title="interface in org.openexi.scomp">EntityResolverEx</A></B></TD>\r
+<TD>Extended SAX EntityResolver interface for resolving entities and
+ schema documents.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD WIDTH="15%"><B><A HREF="../../../org/openexi/scomp/EXISchemaFactoryErrorHandler.html" title="interface in org.openexi.scomp">EXISchemaFactoryErrorHandler</A></B></TD>\r
+<TD>This interface reports exceptions from EXISchemaFactory during schema 
+ processing.</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+\r
+<P>\r
+\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Class Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD WIDTH="15%"><B><A HREF="../../../org/openexi/scomp/EXISchemaFactory.html" title="class in org.openexi.scomp">EXISchemaFactory</A></B></TD>\r
+<TD>EXISchemaFactory compiles XML Schema into an EXISchema instance.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD WIDTH="15%"><B><A HREF="../../../org/openexi/scomp/EXISchemaReader.html" title="class in org.openexi.scomp">EXISchemaReader</A></B></TD>\r
+<TD>EXISchemaReader parses EXI-encoded EXI Grammar into an EXISchema.</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+\r
+<P>\r
+\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Exception Summary</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD WIDTH="15%"><B><A HREF="../../../org/openexi/scomp/EXISchemaFactoryException.html" title="class in org.openexi.scomp">EXISchemaFactoryException</A></B></TD>\r
+<TD>Any errors encountered during schema compilation are communicated to
+ an application as EXISchemaFactoryException objects.</TD>\r
+</TR>\r
+</TABLE>\r
+&nbsp;\r
+\r
+<P>\r
+<A NAME="package_description"><!-- --></A><H2>\r
+Package org.openexi.scomp Description\r
+</H2>\r
+\r
+<P>\r
+<table>\r
+<tr valign="top" cellpadding="3" border="0">\r
+<td>\r
+<p>The <code>scomp</code> (schema compiler) package contains the EXISchemaFactory, which is used to compile XML Schema Documents (XSDs) to EXISchemas. Developers can implement the interface <code>EXISchemaFactoryErrorHandler</code> to capture and report runtime exceptions from EXISchemaFactory.\r
+</p>\r
+</td>\r
+<td width="385">\r
+<img src="http://openexi.sourceforge.net/images/OpenEXI_Architecture_SComp.PNG" width="375" height="280" />\r
+</td>\r
+</tr>\r
+</table>\r
+</p>\r
+<P>\r
+\r
+<P>\r
+<DL>\r
+<!-- yWorks UML Doclet   http://www.yworks.com/   b0ac8294d3f86ae0003f3a3a002ea3cf577df824efc6f2... -->
+</DL>\r
+<HR>\r
+\r
+\r
+<!-- ======= START OF BOTTOM NAVBAR ====== -->\r
+<A NAME="navbar_bottom"><!-- --></A>\r
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_bottom_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../org/openexi/schema/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;\r
+&nbsp;NEXT PACKAGE</FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../index.html?org/openexi/scomp/package-summary.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_bottom"></A>\r
+<!-- ======== END OF BOTTOM NAVBAR ======= -->\r
+\r
+<HR>\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/scomp/package-tree.html b/third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/scomp/package-tree.html
new file mode 100644 (file)
index 0000000..93d1752
--- /dev/null
@@ -0,0 +1,162 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:58 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+org.openexi.scomp Class Hierarchy\r
+</TITLE>\r
+\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">\r
+\r
+<SCRIPT type="text/javascript">\r
+function windowTitle()\r
+{\r
+    parent.document.title="org.openexi.scomp Class Hierarchy";\r
+}\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+</NOSCRIPT>\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white" onload="windowTitle();">\r
+\r
+\r
+<!-- ========= START OF TOP NAVBAR ======= -->\r
+<A NAME="navbar_top"><!-- --></A>\r
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_top_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../org/openexi/schema/package-tree.html"><B>PREV</B></A>&nbsp;\r
+&nbsp;NEXT</FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../index.html?org/openexi/scomp/package-tree.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_top"></A>\r
+<!-- ========= END OF TOP NAVBAR ========= -->\r
+\r
+<HR>\r
+<CENTER>\r
+<H2>\r
+Hierarchy For Package org.openexi.scomp\r
+</H2>\r
+</CENTER>\r
+<DL>\r
+<DT><B>Package Hierarchies:</B><DD><A HREF="../../../overview-tree.html">All Packages</A></DL>\r
+<HR>\r
+<H2>\r
+Class Hierarchy\r
+</H2>\r
+<UL>\r
+<LI TYPE="circle">java.lang.Object<UL>\r
+<LI TYPE="circle">EXISchemaStruct<UL>\r
+<LI TYPE="circle">org.openexi.scomp.<A HREF="../../../org/openexi/scomp/EXISchemaFactory.html" title="class in org.openexi.scomp"><B>EXISchemaFactory</B></A><LI TYPE="circle">org.openexi.scomp.<A HREF="../../../org/openexi/scomp/EXISchemaReader.html" title="class in org.openexi.scomp"><B>EXISchemaReader</B></A></UL>\r
+<LI TYPE="circle">java.lang.Throwable (implements java.io.Serializable)\r
+<UL>\r
+<LI TYPE="circle">java.lang.Exception<UL>\r
+<LI TYPE="circle">org.openexi.scomp.<A HREF="../../../org/openexi/scomp/EXISchemaFactoryException.html" title="class in org.openexi.scomp"><B>EXISchemaFactoryException</B></A></UL>\r
+</UL>\r
+</UL>\r
+</UL>\r
+<H2>\r
+Interface Hierarchy\r
+</H2>\r
+<UL>\r
+<LI TYPE="circle">org.xml.sax.EntityResolver<UL>\r
+<LI TYPE="circle">org.openexi.scomp.<A HREF="../../../org/openexi/scomp/EntityResolverEx.html" title="interface in org.openexi.scomp"><B>EntityResolverEx</B></A></UL>\r
+<LI TYPE="circle">org.openexi.scomp.<A HREF="../../../org/openexi/scomp/EXISchemaFactoryErrorHandler.html" title="interface in org.openexi.scomp"><B>EXISchemaFactoryErrorHandler</B></A></UL>\r
+<HR>\r
+\r
+\r
+<!-- ======= START OF BOTTOM NAVBAR ====== -->\r
+<A NAME="navbar_bottom"><!-- --></A>\r
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_bottom_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;<A HREF="../../../org/openexi/schema/package-tree.html"><B>PREV</B></A>&nbsp;\r
+&nbsp;NEXT</FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="../../../index.html?org/openexi/scomp/package-tree.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_bottom"></A>\r
+<!-- ======== END OF BOTTOM NAVBAR ======= -->\r
+\r
+<HR>\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/overview-frame.html b/third-party/org.openexi/nagasena/src/main/resources/doc/overview-frame.html
new file mode 100644 (file)
index 0000000..045191d
--- /dev/null
@@ -0,0 +1,55 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:58 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+Overview\r
+</TITLE>\r
+\r
+<META NAME="keywords" CONTENT="Overview, OpenEXI Nagasena">\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">\r
+\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white">\r
+\r
+<TABLE BORDER="0" WIDTH="100%" SUMMARY="">\r
+<TR>\r
+<TH ALIGN="left" NOWRAP><FONT size="+1" CLASS="FrameTitleFont">\r
+<B></B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<TABLE BORDER="0" WIDTH="100%" SUMMARY="">\r
+<TR>\r
+<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="allclasses-frame.html" target="packageFrame">All Classes</A></FONT>\r
+<P>\r
+<FONT size="+1" CLASS="FrameHeadingFont">\r
+Packages</FONT>\r
+<BR>\r
+<FONT CLASS="FrameItemFont"><A HREF="org/openexi/proc/package-frame.html" target="packageFrame">org.openexi.proc</A></FONT>\r
+<BR>\r
+<FONT CLASS="FrameItemFont"><A HREF="org/openexi/proc/common/package-frame.html" target="packageFrame">org.openexi.proc.common</A></FONT>\r
+<BR>\r
+<FONT CLASS="FrameItemFont"><A HREF="org/openexi/proc/grammars/package-frame.html" target="packageFrame">org.openexi.proc.grammars</A></FONT>\r
+<BR>\r
+<FONT CLASS="FrameItemFont"><A HREF="org/openexi/proc/io/package-frame.html" target="packageFrame">org.openexi.proc.io</A></FONT>\r
+<BR>\r
+<FONT CLASS="FrameItemFont"><A HREF="org/openexi/sax/package-frame.html" target="packageFrame">org.openexi.sax</A></FONT>\r
+<BR>\r
+<FONT CLASS="FrameItemFont"><A HREF="org/openexi/schema/package-frame.html" target="packageFrame">org.openexi.schema</A></FONT>\r
+<BR>\r
+<FONT CLASS="FrameItemFont"><A HREF="org/openexi/scomp/package-frame.html" target="packageFrame">org.openexi.scomp</A></FONT>\r
+<BR>\r
+</TD>\r
+</TR>\r
+</TABLE>\r
+\r
+<P>\r
+&nbsp;\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/overview-summary.html b/third-party/org.openexi/nagasena/src/main/resources/doc/overview-summary.html
new file mode 100644 (file)
index 0000000..1a299fd
--- /dev/null
@@ -0,0 +1,227 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:59 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+Overview\r
+</TITLE>\r
+\r
+<META NAME="keywords" CONTENT="Overview, OpenEXI Nagasena">\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">\r
+\r
+<SCRIPT type="text/javascript">\r
+function windowTitle()\r
+{\r
+    parent.document.title="Overview";\r
+}\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+</NOSCRIPT>\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white" onload="windowTitle();">\r
+\r
+\r
+<!-- ========= START OF TOP NAVBAR ======= -->\r
+<A NAME="navbar_top"><!-- --></A>\r
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_top_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Overview</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;PREV&nbsp;\r
+&nbsp;NEXT</FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="index.html?overview-summary.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="overview-summary.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_top"></A>\r
+<!-- ========= END OF TOP NAVBAR ========= -->\r
+\r
+<HR>\r
+<CENTER>\r
+<H1>\r
+OpenEXI Nagasena\r
+</H1>\r
+</CENTER>\r
+\r
+<tr valign="top" cellpadding="3" border="0">\r
+\r
+OpenEXI is a W3C open source API for converting XML files to the Efficient XML Interchange format (EXI).\r
+<P>\r
+<B>See:</B>\r
+<BR>\r
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<A HREF="#overview_description"><B>Description</B></A>\r
+<P>\r
+\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Packages</B></FONT></TH>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD WIDTH="20%"><B><A HREF="org/openexi/proc/package-summary.html">org.openexi.proc</A></B></TD>\r
+<TD>\r
+<tr valign="top" cellpadding="3" border="0">\r
+\r
+The Proc (Processor) package contains the EXIDecoder, which is used to convert EXI streams to XML format.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD WIDTH="20%"><B><A HREF="org/openexi/proc/common/package-summary.html">org.openexi.proc.common</A></B></TD>\r
+<TD>\r
+<tr valign="top" cellpadding="3" border="0">\r
+\r
+The common package contains classes, interfaces, and enumerators that define the vocabulary used to describe EXI streams (events, options, alignment, and character string values).</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD WIDTH="20%"><B><A HREF="org/openexi/proc/grammars/package-summary.html">org.openexi.proc.grammars</A></B></TD>\r
+<TD>\r
+<tr valign="top" cellpadding="3" border="0">\r
+\r
+The grammars package contains the GrammarCache, which combines an XML Schema Definition with EXI grammar options to create an EXI Schema.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD WIDTH="20%"><B><A HREF="org/openexi/proc/io/package-summary.html">org.openexi.proc.io</A></B></TD>\r
+<TD>\r
+<tr valign="top" cellpadding="3" border="0">\r
+\r
+The IO package contains the Scanner, which is used by <code>EXIDecoder</code> to read and interpret EXI streams.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD WIDTH="20%"><B><A HREF="org/openexi/sax/package-summary.html">org.openexi.sax</A></B></TD>\r
+<TD>\r
+<tr valign="top" cellpadding="3" border="0">\r
+\r
+The SAX package contains the <code>Transmogrifier</code>, which encodes an XML file to an EXI stream, and the <code>EXIReader</code>, which restores an EXI stream to its logical XML equivalent.</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD WIDTH="20%"><B><A HREF="org/openexi/schema/package-summary.html">org.openexi.schema</A></B></TD>\r
+<TD>\r
+<tr valign="top" cellpadding="3" border="0">\r
+\r
+The schema package contains classes that are used to represent XML Schema Documents (XSDs).</TD>\r
+</TR>\r
+<TR BGCOLOR="white" CLASS="TableRowColor">\r
+<TD WIDTH="20%"><B><A HREF="org/openexi/scomp/package-summary.html">org.openexi.scomp</A></B></TD>\r
+<TD>\r
+<tr valign="top" cellpadding="3" border="0">\r
+\r
+The <code>scomp</code> (schema compiler) package contains the EXISchemaFactory, which is used to compile XML Schema Documents (XSDs) to EXISchemas.</TD>\r
+</TR>\r
+</TABLE>\r
+\r
+<P>\r
+&nbsp;<A NAME="overview_description"><!-- --></A>\r
+<P>\r
+<table>\r
+<tr valign="top" cellpadding="3" border="0">\r
+<td>\r
+<p>OpenEXI is a W3C open source API for converting XML files to the Efficient XML Interchange format (EXI).\r
+</p>\r
+<p>You can learn more about OpenEXI by visiting the OpenEXI homepage at <a href="http://openexi.sourceforge.net" target="_blank">openexi.sourceforge.net</a>.\r
+</td>\r
+<td width="385">\r
+<img src="http://openexi.sourceforge.net/images/OpenEXI_Architecture.PNG" width="375" height="280" />\r
+</td>\r
+</tr>\r
+</table>\r
+</p>\r
+<P>\r
+\r
+<P>\r
+<DL>\r
+<!-- yWorks UML Doclet   http://www.yworks.com/   b0ac8294d3f86ae0003f3a3a002ea3cf577df824efc6f2... -->
+</DL>\r
+<HR>\r
+\r
+\r
+<!-- ======= START OF BOTTOM NAVBAR ====== -->\r
+<A NAME="navbar_bottom"><!-- --></A>\r
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_bottom_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Overview</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;PREV&nbsp;\r
+&nbsp;NEXT</FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="index.html?overview-summary.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="overview-summary.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_bottom"></A>\r
+<!-- ======== END OF BOTTOM NAVBAR ======= -->\r
+\r
+<HR>\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/overview-tree.html b/third-party/org.openexi/nagasena/src/main/resources/doc/overview-tree.html
new file mode 100644 (file)
index 0000000..8409fdb
--- /dev/null
@@ -0,0 +1,190 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:58 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+Class Hierarchy\r
+</TITLE>\r
+\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">\r
+\r
+<SCRIPT type="text/javascript">\r
+function windowTitle()\r
+{\r
+    parent.document.title="Class Hierarchy";\r
+}\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+</NOSCRIPT>\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white" onload="windowTitle();">\r
+\r
+\r
+<!-- ========= START OF TOP NAVBAR ======= -->\r
+<A NAME="navbar_top"><!-- --></A>\r
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_top_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;PREV&nbsp;\r
+&nbsp;NEXT</FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="index.html?overview-tree.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="overview-tree.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_top"></A>\r
+<!-- ========= END OF TOP NAVBAR ========= -->\r
+\r
+<HR>\r
+<CENTER>\r
+<H2>\r
+Hierarchy For All Packages</H2>\r
+</CENTER>\r
+<DL>\r
+<DT><B>Package Hierarchies:</B><DD><A HREF="org/openexi/proc/package-tree.html">org.openexi.proc</A>, <A HREF="org/openexi/proc/common/package-tree.html">org.openexi.proc.common</A>, <A HREF="org/openexi/proc/grammars/package-tree.html">org.openexi.proc.grammars</A>, <A HREF="org/openexi/proc/io/package-tree.html">org.openexi.proc.io</A>, <A HREF="org/openexi/sax/package-tree.html">org.openexi.sax</A>, <A HREF="org/openexi/schema/package-tree.html">org.openexi.schema</A>, <A HREF="org/openexi/scomp/package-tree.html">org.openexi.scomp</A></DL>\r
+<HR>\r
+<H2>\r
+Class Hierarchy\r
+</H2>\r
+<UL>\r
+<LI TYPE="circle">java.lang.Object<UL>\r
+<LI TYPE="circle">org.openexi.proc.grammars.Apparatus<UL>\r
+<LI TYPE="circle">org.openexi.proc.io.<A HREF="org/openexi/proc/io/Scanner.html" title="class in org.openexi.proc.io"><B>Scanner</B></A></UL>\r
+<LI TYPE="circle">org.openexi.proc.common.<A HREF="org/openexi/proc/common/BinaryDataSource.html" title="class in org.openexi.proc.common"><B>BinaryDataSource</B></A><LI TYPE="circle">org.openexi.proc.io.<A HREF="org/openexi/proc/io/CharacterBuffer.html" title="class in org.openexi.proc.io"><B>CharacterBuffer</B></A><LI TYPE="circle">org.openexi.schema.<A HREF="org/openexi/schema/Characters.html" title="class in org.openexi.schema"><B>Characters</B></A><LI TYPE="circle">org.openexi.schema.<A HREF="org/openexi/schema/EmptySchema.html" title="class in org.openexi.schema"><B>EmptySchema</B></A><LI TYPE="circle">org.openexi.proc.common.EventCode<UL>\r
+<LI TYPE="circle">org.openexi.proc.common.<A HREF="org/openexi/proc/common/EventType.html" title="class in org.openexi.proc.common"><B>EventType</B></A> (implements org.openexi.proc.common.<A HREF="org/openexi/proc/common/EventDescription.html" title="interface in org.openexi.proc.common">EventDescription</A>)\r
+</UL>\r
+<LI TYPE="circle">org.openexi.proc.<A HREF="org/openexi/proc/EXIDecoder.html" title="class in org.openexi.proc"><B>EXIDecoder</B></A><LI TYPE="circle">org.openexi.proc.common.<A HREF="org/openexi/proc/common/EXIOptions.html" title="class in org.openexi.proc.common"><B>EXIOptions</B></A><LI TYPE="circle">org.openexi.schema.<A HREF="org/openexi/schema/EXISchema.html" title="class in org.openexi.schema"><B>EXISchema</B></A><LI TYPE="circle">EXISchemaStruct<UL>\r
+<LI TYPE="circle">org.openexi.scomp.<A HREF="org/openexi/scomp/EXISchemaFactory.html" title="class in org.openexi.scomp"><B>EXISchemaFactory</B></A><LI TYPE="circle">org.openexi.scomp.<A HREF="org/openexi/scomp/EXISchemaReader.html" title="class in org.openexi.scomp"><B>EXISchemaReader</B></A></UL>\r
+<LI TYPE="circle">org.openexi.proc.grammars.<A HREF="org/openexi/proc/grammars/GrammarCache.html" title="class in org.openexi.proc.grammars"><B>GrammarCache</B></A> (implements org.openexi.proc.common.IGrammarCache)\r
+<LI TYPE="circle">org.openexi.proc.common.<A HREF="org/openexi/proc/common/GrammarOptions.html" title="class in org.openexi.proc.common"><B>GrammarOptions</B></A><LI TYPE="circle">org.openexi.proc.common.<A HREF="org/openexi/proc/common/QName.html" title="class in org.openexi.proc.common"><B>QName</B></A><LI TYPE="circle">org.openexi.sax.<A HREF="org/openexi/sax/ReaderSupport.html" title="class in org.openexi.sax"><B>ReaderSupport</B></A> (implements org.xml.sax.Attributes)\r
+<UL>\r
+<LI TYPE="circle">org.openexi.sax.<A HREF="org/openexi/sax/EXIReader.html" title="class in org.openexi.sax"><B>EXIReader</B></A> (implements org.xml.sax.XMLReader)\r
+</UL>\r
+<LI TYPE="circle">java.lang.Throwable (implements java.io.Serializable)\r
+<UL>\r
+<LI TYPE="circle">java.lang.Exception<UL>\r
+<LI TYPE="circle">org.openexi.scomp.<A HREF="org/openexi/scomp/EXISchemaFactoryException.html" title="class in org.openexi.scomp"><B>EXISchemaFactoryException</B></A><LI TYPE="circle">org.openexi.sax.<A HREF="org/openexi/sax/TransmogrifierException.html" title="class in org.openexi.sax"><B>TransmogrifierException</B></A></UL>\r
+</UL>\r
+<LI TYPE="circle">org.openexi.sax.<A HREF="org/openexi/sax/Transmogrifier.html" title="class in org.openexi.sax"><B>Transmogrifier</B></A></UL>\r
+</UL>\r
+<H2>\r
+Interface Hierarchy\r
+</H2>\r
+<UL>\r
+<LI TYPE="circle">org.openexi.sax.<A HREF="org/openexi/sax/BinaryDataHandler.html" title="interface in org.openexi.sax"><B>BinaryDataHandler</B></A><UL>\r
+<LI TYPE="circle">org.openexi.sax.<A HREF="org/openexi/sax/SAXTransmogrifier.html" title="interface in org.openexi.sax"><B>SAXTransmogrifier</B></A> (also extends org.xml.sax.ContentHandler, org.xml.sax.ext.LexicalHandler)\r
+</UL>\r
+<LI TYPE="circle">org.openexi.proc.io.<A HREF="org/openexi/proc/io/BinaryDataSink.html" title="interface in org.openexi.proc.io"><B>BinaryDataSink</B></A><LI TYPE="circle">org.xml.sax.ContentHandler<UL>\r
+<LI TYPE="circle">org.openexi.sax.<A HREF="org/openexi/sax/SAXTransmogrifier.html" title="interface in org.openexi.sax"><B>SAXTransmogrifier</B></A> (also extends org.openexi.sax.<A HREF="org/openexi/sax/BinaryDataHandler.html" title="interface in org.openexi.sax">BinaryDataHandler</A>, org.xml.sax.ext.LexicalHandler)\r
+</UL>\r
+<LI TYPE="circle">org.xml.sax.EntityResolver<UL>\r
+<LI TYPE="circle">org.openexi.scomp.<A HREF="org/openexi/scomp/EntityResolverEx.html" title="interface in org.openexi.scomp"><B>EntityResolverEx</B></A></UL>\r
+<LI TYPE="circle">org.openexi.proc.common.<A HREF="org/openexi/proc/common/EventDescription.html" title="interface in org.openexi.proc.common"><B>EventDescription</B></A><LI TYPE="circle">org.openexi.scomp.<A HREF="org/openexi/scomp/EXISchemaFactoryErrorHandler.html" title="interface in org.openexi.scomp"><B>EXISchemaFactoryErrorHandler</B></A><LI TYPE="circle">org.openexi.proc.<A HREF="org/openexi/proc/EXISchemaResolver.html" title="interface in org.openexi.proc"><B>EXISchemaResolver</B></A><LI TYPE="circle">org.xml.sax.ext.LexicalHandler<UL>\r
+<LI TYPE="circle">org.openexi.sax.<A HREF="org/openexi/sax/SAXTransmogrifier.html" title="interface in org.openexi.sax"><B>SAXTransmogrifier</B></A> (also extends org.openexi.sax.<A HREF="org/openexi/sax/BinaryDataHandler.html" title="interface in org.openexi.sax">BinaryDataHandler</A>, org.xml.sax.ContentHandler)\r
+</UL>\r
+</UL>\r
+<H2>\r
+Enum Hierarchy\r
+</H2>\r
+<UL>\r
+<LI TYPE="circle">java.lang.Object<UL>\r
+<LI TYPE="circle">java.lang.Enum&lt;E&gt; (implements java.lang.Comparable&lt;T&gt;, java.io.Serializable)\r
+<UL>\r
+<LI TYPE="circle">org.openexi.proc.<A HREF="org/openexi/proc/HeaderOptionsOutputType.html" title="enum in org.openexi.proc"><B>HeaderOptionsOutputType</B></A><LI TYPE="circle">org.openexi.proc.common.<A HREF="org/openexi/proc/common/AlignmentType.html" title="enum in org.openexi.proc.common"><B>AlignmentType</B></A></UL>\r
+</UL>\r
+</UL>\r
+<HR>\r
+\r
+\r
+<!-- ======= START OF BOTTOM NAVBAR ====== -->\r
+<A NAME="navbar_bottom"><!-- --></A>\r
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_bottom_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;PREV&nbsp;\r
+&nbsp;NEXT</FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="index.html?overview-tree.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="overview-tree.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_bottom"></A>\r
+<!-- ======== END OF BOTTOM NAVBAR ======= -->\r
+\r
+<HR>\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/package-list b/third-party/org.openexi/nagasena/src/main/resources/doc/package-list
new file mode 100644 (file)
index 0000000..746aadc
--- /dev/null
@@ -0,0 +1,7 @@
+org.openexi.proc\r
+org.openexi.proc.common\r
+org.openexi.proc.grammars\r
+org.openexi.proc.io\r
+org.openexi.sax\r
+org.openexi.schema\r
+org.openexi.scomp\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/resources/inherit.gif b/third-party/org.openexi/nagasena/src/main/resources/doc/resources/inherit.gif
new file mode 100644 (file)
index 0000000..c814867
Binary files /dev/null and b/third-party/org.openexi/nagasena/src/main/resources/doc/resources/inherit.gif differ
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/serialized-form.html b/third-party/org.openexi/nagasena/src/main/resources/doc/serialized-form.html
new file mode 100644 (file)
index 0000000..c3688f5
--- /dev/null
@@ -0,0 +1,269 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<!--NewPage-->\r
+<HTML>\r
+<HEAD>\r
+<!-- Generated by javadoc (build 1.5.0_22) on Thu Apr 10 14:54:58 PDT 2014 -->\r
+<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">\r
+<TITLE>\r
+Serialized Form\r
+</TITLE>\r
+\r
+\r
+<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">\r
+\r
+<SCRIPT type="text/javascript">\r
+function windowTitle()\r
+{\r
+    parent.document.title="Serialized Form";\r
+}\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+</NOSCRIPT>\r
+\r
+</HEAD>\r
+\r
+<BODY BGCOLOR="white" onload="windowTitle();">\r
+\r
+\r
+<!-- ========= START OF TOP NAVBAR ======= -->\r
+<A NAME="navbar_top"><!-- --></A>\r
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_top_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;PREV&nbsp;\r
+&nbsp;NEXT</FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="index.html?serialized-form.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="serialized-form.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_top"></A>\r
+<!-- ========= END OF TOP NAVBAR ========= -->\r
+\r
+<HR>\r
+<CENTER>\r
+<H1>\r
+Serialized Form</H1>\r
+</CENTER>\r
+<HR SIZE="4" NOSHADE>\r
+\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">\r
+<TH ALIGN="center"><FONT SIZE="+2">\r
+<B>Package</B> <B>org.openexi.sax</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<P>\r
+<A NAME="org.openexi.sax.TransmogrifierException"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Class <A HREF="org/openexi/sax/TransmogrifierException.html" title="class in org.openexi.sax">org.openexi.sax.TransmogrifierException</A> extends java.lang.Exception implements Serializable</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<P>\r
+<B>serialVersionUID:&nbsp;</B>-4536662596727577640L\r
+\r
+<P>\r
+<A NAME="serializedForm"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">\r
+<B>Serialized Fields</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<H3>\r
+m_code</H3>\r
+<PRE>\r
+int <B>m_code</B></PRE>\r
+<DL>\r
+<DL>\r
+</DL>\r
+</DL>\r
+<HR>\r
+<H3>\r
+m_message</H3>\r
+<PRE>\r
+java.lang.String <B>m_message</B></PRE>\r
+<DL>\r
+<DL>\r
+</DL>\r
+</DL>\r
+<HR>\r
+<H3>\r
+m_exception</H3>\r
+<PRE>\r
+java.lang.Exception <B>m_exception</B></PRE>\r
+<DL>\r
+<DL>\r
+</DL>\r
+</DL>\r
+<HR>\r
+<H3>\r
+m_locator</H3>\r
+<PRE>\r
+org.xml.sax.Locator <B>m_locator</B></PRE>\r
+<DL>\r
+<DL>\r
+</DL>\r
+</DL>\r
+<HR SIZE="4" NOSHADE>\r
+\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">\r
+<TH ALIGN="center"><FONT SIZE="+2">\r
+<B>Package</B> <B>org.openexi.scomp</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<P>\r
+<A NAME="org.openexi.scomp.EXISchemaFactoryException"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">\r
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">\r
+<B>Class <A HREF="org/openexi/scomp/EXISchemaFactoryException.html" title="class in org.openexi.scomp">org.openexi.scomp.EXISchemaFactoryException</A> extends java.lang.Exception implements Serializable</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<P>\r
+<B>serialVersionUID:&nbsp;</B>3816521974819647026L\r
+\r
+<P>\r
+<A NAME="serializedForm"><!-- --></A>\r
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">\r
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">\r
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">\r
+<B>Serialized Fields</B></FONT></TH>\r
+</TR>\r
+</TABLE>\r
+\r
+<H3>\r
+m_code</H3>\r
+<PRE>\r
+int <B>m_code</B></PRE>\r
+<DL>\r
+<DL>\r
+</DL>\r
+</DL>\r
+<HR>\r
+<H3>\r
+m_message</H3>\r
+<PRE>\r
+java.lang.String <B>m_message</B></PRE>\r
+<DL>\r
+<DL>\r
+</DL>\r
+</DL>\r
+<HR>\r
+<H3>\r
+m_exception</H3>\r
+<PRE>\r
+java.lang.Exception <B>m_exception</B></PRE>\r
+<DL>\r
+<DL>\r
+</DL>\r
+</DL>\r
+<HR>\r
+<H3>\r
+m_locator</H3>\r
+<PRE>\r
+org.xml.sax.Locator <B>m_locator</B></PRE>\r
+<DL>\r
+<DL>\r
+</DL>\r
+</DL>\r
+\r
+<P>\r
+<HR>\r
+\r
+\r
+<!-- ======= START OF BOTTOM NAVBAR ====== -->\r
+<A NAME="navbar_bottom"><!-- --></A>\r
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>\r
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">\r
+<TR>\r
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">\r
+<A NAME="navbar_bottom_firstrow"><!-- --></A>\r
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">\r
+  <TR ALIGN="center" VALIGN="top">\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>\r
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>\r
+  </TR>\r
+</TABLE>\r
+</TD>\r
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>\r
+</EM>\r
+</TD>\r
+</TR>\r
+\r
+<TR>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+&nbsp;PREV&nbsp;\r
+&nbsp;NEXT</FONT></TD>\r
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">\r
+  <A HREF="index.html?serialized-form.html" target="_top"><B>FRAMES</B></A>  &nbsp;\r
+&nbsp;<A HREF="serialized-form.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;\r
+&nbsp;<SCRIPT type="text/javascript">\r
+  <!--\r
+  if(window==top) {\r
+    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');\r
+  }\r
+  //-->\r
+</SCRIPT>\r
+<NOSCRIPT>\r
+  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>\r
+</NOSCRIPT>\r
+\r
+\r
+</FONT></TD>\r
+</TR>\r
+</TABLE>\r
+<A NAME="skip-navbar_bottom"></A>\r
+<!-- ======== END OF BOTTOM NAVBAR ======= -->\r
+\r
+<HR>\r
+\r
+</BODY>\r
+</HTML>\r
diff --git a/third-party/org.openexi/nagasena/src/main/resources/doc/stylesheet.css b/third-party/org.openexi/nagasena/src/main/resources/doc/stylesheet.css
new file mode 100644 (file)
index 0000000..14c3737
--- /dev/null
@@ -0,0 +1,29 @@
+/* Javadoc style sheet */\r
+\r
+/* Define colors, fonts and other style attributes here to override the defaults */\r
+\r
+/* Page background color */\r
+body { background-color: #FFFFFF }\r
+\r
+/* Headings */\r
+h1 { font-size: 145% }\r
+\r
+/* Table colors */\r
+.TableHeadingColor     { background: #CCCCFF } /* Dark mauve */\r
+.TableSubHeadingColor  { background: #EEEEFF } /* Light mauve */\r
+.TableRowColor         { background: #FFFFFF } /* White */\r
+\r
+/* Font used in left-hand frame lists */\r
+.FrameTitleFont   { font-size: 100%; font-family: Helvetica, Arial, sans-serif }\r
+.FrameHeadingFont { font-size:  90%; font-family: Helvetica, Arial, sans-serif }\r
+.FrameItemFont    { font-size:  90%; font-family: Helvetica, Arial, sans-serif }\r
+\r
+/* Navigation bar fonts and colors */\r
+.NavBarCell1    { background-color:#EEEEFF;} /* Light mauve */\r
+.NavBarCell1Rev { background-color:#00008B;} /* Dark Blue */\r
+.NavBarFont1    { font-family: Arial, Helvetica, sans-serif; color:#000000;}\r
+.NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;}\r
+\r
+.NavBarCell2    { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;}\r
+.NavBarCell3    { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;}\r
+\r
diff --git a/third-party/org.openexi/pom.xml b/third-party/org.openexi/pom.xml
new file mode 100644 (file)
index 0000000..d623ef8
--- /dev/null
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- vi: set et smarttab sw=4 tabstop=4: -->
+<!--
+ Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
+
+ This program and the accompanying materials are made available under the
+ terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ and is available at http://www.eclipse.org/legal/epl-v10.html
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.opendaylight.controller</groupId>
+        <artifactId>commons.thirdparty</artifactId>
+        <version>1.1.2-SNAPSHOT</version>
+        <relativePath>../commons/thirdparty</relativePath>
+    </parent>
+
+    <groupId>org.opendaylight.controller.thirdparty</groupId>
+    <artifactId>org.openexi</artifactId>
+    <version>0000.0002.0035.0-SNAPSHOT</version>
+    <packaging>pom</packaging>
+    <prerequisites>
+        <maven>3.0.4</maven>
+    </prerequisites>
+
+    <modules>
+        <module>nagasena</module>
+        <module>nagasena-rta</module>
+    </modules>
+
+    <build>
+        <pluginManagement>
+            <plugins>
+                <plugin>
+                    <groupId>org.codehaus.mojo</groupId>
+                    <artifactId>truezip-maven-plugin</artifactId>
+                    <version>1.1</version>
+                </plugin>
+                <plugin>
+                    <groupId>org.apache.felix</groupId>
+                    <artifactId>maven-bundle-plugin</artifactId>
+                    <version>2.4.0</version>
+                </plugin>
+            </plugins>
+        </pluginManagement>
+    </build>
+</project>
+