Merge "Bug 809: Enhancements to the toaster example"
authorTony Tkacik <ttkacik@cisco.com>
Tue, 13 May 2014 13:52:24 +0000 (13:52 +0000)
committerGerrit Code Review <gerrit@opendaylight.org>
Tue, 13 May 2014 13:52:24 +0000 (13:52 +0000)
620 files changed:
opendaylight/appauth/pom.xml
opendaylight/arphandler/pom.xml
opendaylight/clustering/services/pom.xml
opendaylight/clustering/services/src/main/java/org/opendaylight/controller/clustering/services/CacheConfigException.java
opendaylight/clustering/services/src/main/java/org/opendaylight/controller/clustering/services/CacheExistException.java
opendaylight/clustering/services/src/main/java/org/opendaylight/controller/clustering/services/CacheListenerAddException.java
opendaylight/clustering/services/src/main/java/org/opendaylight/controller/clustering/services/ListenRoleChangeAddException.java
opendaylight/clustering/services_implementation/pom.xml
opendaylight/clustering/stub/pom.xml
opendaylight/clustering/test/pom.xml
opendaylight/clustering/test/src/main/java/org/opendaylight/controller/clustering/test/internal/ComplexClass.java
opendaylight/clustering/test/src/main/java/org/opendaylight/controller/clustering/test/internal/ComplexClass1.java
opendaylight/clustering/test/src/main/java/org/opendaylight/controller/clustering/test/internal/ComplexContainer.java
opendaylight/clustering/test/src/main/java/org/opendaylight/controller/clustering/test/internal/StringContainer.java
opendaylight/commons/concepts/pom.xml
opendaylight/commons/httpclient/pom.xml
opendaylight/commons/opendaylight/pom.xml
opendaylight/commons/protocol-framework/src/main/java/org/opendaylight/protocol/framework/AbstractDispatcher.java
opendaylight/commons/protocol-framework/src/test/java/org/opendaylight/controller/config/yang/protocol/framework/NeverReconnectStrategyModuleTest.java
opendaylight/commons/protocol-framework/src/test/java/org/opendaylight/controller/config/yang/protocol/framework/ReconnectImmediatelyStrategyModuleTest.java
opendaylight/commons/protocol-framework/src/test/java/org/opendaylight/controller/config/yang/protocol/framework/TimedReconnectStrategyModuleTest.java
opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/CloseableServiceReferenceReadableRegistry.java
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-manager/src/main/java/org/opendaylight/controller/config/manager/impl/ConfigTransactionControllerInternal.java
opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/DeadlockMonitor.java
opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/ModuleInternalInfo.java
opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/SearchableServiceReferenceWritableRegistry.java [new file with mode: 0644]
opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/ServiceReferenceRegistryImpl.java
opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/dependencyresolver/DependencyResolverManager.java
opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/dependencyresolver/ModuleInternalTransactionalInfo.java
opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/factoriesresolver/HierarchicalConfigMBeanFactoriesHolder.java
opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/jmx/ServiceReference.java
opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/osgi/BeanToOsgiServiceManager.java
opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/util/InterfacesHelper.java
opendaylight/config/config-manager/src/test/java/org/opendaylight/controller/config/manager/ConfigRegistryImplTest.java
opendaylight/config/config-manager/src/test/java/org/opendaylight/controller/config/manager/impl/AbstractConfigTest.java
opendaylight/config/config-manager/src/test/java/org/opendaylight/controller/config/manager/impl/ConfigTransactionControllerImplTest.java
opendaylight/config/config-manager/src/test/java/org/opendaylight/controller/config/manager/impl/ConfigTransactionManagerImplTest.java
opendaylight/config/config-manager/src/test/java/org/opendaylight/controller/config/manager/impl/ServiceReferenceRegistryImplTest.java
opendaylight/config/config-manager/src/test/java/org/opendaylight/controller/config/manager/impl/dependencyresolver/DependencyResolverManagerTest.java
opendaylight/config/config-manager/src/test/java/org/opendaylight/controller/config/manager/impl/factoriesresolver/HardcodedModuleFactoriesResolver.java
opendaylight/config/config-manager/src/test/java/org/opendaylight/controller/config/manager/testingservices/parallelapsp/test/DependentWiringTest.java
opendaylight/config/config-manager/src/test/java/org/opendaylight/controller/config/manager/testingservices/parallelapsp/test/MockedDependenciesTest.java
opendaylight/config/config-manager/src/test/java/org/opendaylight/controller/config/manager/testingservices/scheduledthreadpool/test/AbstractScheduledTest.java
opendaylight/config/config-manager/src/test/java/org/opendaylight/controller/config/manager/testingservices/threadpool/TestingFixedThreadPool.java
opendaylight/config/config-manager/src/test/java/org/opendaylight/controller/config/manager/testingservices/threadpool/test/ShutdownTest.java [new file with mode: 0644]
opendaylight/config/config-manager/src/test/java/org/opendaylight/controller/config/manager/testingservices/threadpool/test/SimpleConfigurationTest.java
opendaylight/config/config-persister-api/src/main/java/org/opendaylight/controller/config/persist/api/PropertiesProvider.java
opendaylight/config/config-persister-api/src/test/java/org/opendaylight/controller/config/persist/test/PropertiesProviderTest.java
opendaylight/config/feature/pom.xml [new file with mode: 0644]
opendaylight/config/feature/src/main/resources/features.xml [new file with mode: 0644]
opendaylight/config/logback-config/src/test/java/org/opendaylight/controller/config/yang/logback/config/LogbackModuleTest.java
opendaylight/config/logback-config/src/test/java/org/opendaylight/controller/config/yang/logback/config/LogbackModuleWithInitialConfigurationTest.java
opendaylight/config/logback-config/src/test/java/org/opendaylight/controller/config/yang/logback/config/LogbackWithXmlConfigModuleTest.java
opendaylight/config/netconf-config-dispatcher/pom.xml [new file with mode: 0644]
opendaylight/config/netconf-config-dispatcher/src/main/java/org/opendaylight/controller/config/yang/config/netconf/client/dispatcher/NetconfClientDispatcherModule.java [new file with mode: 0644]
opendaylight/config/netconf-config-dispatcher/src/main/java/org/opendaylight/controller/config/yang/config/netconf/client/dispatcher/NetconfClientDispatcherModuleFactory.java [new file with mode: 0644]
opendaylight/config/netconf-config-dispatcher/src/main/yang/odl-netconf-cfg.yang [new file with mode: 0644]
opendaylight/config/netconf-config-dispatcher/src/main/yang/odl-netconfig-client-cfg.yang [new file with mode: 0644]
opendaylight/config/netty-config-api/src/main/yang/netty.yang
opendaylight/config/netty-event-executor-config/src/test/java/org/opendaylight/controller/config/yang/netty/eventexecutor/GlobalEventExecutorModuleTest.java
opendaylight/config/netty-threadgroup-config/src/test/java/org/opendaylight/controller/config/yang/netty/threadgroup/NettyThreadgroupModuleTest.java
opendaylight/config/pom.xml
opendaylight/config/shutdown-impl/src/main/java/org/opendaylight/controller/config/yang/shutdown/impl/ShutdownServiceImpl.java
opendaylight/config/shutdown-impl/src/test/java/org/opendaylight/controller/config/yang/shutdown/impl/ShutdownTest.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/SyncEventBusConfigBeanTest.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/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/scheduled/ScheduledThreadPoolConfigBeanTest.java
opendaylight/config/yang-jmx-generator-it/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/it/ITTest.java
opendaylight/config/yang-jmx-generator-plugin/pom.xml
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/model/ModuleFieldSerializer.java
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/gofactory/AbsFactoryGeneratedObjectFactory.groovy [deleted file]
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/gofactory/AbsFactoryGeneratedObjectFactory.java [new file with mode: 0644]
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/gofactory/AbsModuleGeneratedObjectFactory.groovy [deleted file]
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/gofactory/AbsModuleGeneratedObjectFactory.java [new file with mode: 0644]
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/gofactory/ConcreteModuleGeneratedObjectFactory.java
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/gofactory/GenericGeneratedObjectFactory.groovy [deleted file]
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/gofactory/GenericGeneratedObjectFactory.java [new file with mode: 0644]
opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/util/StringUtil.java
opendaylight/config/yang-jmx-generator-plugin/src/main/resources/copyright.txt [deleted file]
opendaylight/config/yang-jmx-generator-plugin/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/util/StringUtilTest.java
opendaylight/config/yang-test-plugin/src/main/java/org/opendaylight/controller/config/yang/test/plugin/ProcessSources.java
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/NetconfTestImplModuleUtil.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/config/yang-test/src/test/java/org/opendaylight/controller/config/yang/test/impl/NetconfTestImplModuleTest.java
opendaylight/configuration/api/pom.xml
opendaylight/configuration/implementation/pom.xml
opendaylight/connectionmanager/api/pom.xml
opendaylight/connectionmanager/implementation/pom.xml
opendaylight/containermanager/api/pom.xml
opendaylight/containermanager/implementation/pom.xml
opendaylight/containermanager/it.implementation/pom.xml
opendaylight/distribution/opendaylight-karaf/pom.xml [new file with mode: 0644]
opendaylight/distribution/opendaylight-karaf/src/main/resources/configuration/context.xml [new file with mode: 0644]
opendaylight/distribution/opendaylight-karaf/src/main/resources/configuration/initial/00-netty.xml [new file with mode: 0644]
opendaylight/distribution/opendaylight-karaf/src/main/resources/configuration/initial/01-md-sal.xml [new file with mode: 0644]
opendaylight/distribution/opendaylight-karaf/src/main/resources/configuration/initial/02-clustering.xml [new file with mode: 0644]
opendaylight/distribution/opendaylight-karaf/src/main/resources/configuration/initial/03-toaster-sample.xml [new file with mode: 0644]
opendaylight/distribution/opendaylight-karaf/src/main/resources/configuration/logback.xml [new file with mode: 0644]
opendaylight/distribution/opendaylight-karaf/src/main/resources/configuration/tomcat-logging.properties [new file with mode: 0644]
opendaylight/distribution/opendaylight-karaf/src/main/resources/configuration/tomcat-server.xml [new file with mode: 0644]
opendaylight/distribution/opendaylight-karaf/src/main/resources/etc/custom.properties [new file with mode: 0644]
opendaylight/distribution/opendaylight-karaf/src/main/resources/version.properties [new file with mode: 0644]
opendaylight/distribution/opendaylight/pom.xml
opendaylight/distribution/opendaylight/src/main/resources/configuration/config.ini
opendaylight/distribution/opendaylight/src/main/resources/configuration/initial/01-md-sal.xml
opendaylight/distribution/opendaylight/src/main/resources/configuration/initial/01-netconf-connector.xml [new file with mode: 0644]
opendaylight/distribution/opendaylight/src/main/resources/configuration/initial/04-netconf-connector.xml [deleted file]
opendaylight/distribution/opendaylight/src/main/resources/run.sh
opendaylight/distribution/sanitytest/pom.xml
opendaylight/dummy-console/README [new file with mode: 0644]
opendaylight/dummy-console/pom.xml [new file with mode: 0644]
opendaylight/dummy-console/src/main/java/org/eclipse/osgi/framework/console/CommandInterpreter.java [new file with mode: 0644]
opendaylight/dummy-console/src/main/java/org/eclipse/osgi/framework/console/CommandProvider.java [new file with mode: 0644]
opendaylight/forwarding/staticrouting/pom.xml
opendaylight/forwardingrulesmanager/api/pom.xml
opendaylight/forwardingrulesmanager/implementation/pom.xml
opendaylight/forwardingrulesmanager/implementation/src/main/java/org/opendaylight/controller/forwardingrulesmanager/internal/ForwardingRulesManager.java
opendaylight/hosttracker/api/pom.xml
opendaylight/hosttracker/implementation/pom.xml
opendaylight/hosttracker_new/api/pom.xml
opendaylight/hosttracker_new/implementation/pom.xml
opendaylight/logging/bridge/pom.xml
opendaylight/md-sal/compatibility/flow-management-compatibility/pom.xml
opendaylight/md-sal/compatibility/flow-management-compatibility/src/main/java/org/opendaylight/controller/md/frm/compatibility/ConfigurationReader.java [new file with mode: 0644]
opendaylight/md-sal/compatibility/flow-management-compatibility/src/main/java/org/opendaylight/controller/md/frm/compatibility/FRMRuntimeDataProvider.java [new file with mode: 0644]
opendaylight/md-sal/compatibility/flow-management-compatibility/src/main/java/org/opendaylight/controller/md/frm/compatibility/FRMRuntimeDataProvider.xtend [deleted file]
opendaylight/md-sal/compatibility/flow-management-compatibility/src/main/java/org/opendaylight/controller/md/frm/compatibility/FlowCommitTransaction.java [new file with mode: 0644]
opendaylight/md-sal/compatibility/flow-management-compatibility/src/main/java/org/opendaylight/controller/md/frm/compatibility/FlowConfigMapping.java [new file with mode: 0644]
opendaylight/md-sal/compatibility/flow-management-compatibility/src/main/java/org/opendaylight/controller/md/frm/compatibility/FlowConfigMapping.xtend [deleted file]
opendaylight/md-sal/compatibility/flow-management-compatibility/src/main/java/org/opendaylight/controller/md/frm/compatibility/FlowManagementReader.java
opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/NodeMapping.java
opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/topology/TopologyCommitHandler.java [new file with mode: 0644]
opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/topology/TopologyCommitHandler.xtend [deleted file]
opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/topology/TopologyProvider.xtend
opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/topology/TopologyTransaction.xtend [deleted file]
opendaylight/md-sal/feature/pom.xml [new file with mode: 0644]
opendaylight/md-sal/feature/src/main/resources/features.xml [new file with mode: 0644]
opendaylight/md-sal/forwardingrules-manager/pom.xml
opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/AbstractChangeListener.java [new file with mode: 0644]
opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/AbstractTransaction.xtend [deleted file]
opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/FRMActivator.java [new file with mode: 0644]
opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/FRMActivator.xtend [deleted file]
opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/flow/FlowChangeListener.java [new file with mode: 0644]
opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/flow/FlowCommitHandler.xtend [deleted file]
opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/flow/FlowProvider.java [new file with mode: 0644]
opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/flow/FlowProvider.xtend [deleted file]
opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/flow/FlowTransaction.xtend [deleted file]
opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/flow/FlowTransactionValidator.java
opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/group/GroupChangeListener.java [new file with mode: 0644]
opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/group/GroupCommitHandler.xtend [deleted file]
opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/group/GroupProvider.java [new file with mode: 0644]
opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/group/GroupProvider.xtend [deleted file]
opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/group/GroupTransaction.xtend [deleted file]
opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/group/GroupTransactionValidator.java
opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/meter/MeterChangeListener.java [new file with mode: 0644]
opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/meter/MeterCommitHandler.xtend [deleted file]
opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/meter/MeterProvider.java [new file with mode: 0644]
opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/meter/MeterProvider.xtend [deleted file]
opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/meter/MeterTransaction.xtend [deleted file]
opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/meter/MeterTransactionValidator.java
opendaylight/md-sal/inventory-manager/pom.xml
opendaylight/md-sal/inventory-manager/src/main/java/org/opendaylight/controller/md/inventory/manager/FlowCapableInventoryProvider.java [new file with mode: 0644]
opendaylight/md-sal/inventory-manager/src/main/java/org/opendaylight/controller/md/inventory/manager/FlowCapableInventoryProvider.xtend [deleted file]
opendaylight/md-sal/inventory-manager/src/main/java/org/opendaylight/controller/md/inventory/manager/InventoryActivator.java [new file with mode: 0644]
opendaylight/md-sal/inventory-manager/src/main/java/org/opendaylight/controller/md/inventory/manager/InventoryActivator.xtend [deleted file]
opendaylight/md-sal/inventory-manager/src/main/java/org/opendaylight/controller/md/inventory/manager/InventoryMapping.java [new file with mode: 0644]
opendaylight/md-sal/inventory-manager/src/main/java/org/opendaylight/controller/md/inventory/manager/InventoryMapping.xtend [deleted file]
opendaylight/md-sal/inventory-manager/src/main/java/org/opendaylight/controller/md/inventory/manager/NodeChangeCommiter.java
opendaylight/md-sal/pom.xml
opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/config/yang/md/sal/binding/impl/RuntimeMappingModule.java
opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/AbstractForwardedDataBroker.java
opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/AbstractForwardedTransaction.java
opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingToNormalizedNodeCodec.java
opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/ForwardedBackwardsCompatibleDataBroker.java
opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/RuntimeCodeHelper.java
opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/RuntimeCodeGenerator.xtend
opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/SingletonHolder.java
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/test/java/org/opendaylight/controller/sal/binding/codegen/impl/SingletonHolderTest.java [new file with mode: 0644]
opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/sal/binding/test/bugfix/MultipleAugmentationPuts.java
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/pom.xml
opendaylight/md-sal/sal-binding-dom-it/src/test/java/org/opendaylight/controller/md/sal/binding/data/ConcurrentImplicitCreateTest.java
opendaylight/md-sal/sal-binding-dom-it/src/test/java/org/opendaylight/controller/md/sal/binding/data/ListProcessingAndOrderingTest.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/bugfix/DOMCodecBug03Test.java
opendaylight/md-sal/sal-binding-dom-it/src/test/java/org/opendaylight/controller/sal/binding/test/bugfix/FlagsSerializationTest.java
opendaylight/md-sal/sal-binding-dom-it/src/test/java/org/opendaylight/controller/sal/binding/test/bugfix/PutAugmentationTest.java
opendaylight/md-sal/sal-binding-dom-it/src/test/java/org/opendaylight/controller/sal/binding/test/bugfix/WriteParentListenAugmentTest.java [new file with mode: 0644]
opendaylight/md-sal/sal-binding-dom-it/src/test/java/org/opendaylight/controller/sal/binding/test/bugfix/WriteParentReadChildTest.java
opendaylight/md-sal/sal-binding-dom-it/src/test/java/org/opendaylight/controller/sal/binding/test/connect/dom/ChangeOriginatedInDomBrokerTest.java
opendaylight/md-sal/sal-binding-dom-it/src/test/java/org/opendaylight/controller/sal/binding/test/connect/dom/CrossBrokerMountPointTest.java
opendaylight/md-sal/sal-binding-it/pom.xml
opendaylight/md-sal/sal-binding-it/src/main/java/org/opendaylight/controller/test/sal/binding/it/TestHelper.java
opendaylight/md-sal/sal-binding-it/src/test/java/org/opendaylight/controller/test/sal/binding/it/AbstractTest.java
opendaylight/md-sal/sal-binding-it/src/test/java/org/opendaylight/controller/test/sal/binding/it/NotificationTest.java [moved from opendaylight/md-sal/sal-binding-it/src/test/java/org/opendaylight/controller/test/sal/binding/it/NoficationTest.java with 99% similarity]
opendaylight/md-sal/sal-binding-it/src/test/resources/controller.xml
opendaylight/md-sal/sal-common-api/src/main/java/org/opendaylight/controller/md/sal/common/api/routing/RoutedRegistration.java
opendaylight/md-sal/sal-common-impl/src/main/java/org/opendaylight/controller/md/sal/common/impl/service/AbstractDataBroker.java
opendaylight/md-sal/sal-common-impl/src/main/java/org/opendaylight/controller/md/sal/common/impl/service/ImmutableDataChangeEvent.java
opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/ChangeListenerNotifyTask.java
opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/DOMImmutableDataChangeEvent.java
opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/DataAndMetadataSnapshot.java
opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/DataChangeListenerRegistration.java
opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/DataPreconditionFailedException.java [new file with mode: 0644]
opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/InMemoryDOMDataStore.java
opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/ModificationApplyOperation.java
opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/OperationWithModification.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/md/sal/dom/store/impl/SchemaAwareApplyOperation.java
opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/SchemaAwareApplyOperationRoot.java
opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/StoreUtils.java
opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/StoreMetadataNode.java
opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/StoreNodeCompositeBuilder.java
opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/TreeNodeUtils.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/test/java/org/opendaylight/controller/md/sal/dom/broker/impl/DataNormalizerTest.java
opendaylight/md-sal/sal-dom-broker/src/test/java/org/opendaylight/controller/md/sal/dom/store/impl/InMemoryDataStoreTest.java
opendaylight/md-sal/sal-netconf-connector/pom.xml
opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/config/yang/md/sal/connector/netconf/NetconfConnectorModule.java
opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/NetconfDevice.java
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/NetconfMapping.java
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/yang/odl-sal-netconf-connector-cfg.yang
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/dto/Message.java
opendaylight/md-sal/sal-remoterpc-connector/implementation/src/main/java/org/opendaylight/controller/sal/connector/remoterpc/dto/RouteIdentifierImpl.java
opendaylight/md-sal/sal-remoterpc-connector/implementation/src/test/java/org/opendaylight/controller/sal/connector/remoterpc/ClientRequestHandlerTest.java
opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/impl/JsonReader.java
opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/impl/RestUtil.java
opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/impl/XmlReader.java
opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/IdentityValuesDTO.java
opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/RestCodec.java
opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/RestconfImpl.xtend
opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/CodecsExceptionsCatchingTest.java [new file with mode: 0644]
opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/XmlAndJsonToCnSnLeafRefTest.java [new file with mode: 0644]
opendaylight/md-sal/sal-rest-connector/src/test/resources/decoding-exception/yang/number.yang [new file with mode: 0644]
opendaylight/md-sal/sal-rest-connector/src/test/resources/leafref/json/jsondata.json [new file with mode: 0644]
opendaylight/md-sal/sal-rest-connector/src/test/resources/leafref/xml/xmldata.xml [new file with mode: 0644]
opendaylight/md-sal/sal-rest-connector/src/test/resources/leafref/yang/leafref-module.yang [new file with mode: 0644]
opendaylight/md-sal/sal-rest-connector/src/test/resources/leafref/yang/referenced-module.yang [new file with mode: 0644]
opendaylight/md-sal/sal-rest-docgen/pom.xml [new file with mode: 0644]
opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/DocProvider.java [new file with mode: 0644]
opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/api/ApiDocService.java [new file with mode: 0644]
opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/impl/ApiDocGenerator.java [new file with mode: 0644]
opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/impl/ApiDocServiceImpl.java [new file with mode: 0644]
opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/impl/ModelGenerator.java [new file with mode: 0644]
opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/jaxrs/ApiDocApplication.java [new file with mode: 0644]
opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/jaxrs/JaxbContextResolver.java [new file with mode: 0644]
opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/model/builder/OperationBuilder.java [new file with mode: 0644]
opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/swagger/Api.java [new file with mode: 0644]
opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/swagger/ApiDeclaration.java [new file with mode: 0644]
opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/swagger/Operation.java [new file with mode: 0644]
opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/swagger/Parameter.java [new file with mode: 0644]
opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/swagger/Resource.java [new file with mode: 0644]
opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/swagger/ResourceList.java [new file with mode: 0644]
opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/swagger/ResponseMessage.java [new file with mode: 0644]
opendaylight/md-sal/sal-rest-docgen/src/main/resources/WEB-INF/web.xml [new file with mode: 0644]
opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/css/highlight.default.css [new file with mode: 0644]
opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/css/screen.css [new file with mode: 0644]
opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/images/logo_small.png [new file with mode: 0644]
opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/images/pet_store_api.png [new file with mode: 0644]
opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/images/throbber.gif [new file with mode: 0644]
opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/images/wordnik_api.png [new file with mode: 0644]
opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/index.html [new file with mode: 0644]
opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/lib/backbone-min.js [new file with mode: 0644]
opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/lib/handlebars-1.0.0.js [new file with mode: 0644]
opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/lib/highlight.7.3.pack.js [new file with mode: 0644]
opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/lib/jquery-1.8.0.min.js [new file with mode: 0644]
opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/lib/jquery.ba-bbq.min.js [new file with mode: 0644]
opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/lib/jquery.slideto.min.js [new file with mode: 0644]
opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/lib/jquery.wiggle.min.js [new file with mode: 0644]
opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/lib/shred.bundle.js [new file with mode: 0644]
opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/lib/shred/content.js [new file with mode: 0644]
opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/lib/swagger.js [new file with mode: 0644]
opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/lib/underscore-min.js [new file with mode: 0644]
opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/swagger-ui.js [new file with mode: 0644]
opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/swagger-ui.min.js [new file with mode: 0644]
opendaylight/md-sal/sal-rest-docgen/src/test/java/org/opendaylight/controller/sal/rest/doc/impl/DocGeneratorTest.java [new file with mode: 0644]
opendaylight/md-sal/sal-rest-docgen/src/test/resources/sample-swagger-spec.json [new file with mode: 0644]
opendaylight/md-sal/sal-rest-docgen/src/test/resources/toaster.json [new file with mode: 0644]
opendaylight/md-sal/sal-rest-docgen/src/test/resources/topology-good.json [new file with mode: 0644]
opendaylight/md-sal/sal-rest-docgen/src/test/resources/topology-new.json [new file with mode: 0644]
opendaylight/md-sal/sal-rest-docgen/src/test/resources/topology.json [new file with mode: 0644]
opendaylight/md-sal/sal-rest-docgen/src/test/resources/wadl.xml [new file with mode: 0644]
opendaylight/md-sal/sal-rest-docgen/src/test/resources/yang/toaster.yang [new file with mode: 0644]
opendaylight/md-sal/sal-restconf-broker/src/main/java/org/opendaylight/controller/sal/restconf/broker/client/SalRemoteClientImpl.java
opendaylight/md-sal/samples/l2switch/implementation/src/main/java/org/opendaylight/controller/sample/l2switch/md/flow/FlowWriterServiceImpl.java
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/md-sal/samples/toaster/pom.xml
opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/AbstractListeningStatsTracker.java
opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/AbstractStatsTracker.java
opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/FlowStatsTracker.java
opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/FlowTableStatsTracker.java
opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/GroupDescStatsTracker.java
opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/GroupStatsTracker.java
opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/MeterConfigStatsTracker.java
opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/MeterStatsTracker.java
opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/NodeConnectorStatsTracker.java
opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/NodeStatisticsHandler.java
opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/QueueStatsTracker.java
opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatisticsProvider.java
opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatisticsRequestScheduler.java [new file with mode: 0644]
opendaylight/md-sal/topology-lldp-discovery/pom.xml
opendaylight/md-sal/topology-lldp-discovery/src/main/java/org/opendaylight/md/controller/topology/lldp/LLDPActivator.java [new file with mode: 0644]
opendaylight/md-sal/topology-lldp-discovery/src/main/java/org/opendaylight/md/controller/topology/lldp/LLDPActivator.xtend [deleted file]
opendaylight/md-sal/topology-lldp-discovery/src/main/java/org/opendaylight/md/controller/topology/lldp/LLDPDiscoveryProvider.java [new file with mode: 0644]
opendaylight/md-sal/topology-lldp-discovery/src/main/java/org/opendaylight/md/controller/topology/lldp/LLDPDiscoveryProvider.xtend [deleted file]
opendaylight/md-sal/topology-manager/src/main/java/org/opendaylight/md/controller/topology/manager/FlowCapableTopologyExporter.java
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/exception/NetconfConfigHandlingException.java
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/exception/NoTransactionFoundException.java
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/exception/OperationNotPermittedException.java
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/AttributeIfcSwitchStatement.java
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/fromxml/AttributeConfigElement.java
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/fromxml/ObjectNameAttributeReadingStrategy.java
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/fromxml/ObjectXmlReader.java
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/fromxml/SimpleIdentityRefAttributeReadingStrategy.java
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/mapping/ArrayAttributeMappingStrategy.java
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/mapping/CompositeAttributeMappingStrategy.java
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/mapping/ObjectMapper.java
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/mapping/ObjectNameAttributeMappingStrategy.java
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/mapping/SimpleAttributeMappingStrategy.java
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/mapping/UnionCompositeAttributeMappingStrategy.java
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/resolving/ArrayAttributeResolvingStrategy.java
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/resolving/AttributeResolvingStrategy.java
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/resolving/CompositeAttributeResolvingStrategy.java
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/resolving/ObjectResolver.java
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/resolving/SimpleAttributeResolvingStrategy.java
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/resolving/UnionCompositeAttributeResolvingStrategy.java
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/toxml/AbstractAttributeWritingStrategy.java [new file with mode: 0644]
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/ObjectXmlWriter.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/SimpleBinaryAttributeWritingStrategy.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/InstanceConfig.java
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/config/InstanceConfigElementResolved.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/ModuleElementDefinition.java
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/config/ServiceRegistryWrapper.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/rpc/ModuleRpcs.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/ModuleRuntime.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/AbstractConfigNetconfOperation.java
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/editconfig/DeleteEditConfigStrategy.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/editconfig/EditConfigXmlParser.java
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/editconfig/EditStrategyType.java
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/editconfig/MergeEditConfigStrategy.java
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/editconfig/ReplaceEditConfigStrategy.java
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/get/Get.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/operations/runtimerpc/RuntimeRpcElementResolved.java
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/osgi/Activator.java
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/osgi/NetconfOperationProvider.java
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/osgi/NetconfOperationServiceFactoryImpl.java
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/osgi/NetconfOperationServiceImpl.java
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/transactions/TransactionProvider.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/ConfigPersisterNotificationHandler.java
opendaylight/netconf/config-persister-impl/src/main/java/org/opendaylight/controller/netconf/persist/impl/ConfigPusher.java
opendaylight/netconf/config-persister-impl/src/main/java/org/opendaylight/controller/netconf/persist/impl/PersisterAggregator.java
opendaylight/netconf/config-persister-impl/src/main/java/org/opendaylight/controller/netconf/persist/impl/PropertiesProviderAdapterImpl.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/ietf-netconf-monitoring/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/netconf/monitoring/rev101004/netconf/state/schemas/LocationBuilder.java
opendaylight/netconf/netconf-client/pom.xml
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/NetconfClientDispatcherImpl.java [new file with mode: 0644]
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/NetconfSshClientDispatcher.java [deleted file]
opendaylight/netconf/netconf-client/src/main/java/org/opendaylight/controller/netconf/client/SimpleNetconfClientSessionListener.java
opendaylight/netconf/netconf-client/src/main/java/org/opendaylight/controller/netconf/client/SshClientChannelInitializer.java [new file with mode: 0644]
opendaylight/netconf/netconf-client/src/main/java/org/opendaylight/controller/netconf/client/TcpClientChannelInitializer.java [new file with mode: 0644]
opendaylight/netconf/netconf-client/src/main/java/org/opendaylight/controller/netconf/client/conf/NetconfClientConfiguration.java [new file with mode: 0644]
opendaylight/netconf/netconf-client/src/main/java/org/opendaylight/controller/netconf/client/conf/NetconfClientConfigurationBuilder.java [new file with mode: 0644]
opendaylight/netconf/netconf-client/src/main/java/org/opendaylight/controller/netconf/client/conf/NetconfReconnectingClientConfiguration.java [new file with mode: 0644]
opendaylight/netconf/netconf-client/src/main/java/org/opendaylight/controller/netconf/client/conf/NetconfReconnectingClientConfigurationBuilder.java [new file with mode: 0644]
opendaylight/netconf/netconf-client/src/test/java/org/opendaylight/controller/netconf/client/test/TestingNetconfClient.java
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/DefaultCommitNotificationProducer.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/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/DefaultCommit.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/NetconfOperationRouterImpl.java
opendaylight/netconf/netconf-impl/src/test/java/org/opendaylight/controller/netconf/impl/ConcurrentClientsTest.java
opendaylight/netconf/netconf-impl/src/test/resources/org/opendaylight/controller/netconf/impl/chunked1.txt [deleted file]
opendaylight/netconf/netconf-impl/src/test/resources/org/opendaylight/controller/netconf/impl/chunked2.txt [deleted file]
opendaylight/netconf/netconf-impl/src/test/resources/org/opendaylight/controller/netconf/impl/chunked3.txt [deleted file]
opendaylight/netconf/netconf-impl/src/test/resources/org/opendaylight/controller/netconf/impl/chunked4.txt [deleted file]
opendaylight/netconf/netconf-impl/src/test/resources/org/opendaylight/controller/netconf/impl/chunked5.txt [deleted file]
opendaylight/netconf/netconf-impl/src/test/resources/org/opendaylight/controller/netconf/impl/listener/databaseinteractions/jolokia_config_bean_response.txt [deleted file]
opendaylight/netconf/netconf-impl/src/test/resources/org/opendaylight/controller/netconf/impl/listener/databaseinteractions/jolokia_lookupConfigBeans.txt [deleted file]
opendaylight/netconf/netconf-impl/src/test/resources/org/opendaylight/controller/netconf/impl/notused/client_commit.xml [deleted file]
opendaylight/netconf/netconf-impl/src/test/resources/org/opendaylight/controller/netconf/impl/notused/client_lock_candidate.xml [deleted file]
opendaylight/netconf/netconf-impl/src/test/resources/org/opendaylight/controller/netconf/impl/notused/client_lock_running.xml [deleted file]
opendaylight/netconf/netconf-impl/src/test/resources/org/opendaylight/controller/netconf/impl/notused/client_modify_candidate.xml [deleted file]
opendaylight/netconf/netconf-impl/src/test/resources/org/opendaylight/controller/netconf/impl/notused/client_unlock_candidate.xml [deleted file]
opendaylight/netconf/netconf-impl/src/test/resources/org/opendaylight/controller/netconf/impl/notused/client_unlock_running.xml [deleted file]
opendaylight/netconf/netconf-impl/src/test/resources/org/opendaylight/controller/netconf/impl/notused/server_error_missing_attribute.xml [deleted file]
opendaylight/netconf/netconf-impl/src/test/resources/testConfigs/input.json [deleted file]
opendaylight/netconf/netconf-impl/src/test/resources/testConfigs/input.xml [deleted file]
opendaylight/netconf/netconf-impl/src/test/resources/testConfigs/inputList.xml [deleted file]
opendaylight/netconf/netconf-impl/src/test/resources/testConfigs/inputMap.xml [deleted file]
opendaylight/netconf/netconf-impl/src/test/resources/testConfigs/inputMultiple.xml [deleted file]
opendaylight/netconf/netconf-impl/src/test/resources/testConfigs/inputSetter.xml [deleted file]
opendaylight/netconf/netconf-impl/src/test/resources/testConfigs/inputSetterList.xml [deleted file]
opendaylight/netconf/netconf-impl/src/test/resources/testConfigs/inputSetterMap.xml [deleted file]
opendaylight/netconf/netconf-impl/src/test/resources/testConfigs/map.json [deleted file]
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/HardcodedYangStoreService.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 [deleted file]
opendaylight/netconf/netconf-it/src/test/resources/RSA.pk [deleted file]
opendaylight/netconf/netconf-it/src/test/resources/controller.xml [deleted file]
opendaylight/netconf/netconf-it/src/test/resources/keystore.jks [deleted file]
opendaylight/netconf/netconf-it/src/test/resources/netconfMessages/commit.xml [deleted file]
opendaylight/netconf/netconf-it/src/test/resources/netconfMessages/getConfig.xml [deleted file]
opendaylight/netconf/netconf-mapping-api/src/main/java/org/opendaylight/controller/netconf/mapping/api/HandlingPriority.java
opendaylight/netconf/netconf-monitoring/src/main/java/org/opendaylight/controller/netconf/monitoring/Get.java
opendaylight/netconf/netconf-monitoring/src/main/java/org/opendaylight/controller/netconf/monitoring/MonitoringConstants.java
opendaylight/netconf/netconf-monitoring/src/main/java/org/opendaylight/controller/netconf/monitoring/osgi/NetconfMonitoringActivator.java
opendaylight/netconf/netconf-monitoring/src/main/java/org/opendaylight/controller/netconf/monitoring/osgi/NetconfMonitoringOperationService.java
opendaylight/netconf/netconf-ssh/src/main/java/org/opendaylight/controller/netconf/ssh/NetconfSSHServer.java
opendaylight/netconf/netconf-ssh/src/main/java/org/opendaylight/controller/netconf/ssh/authentication/AuthProvider.java
opendaylight/netconf/netconf-ssh/src/main/java/org/opendaylight/controller/netconf/ssh/authentication/AuthProviderInterface.java
opendaylight/netconf/netconf-ssh/src/main/java/org/opendaylight/controller/netconf/ssh/osgi/NetconfSSHActivator.java
opendaylight/netconf/netconf-ssh/src/main/java/org/opendaylight/controller/netconf/ssh/threads/SocketThread.java
opendaylight/netconf/netconf-util/pom.xml
opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/AbstractNetconfSession.java
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/exception/MissingNameSpaceException.java
opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/exception/UnexpectedElementException.java
opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/exception/UnexpectedNamespaceException.java
opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/handler/ChunkedFramingMechanismEncoder.java
opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/handler/EOMFramingMechanismEncoder.java
opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/handler/FramingMechanismHandlerFactory.java
opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/handler/NetconfChunkAggregator.java
opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/handler/NetconfEOMAggregator.java
opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/handler/NetconfEXIToMessageDecoder.java
opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/handler/NetconfXMLToHelloMessageDecoder.java
opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/handler/NetconfXMLToMessageDecoder.java
opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/handler/ssh/authentication/LoginPassword.java
opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/handler/ssh/client/SshClient.java
opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/handler/ssh/client/SshClientAdapter.java
opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/handler/ssh/virtualsocket/ChannelInputStream.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/NetconfMessageConstants.java
opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/messages/SendErrorExceptionUtil.java
opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/osgi/NetconfConfigUtil.java
opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/xml/XmlElement.java
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/pom.xml
opendaylight/networkconfiguration/neutron/implementation/pom.xml
opendaylight/networkconfiguration/neutron/pom.xml
opendaylight/northbound/bundlescanner/api/pom.xml
opendaylight/northbound/bundlescanner/implementation/pom.xml
opendaylight/northbound/commons/pom.xml
opendaylight/northbound/connectionmanager/enunciate.xml
opendaylight/northbound/connectionmanager/pom.xml
opendaylight/northbound/containermanager/enunciate.xml
opendaylight/northbound/containermanager/pom.xml
opendaylight/northbound/controllermanager/enunciate.xml
opendaylight/northbound/controllermanager/pom.xml
opendaylight/northbound/controllermanager/src/main/java/org/opendaylight/controller/controllermanager/northbound/ControllerProperties.java
opendaylight/northbound/flowprogrammer/enunciate.xml
opendaylight/northbound/flowprogrammer/pom.xml
opendaylight/northbound/hosttracker/enunciate.xml
opendaylight/northbound/hosttracker/pom.xml
opendaylight/northbound/httpservice-bridge/pom.xml
opendaylight/northbound/java-client/enunciate.xml
opendaylight/northbound/java-client/pom.xml
opendaylight/northbound/jolokia/pom.xml
opendaylight/northbound/networkconfiguration/bridgedomain/enunciate.xml
opendaylight/northbound/networkconfiguration/bridgedomain/pom.xml
opendaylight/northbound/networkconfiguration/neutron/enunciate.xml
opendaylight/northbound/networkconfiguration/neutron/pom.xml
opendaylight/northbound/staticrouting/enunciate.xml
opendaylight/northbound/staticrouting/pom.xml
opendaylight/northbound/statistics/enunciate.xml
opendaylight/northbound/statistics/pom.xml
opendaylight/northbound/subnets/enunciate.xml
opendaylight/northbound/subnets/pom.xml
opendaylight/northbound/switchmanager/enunciate.xml
opendaylight/northbound/switchmanager/pom.xml
opendaylight/northbound/switchmanager/src/main/java/org/opendaylight/controller/switchmanager/northbound/NodeConnectorProperties.java
opendaylight/northbound/switchmanager/src/main/java/org/opendaylight/controller/switchmanager/northbound/NodeProperties.java
opendaylight/northbound/topology/enunciate.xml
opendaylight/northbound/topology/pom.xml
opendaylight/northbound/topology/src/main/java/org/opendaylight/controller/topology/northbound/EdgeProperties.java
opendaylight/northbound/usermanager/enunciate.xml
opendaylight/northbound/usermanager/pom.xml
opendaylight/protocol_plugins/openflow/pom.xml
opendaylight/protocol_plugins/stub/pom.xml
opendaylight/routing/dijkstra_implementation/pom.xml
opendaylight/sal/api/pom.xml
opendaylight/sal/connection/api/pom.xml
opendaylight/sal/connection/implementation/pom.xml
opendaylight/sal/implementation/pom.xml
opendaylight/sal/networkconfiguration/api/pom.xml
opendaylight/sal/networkconfiguration/implementation/pom.xml
opendaylight/samples/loadbalancer/pom.xml
opendaylight/samples/loadbalancer/src/main/java/org/opendaylight/controller/samples/loadbalancer/entities/Pool.java
opendaylight/samples/northbound/loadbalancer/pom.xml
opendaylight/samples/simpleforwarding/pom.xml
opendaylight/samples/simpleforwarding/src/main/java/org/opendaylight/controller/samples/simpleforwarding/internal/SimpleForwardingImpl.java
opendaylight/security/pom.xml
opendaylight/statisticsmanager/api/pom.xml
opendaylight/statisticsmanager/implementation/pom.xml
opendaylight/switchmanager/api/pom.xml
opendaylight/switchmanager/implementation/pom.xml
opendaylight/switchmanager/implementation/src/main/java/org/opendaylight/controller/switchmanager/internal/SwitchManager.java
opendaylight/topologymanager/implementation/pom.xml
opendaylight/usermanager/api/pom.xml
opendaylight/usermanager/implementation/pom.xml
opendaylight/web/devices/pom.xml
opendaylight/web/flows/pom.xml
opendaylight/web/osgi-brandfragment/pom.xml
opendaylight/web/osgi-brandfragment/src/main/resources/META-INF/webconsole.properties
opendaylight/web/root/pom.xml
opendaylight/web/topology/pom.xml
opendaylight/web/troubleshoot/pom.xml
pom.xml
third-party/org.openexi/nagasena-rta/nagasena-rta-0000.0002.0038.0.jar [deleted file]
third-party/org.openexi/nagasena-rta/pom.xml [deleted file]
third-party/org.openexi/nagasena/nagasena-0000.0002.0038.0.jar [deleted file]
third-party/org.openexi/nagasena/pom.xml [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/allclasses-frame.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/allclasses-noframe.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/constant-values.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/deprecated-list.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/help-doc.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/index-all.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/index.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/EXIDecoder.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/EXISchemaResolver.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/HeaderOptionsOutputType.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/common/AlignmentType.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/common/BinaryDataSource.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/common/EXIOptions.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/common/EventDescription.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/common/EventType.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/common/GrammarOptions.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/common/QName.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/common/package-frame.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/common/package-summary.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/common/package-tree.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/grammars/GrammarCache.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/grammars/package-frame.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/grammars/package-summary.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/grammars/package-tree.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/io/BinaryDataSink.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/io/CharacterBuffer.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/io/Scanner.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/io/package-frame.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/io/package-summary.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/io/package-tree.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/package-frame.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/package-summary.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/proc/package-tree.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/sax/BinaryDataHandler.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/sax/EXIReader.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/sax/ReaderSupport.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/sax/SAXTransmogrifier.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/sax/Transmogrifier.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/sax/TransmogrifierException.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/sax/package-frame.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/sax/package-summary.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/sax/package-tree.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/schema/Characters.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/schema/EXISchema.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/schema/EmptySchema.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/schema/package-frame.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/schema/package-summary.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/schema/package-tree.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/scomp/EXISchemaFactory.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/scomp/EXISchemaFactoryErrorHandler.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/scomp/EXISchemaFactoryException.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/scomp/EXISchemaReader.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/scomp/EntityResolverEx.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/scomp/package-frame.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/scomp/package-summary.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/org/openexi/scomp/package-tree.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/overview-frame.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/overview-summary.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/overview-tree.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/package-list [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/resources/inherit.gif [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/serialized-form.html [deleted file]
third-party/org.openexi/nagasena/src/main/resources/doc/stylesheet.css [deleted file]
third-party/org.openexi/pom.xml [deleted file]

index f07c855877b2de6145d2ccf8689b7897a5dd28ab..e74e3cb9156e4fd128b4bc97e9697fc3cbf83f32 100644 (file)
@@ -35,7 +35,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
@@ -48,7 +47,6 @@
                             org.apache.felix.dm,</Import-Package>
             <Export-Package>org.opendaylight.controller.appauth,
                             org.opendaylight.controller.appauth.authorization</Export-Package>
-            <Bundle-Activator></Bundle-Activator>
           </instructions>
         </configuration>
       </plugin>
index 8d62c1da4b1e53cabec2f0c2bc5acc0875a98660..064d04c25c1bb4143ca72470cef30337449ad670 100644 (file)
@@ -50,7 +50,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index 3806421df8a85596f8c5b391c3123022d4c82ac8..3ff6bac21f4d3e54ae4018daf46826fdd115e5b3 100644 (file)
@@ -24,7 +24,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index 32c3d08c91751a6e4eacffc0f4bc890995189f15..e0301420160d4af9304bce0bec02e3d87014340c 100644 (file)
@@ -24,6 +24,7 @@ package org.opendaylight.controller.clustering.services;
  * passed and so on.
  */
 public class CacheConfigException extends Exception {
+    private static final long serialVersionUID = 1L;
 
     /**
      * Instantiates a new cache config exception.
index 583de7cb5097623e65f1ccd4cfaf321f707fde4b..70165cce1ff8f1d5a6f734485cda66403f9b1f32 100644 (file)
@@ -23,6 +23,7 @@ package org.opendaylight.controller.clustering.services;
  * allocated already exists
  */
 public class CacheExistException extends Exception {
+    private static final long serialVersionUID = 1L;
 
     /**
      * Instantiates a new cache exist exception.
index 34ba41c5d439c3b1c1c19ad81667cbaf07f7d00a..996e0a0767834e8c0d77ed705401e97baf9aab9f 100644 (file)
@@ -21,6 +21,7 @@ package org.opendaylight.controller.clustering.services;
  * Listener being added fails for any reason
  */
 public class CacheListenerAddException extends Exception {
+    private static final long serialVersionUID = 1L;
 
     /**
      * Instantiates a new cache listener add exception.
index 523a1340c5b69762893a7f7a832f784cb56ec414..dd2585b17ec41b2e37bc3c60486c6fc6a9e8ccac 100644 (file)
@@ -20,7 +20,9 @@ package org.opendaylight.controller.clustering.services;
  * @deprecated for internal use
  * The Class ListenRoleChangeAddException.
  */
+@Deprecated
 public class ListenRoleChangeAddException extends Exception {
+    private static final long serialVersionUID = 1L;
 
     /**
      * Instantiates a new listen role change add exception.
index 4acfae0d29dbb7435e37d87c42e26898a052e1d8..8d3f53b6c44bfff0b4bef7d38aa89758edb90d09 100644 (file)
@@ -63,7 +63,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
@@ -75,9 +74,8 @@
               !org.hornetq.*,
               !org.jboss.*,
               javax.transaction,
-              *,
               org.opendaylight.controller.clustering.services,
-              org.opendaylight.controller.sal.core</Import-Package>
+              org.opendaylight.controller.sal.core,*</Import-Package>
             <Bundle-Activator>org.opendaylight.controller.clustering.services_implementation.internal.Activator</Bundle-Activator>
             <!-- Add in the DynamicImport-Package ONLY the packages that -->
             <!-- contains types that MUST be unmarshalled by the -->
index 7a0c1378b6949b554cddec41ed3b97b59dcc53ff..6a0b3082fb4e90aa98fbf23f95cf232b351e1127 100644 (file)
@@ -31,7 +31,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index 02a231b78c0e61d9ccbc1c7cd475e507c0a557e7..9021c9419e66257da8d140ee5d895adb8e84e075 100644 (file)
@@ -60,7 +60,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index 076ec05e32a13aaf1074fa325762487fda234de2..51f8128382a58d392c564014dbba677dfba56d27 100644 (file)
@@ -12,6 +12,7 @@ package org.opendaylight.controller.clustering.test.internal;
 import java.io.Serializable;
 
 public class ComplexClass implements IComplex, Serializable {
+    private static final long serialVersionUID = 1L;
     private String identity;
 
     public ComplexClass(String i) {
index fda2ff10aa6fd387a4a0956f4159e9b45bd8fff3..876fb656ac0ecdb66b5516bdd6e8165cb9a1f5f0 100644 (file)
@@ -12,6 +12,7 @@ package org.opendaylight.controller.clustering.test.internal;
 import java.io.Serializable;
 
 public class ComplexClass1 implements IComplex, Serializable {
+    private static final long serialVersionUID = 1L;
     private String identity;
 
     public ComplexClass1(String i) {
index adc062d4c4a03438c57adf6faa04d97cbf14559d..d07c192241769e493b7c9cae4ccfb060721e79ab 100644 (file)
@@ -12,9 +12,10 @@ package org.opendaylight.controller.clustering.test.internal;
 import java.io.Serializable;
 
 public class ComplexContainer implements Serializable {
-    private IComplex f;
-    private IComplex f1;
-    private Integer state;
+    private static final long serialVersionUID = 1L;
+    private final IComplex f;
+    private final IComplex f1;
+    private final Integer state;
 
     public ComplexContainer(String i, Integer s) {
         this.state = s;
index 39ef1b0e2929589d7d72833c9bff677585480bfb..7cdb032988bd0a65f7ffcaf91b32ffadf4c546f9 100644 (file)
@@ -12,6 +12,7 @@ package org.opendaylight.controller.clustering.test.internal;
 import java.io.Serializable;
 
 public class StringContainer implements Serializable {
+    private static final long serialVersionUID = 1L;
     private String mystring;
 
     public StringContainer() {
index de263cb41f20f56b1b6234f143c104638dcc8c49..01dd61a1cb619a6115222a9759d005650e68a7d7 100644 (file)
@@ -23,7 +23,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index f068fded4e82123458478bb853595281d6f3c77f..07d3cdda96a00c24316b1939b37f27985576b6b1 100644 (file)
@@ -38,7 +38,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index 4a7a395693e76b3ff31018ee2b218ca5047f62d7..aaab66d4b09ce655257de424b8510657dda93b1b 100644 (file)
   </prerequisites>
 
   <properties>
+    <aopalliance.version>1.0.0</aopalliance.version>
+    <appauth.version>0.4.2-SNAPSHOT</appauth.version>
+    <!-- Controller Modules Versions -->
     <arphandler.version>0.5.2-SNAPSHOT</arphandler.version>
-    <bundle.plugin.version>2.3.7</bundle.plugin.version>
+    <asm.version>4.1</asm.version>
+    <!-- Plugin Versions -->
+    <bouncycastle.version>1.50</bouncycastle.version>
+    <bundle.plugin.version>2.4.0</bundle.plugin.version>
     <bundlescanner.version>0.4.2-SNAPSHOT</bundlescanner.version>
     <checkstyle.version>2.10</checkstyle.version>
     <clustering.services.version>0.5.1-SNAPSHOT</clustering.services.version>
     <clustering.services_implementation.version>0.4.3-SNAPSHOT</clustering.services_implementation.version>
     <clustering.stub.version>0.4.2-SNAPSHOT</clustering.stub.version>
+    <clustering.test.version>0.4.2-SNAPSHOT</clustering.test.version>
+    <commmons.northbound.version>0.4.2-SNAPSHOT</commmons.northbound.version>
+    <!-- Third Party Versions -->
+    <commons.codec.version>1.7</commons.codec.version>
+    <commons.fileupload.version>1.2.2</commons.fileupload.version>
     <commons.httpclient.version>0.1.2-SNAPSHOT</commons.httpclient.version>
     <commons.io.version>2.4</commons.io.version>
     <commons.lang.version>3.1</commons.lang.version>
+    <commons.net.version>3.0.1</commons.net.version>
     <compiler.version>2.3.2</compiler.version>
     <concepts.version>0.5.2-SNAPSHOT</concepts.version>
     <config.version>0.2.5-SNAPSHOT</config.version>
+    <configuration.implementation.version>0.4.3-SNAPSHOT</configuration.implementation.version>
     <configuration.version>0.4.3-SNAPSHOT</configuration.version>
     <connectionmanager.version>0.1.2-SNAPSHOT</connectionmanager.version>
     <containermanager.it.version>0.5.2-SNAPSHOT</containermanager.it.version>
+    <containermanager.northbound.version>0.4.2-SNAPSHOT</containermanager.northbound.version>
     <containermanager.version>0.5.2-SNAPSHOT</containermanager.version>
-    <!--versions for bits of the controller -->
+    <controllermanager.northbound.version>0.0.2-SNAPSHOT</controllermanager.northbound.version>
     <corsfilter.version>7.0.42</corsfilter.version>
+    <devices.web.version>0.4.2-SNAPSHOT</devices.web.version>
+    <eclipse.persistence.version>2.5.0</eclipse.persistence.version>
     <!-- enforcer version -->
     <enforcer.version>1.3.1</enforcer.version>
-    <enunciate.version>1.26.2</enunciate.version>
+    <enunciate.version>1.28</enunciate.version>
     <exam.version>3.0.0</exam.version>
 
     <!-- OpenEXI third party lib for netconf-->
-    <exi.nagasena.version>0000.0002.0038.0-SNAPSHOT</exi.nagasena.version>
+    <exi.nagasena.version>0000.0002.0038.0</exi.nagasena.version>
     <failsafe.version>2.15</failsafe.version>
+    <feature.transaction.version>1.0.1</feature.transaction.version>
+    <felix.dependencymanager.shell.version>3.0.1</felix.dependencymanager.shell.version>
+    <felix.dependencymanager.version>3.1.0</felix.dependencymanager.version>
+    <felix.fileinstall.version>3.1.6</felix.fileinstall.version>
+    <felix.webconsole.version>4.2.0</felix.webconsole.version>
+    <flowprogrammer.northbound.version>0.4.2-SNAPSHOT</flowprogrammer.northbound.version>
+    <flows.web.version>0.4.2-SNAPSHOT</flows.web.version>
     <forwarding.staticrouting>0.5.2-SNAPSHOT</forwarding.staticrouting>
+    <forwarding.staticrouting.northbound.version>0.4.2-SNAPSHOT</forwarding.staticrouting.northbound.version>
+    <forwardingrulesmanager.implementation.version>0.4.2-SNAPSHOT</forwardingrulesmanager.implementation.version>
     <forwardingrulesmanager.version>0.6.0-SNAPSHOT</forwardingrulesmanager.version>
     <geminiweb.version>2.2.0.RELEASE</geminiweb.version>
+    <gson.version>2.2.4</gson.version>
     <guava.version>14.0.1</guava.version>
     <hosttracker.api.version>0.5.2-SNAPSHOT</hosttracker.api.version>
     <hosttracker.implementation.version>0.5.2-SNAPSHOT</hosttracker.implementation.version>
+    <hosttracker.northbound.version>0.4.2-SNAPSHOT</hosttracker.northbound.version>
     <hosttracker_new.api.version>0.4.2-SNAPSHOT</hosttracker_new.api.version>
     <ietf-inet-types.version>2010.09.24.4-SNAPSHOT</ietf-inet-types.version>
     <ietf-topology.version>2013.10.21.2-SNAPSHOT</ietf-topology.version>
     <ietf-yang-types.version>2010.09.24.4-SNAPSHOT</ietf-yang-types.version>
-    <jackson.version>2.3.0</jackson.version>
+    <jackson.version>2.3.2</jackson.version>
     <jacoco.version>0.6.2.201302030002</jacoco.version>
     <jar.plugin.version>2.4</jar.plugin.version>
     <java.version.source>1.7</java.version.source>
     <!-- Third party version -->
     <jersey-servlet.version>1.17</jersey-servlet.version>
     <jersey.version>1.17</jersey.version>
+    <jettison.version>1.3.3</jettison.version>
     <jmxGeneratorPath>src/main/yang-gen-config</jmxGeneratorPath>
     <jolokia.version>1.1.4</jolokia.version>
+    <jsr305.api.version>2.0.1</jsr305.api.version>
+    <jsr311.api.version>1.1.1</jsr311.api.version>
     <junit.version>4.8.1</junit.version>
+    <karaf.version>3.0.1</karaf.version>
     <logback.version>1.0.9</logback.version>
     <logging.bridge.version>0.4.2-SNAPSHOT</logging.bridge.version>
     <maven.compile.plugin.version>2.5.1</maven.compile.plugin.version>
     <netconf.version>0.2.5-SNAPSHOT</netconf.version>
     <netty.version>4.0.17.Final</netty.version>
     <networkconfig.bridgedomain.northbound.version>0.0.3-SNAPSHOT</networkconfig.bridgedomain.northbound.version>
+    <networkconfig.neutron.implementation.version>0.4.2-SNAPSHOT</networkconfig.neutron.implementation.version>
+    <networkconfig.neutron.northbound.version>0.4.2-SNAPSHOT</networkconfig.neutron.northbound.version>
+    <networkconfig.neutron.version>0.4.2-SNAPSHOT</networkconfig.neutron.version>
     <!-- ODL repository / plugin repository -->
     <nexusproxy>http://nexus.opendaylight.org/content</nexusproxy>
     <opendaylight-l2-types.version>2013.08.27.4-SNAPSHOT</opendaylight-l2-types.version>
+    <org.json.version>20080701</org.json.version>
+    <osgi-brandfragment.web.version>0.0.2-SNAPSHOT</osgi-brandfragment.web.version>
+    <osgi.compendium.version>5.0.0</osgi.compendium.version>
     <osgi.core.version>5.0.0</osgi.core.version>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
     <projectinfo>2.6</projectinfo>
-
     <propertymavenplugin.version>1.0-alpha-2</propertymavenplugin.version>
     <protocol-framework.version>0.5.0-SNAPSHOT</protocol-framework.version>
-    <protocol_plugin.stub.version>0.4.2-SNAPSHOT</protocol_plugin.stub.version>
+    <protocol_plugins.openflow.version>0.4.2-SNAPSHOT</protocol_plugins.openflow.version>
+    <protocol_plugins.stub.version>0.4.2-SNAPSHOT</protocol_plugins.stub.version>
     <releaseplugin.version>2.3.2</releaseplugin.version>
+    <routing.dijkstra_implementation.version>0.4.2-SNAPSHOT</routing.dijkstra_implementation.version>
     <sal.connection.version>0.1.2-SNAPSHOT</sal.connection.version>
+    <sal.implementation.version>0.4.2-SNAPSHOT</sal.implementation.version>
     <sal.networkconfiguration.version>0.0.3-SNAPSHOT</sal.networkconfiguration.version>
     <sal.version>0.8.1-SNAPSHOT</sal.version>
     <salGeneratorPath>src/main/yang-gen-sal</salGeneratorPath>
     <samples.loadbalancer>0.5.2-SNAPSHOT</samples.loadbalancer>
+    <samples.loadbalancer.northbound.version>0.4.2-SNAPSHOT</samples.loadbalancer.northbound.version>
+    <samples.simpleforwarding.version>0.4.2-SNAPSHOT</samples.simpleforwarding.version>
     <sanitytest.version>0.4.2-SNAPSHOT</sanitytest.version>
+    <security.version>0.4.2-SNAPSHOT</security.version>
     <sitedeploy>dav:http://nexus.opendaylight.org/content/sites/site</sitedeploy>
     <siteplugin>3.2</siteplugin>
     <slf4j.version>1.7.2</slf4j.version>
     <sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
     <sonar.language>java</sonar.language>
     <sonar.skippedModules>org.openflow.openflowj,net.sf.jung2</sonar.skippedModules>
+    <spifly.version>1.0.0</spifly.version>
     <spring-osgi.version>1.2.1</spring-osgi.version>
+    <spring-security-karaf.version>3.1.4.RELEASE</spring-security-karaf.version>
     <spring-security.version>3.1.3.RELEASE</spring-security.version>
     <spring.version>3.1.3.RELEASE</spring.version>
+    <statistics.northbound.version>0.4.2-SNAPSHOT</statistics.northbound.version>
+    <statisticsmanager.implementation.version>0.4.2-SNAPSHOT</statisticsmanager.implementation.version>
     <statisticsmanager.version>0.5.1-SNAPSHOT</statisticsmanager.version>
+    <subnets.northbound.version>0.4.2-SNAPSHOT</subnets.northbound.version>
     <surefire.version>2.15</surefire.version>
     <switchmanager.api.version>0.7.1-SNAPSHOT</switchmanager.api.version>
+    <switchmanager.implementation.version>0.4.2-SNAPSHOT</switchmanager.implementation.version>
+    <switchmanager.northbound.version>0.4.2-SNAPSHOT</switchmanager.northbound.version>
     <testvm.argLine>-Xmx1024m -XX:MaxPermSize=256m</testvm.argLine>
+    <topology.northbound.version>0.4.2-SNAPSHOT</topology.northbound.version>
+    <topology.web.version>0.4.2-SNAPSHOT</topology.web.version>
     <topologymanager.version>0.4.2-SNAPSHOT</topologymanager.version>
+    <troubleshoot.web.version>0.4.2-SNAPSHOT</troubleshoot.web.version>
     <url.version>1.5.0</url.version>
+    <usermanager.implementation.version>0.4.2-SNAPSHOT</usermanager.implementation.version>
+    <usermanager.northbound.version>0.0.2-SNAPSHOT</usermanager.northbound.version>
     <usermanager.version>0.4.2-SNAPSHOT</usermanager.version>
     <virgo.version>3.6.0.RELEASE</virgo.version>
+    <web.version>0.4.2-SNAPSHOT</web.version>
     <xtend.dstdir>src/main/xtend-gen</xtend.dstdir>
     <xtend.version>2.4.3</xtend.version>
     <yang-ext.version>2013.09.07.4-SNAPSHOT</yang-ext.version>
         <artifactId>logback-core</artifactId>
         <version>${logback.version}</version>
       </dependency>
-
       <dependency>
         <groupId>com.fasterxml.jackson.core</groupId>
         <artifactId>jackson-annotations</artifactId>
         <version>${jackson.version}</version>
       </dependency>
-
       <dependency>
         <groupId>com.fasterxml.jackson.core</groupId>
         <artifactId>jackson-core</artifactId>
         <version>${jackson.version}</version>
       </dependency>
-
       <dependency>
         <groupId>com.fasterxml.jackson.core</groupId>
         <artifactId>jackson-databind</artifactId>
         <version>${jackson.version}</version>
       </dependency>
+      <dependency>
+        <groupId>com.fasterxml.jackson.datatype</groupId>
+        <artifactId>jackson-datatype-json-org</artifactId>
+        <version>${jackson.version}</version>
+      </dependency>
 
       <dependency>
         <groupId>com.fasterxml.jackson.jaxrs</groupId>
         <artifactId>jackson-jaxrs-base</artifactId>
         <version>${jackson.version}</version>
       </dependency>
-
       <dependency>
         <groupId>com.fasterxml.jackson.jaxrs</groupId>
         <artifactId>jackson-jaxrs-json-provider</artifactId>
         <version>${jackson.version}</version>
       </dependency>
-
       <dependency>
         <groupId>com.fasterxml.jackson.module</groupId>
         <artifactId>jackson-module-jaxb-annotations</artifactId>
       <dependency>
         <groupId>com.google.code.findbugs</groupId>
         <artifactId>jsr305</artifactId>
-        <version>2.0.1</version>
+        <version>${jsr305.api.version}</version>
       </dependency>
       <dependency>
         <groupId>com.google.code.gson</groupId>
         <artifactId>gson</artifactId>
-        <version>2.2.4</version>
+        <version>${gson.version}</version>
       </dependency>
       <dependency>
         <groupId>com.google.guava</groupId>
       <dependency>
         <groupId>commons-codec</groupId>
         <artifactId>commons-codec</artifactId>
-        <version>1.7</version>
+        <version>${commons.codec.version}</version>
       </dependency>
       <dependency>
         <groupId>commons-fileupload</groupId>
         <artifactId>commons-fileupload</artifactId>
-        <version>1.2.2</version>
+        <version>${commons.fileupload.version}</version>
       </dependency>
       <dependency>
         <groupId>commons-io</groupId>
       <dependency>
         <groupId>commons-net</groupId>
         <artifactId>commons-net</artifactId>
-        <version>3.0.1</version>
+        <version>${commons.net.version}</version>
       </dependency>
       <dependency>
         <groupId>eclipselink</groupId>
         <artifactId>netty-common</artifactId>
         <version>${netty.version}</version>
       </dependency>
-
-      <!--Netty-->
+      <!-- Netty -->
       <dependency>
         <groupId>io.netty</groupId>
         <artifactId>netty-handler</artifactId>
         <artifactId>netty-transport</artifactId>
         <version>${netty.version}</version>
       </dependency>
+      <dependency>
+        <groupId>javax.ws.rs</groupId>
+        <artifactId>jsr311-api</artifactId>
+        <version>${jsr311.api.version}</version>
+      </dependency>
       <dependency>
         <groupId>orbit</groupId>
         <artifactId>javax.activation</artifactId>
       <dependency>
         <groupId>org.aopalliance</groupId>
         <artifactId>com.springsource.org.aopalliance</artifactId>
-        <version>1.0.0</version>
+        <version>${aopalliance.version}</version>
       </dependency>
       <dependency>
         <groupId>org.apache.commons</groupId>
       <dependency>
         <groupId>org.apache.felix</groupId>
         <artifactId>org.apache.felix.dependencymanager</artifactId>
-        <version>3.1.0</version>
+        <version>${felix.dependencymanager.version}</version>
       </dependency>
       <dependency>
         <groupId>org.apache.felix</groupId>
         <artifactId>org.apache.felix.dependencymanager.shell</artifactId>
-        <version>3.0.1</version>
+        <version>${felix.dependencymanager.shell.version}</version>
       </dependency>
       <dependency>
         <groupId>org.apache.felix</groupId>
         <artifactId>org.apache.felix.fileinstall</artifactId>
-        <version>3.1.6</version>
+        <version>${felix.fileinstall.version}</version>
       </dependency>
       <!-- felix webconsole -->
       <dependency>
         <groupId>org.apache.felix</groupId>
         <artifactId>org.apache.felix.webconsole</artifactId>
-        <version>4.2.0</version>
+        <version>${felix.webconsole.version}</version>
         <!-- the all bundle includes all the necessary plugins -->
         <classifier>all</classifier>
       </dependency>
       <dependency>
         <groupId>org.bouncycastle</groupId>
         <artifactId>bcpkix-jdk15on</artifactId>
-        <version>1.50</version>
+        <version>${bouncycastle.version}</version>
       </dependency>
       <dependency>
         <groupId>org.bouncycastle</groupId>
         <artifactId>bcprov-jdk15on</artifactId>
-        <version>1.50</version>
+        <version>${bouncycastle.version}</version>
       </dependency>
       <dependency>
         <groupId>org.codehaus.enunciate</groupId>
         <artifactId>enunciate-core-annotations</artifactId>
         <version>${enunciate.version}</version>
       </dependency>
-
       <dependency>
         <groupId>org.codehaus.jettison</groupId>
         <artifactId>jettison</artifactId>
-        <version>1.3.3</version>
+        <version>${jettison.version}</version>
       </dependency>
 
       <!-- equinox http service bridge -->
       <dependency>
         <groupId>org.eclipse.persistence</groupId>
         <artifactId>org.eclipse.persistence.antlr</artifactId>
-        <version>2.5.0</version>
+        <version>${eclipse.persistence.version}</version>
       </dependency>
       <dependency>
         <groupId>org.eclipse.persistence</groupId>
         <artifactId>org.eclipse.persistence.core</artifactId>
-        <version>2.5.0</version>
+        <version>${eclipse.persistence.version}</version>
       </dependency>
       <dependency>
         <groupId>org.eclipse.persistence</groupId>
         <artifactId>org.eclipse.persistence.moxy</artifactId>
-        <version>2.5.0</version>
+        <version>${eclipse.persistence.version}</version>
       </dependency>
 
       <!-- md-sal -->
         <artifactId>jolokia-osgi</artifactId>
         <version>${jolokia.version}</version>
       </dependency>
+      <dependency>
+        <groupId>org.json</groupId>
+        <artifactId>json</artifactId>
+        <version>${org.json.version}</version>
+      </dependency>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
         <artifactId>appauth</artifactId>
-        <version>0.4.2-SNAPSHOT</version>
+        <version>${appauth.version}</version>
       </dependency>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
         <artifactId>clustering.test</artifactId>
-        <version>0.4.2-SNAPSHOT</version>
+        <version>${clustering.test.version}</version>
       </dependency>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
         <artifactId>commons.northbound</artifactId>
-        <version>0.4.2-SNAPSHOT</version>
+        <version>${commmons.northbound.version}</version>
       </dependency>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
         <artifactId>configuration.implementation</artifactId>
-        <version>0.4.3-SNAPSHOT</version>
+        <version>${configuration.implementation.version}</version>
       </dependency>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
         <artifactId>containermanager.northbound</artifactId>
-        <version>0.4.2-SNAPSHOT</version>
+        <version>${containermanager.northbound.version}</version>
       </dependency>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
         <artifactId>controllermanager.northbound</artifactId>
-        <version>0.0.2-SNAPSHOT</version>
+        <version>${controllermanager.northbound.version}</version>
       </dependency>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
         <artifactId>devices.web</artifactId>
-        <version>0.4.2-SNAPSHOT</version>
+        <version>${devices.web.version}</version>
       </dependency>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
         <artifactId>flowprogrammer.northbound</artifactId>
-        <version>0.4.2-SNAPSHOT</version>
+        <version>${flowprogrammer.northbound.version}</version>
       </dependency>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
         <artifactId>flows.web</artifactId>
-        <version>0.4.2-SNAPSHOT</version>
+        <version>${flows.web.version}</version>
       </dependency>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
         <artifactId>forwarding.staticrouting.northbound</artifactId>
-        <version>0.4.2-SNAPSHOT</version>
+        <version>${forwarding.staticrouting.northbound.version}</version>
       </dependency>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
         <artifactId>forwardingrulesmanager.implementation</artifactId>
-        <version>0.4.2-SNAPSHOT</version>
+        <version>${forwardingrulesmanager.implementation.version}</version>
       </dependency>
 
       <dependency>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
         <artifactId>hosttracker.northbound</artifactId>
-        <version>0.4.2-SNAPSHOT</version>
+        <version>${hosttracker.northbound.version}</version>
       </dependency>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
         <artifactId>netconf-client</artifactId>
         <version>${netconf.version}</version>
       </dependency>
+
+      <!--Netconf config-->
+      <dependency>
+        <groupId>org.opendaylight.controller</groupId>
+        <artifactId>netconf-config-dispatcher</artifactId>
+        <version>${netconf.version}</version>
+      </dependency>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
         <artifactId>netconf-impl</artifactId>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
         <artifactId>networkconfig.neutron</artifactId>
-        <version>0.4.2-SNAPSHOT</version>
+        <version>${networkconfig.neutron.version}</version>
       </dependency>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
         <artifactId>networkconfig.neutron.implementation</artifactId>
-        <version>0.4.2-SNAPSHOT</version>
+        <version>${networkconfig.neutron.implementation.version}</version>
       </dependency>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
         <artifactId>networkconfig.neutron.northbound</artifactId>
-        <version>0.4.2-SNAPSHOT</version>
+        <version>${networkconfig.neutron.northbound.version}</version>
       </dependency>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
         <artifactId>osgi-brandfragment.web</artifactId>
-        <version>0.0.2-SNAPSHOT</version>
+        <version>${osgi-brandfragment.web.version}</version>
       </dependency>
 
       <dependency>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
         <artifactId>protocol_plugins.openflow</artifactId>
-        <version>0.4.2-SNAPSHOT</version>
+        <version>${protocol_plugins.openflow.version}</version>
       </dependency>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
         <artifactId>protocol_plugins.stub</artifactId>
-        <version>${protocol_plugin.stub.version}</version>
+        <version>${protocol_plugins.stub.version}</version>
       </dependency>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
         <artifactId>routing.dijkstra_implementation</artifactId>
-        <version>0.4.2-SNAPSHOT</version>
+        <version>${routing.dijkstra_implementation.version}</version>
       </dependency>
 
       <!-- SAL bundles -->
         <artifactId>sal-rest-connector</artifactId>
         <version>${mdsal.version}</version>
       </dependency>
+      <dependency>
+        <groupId>org.opendaylight.controller</groupId>
+        <artifactId>sal-rest-docgen</artifactId>
+        <version>${mdsal.version}</version>
+      </dependency>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
         <artifactId>sal-restconf-broker</artifactId>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
         <artifactId>sal.implementation</artifactId>
-        <version>0.4.2-SNAPSHOT</version>
+        <version>${sal.implementation.version}</version>
       </dependency>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
         <artifactId>samples.loadbalancer.northbound</artifactId>
-        <version>0.4.2-SNAPSHOT</version>
+        <version>${samples.loadbalancer.northbound.version}</version>
       </dependency>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
         <artifactId>samples.simpleforwarding</artifactId>
-        <version>0.4.2-SNAPSHOT</version>
+        <version>${samples.simpleforwarding.version}</version>
       </dependency>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
         <artifactId>security</artifactId>
-        <version>0.4.2-SNAPSHOT</version>
+        <version>${security.version}</version>
       </dependency>
 
       <dependency>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
         <artifactId>statistics.northbound</artifactId>
-        <version>0.4.2-SNAPSHOT</version>
+        <version>${statistics.northbound.version}</version>
       </dependency>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
         <artifactId>statisticsmanager.implementation</artifactId>
-        <version>0.4.2-SNAPSHOT</version>
+        <version>${statisticsmanager.implementation.version}</version>
       </dependency>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
         <artifactId>subnets.northbound</artifactId>
-        <version>0.4.2-SNAPSHOT</version>
+        <version>${subnets.northbound.version}</version>
       </dependency>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
         <artifactId>switchmanager.implementation</artifactId>
-        <version>0.4.2-SNAPSHOT</version>
+        <version>${switchmanager.implementation.version}</version>
       </dependency>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
         <artifactId>switchmanager.northbound</artifactId>
-        <version>0.4.2-SNAPSHOT</version>
+        <version>${switchmanager.northbound.version}</version>
       </dependency>
 
       <!-- threadpool -->
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
         <artifactId>topology.northbound</artifactId>
-        <version>0.4.2-SNAPSHOT</version>
+        <version>${topology.northbound.version}</version>
       </dependency>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
         <artifactId>topology.web</artifactId>
-        <version>0.4.2-SNAPSHOT</version>
+        <version>${topology.web.version}</version>
       </dependency>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
         <artifactId>troubleshoot.web</artifactId>
-        <version>0.4.2-SNAPSHOT</version>
+        <version>${troubleshoot.web.version}</version>
       </dependency>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
         <artifactId>usermanager.implementation</artifactId>
-        <version>${usermanager.version}</version>
+        <version>${usermanager.implementation.version}</version>
       </dependency>
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
         <artifactId>usermanager.northbound</artifactId>
-        <version>0.0.2-SNAPSHOT</version>
+        <version>${usermanager.northbound.version}</version>
       </dependency>
 
       <!--  Web bundles -->
       <dependency>
         <groupId>org.opendaylight.controller</groupId>
         <artifactId>web</artifactId>
-        <version>0.4.2-SNAPSHOT</version>
+        <version>${web.version}</version>
       </dependency>
       <dependency>
         <groupId>org.opendaylight.controller</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>
       <!-- Third parties from opendaylight released -->
       <dependency>
         <groupId>org.opendaylight.controller.thirdparty</groupId>
         <artifactId>yang-model-util</artifactId>
         <version>${yangtools.version}</version>
       </dependency>
+      <dependency>
+        <groupId>org.opendaylight.yangtools</groupId>
+        <artifactId>yang-parser-api</artifactId>
+        <version>${yangtools.version}</version>
+      </dependency>
       <dependency>
         <groupId>org.opendaylight.yangtools</groupId>
         <artifactId>yang-parser-impl</artifactId>
         <artifactId>yang-ext</artifactId>
         <version>${yang-ext.version}</version>
       </dependency>
+      <dependency>
+        <groupId>org.openexi</groupId>
+        <artifactId>nagasena</artifactId>
+        <version>${exi.nagasena.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.openexi</groupId>
+        <artifactId>nagasena-rta</artifactId>
+        <version>${exi.nagasena.version}</version>
+      </dependency>
       <dependency>
         <groupId>org.osgi</groupId>
         <artifactId>org.osgi.compendium</artifactId>
-        <version>${osgi.core.version}</version>
+        <version>${osgi.compendium.version}</version>
       </dependency>
       <dependency>
         <groupId>org.osgi</groupId>
             <configFile>enunciate.xml</configFile>
           </configuration>
           <dependencies>
+            <dependency>
+              <groupId>org.codehaus.enunciate</groupId>
+              <artifactId>enunciate-swagger</artifactId>
+              <version>${enunciate.version}</version>
+            </dependency>
             <dependency>
               <groupId>org.opendaylight.controller</groupId>
               <artifactId>commons.logback_settings</artifactId>
               <phase>generate-sources</phase>
               <configuration>
                 <sources>
+                  <source>src/main/yang</source>
                   <source>${jmxGeneratorPath}</source>
                   <source>${salGeneratorPath}</source>
                   <source>${xtend.dstdir}</source>
                     </goals>
                   </pluginExecutionFilter>
                   <action>
-                    <ignore></ignore>
+                    <execute></execute>
                   </action>
                 </pluginExecution>
                 <pluginExecution>
index 5e55cddf8e766509336041264dcecd7af06a2932..916ef9a88befa87ac8b5c17902ec6d970f23807d 100644 (file)
@@ -77,9 +77,6 @@ public abstract class AbstractDispatcher<S extends ProtocolSession<?>, L extends
      */
     protected ChannelFuture createServer(final InetSocketAddress address, final PipelineInitializer<S> initializer) {
         final ServerBootstrap b = new ServerBootstrap();
-        b.group(this.bossGroup, this.workerGroup);
-        b.channel(NioServerSocketChannel.class);
-        b.option(ChannelOption.SO_BACKLOG, 128);
         b.childHandler(new ChannelInitializer<SocketChannel>() {
 
             @Override
@@ -87,10 +84,20 @@ public abstract class AbstractDispatcher<S extends ProtocolSession<?>, L extends
                 initializer.initializeChannel(ch, new DefaultPromise<S>(executor));
             }
         });
-        b.childOption(ChannelOption.SO_KEEPALIVE, true);
 
+        b.option(ChannelOption.SO_BACKLOG, 128);
+        b.childOption(ChannelOption.SO_KEEPALIVE, true);
         customizeBootstrap(b);
 
+        if (b.group() == null) {
+            b.group(bossGroup, workerGroup);
+        }
+        try {
+            b.channel(NioServerSocketChannel.class);
+        } catch (IllegalStateException e) {
+            LOG.trace("Not overriding channelFactory on bootstrap {}", b, e);
+        }
+
         // Bind and start to accept incoming connections.
         final ChannelFuture f = b.bind(address);
         LOG.debug("Initiated server {} at {}.", f, address);
index d77c9aa962c21ed5267f30b49662d26bbb9cd775..1148c6bebe5f381d825be0003c6904b3b3e12153 100644 (file)
@@ -7,12 +7,6 @@
  */
 package org.opendaylight.controller.config.yang.protocol.framework;
 
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import javax.management.InstanceAlreadyExistsException;
-import javax.management.ObjectName;
-
 import org.junit.Before;
 import org.junit.Test;
 import org.opendaylight.controller.config.api.ConflictingVersionException;
@@ -23,6 +17,12 @@ import org.opendaylight.controller.config.manager.impl.factoriesresolver.Hardcod
 import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;
 import org.opendaylight.controller.config.yang.netty.eventexecutor.GlobalEventExecutorModuleFactory;
 
+import javax.management.InstanceAlreadyExistsException;
+import javax.management.ObjectName;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
 public class NeverReconnectStrategyModuleTest extends AbstractConfigTest {
 
     private static final String INSTANCE_NAME = "never-reconect-strategy-factory-impl";
@@ -30,7 +30,7 @@ public class NeverReconnectStrategyModuleTest extends AbstractConfigTest {
 
     @Before
     public void setUp() throws Exception {
-        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(
+        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(mockedContext,
                 new NeverReconnectStrategyFactoryModuleFactory(), new GlobalEventExecutorModuleFactory()));
     }
 
index 24a0e912a3263d676c9757b6f92583c2358ca5ee..9beadc4dbb2b7f8aa34a0390e9aa65614168d666 100644 (file)
@@ -29,7 +29,7 @@ public class ReconnectImmediatelyStrategyModuleTest extends AbstractConfigTest {
 
     @Before
     public void setUp() throws Exception {
-        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(
+        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(mockedContext,
                 new ReconnectImmediatelyStrategyFactoryModuleFactory(), new GlobalEventExecutorModuleFactory()));
     }
 
index d051a00a12f09a66ffb8c16db4b059f72d46e3c2..a8cdff711905ead55193384baed9362d1f7df909 100644 (file)
@@ -7,15 +7,6 @@
  */
 package org.opendaylight.controller.config.yang.protocol.framework;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.math.BigDecimal;
-
-import javax.management.InstanceAlreadyExistsException;
-import javax.management.ObjectName;
-
 import org.junit.Before;
 import org.junit.Test;
 import org.opendaylight.controller.config.api.ConflictingVersionException;
@@ -26,6 +17,14 @@ import org.opendaylight.controller.config.manager.impl.factoriesresolver.Hardcod
 import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;
 import org.opendaylight.controller.config.yang.netty.eventexecutor.GlobalEventExecutorModuleFactory;
 
+import javax.management.InstanceAlreadyExistsException;
+import javax.management.ObjectName;
+import java.math.BigDecimal;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
 public class TimedReconnectStrategyModuleTest extends AbstractConfigTest {
 
     private static final String INSTANCE_NAME = "timed-reconect-stategy-facotry-impl";
@@ -33,7 +32,7 @@ public class TimedReconnectStrategyModuleTest extends AbstractConfigTest {
 
     @Before
     public void setUp() throws Exception {
-        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(
+        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(mockedContext,
                 new TimedReconnectStrategyFactoryModuleFactory(), new GlobalEventExecutorModuleFactory()));
     }
 
index 8c325079d30e185200398fbc537550d0d9b37682..bf010bb3a603e46d995bc8656a0d5f52ca368f31 100644 (file)
@@ -9,9 +9,12 @@ package org.opendaylight.controller.config.manager.impl;
 
 import org.opendaylight.controller.config.api.ServiceReferenceReadableRegistry;
 
+/**
+ * Interface exposing some internal state on top of ServiceReferenceReadableRegistry. This will
+ * not be exposed via JMX.
+ */
 public interface CloseableServiceReferenceReadableRegistry  extends AutoCloseable, ServiceReferenceReadableRegistry {
 
-
     void close();
 
 }
index e914162671e811682271d42bcbccbe4e89c47947..8f85972d050cd9d3dc0e8460c21baf3506913db8 100644 (file)
@@ -11,8 +11,8 @@ import com.google.common.collect.Maps;
 import org.opendaylight.controller.config.api.ConflictingVersionException;
 import org.opendaylight.controller.config.api.ModuleIdentifier;
 import org.opendaylight.controller.config.api.RuntimeBeanRegistratorAwareModule;
-import org.opendaylight.controller.config.api.ServiceReferenceWritableRegistry;
 import org.opendaylight.controller.config.api.ValidationException;
+import org.opendaylight.controller.config.api.annotations.ServiceInterfaceAnnotation;
 import org.opendaylight.controller.config.api.jmx.CommitStatus;
 import org.opendaylight.controller.config.api.jmx.ObjectNameUtil;
 import org.opendaylight.controller.config.manager.impl.dependencyresolver.DestroyedModule;
@@ -159,13 +159,24 @@ public class ConfigRegistryImpl implements AutoCloseable, ConfigRegistryImplMXBe
             }
         };
 
-        Map<String, Map.Entry<ModuleFactory, BundleContext>> allCurrentFactories = Collections.unmodifiableMap(
+        Map<String, Map.Entry<ModuleFactory, BundleContext>> allCurrentFactories = new HashMap<>(
                 resolver.getAllFactories());
 
+        // add all factories that disappeared from SR but are still committed
+        for (ModuleInternalInfo moduleInternalInfo : currentConfig.getEntries()) {
+            String name = moduleInternalInfo.getModuleFactory().getImplementationName();
+            if (allCurrentFactories.containsKey(name) == false) {
+                logger.trace("Factory {} not found in SR, using reference from previous commit", name);
+                allCurrentFactories.put(name,
+                        Maps.immutableEntry(moduleInternalInfo.getModuleFactory(), moduleInternalInfo.getBundleContext()));
+            }
+        }
+        allCurrentFactories = Collections.unmodifiableMap(allCurrentFactories);
+
         // closed by transaction controller
         ConfigTransactionLookupRegistry txLookupRegistry = new ConfigTransactionLookupRegistry(new TransactionIdentifier(
                 transactionName), factory, allCurrentFactories);
-        ServiceReferenceWritableRegistry writableRegistry = ServiceReferenceRegistryImpl.createSRWritableRegistry(
+        SearchableServiceReferenceWritableRegistry writableRegistry = ServiceReferenceRegistryImpl.createSRWritableRegistry(
                 readableSRRegistry, txLookupRegistry, allCurrentFactories);
 
         ConfigTransactionControllerInternal transactionController = new ConfigTransactionControllerImpl(
@@ -216,16 +227,14 @@ public class ConfigRegistryImpl implements AutoCloseable, ConfigRegistryImplMXBe
         // non recoverable from here:
         try {
             return secondPhaseCommit(configTransactionController, commitInfo, configTransactionControllerEntry.getValue());
-        } catch (Throwable t) { // some libs throw Errors: e.g.
+        } catch (Error | RuntimeException t) { // some libs throw Errors: e.g.
             // javax.xml.ws.spi.FactoryFinder$ConfigurationError
             isHealthy = false;
             logger.error("Configuration Transaction failed on 2PC, server is unhealthy", t);
             if (t instanceof RuntimeException) {
                 throw (RuntimeException) t;
-            } else if (t instanceof Error) {
-                throw (Error) t;
             } else {
-                throw new RuntimeException(t);
+                throw (Error) t;
             }
         }
     }
@@ -344,24 +353,20 @@ public class ConfigRegistryImpl implements AutoCloseable, ConfigRegistryImplMXBe
 
             // register to JMX
             try {
-                newModuleJMXRegistrator.registerMBean(newReadableConfigBean,
-                        primaryReadOnlyON);
+                newModuleJMXRegistrator.registerMBean(newReadableConfigBean, primaryReadOnlyON);
             } catch (InstanceAlreadyExistsException e) {
-                throw new IllegalStateException(e);
+                throw new IllegalStateException("Possible code error, already registered:" + primaryReadOnlyON,e);
             }
 
-            // register to OSGi
+            // register services to OSGi
+            Map<String, ServiceInterfaceAnnotation> annotationMapping = configTransactionController.getWritableRegistry().findServiceInterfaces(moduleIdentifier);
+            BundleContext bc = configTransactionController.getModuleFactoryBundleContext(
+                    entry.getModuleFactory().getImplementationName());
             if (osgiRegistration == null) {
-                ModuleFactory moduleFactory = entry.getModuleFactory();
-                if (moduleFactory != null) {
-                    BundleContext bc = configTransactionController.
-                            getModuleFactoryBundleContext(moduleFactory.getImplementationName());
-                    osgiRegistration = beanToOsgiServiceManager.registerToOsgi(realModule.getClass(),
-                            newReadableConfigBean.getInstance(), entry.getIdentifier(), bc);
-                } else {
-                    throw new NullPointerException(entry.getIdentifier().getFactoryName() + " ModuleFactory not found.");
-                }
-
+                osgiRegistration = beanToOsgiServiceManager.registerToOsgi(
+                        newReadableConfigBean.getInstance(), moduleIdentifier, bc, annotationMapping);
+            } else {
+                osgiRegistration.updateRegistrations(annotationMapping, bc, instance);
             }
 
             RootRuntimeBeanRegistratorImpl runtimeBeanRegistrator = runtimeRegistrators
@@ -369,7 +374,7 @@ public class ConfigRegistryImpl implements AutoCloseable, ConfigRegistryImplMXBe
             ModuleInternalInfo newInfo = new ModuleInternalInfo(
                     entry.getIdentifier(), newReadableConfigBean, osgiRegistration,
                     runtimeBeanRegistrator, newModuleJMXRegistrator,
-                    orderingIdx, entry.isDefaultBean());
+                    orderingIdx, entry.isDefaultBean(), entry.getModuleFactory(), entry.getBundleContext());
 
             newConfigEntries.put(realModule, newInfo);
             orderingIdx++;
index bc4de5cc156580741caf9e5abcbfbd32e07556ce..3e231201821619d36c95b0cc481938b5eda042f4 100644 (file)
@@ -7,9 +7,25 @@
  */
 package org.opendaylight.controller.config.manager.impl;
 
+import static java.lang.String.format;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicBoolean;
+import javax.annotation.Nullable;
+import javax.annotation.concurrent.GuardedBy;
+import javax.management.DynamicMBean;
+import javax.management.InstanceAlreadyExistsException;
+import javax.management.InstanceNotFoundException;
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
 import org.opendaylight.controller.config.api.DependencyResolver;
 import org.opendaylight.controller.config.api.ModuleIdentifier;
-import org.opendaylight.controller.config.api.ServiceReferenceWritableRegistry;
 import org.opendaylight.controller.config.api.ValidationException;
 import org.opendaylight.controller.config.api.jmx.ObjectNameUtil;
 import org.opendaylight.controller.config.manager.impl.dependencyresolver.DependencyResolverManager;
@@ -28,25 +44,7 @@ import org.osgi.framework.BundleContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import javax.annotation.Nullable;
-import javax.annotation.concurrent.GuardedBy;
-import javax.management.DynamicMBean;
-import javax.management.InstanceAlreadyExistsException;
-import javax.management.InstanceNotFoundException;
-import javax.management.MBeanServer;
-import javax.management.ObjectName;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-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;
-
 /**
  * This is a JMX bean representing current transaction. It contains
  * transaction identifier, unique version and parent version for
@@ -82,13 +80,13 @@ class ConfigTransactionControllerImpl implements
     private final boolean blankTransaction;
 
     @GuardedBy("this")
-    private final ServiceReferenceWritableRegistry writableSRRegistry;
+    private final SearchableServiceReferenceWritableRegistry writableSRRegistry;
 
     public ConfigTransactionControllerImpl(ConfigTransactionLookupRegistry txLookupRegistry,
                                            long parentVersion, CodecRegistry codecRegistry, long currentVersion,
                                            Map<String, Entry<ModuleFactory, BundleContext>> currentlyRegisteredFactories,
                                            MBeanServer transactionsMBeanServer, MBeanServer configMBeanServer,
-                                           boolean blankTransaction, ServiceReferenceWritableRegistry writableSRRegistry) {
+                                           boolean blankTransaction, SearchableServiceReferenceWritableRegistry  writableSRRegistry) {
         this.txLookupRegistry = txLookupRegistry;
         String transactionName = txLookupRegistry.getTransactionIdentifier().getName();
         this.controllerON = ObjectNameUtil.createTransactionControllerON(transactionName);
@@ -139,14 +137,16 @@ class ConfigTransactionControllerImpl implements
         }
         // add default modules
         for (ModuleFactory moduleFactory : toBeAdded) {
+            BundleContext bundleContext = getModuleFactoryBundleContext(moduleFactory.getImplementationName());
             Set<? extends Module> defaultModules = moduleFactory.getDefaultModules(dependencyResolverManager,
-                    getModuleFactoryBundleContext(moduleFactory.getImplementationName()));
+                    bundleContext);
             for (Module module : defaultModules) {
                 // ensure default module to be registered to jmx even if its module factory does not use dependencyResolverFactory
                 DependencyResolver dependencyResolver = dependencyResolverManager.getOrCreate(module.getIdentifier());
                 try {
                     boolean defaultBean = true;
-                    putConfigBeanToJMXAndInternalMaps(module.getIdentifier(), module, moduleFactory, null, dependencyResolver, defaultBean);
+                    putConfigBeanToJMXAndInternalMaps(module.getIdentifier(), module, moduleFactory, null,
+                            dependencyResolver, defaultBean, bundleContext);
                 } catch (InstanceAlreadyExistsException e) {
                     throw new IllegalStateException(e);
                 }
@@ -163,21 +163,26 @@ class ConfigTransactionControllerImpl implements
     }
 
 
-    private synchronized void copyExistingModule(
-            ModuleInternalInfo oldConfigBeanInfo)
-            throws InstanceAlreadyExistsException {
+    private synchronized void copyExistingModule(ModuleInternalInfo oldConfigBeanInfo) throws InstanceAlreadyExistsException {
+
         transactionStatus.checkNotCommitStarted();
         transactionStatus.checkNotAborted();
         ModuleIdentifier moduleIdentifier = oldConfigBeanInfo.getIdentifier();
         dependencyResolverManager.assertNotExists(moduleIdentifier);
 
-        ModuleFactory moduleFactory = factoriesHolder
-                .findByModuleName(moduleIdentifier.getFactoryName());
+        ModuleFactory moduleFactory;
+        BundleContext bc;
+        try {
+            moduleFactory = factoriesHolder.findByModuleName(moduleIdentifier.getFactoryName());
+            bc = getModuleFactoryBundleContext(moduleFactory.getImplementationName());
+        } catch (InstanceNotFoundException e) {
+            throw new IllegalStateException(e);
+        }
 
         Module module;
         DependencyResolver dependencyResolver = dependencyResolverManager.getOrCreate(moduleIdentifier);
         try {
-            BundleContext bc = getModuleFactoryBundleContext(moduleFactory.getImplementationName());
+
             module = moduleFactory.createModule(
                     moduleIdentifier.getInstanceName(), dependencyResolver,
                     oldConfigBeanInfo.getReadableModule(), bc);
@@ -187,7 +192,7 @@ class ConfigTransactionControllerImpl implements
                     oldConfigBeanInfo, moduleFactory), e);
         }
         putConfigBeanToJMXAndInternalMaps(moduleIdentifier, module, moduleFactory, oldConfigBeanInfo, dependencyResolver,
-                oldConfigBeanInfo.isDefaultBean());
+                oldConfigBeanInfo.isDefaultBean(), bc);
     }
 
     @Override
@@ -200,19 +205,26 @@ class ConfigTransactionControllerImpl implements
         dependencyResolverManager.assertNotExists(moduleIdentifier);
 
         // find factory
-        ModuleFactory moduleFactory = factoriesHolder.findByModuleName(factoryName);
+        ModuleFactory moduleFactory;
+        try {
+            moduleFactory = factoriesHolder.findByModuleName(factoryName);
+        } catch (InstanceNotFoundException e) {
+            throw new IllegalArgumentException(e);
+        }
         DependencyResolver dependencyResolver = dependencyResolverManager.getOrCreate(moduleIdentifier);
+        BundleContext bundleContext = getModuleFactoryBundleContext(moduleFactory.getImplementationName());
         Module module = moduleFactory.createModule(instanceName, dependencyResolver,
-                getModuleFactoryBundleContext(moduleFactory.getImplementationName()));
+                bundleContext);
         boolean defaultBean = false;
         return putConfigBeanToJMXAndInternalMaps(moduleIdentifier, module,
-                moduleFactory, null, dependencyResolver, defaultBean);
+                moduleFactory, null, dependencyResolver, defaultBean, bundleContext);
     }
 
     private synchronized ObjectName putConfigBeanToJMXAndInternalMaps(
             ModuleIdentifier moduleIdentifier, Module module,
             ModuleFactory moduleFactory,
-            @Nullable ModuleInternalInfo maybeOldConfigBeanInfo, DependencyResolver dependencyResolver, boolean isDefaultBean)
+            @Nullable ModuleInternalInfo maybeOldConfigBeanInfo, DependencyResolver dependencyResolver,
+            boolean isDefaultBean, BundleContext bundleContext)
             throws InstanceAlreadyExistsException {
 
         logger.debug("Adding module {} to transaction {}", moduleIdentifier, this);
@@ -237,7 +249,7 @@ class ConfigTransactionControllerImpl implements
 
         dependencyResolverManager.put(
                 moduleIdentifier, module, moduleFactory,
-                maybeOldConfigBeanInfo, transactionModuleJMXRegistration, isDefaultBean);
+                maybeOldConfigBeanInfo, transactionModuleJMXRegistration, isDefaultBean, bundleContext);
         return writableON;
     }
 
@@ -263,14 +275,15 @@ class ConfigTransactionControllerImpl implements
         logger.debug("Destroying module {} in transaction {}", moduleIdentifier, this);
         transactionStatus.checkNotAborted();
 
+        ModuleInternalTransactionalInfo found = dependencyResolverManager.findModuleInternalTransactionalInfo(moduleIdentifier);
         if (blankTransaction == false) {
-            ModuleInternalTransactionalInfo found =
-                    dependencyResolverManager.findModuleInternalTransactionalInfo(moduleIdentifier);
+
             if (found.isDefaultBean()) {
                 logger.warn("Warning: removing default bean. This will be forbidden in next version of config-subsystem");
             }
         }
         // first remove refNames, it checks for objectname existence
+
         try {
             writableSRRegistry.removeServiceReferences(
                     ObjectNameUtil.createTransactionModuleON(getTransactionName(), moduleIdentifier));
@@ -570,7 +583,7 @@ class ConfigTransactionControllerImpl implements
     }
 
     @Override
-    public ServiceReferenceWritableRegistry getWritableRegistry() {
+    public SearchableServiceReferenceWritableRegistry  getWritableRegistry() {
         return writableSRRegistry;
     }
 
index f6164e32561d7ad5688abde93ac6cb4bc96cbec1..c9df3409db46366acbae22d44166e05202e844fc 100644 (file)
@@ -7,17 +7,15 @@
  */
 package org.opendaylight.controller.config.manager.impl;
 
-import java.util.Collection;
-import java.util.List;
-
-import javax.management.ObjectName;
-
 import org.opendaylight.controller.config.api.ModuleIdentifier;
-import org.opendaylight.controller.config.api.ServiceReferenceWritableRegistry;
 import org.opendaylight.controller.config.api.ValidationException;
 import org.opendaylight.controller.config.spi.ModuleFactory;
 import org.osgi.framework.BundleContext;
 
+import javax.management.ObjectName;
+import java.util.Collection;
+import java.util.List;
+
 /**
  * Defines contract between {@link ConfigTransactionControllerImpl} (producer)
  * and {@link ConfigRegistryImpl} (consumer).
@@ -73,7 +71,7 @@ interface ConfigTransactionControllerInternal extends
 
     BundleContext getModuleFactoryBundleContext(String factoryName);
 
-    ServiceReferenceWritableRegistry getWritableRegistry();
+    SearchableServiceReferenceWritableRegistry  getWritableRegistry();
 
     TransactionIdentifier getTransactionIdentifier();
 
index ba7ab7fcba924743c4ea579797f1dffbd117c7cb..d34a739703e8f8eba7d60a90ca6fa713a301f802 100644 (file)
@@ -6,6 +6,8 @@ import org.slf4j.LoggerFactory;
 
 import javax.annotation.Nullable;
 import javax.annotation.concurrent.GuardedBy;
+import java.util.Deque;
+import java.util.LinkedList;
 import java.util.concurrent.TimeUnit;
 
 public class DeadlockMonitor implements AutoCloseable {
@@ -16,7 +18,9 @@ public class DeadlockMonitor implements AutoCloseable {
     private final TransactionIdentifier transactionIdentifier;
     private final DeadlockMonitorRunnable thread;
     @GuardedBy("this")
-    private ModuleIdentifierWithNanos moduleIdentifierWithNanos = new ModuleIdentifierWithNanos();
+    private final Deque<ModuleIdentifierWithNanos> moduleIdentifierWithNanosStack = new LinkedList<>();
+    @GuardedBy("this")
+    private ModuleIdentifierWithNanos top = ModuleIdentifierWithNanos.EMPTY;
 
     public DeadlockMonitor(TransactionIdentifier transactionIdentifier) {
         this.transactionIdentifier = transactionIdentifier;
@@ -25,7 +29,21 @@ public class DeadlockMonitor implements AutoCloseable {
     }
 
     public synchronized void setCurrentlyInstantiatedModule(ModuleIdentifier currentlyInstantiatedModule) {
-        this.moduleIdentifierWithNanos = new ModuleIdentifierWithNanos(currentlyInstantiatedModule);
+
+        boolean popping = currentlyInstantiatedModule == null;
+        if (popping) {
+            moduleIdentifierWithNanosStack.pop();
+            if (moduleIdentifierWithNanosStack.isEmpty()) {
+                top = ModuleIdentifierWithNanos.EMPTY;
+            } else {
+                top = moduleIdentifierWithNanosStack.peekLast();
+            }
+        } else {
+            ModuleIdentifierWithNanos current = new ModuleIdentifierWithNanos(currentlyInstantiatedModule);
+            moduleIdentifierWithNanosStack.push(current);
+            top = current;
+        }
+        logger.trace("setCurrentlyInstantiatedModule {}, top {}", currentlyInstantiatedModule, top);
     }
 
     public boolean isAlive() {
@@ -52,11 +70,11 @@ public class DeadlockMonitor implements AutoCloseable {
         public void run() {
             ModuleIdentifierWithNanos old = new ModuleIdentifierWithNanos(); // null moduleId
             while (this.isInterrupted() == false) {
-                ModuleIdentifierWithNanos copy = new ModuleIdentifierWithNanos(DeadlockMonitor.this.moduleIdentifierWithNanos);
-                if (old.moduleIdentifier == null) {
+                ModuleIdentifierWithNanos copy = new ModuleIdentifierWithNanos(DeadlockMonitor.this.top);
+                if (old.moduleIdentifier == null || old.equals(copy) == false) {
                     // started
                     old = copy;
-                } else if (old.moduleIdentifier != null && old.equals(copy)) {
+                } else {
                     // is the getInstance() running longer than WARN_AFTER_MILLIS ?
                     long runningTime = TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - copy.nanoTime);
                     if (runningTime > WARN_AFTER_MILLIS) {
@@ -78,14 +96,18 @@ public class DeadlockMonitor implements AutoCloseable {
         }
     }
 
-    private class ModuleIdentifierWithNanos {
+
+
+
+    private static class ModuleIdentifierWithNanos {
+        private static ModuleIdentifierWithNanos EMPTY = new ModuleIdentifierWithNanos();
         @Nullable
         private final ModuleIdentifier moduleIdentifier;
+
         private final long nanoTime;
 
         private ModuleIdentifierWithNanos() {
-            moduleIdentifier = null;
-            nanoTime = System.nanoTime();
+            this((ModuleIdentifier)null);
         }
 
         private ModuleIdentifierWithNanos(ModuleIdentifier moduleIdentifier) {
@@ -118,5 +140,12 @@ public class DeadlockMonitor implements AutoCloseable {
             result = 31 * result + (int) (nanoTime ^ (nanoTime >>> 32));
             return result;
         }
+
+        @Override
+        public String toString() {
+            return "ModuleIdentifierWithNanos{" +
+                    moduleIdentifier +
+                    '}';
+        }
     }
 }
index fd6262cb8cf34f222b70c0e643bf9edc688d46b5..76299e67a287fc922dbd034bddeeecd8df361602 100644 (file)
@@ -15,7 +15,9 @@ import org.opendaylight.controller.config.manager.impl.dynamicmbean.DynamicReada
 import org.opendaylight.controller.config.manager.impl.jmx.ModuleJMXRegistrator;
 import org.opendaylight.controller.config.manager.impl.jmx.RootRuntimeBeanRegistratorImpl;
 import org.opendaylight.controller.config.manager.impl.osgi.BeanToOsgiServiceManager.OsgiRegistration;
+import org.opendaylight.controller.config.spi.ModuleFactory;
 import org.opendaylight.yangtools.concepts.Identifiable;
+import org.osgi.framework.BundleContext;
 
 /**
  * Provides metadata about Module from controller to registry.
@@ -37,13 +39,15 @@ public class ModuleInternalInfo implements Comparable<ModuleInternalInfo>,
     private final ModuleJMXRegistrator moduleJMXRegistrator;
     private final int orderingIdx;
     private final boolean isDefaultBean;
+    private final ModuleFactory moduleFactory;
+    private final BundleContext bundleContext;
 
     public ModuleInternalInfo(ModuleIdentifier name,
             @Nullable DynamicReadableWrapper readableModule,
             OsgiRegistration osgiRegistration,
             RootRuntimeBeanRegistratorImpl runtimeBeanRegistrator,
             ModuleJMXRegistrator moduleJMXRegistrator, int orderingIdx,
-            boolean isDefaultBean) {
+            boolean isDefaultBean, ModuleFactory moduleFactory, BundleContext bundleContext) {
 
         if (osgiRegistration == null) {
             throw new IllegalArgumentException(
@@ -60,6 +64,8 @@ public class ModuleInternalInfo implements Comparable<ModuleInternalInfo>,
         this.moduleJMXRegistrator = moduleJMXRegistrator;
         this.orderingIdx = orderingIdx;
         this.isDefaultBean = isDefaultBean;
+        this.moduleFactory = moduleFactory;
+        this.bundleContext = bundleContext;
     }
 
     public DynamicReadableWrapper getReadableModule() {
@@ -120,4 +126,12 @@ public class ModuleInternalInfo implements Comparable<ModuleInternalInfo>,
     public boolean isDefaultBean() {
         return isDefaultBean;
     }
+
+    public ModuleFactory getModuleFactory() {
+        return moduleFactory;
+    }
+
+    public BundleContext getBundleContext() {
+        return bundleContext;
+    }
 }
diff --git a/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/SearchableServiceReferenceWritableRegistry.java b/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/SearchableServiceReferenceWritableRegistry.java
new file mode 100644 (file)
index 0000000..7a41a3b
--- /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.config.manager.impl;
+
+import java.util.Map;
+import org.opendaylight.controller.config.api.ModuleIdentifier;
+import org.opendaylight.controller.config.api.ServiceReferenceWritableRegistry;
+import org.opendaylight.controller.config.api.annotations.ServiceInterfaceAnnotation;
+
+public interface SearchableServiceReferenceWritableRegistry extends ServiceReferenceWritableRegistry {
+    /**
+     * Return mapping between service ref names and service interface annotation for given
+     * module.
+     *
+     * @throws java.lang.IllegalArgumentException if any of service qNames is not found
+     * @throws java.lang.NullPointerException     if parameter is null
+     */
+    Map<String /* service ref */, ServiceInterfaceAnnotation> findServiceInterfaces(ModuleIdentifier moduleIdentifier);
+
+}
index bf35fd1ed86f6b8249dcb4a7ca386d85ad2a53d1..ceea99415471d1ecd48a0d2cd17f469174aa792a 100644 (file)
@@ -7,6 +7,17 @@
  */
 package org.opendaylight.controller.config.manager.impl;
 
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import javax.management.InstanceAlreadyExistsException;
+import javax.management.InstanceNotFoundException;
+import javax.management.ObjectName;
 import org.opendaylight.controller.config.api.LookupRegistry;
 import org.opendaylight.controller.config.api.ModuleIdentifier;
 import org.opendaylight.controller.config.api.ServiceReferenceReadableRegistry;
@@ -26,17 +37,7 @@ import org.osgi.framework.BundleContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import javax.management.InstanceAlreadyExistsException;
-import javax.management.InstanceNotFoundException;
-import javax.management.ObjectName;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-
-public class ServiceReferenceRegistryImpl implements CloseableServiceReferenceReadableRegistry, ServiceReferenceWritableRegistry {
+public class ServiceReferenceRegistryImpl implements CloseableServiceReferenceReadableRegistry, SearchableServiceReferenceWritableRegistry {
     private static final Logger logger = LoggerFactory.getLogger(ServiceReferenceRegistryImpl.class);
 
     private final Map<String, ModuleFactory> factories;
@@ -46,8 +47,11 @@ public class ServiceReferenceRegistryImpl implements CloseableServiceReferenceRe
     private final ServiceReferenceRegistrator serviceReferenceRegistrator;
     // helper method for getting QName of SI from namespace + local name
     private final Map<String /* namespace */, Map<String /* local name */, ServiceInterfaceAnnotation>> namespacesToAnnotations;
+    private final Map<String /* service qName */, ServiceInterfaceAnnotation> serviceQNamesToAnnotations;
     // all Service Interface qNames for sanity checking
     private final Set<String /* qName */> allQNames;
+    Map<ModuleIdentifier, Map<String /* service ref name */, ServiceInterfaceAnnotation >> modulesToServiceRef = new HashMap<>();
+
 
     // actual reference database
     private final Map<ServiceReference, ModuleIdentifier> refNames = new HashMap<>();
@@ -124,7 +128,7 @@ public class ServiceReferenceRegistryImpl implements CloseableServiceReferenceRe
     /**
      * Static constructor for transaction controller. Take current state as seen by config registry, allow writing new data.
      */
-    public static ServiceReferenceWritableRegistry createSRWritableRegistry(ServiceReferenceReadableRegistry oldReadableRegistry,
+    public static SearchableServiceReferenceWritableRegistry createSRWritableRegistry(ServiceReferenceReadableRegistry oldReadableRegistry,
                                                     ConfigTransactionLookupRegistry txLookupRegistry,
                                                     Map<String, Map.Entry<ModuleFactory, BundleContext>> currentlyRegisteredFactories) {
 
@@ -198,16 +202,15 @@ public class ServiceReferenceRegistryImpl implements CloseableServiceReferenceRe
         Map<String, Set<String /* QName */>> modifiableFactoryNamesToQNames = new HashMap<>();
         Set<ServiceInterfaceAnnotation> allAnnotations = new HashSet<>();
         Set<String /* qName */> allQNames = new HashSet<>();
+
+
         for (Entry<String, ModuleFactory> entry : factories.entrySet()) {
             if (entry.getKey().equals(entry.getValue().getImplementationName()) == false) {
                 logger.error("Possible error in code: Mismatch between supplied and actual name of {}", entry);
                 throw new IllegalArgumentException("Possible error in code: Mismatch between supplied and actual name of " + entry);
             }
             Set<ServiceInterfaceAnnotation> siAnnotations = InterfacesHelper.getServiceInterfaceAnnotations(entry.getValue());
-            Set<String> qNames = new HashSet<>();
-            for (ServiceInterfaceAnnotation sia: siAnnotations) {
-                qNames.add(sia.value());
-            }
+            Set<String> qNames = InterfacesHelper.getQNames(siAnnotations);
             allAnnotations.addAll(siAnnotations);
             allQNames.addAll(qNames);
             modifiableFactoryNamesToQNames.put(entry.getKey(), Collections.unmodifiableSet(qNames));
@@ -217,6 +220,7 @@ public class ServiceReferenceRegistryImpl implements CloseableServiceReferenceRe
         // fill namespacesToAnnotations
         Map<String /* namespace */, Map<String /* localName */, ServiceInterfaceAnnotation>> modifiableNamespacesToAnnotations =
                 new HashMap<>();
+        Map<String /* service qName*/, ServiceInterfaceAnnotation> modifiableServiceQNamesToAnnotations = new HashMap<>();
         for (ServiceInterfaceAnnotation sia : allAnnotations) {
             Map<String, ServiceInterfaceAnnotation> ofNamespace = modifiableNamespacesToAnnotations.get(sia.namespace());
             if (ofNamespace == null) {
@@ -229,12 +233,21 @@ public class ServiceReferenceRegistryImpl implements CloseableServiceReferenceRe
                 throw new IllegalArgumentException("Conflict between local names in " + sia.namespace() + " : " + sia.localName());
             }
             ofNamespace.put(sia.localName(), sia);
+            modifiableServiceQNamesToAnnotations.put(sia.value(), sia);
         }
         this.namespacesToAnnotations = Collections.unmodifiableMap(modifiableNamespacesToAnnotations);
-        // copy refNames
+        this.serviceQNamesToAnnotations = Collections.unmodifiableMap(modifiableServiceQNamesToAnnotations);
         logger.trace("factoryNamesToQNames:{}", this.factoryNamesToQNames);
     }
 
+    @Override
+    public Map<String /* service ref */, ServiceInterfaceAnnotation> findServiceInterfaces(ModuleIdentifier moduleIdentifier) {
+        Map<String, ServiceInterfaceAnnotation> result = modulesToServiceRef.get(moduleIdentifier);
+        if (result == null) {
+            return Collections.emptyMap();
+        }
+        return Collections.unmodifiableMap(result);
+    }
 
     @Override
     public synchronized Set<String> lookupServiceInterfaceNames(ObjectName objectName) throws InstanceNotFoundException {
@@ -271,7 +284,7 @@ public class ServiceReferenceRegistryImpl implements CloseableServiceReferenceRe
     public synchronized Map<String /* serviceInterfaceName */, Map<String/* refName */, ObjectName>> getServiceMapping() {
         Map<String /* serviceInterfaceName */, Map<String/* refName */, ObjectName>> result = new HashMap<>();
         for (Entry<ServiceReference, ModuleIdentifier> entry: refNames.entrySet()) {
-            String qName = entry.getKey().getServiceInterfaceName();
+            String qName = entry.getKey().getServiceInterfaceQName();
             Map<String /* refName */, ObjectName> innerMap = result.get(qName);
             if (innerMap == null) {
                 innerMap = new HashMap<>();
@@ -379,9 +392,9 @@ public class ServiceReferenceRegistryImpl implements CloseableServiceReferenceRe
             throw new IllegalStateException("Possible error in code: cannot find annotations of existing factory " + moduleIdentifier.getFactoryName());
         }
         // supplied serviceInterfaceName must exist in this collection
-        if (serviceInterfaceQNames.contains(serviceReference.getServiceInterfaceName()) == false) {
-            logger.error("Cannot find qName {} with factory name {}, found {}", serviceReference.getServiceInterfaceName(), moduleIdentifier.getFactoryName(), serviceInterfaceQNames);
-            throw new IllegalArgumentException("Cannot find service interface " + serviceReference.getServiceInterfaceName() + " within factory " + moduleIdentifier.getFactoryName());
+        if (serviceInterfaceQNames.contains(serviceReference.getServiceInterfaceQName()) == false) {
+            logger.error("Cannot find qName {} with factory name {}, found {}", serviceReference.getServiceInterfaceQName(), moduleIdentifier.getFactoryName(), serviceInterfaceQNames);
+            throw new IllegalArgumentException("Cannot find service interface " + serviceReference.getServiceInterfaceQName() + " within factory " + moduleIdentifier.getFactoryName());
         }
 
 
@@ -404,6 +417,15 @@ public class ServiceReferenceRegistryImpl implements CloseableServiceReferenceRe
         }
         // save to refNames
         refNames.put(serviceReference, moduleIdentifier);
+        Map<String, ServiceInterfaceAnnotation> refNamesToAnnotations = modulesToServiceRef.get(moduleIdentifier);
+        if (refNamesToAnnotations == null){
+            refNamesToAnnotations = new HashMap<>();
+            modulesToServiceRef.put(moduleIdentifier, refNamesToAnnotations);
+        }
+
+        ServiceInterfaceAnnotation annotation = serviceQNamesToAnnotations.get(serviceReference.getServiceInterfaceQName());
+        checkNotNull(annotation, "Possible error in code, cannot find annotation for " + serviceReference);
+        refNamesToAnnotations.put(serviceReference.getRefName(), annotation);
         return result;
     }
 
@@ -430,9 +452,9 @@ public class ServiceReferenceRegistryImpl implements CloseableServiceReferenceRe
     private ObjectName getServiceON(ServiceReference serviceReference) {
         if (writable) {
             return ObjectNameUtil.createTransactionServiceON(serviceReferenceRegistrator.getNullableTransactionName(),
-                    serviceReference.getServiceInterfaceName(), serviceReference.getRefName());
+                    serviceReference.getServiceInterfaceQName(), serviceReference.getRefName());
         } else {
-            return ObjectNameUtil.createReadOnlyServiceON(serviceReference.getServiceInterfaceName(), serviceReference.getRefName());
+            return ObjectNameUtil.createReadOnlyServiceON(serviceReference.getServiceInterfaceQName(), serviceReference.getRefName());
         }
     }
 
@@ -446,13 +468,13 @@ public class ServiceReferenceRegistryImpl implements CloseableServiceReferenceRe
         logger.debug("Removing service reference {} from {}", serviceReference, this);
         assertWritable();
         // is the qName known?
-        if (allQNames.contains(serviceReference.getServiceInterfaceName()) == false) {
-            logger.error("Cannot find qname {} in {}", serviceReference.getServiceInterfaceName(), allQNames);
-            throw new IllegalArgumentException("Cannot find service interface " + serviceReference.getServiceInterfaceName());
+        if (allQNames.contains(serviceReference.getServiceInterfaceQName()) == false) {
+            logger.error("Cannot find qname {} in {}", serviceReference.getServiceInterfaceQName(), allQNames);
+            throw new IllegalArgumentException("Cannot find service interface " + serviceReference.getServiceInterfaceQName());
         }
         ModuleIdentifier removed = refNames.remove(serviceReference);
         if (removed == null){
-            throw new InstanceNotFoundException("Cannot find " + serviceReference.getServiceInterfaceName());
+            throw new InstanceNotFoundException("Cannot find " + serviceReference.getServiceInterfaceQName());
         }
         Entry<ServiceReferenceMXBeanImpl, ServiceReferenceJMXRegistration> entry = mBeans.remove(serviceReference);
         if (entry == null) {
@@ -475,21 +497,28 @@ public class ServiceReferenceRegistryImpl implements CloseableServiceReferenceRe
 
     @Override
     public synchronized boolean removeServiceReferences(ObjectName moduleObjectName) throws InstanceNotFoundException {
+        lookupRegistry.checkConfigBeanExists(moduleObjectName);
+        String factoryName = ObjectNameUtil.getFactoryName(moduleObjectName);
+        // check that service interface name exist
+        Set<String> serviceInterfaceQNames = factoryNamesToQNames.get(factoryName);
+        return removeServiceReferences(moduleObjectName, serviceInterfaceQNames);
+    }
+
+
+    private boolean removeServiceReferences(ObjectName moduleObjectName, Set<String> qNames) throws InstanceNotFoundException {
+        ObjectNameUtil.checkType(moduleObjectName, ObjectNameUtil.TYPE_MODULE);
         assertWritable();
-        Set<ServiceReference> serviceReferencesLinkingTo = findServiceReferencesLinkingTo(moduleObjectName);
+        Set<ServiceReference> serviceReferencesLinkingTo = findServiceReferencesLinkingTo(moduleObjectName, qNames);
         for (ServiceReference sr : serviceReferencesLinkingTo) {
             removeServiceReference(sr);
         }
         return serviceReferencesLinkingTo.isEmpty() == false;
     }
 
-    private synchronized Set<ServiceReference> findServiceReferencesLinkingTo(ObjectName moduleObjectName)  throws InstanceNotFoundException {
-        lookupRegistry.checkConfigBeanExists(moduleObjectName);
+    private Set<ServiceReference> findServiceReferencesLinkingTo(ObjectName moduleObjectName, Set<String> serviceInterfaceQNames) {
         String factoryName = ObjectNameUtil.getFactoryName(moduleObjectName);
-        // check that service interface name exist
-        Set<String> serviceInterfaceQNames = factoryNamesToQNames.get(factoryName);
         if (serviceInterfaceQNames == null) {
-            logger.error("Possible error in code: cannot find factoryName {} in {}, object name {}", factoryName, factoryNamesToQNames, moduleObjectName);
+            logger.warn("Possible error in code: cannot find factoryName {} in {}, object name {}", factoryName, factoryNamesToQNames, moduleObjectName);
             throw new IllegalStateException("Possible error in code: cannot find annotations of existing factory " + factoryName);
         }
         String instanceName = ObjectNameUtil.getInstanceName(moduleObjectName);
@@ -503,7 +532,6 @@ public class ServiceReferenceRegistryImpl implements CloseableServiceReferenceRe
         return result;
     }
 
-
     @Override
     public String toString() {
         return "ServiceReferenceRegistryImpl{" +
index b99bf8330e5be412a6965ff78ccad4bb4b520c14..0c1531728fb1b58488fe6623047c0fd804528824 100644 (file)
@@ -7,8 +7,19 @@
  */
 package org.opendaylight.controller.config.manager.impl.dependencyresolver;
 
+import static com.google.common.base.Preconditions.checkState;
+
 import com.google.common.reflect.AbstractInvocationHandler;
 import com.google.common.reflect.Reflection;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.annotation.concurrent.GuardedBy;
+import javax.management.InstanceAlreadyExistsException;
 import org.opendaylight.controller.config.api.DependencyResolver;
 import org.opendaylight.controller.config.api.DependencyResolverFactory;
 import org.opendaylight.controller.config.api.JmxAttribute;
@@ -24,18 +35,7 @@ import org.opendaylight.controller.config.manager.impl.jmx.TransactionModuleJMXR
 import org.opendaylight.controller.config.spi.Module;
 import org.opendaylight.controller.config.spi.ModuleFactory;
 import org.opendaylight.yangtools.yang.data.impl.codec.CodecRegistry;
-
-import javax.annotation.concurrent.GuardedBy;
-import javax.management.InstanceAlreadyExistsException;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import static com.google.common.base.Preconditions.checkState;
+import org.osgi.framework.BundleContext;
 
 /**
  * Holds information about modules being created and destroyed within this
@@ -117,7 +117,7 @@ public class DependencyResolverManager implements DependencyResolverFactory, Aut
             ModuleFactory moduleFactory,
             ModuleInternalInfo maybeOldInternalInfo,
             TransactionModuleJMXRegistration transactionModuleJMXRegistration,
-            boolean isDefaultBean) {
+            boolean isDefaultBean, BundleContext bundleContext) {
         transactionStatus.checkNotCommitted();
 
         Class<? extends Module> moduleClass = Module.class;
@@ -159,7 +159,7 @@ public class DependencyResolverManager implements DependencyResolverFactory, Aut
 
         ModuleInternalTransactionalInfo moduleInternalTransactionalInfo = new ModuleInternalTransactionalInfo(
                 moduleIdentifier, proxiedModule, moduleFactory,
-                maybeOldInternalInfo, transactionModuleJMXRegistration, isDefaultBean, module);
+                maybeOldInternalInfo, transactionModuleJMXRegistration, isDefaultBean, module, bundleContext);
         modulesHolder.put(moduleInternalTransactionalInfo);
     }
 
index e9f573a05def40ec079dc3a45522698358ed8ee0..13424a60eb016cd1bfc1fb892d3c72da36cf8f35 100644 (file)
@@ -16,6 +16,7 @@ import org.opendaylight.controller.config.spi.ModuleFactory;
 import org.opendaylight.yangtools.concepts.Identifiable;
 
 import javax.annotation.Nullable;
+import org.osgi.framework.BundleContext;
 
 public class ModuleInternalTransactionalInfo implements Identifiable<ModuleIdentifier> {
     private final ModuleIdentifier name;
@@ -25,12 +26,13 @@ public class ModuleInternalTransactionalInfo implements Identifiable<ModuleIdent
     private final ModuleInternalInfo maybeOldInternalInfo;
     private final TransactionModuleJMXRegistration transactionModuleJMXRegistration;
     private final boolean isDefaultBean;
+    private final BundleContext bundleContext;
 
     public ModuleInternalTransactionalInfo(ModuleIdentifier name, Module proxiedModule,
                                            ModuleFactory moduleFactory,
                                            ModuleInternalInfo maybeOldInternalInfo,
                                            TransactionModuleJMXRegistration transactionModuleJMXRegistration,
-                                           boolean isDefaultBean, Module realModule) {
+                                           boolean isDefaultBean, Module realModule, BundleContext bundleContext) {
         this.name = name;
         this.proxiedModule = proxiedModule;
         this.moduleFactory = moduleFactory;
@@ -38,6 +40,7 @@ public class ModuleInternalTransactionalInfo implements Identifiable<ModuleIdent
         this.transactionModuleJMXRegistration = transactionModuleJMXRegistration;
         this.isDefaultBean = isDefaultBean;
         this.realModule = realModule;
+        this.bundleContext = bundleContext;
     }
 
 
@@ -90,4 +93,8 @@ public class ModuleInternalTransactionalInfo implements Identifiable<ModuleIdent
     public Module getRealModule() {
         return realModule;
     }
+
+    public BundleContext getBundleContext() {
+        return bundleContext;
+    }
 }
index adc8168af5d85b0aee22e717cb59cda7b8939b8f..c212300fa6bb0642c3a665d7552b62857edff4d4 100644 (file)
@@ -8,17 +8,16 @@
 package org.opendaylight.controller.config.manager.impl.factoriesresolver;
 
 
-import org.opendaylight.controller.config.spi.ModuleFactory;
-import org.osgi.framework.BundleContext;
-
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
-import java.util.Map.Entry;
 import java.util.Set;
 import java.util.TreeSet;
+import javax.management.InstanceNotFoundException;
+import org.opendaylight.controller.config.spi.ModuleFactory;
+import org.osgi.framework.BundleContext;
 
 /**
  * Hold sorted ConfigMBeanFactories by their module names. Check that module
@@ -56,10 +55,10 @@ public class HierarchicalConfigMBeanFactoriesHolder {
      * @throws IllegalArgumentException
      *             if factory is not found
      */
-    public ModuleFactory findByModuleName(String moduleName) {
+    public ModuleFactory findByModuleName(String moduleName) throws InstanceNotFoundException {
         Map.Entry<ModuleFactory, BundleContext> result = moduleNamesToConfigBeanFactories.get(moduleName);
         if (result == null) {
-            throw new IllegalArgumentException(
+            throw new InstanceNotFoundException(
                     "ModuleFactory not found with module name: " + moduleName);
         }
         return result.getKey();
@@ -73,7 +72,4 @@ public class HierarchicalConfigMBeanFactoriesHolder {
         return moduleFactories;
     }
 
-    public Map<String, Entry<ModuleFactory, BundleContext>> getModuleNamesToConfigBeanFactories() {
-        return moduleNamesToConfigBeanFactories;
-    }
 }
index cd74ddf7565a32fd74e650cde1d50e720966d506..3ad35ac5b5f48d27041244f795a35f32ca781972 100644 (file)
@@ -15,7 +15,7 @@ public class ServiceReference {
         this.refName = refName;
     }
 
-    public String getServiceInterfaceName() {
+    public String getServiceInterfaceQName() {
         return serviceInterfaceName;
     }
 
@@ -50,4 +50,12 @@ public class ServiceReference {
         result = 31 * result + refName.hashCode();
         return result;
     }
+
+    @Override
+    public String toString() {
+        return "ServiceReference{" +
+                "serviceInterfaceName='" + serviceInterfaceName + '\'' +
+                ", refName='" + refName + '\'' +
+                '}';
+    }
 }
index 41f577844af5ed448a322a9a21f2f410782632cd..fbc7eb6cbe7925ef6da5a96ad69e8c1a38433007 100644 (file)
  */
 package org.opendaylight.controller.config.manager.impl.osgi;
 
-import org.opendaylight.controller.config.api.ModuleIdentifier;
-import org.opendaylight.controller.config.api.annotations.ServiceInterfaceAnnotation;
-import org.opendaylight.controller.config.manager.impl.util.InterfacesHelper;
-import org.opendaylight.controller.config.spi.Module;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceRegistration;
+import static com.google.common.base.Preconditions.checkState;
 
 import java.util.Dictionary;
 import java.util.HashSet;
 import java.util.Hashtable;
+import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Set;
+import javax.annotation.concurrent.GuardedBy;
+import org.opendaylight.controller.config.api.ModuleIdentifier;
+import org.opendaylight.controller.config.api.annotations.ServiceInterfaceAnnotation;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceRegistration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Registers instantiated beans as OSGi services and unregisters these services
  * if beans are destroyed.
  */
 public class BeanToOsgiServiceManager {
-    // name of properties submitted to osgi
-    static final String INSTANCE_NAME_OSGI_PROP = "instanceName";
-    static final String IMPLEMENTATION_NAME_OSGI_PROP = "implementationName";
+    private static final String SERVICE_NAME_OSGI_PROP = "name";
 
     /**
      * To be called for every created, reconfigured and recreated config bean.
      * It is expected that before using this method OSGi service registry will
      * be cleaned from previous registrations.
      */
-    public OsgiRegistration registerToOsgi(
-            Class<? extends Module> configBeanClass, AutoCloseable instance,
-            ModuleIdentifier moduleIdentifier, BundleContext bundleContext) {
-        try {
-            final Set<Class<?>> configuresInterfaces = InterfacesHelper
-                    .getOsgiRegistrationTypes(configBeanClass);
-            checkInstanceImplementing(instance, configuresInterfaces);
-
-            // bundleContext.registerService blows up with empty 'clazzes'
-            if (configuresInterfaces.isEmpty() == false) {
-                final Dictionary<String, ?> propertiesForOsgi = getPropertiesForOsgi(moduleIdentifier);
-                final ServiceRegistration<?> serviceRegistration = bundleContext
-                        .registerService(classesToNames(configuresInterfaces), instance, propertiesForOsgi);
-                return new OsgiRegistration(serviceRegistration);
-            } else {
-                return new OsgiRegistration();
-            }
-        } catch (IllegalStateException e) {
-            throw new IllegalStateException(
-                    "Error while registering instance into OSGi Service Registry: "
-                            + moduleIdentifier, e);
-        }
+    public OsgiRegistration registerToOsgi(AutoCloseable instance, ModuleIdentifier moduleIdentifier,
+                                           BundleContext bundleContext,
+                                           Map<String, ServiceInterfaceAnnotation> serviceNamesToAnnotations) {
+        return new OsgiRegistration(instance, moduleIdentifier, bundleContext, serviceNamesToAnnotations);
     }
 
-    private static String[] classesToNames(Set<Class<?>> cfgs) {
-        String[] result = new String[cfgs.size()];
-        int i = 0;
-        for (Class<?> cfg : cfgs) {
-            result[i] = cfg.getName();
-            i++;
-        }
+    private static Dictionary<String, String> createProps(String serviceName) {
+        Hashtable<String, String> result = new Hashtable<>();
+        result.put(SERVICE_NAME_OSGI_PROP, serviceName);
         return result;
     }
 
-    private void checkInstanceImplementing(AutoCloseable instance,
-            Set<Class<?>> configures) {
-        Set<Class<?>> missing = new HashSet<>();
-        for (Class<?> requiredIfc : configures) {
-            if (requiredIfc.isInstance(instance) == false) {
-                missing.add(requiredIfc);
-            }
-        }
-        if (missing.isEmpty() == false) {
-            throw new IllegalStateException(
-                    instance.getClass()
-                            + " does not implement following interfaces as announced by "
-                            + ServiceInterfaceAnnotation.class.getName()
-                            + " annotation :" + missing);
-        }
-    }
-
-    private static Dictionary<String, ?> getPropertiesForOsgi(
-            ModuleIdentifier moduleIdentifier) {
-        Hashtable<String, String> table = new Hashtable<>();
-        table.put(IMPLEMENTATION_NAME_OSGI_PROP,
-                moduleIdentifier.getFactoryName());
-        table.put(INSTANCE_NAME_OSGI_PROP, moduleIdentifier.getInstanceName());
-        return table;
-    }
 
     public static class OsgiRegistration implements AutoCloseable {
-        private final ServiceRegistration<?> serviceRegistration;
+        private static final Logger logger = LoggerFactory.getLogger(OsgiRegistration.class);
 
-        public OsgiRegistration(ServiceRegistration<?> serviceRegistration) {
-            this.serviceRegistration = serviceRegistration;
+        @GuardedBy("this")
+        private AutoCloseable instance;
+        private final ModuleIdentifier moduleIdentifier;
+        @GuardedBy("this")
+        private final Set<ServiceRegistration<?>> serviceRegistrations;
+        @GuardedBy("this")
+        private final Map<String, ServiceInterfaceAnnotation> serviceNamesToAnnotations;
+
+        public OsgiRegistration(AutoCloseable instance, ModuleIdentifier moduleIdentifier,
+                                BundleContext bundleContext,
+                                Map<String, ServiceInterfaceAnnotation> serviceNamesToAnnotations) {
+            this.instance = instance;
+            this.moduleIdentifier = moduleIdentifier;
+            this.serviceNamesToAnnotations = serviceNamesToAnnotations;
+            this.serviceRegistrations = registerToSR(instance, bundleContext, serviceNamesToAnnotations);
         }
 
-        public OsgiRegistration() {
-            this.serviceRegistration = null;
+        private static Set<ServiceRegistration<?>> registerToSR(AutoCloseable instance, BundleContext bundleContext,
+                                                                Map<String, ServiceInterfaceAnnotation> serviceNamesToAnnotations) {
+            Set<ServiceRegistration<?>> serviceRegistrations = new HashSet<>();
+            for (Entry<String, ServiceInterfaceAnnotation> entry : serviceNamesToAnnotations.entrySet()) {
+                Class<?> requiredInterface = entry.getValue().osgiRegistrationType();
+                checkState(requiredInterface.isInstance(instance), instance.getClass().getName() +
+                        " instance should implement " + requiredInterface.getName());
+                Dictionary<String, String> propertiesForOsgi = createProps(entry.getKey());
+                ServiceRegistration<?> serviceRegistration = bundleContext
+                        .registerService(requiredInterface.getName(), instance, propertiesForOsgi);
+                serviceRegistrations.add(serviceRegistration);
+            }
+            return serviceRegistrations;
         }
 
         @Override
-        public void close() {
-            if (serviceRegistration != null) {
-                serviceRegistration.unregister();
+        public synchronized void close() {
+            for (ServiceRegistration<?> serviceRegistration : serviceRegistrations) {
+                try {
+                    serviceRegistration.unregister();
+                } catch(IllegalStateException e) {
+                    logger.trace("Cannot unregister {}", serviceRegistration, e);
+                }
             }
+            serviceRegistrations.clear();
         }
-    }
 
+        public synchronized void updateRegistrations(Map<String, ServiceInterfaceAnnotation> newAnnotationMapping,
+                                                     BundleContext bundleContext, AutoCloseable newInstance) {
+            boolean notEquals = this.instance != newInstance;
+            notEquals |= newAnnotationMapping.equals(serviceNamesToAnnotations) == false;
+            if (notEquals) {
+                // FIXME: changing from old state to new state can be improved by computing the diff
+                logger.debug("Detected change in service registrations for {}: old: {}, new: {}", moduleIdentifier,
+                        serviceNamesToAnnotations, newAnnotationMapping);
+                close();
+                this.instance = newInstance;
+                Set<ServiceRegistration<?>> newRegs = registerToSR(instance, bundleContext, newAnnotationMapping);
+                serviceRegistrations.clear();
+                serviceRegistrations.addAll(newRegs);
+            }
+        }
+    }
 }
index 033f7222fcc7fd64103e25336a3b81f669d14adc..a6e9b1ba965b8532eb2e688742ca6ec66c5d5e10 100644 (file)
@@ -120,6 +120,13 @@ public class InterfacesHelper {
         return result;
     }
 
+    public static Set<String> getQNames(Set<ServiceInterfaceAnnotation> siAnnotations) {
+        Set<String> qNames = new HashSet<>();
+        for (ServiceInterfaceAnnotation sia: siAnnotations) {
+            qNames.add(sia.value());
+        }
+        return Collections.unmodifiableSet(qNames);
+    }
 
     public static Set<ServiceInterfaceAnnotation> getServiceInterfaceAnnotations(ModuleFactory factory) {
         Set<Class<? extends AbstractServiceInterface>> implementedServiceIntefaces = Collections.unmodifiableSet(factory.getImplementedServiceIntefaces());
@@ -136,7 +143,7 @@ public class InterfacesHelper {
                 result.add(annotation);
             }
         }
-        return result;
+        return Collections.unmodifiableSet(result);
     }
 
     static Set<Class<? extends AbstractServiceInterface>> getAllAbstractServiceInterfaceClasses(
index 9178dc40d0707501ef8696d279a7cfa1af6c22d1..7efd3ee0309fdfec46fbe9378975403637b43ff2 100644 (file)
@@ -7,13 +7,6 @@
  */
 package org.opendaylight.controller.config.manager;
 
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verifyZeroInteractions;
-
-import java.lang.management.ManagementFactory;
-
 import org.junit.Test;
 import org.opendaylight.controller.config.manager.impl.AbstractLockedPlatformMBeanServerTest;
 import org.opendaylight.controller.config.manager.impl.ConfigRegistryImpl;
@@ -25,6 +18,13 @@ import org.osgi.framework.BundleContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.lang.management.ManagementFactory;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verifyZeroInteractions;
+
 public class ConfigRegistryImplTest extends
         AbstractLockedPlatformMBeanServerTest {
     private static final Logger logger = LoggerFactory
@@ -36,7 +36,7 @@ public class ConfigRegistryImplTest extends
         BundleContext context = mock(BundleContext.class);
         ConfigRegistryImpl configRegistry = null;
         try {
-            ModuleFactoriesResolver resolver = new HardcodedModuleFactoriesResolver(
+            ModuleFactoriesResolver resolver = new HardcodedModuleFactoriesResolver(mock(BundleContext.class),
                     factory, factory);
 
             configRegistry = new ConfigRegistryImpl(resolver,
index 001af7525bb28a915e7b9ec0306bbd03046f24f1..63a37de0c3783179ffaaf33ab535281dcab62290 100644 (file)
@@ -8,9 +8,11 @@
 package org.opendaylight.controller.config.manager.impl;
 
 import com.google.common.base.Preconditions;
-import junit.framework.Assert;
 import org.junit.After;
+import org.junit.Before;
 import org.mockito.Matchers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
 import org.mockito.invocation.InvocationOnMock;
 import org.mockito.stubbing.Answer;
 import org.opendaylight.controller.config.api.jmx.CommitStatus;
@@ -26,24 +28,18 @@ import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;
 import org.opendaylight.yangtools.yang.data.impl.codec.CodecRegistry;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceRegistration;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import javax.management.InstanceAlreadyExistsException;
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
 import javax.management.RuntimeMBeanException;
-import java.io.Closeable;
-import java.io.InputStream;
 import java.lang.management.ManagementFactory;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.lang.reflect.Proxy;
 import java.util.Dictionary;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.Set;
 
@@ -69,29 +65,58 @@ public abstract class AbstractConfigTest extends
     protected ConfigRegistryJMXClient configRegistryClient;
     protected BaseJMXRegistrator baseJmxRegistrator;
     protected InternalJMXRegistrator internalJmxRegistrator;
-    protected BundleContext mockedContext = mock(BundleContext.class);
+    @Mock
+    protected BundleContext mockedContext;
+    @Mock
     protected ServiceRegistration<?> mockedServiceRegistration;
 
-    private static final Logger logger = LoggerFactory.getLogger(AbstractConfigTest.class);
+    @Before
+    public void setUpMocks() {
+        MockitoAnnotations.initMocks(this);
+    }
+
 
     // Default handler for OSGi service registration
-    private static final BundleContextServiceRegistrationHandler noopServiceRegHandler = new BundleContextServiceRegistrationHandler() {
+    protected static class RecordingBundleContextServiceRegistrationHandler implements BundleContextServiceRegistrationHandler {
+        private final List<RegistrationHolder> registrations = new LinkedList<>();
         @Override
-        public void handleServiceRegistration(Object serviceInstance) {}
-    };
+        public void handleServiceRegistration(Class<?> clazz, Object serviceInstance, Dictionary<String, ?> props) {
+
+            registrations.add(new RegistrationHolder(clazz, serviceInstance, props));
+        }
+
+        public List<RegistrationHolder> getRegistrations() {
+            return registrations;
+        }
+
+        protected static class RegistrationHolder {
+            protected final Class<?> clazz;
+            protected final Object instance;
+            protected final Dictionary<String, ?> props;
+
+            public RegistrationHolder(Class<?> clazz, Object instance, Dictionary<String, ?> props) {
+                this.clazz = clazz;
+                this.instance = instance;
+                this.props = props;
+            }
+        }
+
+    }
+
+    protected BundleContextServiceRegistrationHandler currentBundleContextServiceRegistrationHandler;
 
     protected BundleContextServiceRegistrationHandler getBundleContextServiceRegistrationHandler(Class<?> serviceType) {
-        return noopServiceRegHandler;
+        return currentBundleContextServiceRegistrationHandler;
     }
 
     // this method should be called in @Before
     protected void initConfigTransactionManagerImpl(
             ModuleFactoriesResolver resolver) {
+
         final MBeanServer platformMBeanServer = ManagementFactory
                 .getPlatformMBeanServer();
 
-        configRegistryJMXRegistrator = new ConfigRegistryJMXRegistrator(
-                platformMBeanServer);
+        configRegistryJMXRegistrator = new ConfigRegistryJMXRegistrator(platformMBeanServer);
         initBundleContext();
 
         internalJmxRegistrator = new InternalJMXRegistrator(platformMBeanServer);
@@ -106,35 +131,14 @@ public abstract class AbstractConfigTest extends
             throw new RuntimeException(e);
         }
         configRegistryClient = new ConfigRegistryJMXClient(platformMBeanServer);
+        currentBundleContextServiceRegistrationHandler = new RecordingBundleContextServiceRegistrationHandler();
     }
 
     private void initBundleContext() {
-        this.mockedServiceRegistration = mock(ServiceRegistration.class);
         doNothing().when(mockedServiceRegistration).unregister();
-
         RegisterServiceAnswer answer = new RegisterServiceAnswer();
-
-        doAnswer(answer).when(mockedContext).registerService(Matchers.any(String[].class),
-                any(Closeable.class), Matchers.<Dictionary<String, ?>>any());
-        doAnswer(answer).when(mockedContext).registerService(Matchers.<Class<Closeable>>any(), any(Closeable.class),
-                Matchers.<Dictionary<String, ?>>any());
-    }
-
-
-    public Collection<InputStream> getFilesAsInputStreams(List<String> paths) {
-        final Collection<InputStream> resources = new ArrayList<>();
-        List<String> failedToFind = new ArrayList<>();
-        for (String path : paths) {
-            InputStream resourceAsStream = getClass().getResourceAsStream(path);
-            if (resourceAsStream == null) {
-                failedToFind.add(path);
-            } else {
-                resources.add(resourceAsStream);
-            }
-        }
-        Assert.assertEquals("Some files were not found", Collections.<String>emptyList(), failedToFind);
-
-        return resources;
+        doAnswer(answer).when(mockedContext).registerService(Matchers.<String>any(), any(), Matchers.<Dictionary<String, ?>>any());
+        doAnswer(answer).when(mockedContext).registerService(Matchers.<Class>any(), any(), Matchers.<Dictionary<String, ?>>any());
     }
 
     @After
@@ -161,13 +165,6 @@ public abstract class AbstractConfigTest extends
         transaction.commit();
     }
 
-    protected void assertSame(ObjectName oN1, ObjectName oN2) {
-        assertEquals(oN1.getKeyProperty("instanceName"),
-                oN2.getKeyProperty("instanceName"));
-        assertEquals(oN1.getKeyProperty("interfaceName"),
-                oN2.getKeyProperty("interfaceName"));
-    }
-
     protected void assertStatus(CommitStatus status, int expectedNewInstances,
             int expectedRecreatedInstances, int expectedReusedInstances) {
         assertEquals("New instances mismatch in " + status, expectedNewInstances, status.getNewInstances().size());
@@ -177,25 +174,12 @@ public abstract class AbstractConfigTest extends
                 .size());
     }
 
-    protected ObjectName createTestConfigBean(
-            ConfigTransactionJMXClient transaction, String implementationName,
-            String name) throws InstanceAlreadyExistsException {
-        return transaction.createModule(implementationName,
-                name);
-    }
 
     protected void assertBeanCount(int i, String configMXBeanName) {
         assertEquals(i, configRegistry.lookupConfigBeans(configMXBeanName)
                 .size());
     }
 
-    protected void assertBeanExists(int count, String moduleName,
-            String instanceName) {
-        assertEquals(1,
-                configRegistry.lookupConfigBeans(moduleName, instanceName)
-                        .size());
-    }
-
     /**
      *
      * @param configBeanClass
@@ -215,7 +199,7 @@ public abstract class AbstractConfigTest extends
 
     public static interface BundleContextServiceRegistrationHandler {
 
-       void handleServiceRegistration(Object serviceInstance);
+       void handleServiceRegistration(Class<?> clazz, Object serviceInstance, Dictionary<String, ?> props);
 
     }
 
@@ -229,32 +213,40 @@ public abstract class AbstractConfigTest extends
 
             Object serviceTypeRaw = args[0];
             Object serviceInstance = args[1];
+            Dictionary<String, ?> props = (Dictionary) args[2];
 
             if (serviceTypeRaw instanceof Class) {
                 Class<?> serviceType = (Class<?>) serviceTypeRaw;
-                invokeServiceHandler(serviceInstance, serviceType);
+                invokeServiceHandler(serviceInstance, serviceType, props);
 
             } else if(serviceTypeRaw instanceof String[]) {
                 for (String className : (String[]) serviceTypeRaw) {
-                    try {
-                        Class<?> serviceType = Class.forName(className);
-                        invokeServiceHandler(serviceInstance, serviceType);
-                    } catch (ClassNotFoundException e) {
-                        logger.warn("Not handling service registration of type {} ", className, e);
-                    }
+                    invokeServiceHandler(serviceInstance, className, props);
                 }
+            } else if (serviceTypeRaw instanceof String) {
+                invokeServiceHandler(serviceInstance, (String) serviceTypeRaw, props);
+            } else {
+                throw new IllegalStateException("Not handling service registration of type, Unknown type" +  serviceTypeRaw);
+            }
 
-            } else
-                logger.debug("Not handling service registration of type {}, Unknown type", serviceTypeRaw);
 
             return mockedServiceRegistration;
         }
 
-        private void invokeServiceHandler(Object serviceInstance, Class<?> serviceType) {
+        public void invokeServiceHandler(Object serviceInstance, String className, Dictionary<String, ?> props) {
+            try {
+                Class<?> serviceType = Class.forName(className);
+                invokeServiceHandler(serviceInstance, serviceType, props);
+            } catch (ClassNotFoundException e) {
+                throw new IllegalStateException("Not handling service registration of type " +  className, e);
+            }
+        }
+
+        private void invokeServiceHandler(Object serviceInstance, Class<?> serviceType, Dictionary<String, ?> props) {
             BundleContextServiceRegistrationHandler serviceRegistrationHandler = getBundleContextServiceRegistrationHandler(serviceType);
 
             if (serviceRegistrationHandler != null) {
-                serviceRegistrationHandler.handleServiceRegistration(serviceType.cast(serviceInstance));
+                serviceRegistrationHandler.handleServiceRegistration(serviceType, serviceInstance, props);
             }
         }
     }
index 09aea0895fe6e4c6b965d68605e7f86d5ae6fc03..5a3747ee142c7fd35ddef29bde078aef134d290c 100644 (file)
@@ -11,7 +11,6 @@ import com.google.common.collect.Sets;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
-import org.opendaylight.controller.config.api.ServiceReferenceWritableRegistry;
 import org.opendaylight.controller.config.api.jmx.ObjectNameUtil;
 import org.opendaylight.controller.config.manager.impl.jmx.BaseJMXRegistrator;
 import org.opendaylight.controller.config.manager.impl.jmx.TransactionJMXRegistrator;
@@ -70,7 +69,7 @@ public class ConfigTransactionControllerImplTest extends
             }
         }, currentlyRegisteredFactories);
 
-        ServiceReferenceWritableRegistry writableRegistry = ServiceReferenceRegistryImpl.createSRWritableRegistry(
+        SearchableServiceReferenceWritableRegistry writableRegistry = ServiceReferenceRegistryImpl.createSRWritableRegistry(
                 ServiceReferenceRegistryImpl.createInitialSRLookupRegistry(), txLookupRegistry, currentlyRegisteredFactories);
 
 
index bbb3784b33b02e49be8929d39e983e2c4cb7d33a..9595e60ff64ccc325f7d8079cd64fd51ba26ed3c 100644 (file)
@@ -23,7 +23,7 @@ public class ConfigTransactionManagerImplTest extends
 
     @Before
     public void setUp() {
-        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver());
+        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(mockedContext));
 
     }
 
index 6d0b340cd3c1c0720fbe78ee6823098bf92b17ca..3e7b65e1bdcf8f25cfe6c255e43072edc2382f6a 100644 (file)
@@ -11,6 +11,7 @@ import com.google.common.collect.ImmutableMap;
 import org.junit.Before;
 import org.junit.Test;
 import org.opendaylight.controller.config.api.jmx.ObjectNameUtil;
+import org.opendaylight.controller.config.manager.impl.AbstractConfigTest.RecordingBundleContextServiceRegistrationHandler.RegistrationHolder;
 import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;
 import org.opendaylight.controller.config.manager.impl.jmx.ServiceReferenceMXBean;
 import org.opendaylight.controller.config.manager.testingservices.parallelapsp.TestingParallelAPSPModuleFactory;
@@ -18,6 +19,7 @@ import org.opendaylight.controller.config.manager.testingservices.parallelapsp.t
 import org.opendaylight.controller.config.manager.testingservices.scheduledthreadpool.TestingScheduledThreadPoolModuleFactory;
 import org.opendaylight.controller.config.manager.testingservices.seviceinterface.TestingThreadPoolServiceInterface;
 import org.opendaylight.controller.config.manager.testingservices.threadpool.TestingFixedThreadPoolModuleFactory;
+import org.opendaylight.controller.config.manager.testingservices.threadpool.TestingThreadPoolIfc;
 import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;
 
 import javax.management.Attribute;
@@ -27,7 +29,7 @@ import javax.management.JMX;
 import javax.management.MBeanException;
 import javax.management.ObjectName;
 import javax.management.ReflectionException;
-
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
@@ -41,6 +43,7 @@ public class ServiceReferenceRegistryImplTest extends AbstractParallelAPSPTest {
     @Before
     public void setUp() {
         super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(
+                mockedContext,
                 new TestingFixedThreadPoolModuleFactory(),
                 new TestingParallelAPSPModuleFactory(),
                 new TestingScheduledThreadPoolModuleFactory()));
@@ -71,11 +74,19 @@ public class ServiceReferenceRegistryImplTest extends AbstractParallelAPSPTest {
         // create apsp-parallel
         createParallelAPSP(transaction1, serviceReference);
         transaction1.commit();
+
         // check fixed1 is used
         ServiceReferenceMXBean serviceReferenceMXBean = JMX.newMXBeanProxy(platformMBeanServer,
                 withoutTransactionName(serviceReference), ServiceReferenceMXBean.class);
         assertEquals(withoutTransactionName(fixedTPTransactionON), serviceReferenceMXBean.getCurrentImplementation());
         checkApspThreadCount(fixedNrOfThreads);
+        // check OSGi SR
+        List<RegistrationHolder> registrations =
+                ((RecordingBundleContextServiceRegistrationHandler) currentBundleContextServiceRegistrationHandler).getRegistrations();
+        assertEquals(1, registrations.size());
+        RegistrationHolder record = registrations.get(0);
+        assertEquals(TestingThreadPoolIfc.class, record.clazz);
+        assertEquals(ImmutableMap.of("name","ref"), (Map<String, String>) record.props);
 
         // switch reference to scheduled
         ConfigTransactionJMXClient transaction2 = configRegistryClient.createTransaction();
index 123e52f6759e2ec9321c81aa36c6e655ddcb9c7f..d5d3823ef0e84f5e0d9e0d678d38b2094544a92b 100644 (file)
@@ -7,6 +7,14 @@
  */
 package org.opendaylight.controller.config.manager.impl.dependencyresolver;
 
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.reset;
+
+import java.util.Arrays;
+import java.util.List;
 import org.junit.Before;
 import org.junit.Test;
 import org.opendaylight.controller.config.api.JmxAttribute;
@@ -19,15 +27,7 @@ import org.opendaylight.controller.config.manager.impl.TransactionStatus;
 import org.opendaylight.controller.config.manager.impl.jmx.TransactionModuleJMXRegistrator.TransactionModuleJMXRegistration;
 import org.opendaylight.controller.config.spi.Module;
 import org.opendaylight.controller.config.spi.ModuleFactory;
-
-import java.util.Arrays;
-import java.util.List;
-
-import static org.junit.Assert.assertEquals;
-import static org.mockito.Mockito.doNothing;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.reset;
+import org.osgi.framework.BundleContext;
 
 public class DependencyResolverManagerTest {
 
@@ -101,7 +101,7 @@ public class DependencyResolverManagerTest {
          moduleFactory,
          maybeOldInternalInfo,
          transactionModuleJMXRegistration,
-         isDefaultBean);
+         isDefaultBean, mock(BundleContext.class));
     }
 
     private static Module mockedModule() {
index 3c2230735eee0c41589e33dfb03b9e7c5972a0d8..dd6588f3f63cb7c0f06589f1890cb68c3f94b619 100644 (file)
@@ -60,10 +60,6 @@ public class HardcodedModuleFactoriesResolver implements ModuleFactoriesResolver
         }
     }
 
-    public HardcodedModuleFactoriesResolver(ModuleFactory... list) {
-        this(mockBundleContext(),list);
-    }
-
     private static BundleContext mockBundleContext() {
         BundleContext bundleContext = Mockito.mock(BundleContext.class);
         ServiceRegistration<ModuleFactory> serviceRegistration = mock(ServiceRegistration.class);
index 978d375cd24df6aff7cb508d4087c9cc1580b696..f42b9559c4bb7e5a562aead7b7a60c0bc692602f 100644 (file)
@@ -37,7 +37,7 @@ public class DependentWiringTest extends AbstractParallelAPSPTest {
 
     @Before
     public void setUp() {
-        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(
+        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(mockedContext,
                 new TestingFixedThreadPoolModuleFactory(),
                 new TestingParallelAPSPModuleFactory()));
     }
index 642f526efd703730e7c19931496cfb803d0e91cb..0d4fc91a51760963b5b1b6a7f7dae1792544b698 100644 (file)
@@ -7,12 +7,6 @@
  */
 package org.opendaylight.controller.config.manager.testingservices.parallelapsp.test;
 
-import java.io.Closeable;
-import java.io.IOException;
-import java.util.concurrent.Executor;
-
-import javax.management.ObjectName;
-
 import org.junit.Before;
 import org.junit.Test;
 import org.opendaylight.controller.config.api.DynamicMBeanWithInstance;
@@ -27,6 +21,11 @@ import org.opendaylight.controller.config.manager.testingservices.threadpool.Tes
 import org.opendaylight.controller.config.spi.Module;
 import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;
 
+import javax.management.ObjectName;
+import java.io.Closeable;
+import java.io.IOException;
+import java.util.concurrent.Executor;
+
 public class MockedDependenciesTest extends AbstractParallelAPSPTest {
     private final String threadPoolImplementationName = "mockedthreadpool";
 
@@ -36,7 +35,7 @@ public class MockedDependenciesTest extends AbstractParallelAPSPTest {
         ClassBasedModuleFactory mockedThreadPoolConfigFactory = new ClassBasedModuleFactory(
                 threadPoolImplementationName, MockedThreadPoolModule.class);
 
-        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(
+        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(mockedContext,
                 new TestingParallelAPSPModuleFactory(),
                 mockedThreadPoolConfigFactory));
     }
index 28fea454fe44ef4b472eba4b4e86d9364dfe9c72..340e19480175a124bb8408cead317fe05624f08f 100644 (file)
@@ -7,18 +7,17 @@
  */
 package org.opendaylight.controller.config.manager.testingservices.scheduledthreadpool.test;
 
-import static org.junit.Assert.assertEquals;
-
 import org.junit.After;
 import org.junit.Before;
 import org.opendaylight.controller.config.manager.impl.AbstractConfigTest;
 import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;
 import org.opendaylight.controller.config.manager.testingservices.parallelapsp.TestingParallelAPSPModuleFactory;
 import org.opendaylight.controller.config.manager.testingservices.scheduledthreadpool.TestingScheduledThreadPoolImpl;
-import org.opendaylight.controller.config.manager.testingservices.scheduledthreadpool
-        .TestingScheduledThreadPoolModuleFactory;
+import org.opendaylight.controller.config.manager.testingservices.scheduledthreadpool.TestingScheduledThreadPoolModuleFactory;
 import org.opendaylight.controller.config.manager.testingservices.threadpool.TestingFixedThreadPoolModuleFactory;
 
+import static org.junit.Assert.assertEquals;
+
 public abstract class AbstractScheduledTest extends AbstractConfigTest {
     protected static final String scheduled1 = "scheduled1";
 
@@ -26,7 +25,7 @@ public abstract class AbstractScheduledTest extends AbstractConfigTest {
     public final void setUp() {
         assertEquals(0,
                 TestingScheduledThreadPoolImpl.getNumberOfCloseMethodCalls());
-        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(
+        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(mockedContext,
                 new TestingScheduledThreadPoolModuleFactory(),
                 new TestingFixedThreadPoolModuleFactory(),
                 new TestingParallelAPSPModuleFactory()));
index d5434d2ed53e6615d4e7d7ab4e742f43943875fe..25125fcd8287eb77928a258dd8c406a6c40d617b 100644 (file)
@@ -53,6 +53,7 @@ public class TestingFixedThreadPool implements TestingThreadPoolIfc, Closeable,
     @Override
     public void close() throws IOException {
         executorService.shutdown();
+        allExecutors.remove(executorService);
 
     }
 
diff --git a/opendaylight/config/config-manager/src/test/java/org/opendaylight/controller/config/manager/testingservices/threadpool/test/ShutdownTest.java b/opendaylight/config/config-manager/src/test/java/org/opendaylight/controller/config/manager/testingservices/threadpool/test/ShutdownTest.java
new file mode 100644 (file)
index 0000000..e047a1e
--- /dev/null
@@ -0,0 +1,63 @@
+/*
+ * 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.config.manager.testingservices.threadpool.test;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.doReturn;
+
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Maps;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Map.Entry;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.opendaylight.controller.config.manager.impl.AbstractConfigTest;
+import org.opendaylight.controller.config.manager.impl.factoriesresolver.ModuleFactoriesResolver;
+import org.opendaylight.controller.config.manager.testingservices.threadpool.TestingFixedThreadPool;
+import org.opendaylight.controller.config.manager.testingservices.threadpool.TestingFixedThreadPoolModuleFactory;
+import org.opendaylight.controller.config.spi.ModuleFactory;
+import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;
+import org.osgi.framework.BundleContext;
+
+public class ShutdownTest extends AbstractConfigTest {
+    private final TestingFixedThreadPoolModuleFactory testingFixedThreadPoolModuleFactory = new TestingFixedThreadPoolModuleFactory();
+
+    @Mock
+    ModuleFactoriesResolver mockedResolver;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        Map<String, Entry<ModuleFactory, BundleContext>> allFactories = ImmutableMap.of(
+                testingFixedThreadPoolModuleFactory.getImplementationName(),
+                Maps.<ModuleFactory, BundleContext>immutableEntry(testingFixedThreadPoolModuleFactory, mockedContext));
+        doReturn(allFactories).when(mockedResolver).getAllFactories();
+        super.initConfigTransactionManagerImpl(mockedResolver);
+    }
+
+
+    @Test
+    public void testCreateAndDestroyBeanInSameTransaction() throws Exception {
+        {
+            ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
+            SimpleConfigurationTest.createFixedThreadPool(transaction);
+            transaction.commit();
+        }
+        assertEquals(1, TestingFixedThreadPool.allExecutors.size());
+        doReturn(Collections.emptyMap()).when(mockedResolver).getAllFactories();
+        {
+            ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
+            transaction.commit();
+        }
+        assertEquals(1, TestingFixedThreadPool.allExecutors.size());
+    }
+}
index 9852a45853b1fad9f0bbd9ab4e3011bb06f8d29b..97d1c63ed2770da0ceb4fb504a4795a775b12c89 100644 (file)
@@ -56,7 +56,7 @@ import static org.junit.Assert.fail;
  * dependencies.
  */
 public class SimpleConfigurationTest extends AbstractConfigTest {
-    private final int numberOfThreads = 5;
+    private static final int numberOfThreads = 5;
     private final int numberOfThreads2 = 10;
     private static final String fixed1 = "fixed1";
     private static final List<ObjectName> emptyONs = Collections
@@ -68,7 +68,7 @@ public class SimpleConfigurationTest extends AbstractConfigTest {
 
     @Before
     public void setUp() {
-        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(
+        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(mockedContext,
                 new TestingFixedThreadPoolModuleFactory()));
     }
 
@@ -96,7 +96,7 @@ public class SimpleConfigurationTest extends AbstractConfigTest {
         return fixed1names;
     }
 
-    private ObjectName createFixedThreadPool(
+    static ObjectName createFixedThreadPool(
             ConfigTransactionJMXClient transaction)
             throws InstanceAlreadyExistsException, InstanceNotFoundException {
         transaction.assertVersion(0, 1);
@@ -246,8 +246,7 @@ public class SimpleConfigurationTest extends AbstractConfigTest {
 
         // 4, check
         assertEquals(2, configRegistryClient.getVersion());
-        assertEquals(1, TestingFixedThreadPool.allExecutors.size());
-        assertTrue(TestingFixedThreadPool.allExecutors.get(0).isShutdown());
+        assertEquals(0, TestingFixedThreadPool.allExecutors.size());
 
         // dynamic config should be removed from platform
         try {
@@ -278,7 +277,7 @@ public class SimpleConfigurationTest extends AbstractConfigTest {
         // commit
         transaction.commit();
         // check that first threadpool is closed
-        checkThreadPools(2, numberOfThreads2);
+        checkThreadPools(1, numberOfThreads2);
     }
 
     private void checkThreadPools(int expectedTotalNumberOfExecutors,
@@ -308,7 +307,7 @@ public class SimpleConfigurationTest extends AbstractConfigTest {
         // commit
         CommitStatus commitStatus = transaction.commit();
         // check that new threadpool is created and old one is closed
-        checkThreadPools(2, numberOfThreads);
+        checkThreadPools(1, numberOfThreads);
         CommitStatus expected = new CommitStatus(emptyONs, emptyONs, fixed1List);
         assertEquals(expected, commitStatus);
     }
@@ -337,6 +336,7 @@ public class SimpleConfigurationTest extends AbstractConfigTest {
             platformMBeanServer.getMBeanInfo(transaction.getObjectName());
             fail();
         }catch(InstanceNotFoundException e){
+            assertEquals("org.opendaylight.controller:TransactionName=ConfigTransaction-0-1,type=ConfigTransaction", e.getMessage());
         }
     }
 
index 1d4139f885152a0f9430ddf541f2c036bb6450ab..156fa580ce0c2403c78451d73702237f46f5ad79 100644 (file)
@@ -18,4 +18,7 @@ public interface PropertiesProvider {
      * @return prefix + key as used in getProperty method.
      */
     String getFullKeyForReporting(String key);
+
+    String getPrefix();
+    String getPropertyWithoutPrefix(String fullKey);
 }
index 2df07b114cf54ff327b10e5bdc7b40e859eb8410..3d4757b926f0fad6900d0c673ebd562c2afc9085 100644 (file)
@@ -26,4 +26,14 @@ public class PropertiesProviderTest implements PropertiesProvider {
     public String getFullKeyForReporting(String key) {
         return null;
     }
+
+    @Override
+    public String getPrefix() {
+        return null;
+    }
+
+    @Override
+    public String getPropertyWithoutPrefix(String fullKey) {
+        return null;
+    }
 }
diff --git a/opendaylight/config/feature/pom.xml b/opendaylight/config/feature/pom.xml
new file mode 100644 (file)
index 0000000..aaf33cc
--- /dev/null
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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>config-subsystem</artifactId>
+    <version>0.2.5-SNAPSHOT</version>
+  </parent>
+  <artifactId>config-features</artifactId>
+
+  <packaging>pom</packaging>
+
+  <properties>
+    <features.file>features.xml</features.file>
+  </properties>
+
+  <dependencies></dependencies>
+
+  <build>
+    <resources>
+      <resource>
+        <filtering>true</filtering>
+        <directory>src/main/resources</directory>
+      </resource>
+    </resources>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-resources-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>filter</id>
+            <goals>
+              <goal>resources</goal>
+            </goals>
+            <phase>generate-resources</phase>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>build-helper-maven-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>attach-artifacts</id>
+            <goals>
+              <goal>attach-artifact</goal>
+            </goals>
+            <phase>package</phase>
+            <configuration>
+              <artifacts>
+                <artifact>
+                  <file>${project.build.directory}/classes/${features.file}</file>
+                  <type>xml</type>
+                  <classifier>features</classifier>
+                </artifact>
+              </artifacts>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+  <scm>
+    <connection>scm:git:ssh://git.opendaylight.org:29418/controller.git</connection>
+    <developerConnection>scm:git:ssh://git.opendaylight.org:29418/controller.git</developerConnection>
+    <tag>HEAD</tag>
+    <url>https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL</url>
+  </scm>
+</project>
diff --git a/opendaylight/config/feature/src/main/resources/features.xml b/opendaylight/config/feature/src/main/resources/features.xml
new file mode 100644 (file)
index 0000000..81972c3
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<features name="config-${project.version}" xmlns="http://karaf.apache.org/xmlns/features/v1.2.0"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
+    <feature name='config-all' version='${project.version}'>
+        <feature version='${project.version}'>odl-config-subsystem</feature>
+    </feature>
+
+    <feature name='odl-config-subsystem' version='${project.version}'>
+        <feature version='${yangtools.version}'>yangtools-concepts</feature>
+        <feature version='${yangtools.version}'>yangtools-binding</feature>
+        <feature version='${yangtools.version}'>yangtools-binding-generator</feature>
+        <feature version='${mdsal.version}'>odl-mdsal-commons</feature>
+        <bundle>mvn:org.opendaylight.controller/config-api/${project.version}</bundle>
+        <bundle>mvn:org.opendaylight.controller/config-manager/${project.version}</bundle>
+        <bundle>mvn:org.opendaylight.controller/yang-jmx-generator/${project.version}</bundle>
+        <bundle>mvn:org.opendaylight.controller/config-persister-api/${project.version}</bundle>
+        <bundle>mvn:org.opendaylight.controller/config-persister-file-xml-adapter/${project.version}</bundle>
+        <bundle>mvn:org.opendaylight.controller/config-persister-directory-xml-adapter/${project.version}</bundle>
+        <bundle>mvn:org.opendaylight.controller/shutdown-api/${project.version}</bundle>
+        <bundle>mvn:org.opendaylight.controller/shutdown-impl/${project.version}</bundle>
+        <bundle>mvn:org.osgi/org.osgi.core/${osgi.core.version}</bundle>
+        <bundle>wrap:mvn:com.google.guava/guava/${guava.version}</bundle>
+        <bundle>mvn:org.javassist/javassist/${javassist.version}</bundle>
+    </feature>
+</features>
\ No newline at end of file
index 296ce79f6e9cefeb5723107a59cef9b4cc0f3194..d9c9dada6202be0a4eac69d138329cb5f69c745f 100644 (file)
@@ -35,7 +35,7 @@ public class LogbackModuleTest extends AbstractConfigTest {
     public void setUp() throws Exception {
 
         factory = new LogbackModuleFactory();
-        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(factory));
+        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(mockedContext,factory));
     }
 
     @Test
index e543f752e17b44ee6ab2a1851b54168fccb422d6..37bfb6d9578920c62115fd4deebaf7dc8c2cf750 100644 (file)
@@ -49,7 +49,7 @@ public class LogbackModuleWithInitialConfigurationTest extends AbstractConfigTes
     public void setUp() throws IOException, ClassNotFoundException {
 
         factory = new LogbackModuleFactory();
-        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(factory));
+        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(mockedContext,factory));
     }
 
     /**
index 814965981226aa2ee71fa2184843ad741cc7d414..3c21e57f6e8aed1f298fd917bf434eda93d5647c 100644 (file)
@@ -42,7 +42,7 @@ public class LogbackWithXmlConfigModuleTest extends AbstractConfigTest {
     public void setUp() throws JoranException, IOException {
 
         factory = new LogbackModuleFactory();
-        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(factory));
+        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(mockedContext,factory));
 
         lc = (LoggerContext) LoggerFactory.getILoggerFactory();
         JoranConfigurator configurator = new JoranConfigurator();
diff --git a/opendaylight/config/netconf-config-dispatcher/pom.xml b/opendaylight/config/netconf-config-dispatcher/pom.xml
new file mode 100644 (file)
index 0000000..65ebdaf
--- /dev/null
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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
+-->
+<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/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.opendaylight.controller</groupId>
+    <artifactId>config-plugin-parent</artifactId>
+    <version>0.2.5-SNAPSHOT</version>
+    <relativePath>../config-plugin-parent</relativePath>
+  </parent>
+
+  <artifactId>netconf-config-dispatcher</artifactId>
+  <packaging>bundle</packaging>
+
+  <dependencies>
+    <dependency>
+      <groupId>${project.groupId}</groupId>
+      <artifactId>config-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>${project.groupId}</groupId>
+      <artifactId>netconf-client</artifactId>
+      <version>${netconf.version}</version>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.felix</groupId>
+        <artifactId>maven-bundle-plugin</artifactId>
+        <configuration>
+          <instructions>
+            <Export-Package>org.opendaylight.controller.config.yang.config.netconf,
+                      org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.netconf.rev140408,</Export-Package>
+            <Import-Package>*</Import-Package>
+          </instructions>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.opendaylight.yangtools</groupId>
+        <artifactId>yang-maven-plugin</artifactId>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/opendaylight/config/netconf-config-dispatcher/src/main/java/org/opendaylight/controller/config/yang/config/netconf/client/dispatcher/NetconfClientDispatcherModule.java b/opendaylight/config/netconf-config-dispatcher/src/main/java/org/opendaylight/controller/config/yang/config/netconf/client/dispatcher/NetconfClientDispatcherModule.java
new file mode 100644 (file)
index 0000000..344ef3d
--- /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.config.yang.config.netconf.client.dispatcher;
+
+import org.opendaylight.controller.netconf.client.NetconfClientDispatcherImpl;
+
+/**
+*
+*/
+public final class NetconfClientDispatcherModule extends org.opendaylight.controller.config.yang.config.netconf.client.dispatcher.AbstractNetconfClientDispatcherModule
+ {
+
+    public NetconfClientDispatcherModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
+        super(identifier, dependencyResolver);
+    }
+
+    public NetconfClientDispatcherModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver,
+            NetconfClientDispatcherModule oldModule, java.lang.AutoCloseable oldInstance) {
+
+        super(identifier, dependencyResolver, oldModule, oldInstance);
+    }
+
+    @Override
+    protected void customValidation(){
+    }
+
+    @Override
+    public java.lang.AutoCloseable createInstance() {
+        return new NetconfClientDispatcherImpl(getBossThreadGroupDependency(), getWorkerThreadGroupDependency(), getTimerDependency());
+    }
+}
diff --git a/opendaylight/config/netconf-config-dispatcher/src/main/java/org/opendaylight/controller/config/yang/config/netconf/client/dispatcher/NetconfClientDispatcherModuleFactory.java b/opendaylight/config/netconf-config-dispatcher/src/main/java/org/opendaylight/controller/config/yang/config/netconf/client/dispatcher/NetconfClientDispatcherModuleFactory.java
new file mode 100644 (file)
index 0000000..cfd4ef6
--- /dev/null
@@ -0,0 +1,17 @@
+/*
+ * 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.config.yang.config.netconf.client.dispatcher;
+
+/**
+*
+*/
+public class NetconfClientDispatcherModuleFactory extends org.opendaylight.controller.config.yang.config.netconf.client.dispatcher.AbstractNetconfClientDispatcherModuleFactory
+{
+
+
+}
diff --git a/opendaylight/config/netconf-config-dispatcher/src/main/yang/odl-netconf-cfg.yang b/opendaylight/config/netconf-config-dispatcher/src/main/yang/odl-netconf-cfg.yang
new file mode 100644 (file)
index 0000000..16c2bcb
--- /dev/null
@@ -0,0 +1,31 @@
+// vi: set smarttab et sw=4 tabstop=4:
+module odl-netconf-cfg {
+
+    yang-version 1;
+    namespace "urn:opendaylight:params:xml:ns:yang:controller:config:netconf";
+    prefix "cfg-net";
+
+    import config { prefix config; revision-date 2013-04-05; }
+
+    description
+        "This module contains the base YANG definitions for
+        netconf related services.
+
+        Copyright (c)2013 Cisco Systems, Inc. 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";
+
+    revision "2014-04-08" {
+        description
+            "Initial revision.";
+    }
+
+    identity netconf-client-dispatcher {
+
+        base "config:service-type";
+        config:java-class "org.opendaylight.controller.netconf.client.NetconfClientDispatcher";
+    }
+}
\ No newline at end of file
diff --git a/opendaylight/config/netconf-config-dispatcher/src/main/yang/odl-netconfig-client-cfg.yang b/opendaylight/config/netconf-config-dispatcher/src/main/yang/odl-netconfig-client-cfg.yang
new file mode 100644 (file)
index 0000000..e00bdeb
--- /dev/null
@@ -0,0 +1,64 @@
+// vi: set smarttab et sw=4 tabstop=4:
+module odl-netconfig-client-cfg {
+
+    yang-version 1;
+    namespace "urn:opendaylight:params:xml:ns:yang:controller:config:netconf:client:dispatcher";
+    prefix "cfg-net-client";
+
+    import config { prefix config; revision-date 2013-04-05; }
+    import odl-netconf-cfg { prefix cfg-net; revision-date 2014-04-08; }
+    import netty {prefix netty; }
+
+    description
+        "This module contains the base YANG definitions for
+        netconf-client-dispatcher implementation.
+
+        Copyright (c)2013 Cisco Systems, Inc. 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";
+
+    revision "2014-04-08" {
+        description
+            "Initial revision.";
+    }
+
+    identity netconf-client-dispatcher {
+            base config:module-type;
+            config:provided-service cfg-net:netconf-client-dispatcher;
+            config:java-name-prefix NetconfClientDispatcher;
+    }
+
+    augment "/config:modules/config:module/config:configuration" {
+        case netconf-client-dispatcher {
+            when "/config:modules/config:module/config:type = 'netconf-client-dispatcher'";
+
+            container boss-thread-group {
+                uses config:service-ref {
+                    refine type {
+                        config:required-identity netty:netty-threadgroup;
+                    }
+                }
+            }
+
+            container worker-thread-group {
+                uses config:service-ref {
+                    refine type {
+                        config:required-identity netty:netty-threadgroup;
+                    }
+                }
+            }
+
+            container timer {
+                uses config:service-ref {
+                    refine type {
+                        config:required-identity netty:netty-timer;
+                    }
+                }
+            }
+        }
+    }
+
+}
\ No newline at end of file
index 7cac5ad5bc6202265be39f385b8749d61bc77e62..e274b058dccce43045ac6647d9c8775e65ceb78f 100644 (file)
@@ -49,4 +49,12 @@ module netty {
         base "config:service-type";
         config:java-class "io.netty.util.Timer";
     }
-}
\ No newline at end of file
+
+    identity channel-factory {
+        description
+            "Configuration wrapper around netty's channel factory";
+
+        base "config:service-type";
+        config:java-class "io.netty.bootstrap.ChannelFactory";
+    }
+}
index f29895c6d00c3428c0329b5aae5be1d494b2530f..e89d82a28fd6b3f8876e89724d254691bf90fad3 100644 (file)
@@ -31,7 +31,7 @@ public class GlobalEventExecutorModuleTest extends AbstractConfigTest {
     @Before
     public void setUp() {
         factory = new GlobalEventExecutorModuleFactory();
-        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(factory));
+        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(mockedContext,factory));
     }
 
     @Test
index 590bd9185e67ae1480da0527545fddc953e476bb..76134b025cf0c1a975338eb35c0644e8ba2d47db 100644 (file)
@@ -28,7 +28,7 @@ public class NettyThreadgroupModuleTest extends AbstractConfigTest {
     @Before
     public void setUp() {
         factory = new NettyThreadgroupModuleFactory();
-        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(factory));
+        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(mockedContext,factory));
     }
 
     @Test
index bd2924ad9dffc996cbea58b52d9f5b8ab1377850..613940144bed213bc7ad76c70a288d9700844d70 100644 (file)
@@ -38,7 +38,9 @@
     <module>yang-test-plugin</module>
     <module>shutdown-api</module>
     <module>shutdown-impl</module>
+    <module>netconf-config-dispatcher</module>
     <module>config-module-archetype</module>
+    <module>feature</module>
   </modules>
 
   <dependencies>
           <artifactId>gmaven-plugin</artifactId>
           <version>1.0</version>
         </plugin>
-        <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
-        <plugin>
-          <groupId>org.eclipse.m2e</groupId>
-          <artifactId>lifecycle-mapping</artifactId>
-          <version>1.0.0</version>
-          <configuration>
-            <lifecycleMappingMetadata>
-              <pluginExecutions>
-                <pluginExecution>
-                  <pluginExecutionFilter>
-                    <groupId>org.opendaylight.yangtools</groupId>
-                    <artifactId>yang-maven-plugin</artifactId>
-                    <versionRange>[0.5.7-SNAPSHOT,)</versionRange>
-                    <goals>
-                      <goal>generate-sources</goal>
-                    </goals>
-                  </pluginExecutionFilter>
-                  <action>
-                    <ignore></ignore>
-                  </action>
-                </pluginExecution>
-              </pluginExecutions>
-            </lifecycleMappingMetadata>
-          </configuration>
-        </plugin>
         <plugin>
           <groupId>org.opendaylight.yangtools</groupId>
           <artifactId>yang-maven-plugin</artifactId>
       <plugin>
         <groupId>org.jacoco</groupId>
         <artifactId>jacoco-maven-plugin</artifactId>
-        <version>${jacoco.version}</version>
         <executions>
           <execution>
             <goals>
index f9622192fec873f3fc01c1396aa4c06ccb8f1624..4abbd3b36f761b71bc521c9a769f091e8afa3b44 100644 (file)
@@ -82,7 +82,6 @@ class Impl implements ShutdownService {
 
 class StopSystemBundleThread extends Thread {
     private static final Logger logger = LoggerFactory.getLogger(StopSystemBundleThread.class);
-    public static final String CONFIG_MANAGER_SYMBOLIC_NAME = "org.opendaylight.controller.config-manager";
     private final Bundle systemBundle;
 
     StopSystemBundleThread(Bundle systemBundle) {
@@ -95,13 +94,6 @@ class StopSystemBundleThread extends Thread {
         try {
             // wait so that JMX response is received
             Thread.sleep(1000);
-            // first try to stop config-manager
-            Bundle configManager = findConfigManager();
-            if (configManager != null){
-                logger.debug("Stopping config-manager");
-                configManager.stop();
-                Thread.sleep(1000);
-            }
             logger.debug("Stopping system bundle");
             systemBundle.stop();
         } catch (BundleException e) {
@@ -110,16 +102,6 @@ class StopSystemBundleThread extends Thread {
             logger.warn("Shutdown process interrupted", e);
         }
     }
-
-    private Bundle findConfigManager() {
-        for(Bundle bundle: systemBundle.getBundleContext().getBundles()){
-            if (CONFIG_MANAGER_SYMBOLIC_NAME.equals(bundle.getSymbolicName())) {
-                return bundle;
-            }
-        }
-        return null;
-    }
-
 }
 
 class CallSystemExitThread extends Thread {
index d4a3160b89bf5da79c9b1407aa5bd3242f23b745..358586f63457e87c9d10ba52a295adec650377ff 100644 (file)
@@ -7,6 +7,17 @@
  */
 package org.opendaylight.controller.config.yang.shutdown.impl;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.verify;
+import static org.opendaylight.controller.config.yang.shutdown.impl.ShutdownModuleFactory.NAME;
+
+import java.util.Collections;
+import javax.management.InstanceNotFoundException;
+import javax.management.JMX;
+import javax.management.ObjectName;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mock;
@@ -20,22 +31,10 @@ import org.opendaylight.controller.config.manager.impl.factoriesresolver.ModuleF
 import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;
 import org.osgi.framework.Bundle;
 
-import javax.management.InstanceNotFoundException;
-import javax.management.JMX;
-import javax.management.ObjectName;
-import java.util.Collections;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
-import static org.mockito.Mockito.doNothing;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.verify;
-import static org.opendaylight.controller.config.yang.shutdown.impl.ShutdownModuleFactory.NAME;
-
 public class ShutdownTest extends AbstractConfigTest {
     private final ShutdownModuleFactory factory = new ShutdownModuleFactory();
     @Mock
-    private Bundle mockedSysBundle, mockedConfigManager;
+    private Bundle mockedSysBundle;
 
 
     @Before
@@ -46,11 +45,10 @@ public class ShutdownTest extends AbstractConfigTest {
         doReturn(mockedSysBundle).when(mockedContext).getBundle(0);
         mockedContext.getBundle(0);
         doNothing().when(mockedSysBundle).stop();
-        doNothing().when(mockedConfigManager).stop();
         doReturn(mockedContext).when(mockedSysBundle).getBundleContext();
-        doReturn(new Bundle[]{mockedSysBundle, mockedConfigManager}).when(mockedContext).getBundles();
+        doReturn(new Bundle[]{mockedSysBundle}).when(mockedContext).getBundles();
         doReturn("system bundle").when(mockedSysBundle).getSymbolicName();
-        doReturn(StopSystemBundleThread.CONFIG_MANAGER_SYMBOLIC_NAME).when(mockedConfigManager).getSymbolicName();
+
 
 
         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
@@ -129,7 +127,6 @@ public class ShutdownTest extends AbstractConfigTest {
 
     private void assertStopped() throws Exception {
         Thread.sleep(3000); // happens on another thread
-        verify(mockedConfigManager).stop();
         verify(mockedSysBundle).stop();
     }
 }
index 177adc1588d0ce2697a010ce37eb747f5879d7ff..0b339fc6007834f9c8fad9cc9619457ee60fa9f1 100644 (file)
@@ -40,7 +40,7 @@ public class AsyncEventBusConfigBeanTest extends AbstractConfigTest {
                 TestingScheduledThreadPoolModule.class, poolImplName);
 
         factory = new AsyncEventBusModuleFactory();
-        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(factory,
+        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(mockedContext,factory,
                 scheduledThreadPoolConfigFactory));
     }
 
index bc5e98bcb358ec419685823e0403fefe4f6f2e2d..aeb6d6b959ab3ce70a662b7d2a6efbf773ce58f5 100644 (file)
@@ -7,14 +7,6 @@
  */
 package org.opendaylight.controller.config.threadpool.eventbus;
 
-import static org.junit.Assert.assertEquals;
-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;
@@ -25,6 +17,14 @@ import org.opendaylight.controller.config.manager.impl.factoriesresolver.Hardcod
 import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;
 import org.opendaylight.controller.config.yang.threadpool.impl.EventBusModuleFactory;
 
+import javax.management.InstanceAlreadyExistsException;
+import javax.management.ObjectName;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.fail;
+import static org.junit.matchers.JUnitMatchers.containsString;
+
 public class SyncEventBusConfigBeanTest extends AbstractConfigTest {
 
     private EventBusModuleFactory factory;
@@ -34,7 +34,7 @@ public class SyncEventBusConfigBeanTest extends AbstractConfigTest {
     public void setUp() {
 
         factory = new EventBusModuleFactory();
-        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(factory));
+        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(mockedContext,factory));
     }
 
     @Test
index 781215da43ef18063a2408a1478234b03df3fad2..c95661d9c95b7470ca45156b56c6bc2df3fe7fe6 100644 (file)
@@ -36,7 +36,7 @@ public class FixedThreadPoolConfigBeanTest extends AbstractConfigTest {
     @Before
     public void setUp() {
         factory = new FixedThreadPoolModuleFactory();
-        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(factory,
+        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(mockedContext,factory,
                 new NamingThreadFactoryModuleFactory()));
     }
 
index f0e8a108e74c76c43b14dfee998c60faee9fdd98..a1d1c40655ec867f8d0d7404a1c3e65e80cab66c 100644 (file)
@@ -38,7 +38,7 @@ public class FlexibleThreadPoolConfigBeanTest extends AbstractConfigTest {
     public void setUp() {
 
         flexibleFactory = new FlexibleThreadPoolModuleFactory();
-        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(flexibleFactory,
+        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(mockedContext,flexibleFactory,
                 new NamingThreadFactoryModuleFactory()));
     }
 
index 6dea96e21f3cf42d64f5ab1ed17b8981a61f5e2d..499beced5f4511906f2d7cf0ecaffd4335eae63d 100644 (file)
@@ -16,7 +16,6 @@ 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;
@@ -38,7 +37,7 @@ public class NamingThreadPoolFactoryConfigBeanTest extends AbstractConfigTest {
     public void setUp() {
 
         factory = new NamingThreadFactoryModuleFactory();
-        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(factory));
+        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(mockedContext, factory));
     }
 
     @Test
index 538d43726b1119f7a913da4a328ddbc2c5b08011..ef06e43d2f291b87f994d04612c0f9f5488ea86b 100644 (file)
@@ -39,7 +39,7 @@ public class ScheduledThreadPoolConfigBeanTest extends AbstractConfigTest {
     public void setUp() {
 
         factory = new ScheduledThreadPoolModuleFactory();
-        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(factory,
+        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(mockedContext, factory,
                 new NamingThreadFactoryModuleFactory()));
     }
 
index 598b6b3d5b5ca6cf7f19b79b56de11f6cfa82c06..7505fcf485c62431fc29ee28b8d635cb5a7e6519 100644 (file)
@@ -7,11 +7,6 @@
  */
 package org.opendaylight.controller.config.yangjmxgenerator.it;
 
-import static org.junit.Assert.fail;
-
-import javax.management.InstanceAlreadyExistsException;
-import javax.management.ObjectName;
-
 import org.junit.Before;
 import org.junit.Ignore;
 import org.junit.Test;
@@ -26,6 +21,11 @@ import org.opendaylight.controller.config.yang.test.impl.DtoB;
 import org.opendaylight.controller.config.yang.test.impl.TestImplModuleFactory;
 import org.opendaylight.controller.config.yang.test.impl.TestImplModuleMXBean;
 
+import javax.management.InstanceAlreadyExistsException;
+import javax.management.ObjectName;
+
+import static org.junit.Assert.fail;
+
 @Ignore
 // ietf beans are not JMX compliant beans:
 // Do not know how to make a
@@ -42,7 +42,7 @@ public class ITTest extends AbstractConfigTest {
     public void setUp() {
 
         factory = new TestImplModuleFactory();
-        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(
+        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(mockedContext,
                 factory));
     }
 
index 2d49ed7fab1bb21b595d68d35683c8d9e7d7f85a..b8831f6979ec3205e496c13ee1df15217d3d9feb 100644 (file)
 
   </dependencies>
 
-  <build>
-    <plugins>
-      <plugin>
-        <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-batch</artifactId>
-            <version>2.1.8-01</version>
-          </dependency>
-          <dependency>
-            <groupId>org.codehaus.groovy</groupId>
-            <artifactId>groovy-eclipse-compiler</artifactId>
-            <version>2.8.0-01</version>
-          </dependency>
-        </dependencies>
-      </plugin>
-
-    </plugins>
-  </build>
 </project>
index c0e3bc1ad84d6ab85b2010149b0286a01e440529..6211efe417973ee0f8faf637669e4f824a1df7f3 100644 (file)
@@ -16,7 +16,7 @@ public class ModuleFieldSerializer {
     public static String toString(ModuleField moduleField) {
         StringBuilder builder = new StringBuilder();
         builder.append("    ");
-        builder.append("protected final "
+        builder.append("public static final "
                 + JmxAttribute.class.getCanonicalName() + " "
                 + moduleField.getName() + "JmxAttribute = new "
                 + JmxAttribute.class.getCanonicalName() + "(\""
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
deleted file mode 100644 (file)
index baff88c..0000000
+++ /dev/null
@@ -1,168 +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.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/AbsFactoryGeneratedObjectFactory.java b/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/gofactory/AbsFactoryGeneratedObjectFactory.java
new file mode 100644 (file)
index 0000000..48a6c15
--- /dev/null
@@ -0,0 +1,183 @@
+/*
+ * 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 static java.lang.String.format;
+
+import com.google.common.base.Optional;
+import java.util.ArrayList;
+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.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.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 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.getPackageName(), mbe.getAbstractFactoryName());
+        FullyQualifiedName moduleFQN = new FullyQualifiedName(mbe.getPackageName(), mbe.getStubModuleName());
+        Optional<String> classJavaDoc = Optional.fromNullable(mbe.getNullableDescription());
+
+        AbstractFactoryTemplate abstractFactoryTemplate = TemplateFactory.abstractFactoryTemplateFromMbe(mbe);
+        Optional<String> header = abstractFactoryTemplate.getHeaderString();
+
+        List<FullyQualifiedName> providedServices = new ArrayList<>();
+        for(String providedService: mbe.getProvidedServices().keySet()) {
+            providedServices.add(FullyQualifiedName.fromString(providedService));
+        }
+
+        return toGeneratedObject(absFactoryFQN, copyright,
+                header, classJavaDoc, mbe.getYangModuleQName(),
+                mbe.getGloballyUniqueName(),
+                providedServices,
+                moduleFQN,
+                abstractFactoryTemplate.getFields());
+    }
+
+    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.class));
+        if (classJavaDoc.isPresent()) {
+            b.addClassAnnotation(format("@%s(value=\"%s\")", Description.class.getCanonicalName(), classJavaDoc.get()));
+        }
+
+        b.addToBody(format("public static final java.lang.String NAME = \"%s\";", globallyUniqueName));
+        b.addToBody(format("private static final java.util.Set<Class<? extends %s>> serviceIfcs;",
+                AbstractServiceInterface.class.getCanonicalName()));
+
+        b.addToBody("@Override\n public final String getImplementationName() { \n return NAME; \n}");
+
+        b.addToBody(getServiceIfcsInitialization(providedServices));
+
+        // createModule
+        b.addToBody(format("\n"+
+            "@Override\n"+
+            "public %s createModule(String instanceName, %s dependencyResolver, %s bundleContext) {\n"+
+                "return instantiateModule(instanceName, dependencyResolver, bundleContext);\n"+
+            "}\n",
+                Module.class.getCanonicalName(), DependencyResolver.class.getCanonicalName(), BundleContext.class.getCanonicalName()));
+
+        b.addToBody(getCreateModule(moduleFQN, moduleFields));
+
+        b.addToBody(format("\n"+
+            "public %s instantiateModule(String instanceName, %s dependencyResolver, %s oldModule, %s oldInstance, %s bundleContext) {\n"+
+                "return new %s(new %s(NAME, instanceName), dependencyResolver, oldModule, oldInstance);\n"+
+            "}\n",
+                moduleFQN, DependencyResolver.class.getCanonicalName(), moduleFQN, AutoCloseable.class.getCanonicalName(),
+                BundleContext.class.getCanonicalName(), moduleFQN, ModuleIdentifier.class.getCanonicalName()));
+
+        b.addToBody(format("\n"+
+            "public %s instantiateModule(String instanceName, %s dependencyResolver, %s bundleContext) {\n"+
+                "return new %s(new %s(NAME, instanceName), dependencyResolver);\n"+
+            "}\n", moduleFQN, DependencyResolver.class.getCanonicalName(), BundleContext.class.getCanonicalName(),
+                moduleFQN, ModuleIdentifier.class.getCanonicalName()
+        ));
+
+        b.addToBody(format("\n"+
+            "public %s handleChangedClass(%s old) throws Exception {\n"+
+                "throw new UnsupportedOperationException(\"Class reloading is not supported\");\n"+
+            "}\n", moduleFQN, DynamicMBeanWithInstance.class.getCanonicalName()));
+
+        b.addToBody(format("\n"+
+            "@Override\n"+
+            "public java.util.Set<%s> getDefaultModules(org.opendaylight.controller.config.api.DependencyResolverFactory dependencyResolverFactory, %s bundleContext) {\n"+
+                "return new java.util.HashSet<%s>();\n"+
+            "}\n", moduleFQN, BundleContext.class.getCanonicalName(), moduleFQN));
+
+        return new GeneratedObjectBuilder(b.build()).toGeneratedObject();
+    }
+
+    private static String getCreateModule(FullyQualifiedName moduleFQN, List<Field> moduleFields) {
+        String result = "\n"+
+            "@Override\n"+
+            format("public %s createModule(String instanceName, %s dependencyResolver, %s old, %s bundleContext) throws Exception {\n",
+                                Module.class.getCanonicalName(),DependencyResolver.class.getCanonicalName(),
+                                DynamicMBeanWithInstance.class.getCanonicalName(),BundleContext.class.getCanonicalName())+
+                format("%s oldModule = null;\n",moduleFQN)+
+                "try {\n"+
+                    format("oldModule = (%s) old.getModule();\n",moduleFQN)+
+                "} catch(Exception e) {\n"+
+                    "return handleChangedClass(old);\n"+
+                "}\n"+
+            format("%s module = instantiateModule(instanceName, dependencyResolver, oldModule, old.getInstance(), bundleContext);\n", moduleFQN);
+
+        for(Field field: moduleFields) {
+            result += format("module.set%s(oldModule.get%1$s());\n", field.getName());
+        }
+
+        result += "\n"+
+                "return module;\n"+
+            "}\n";
+        return result;
+    }
+
+    private static String getServiceIfcsInitialization(List<FullyQualifiedName> providedServices) {
+        String generic = format("Class<? extends %s>", AbstractServiceInterface.class.getCanonicalName());
+
+        String result = format("static {\n"+
+            "java.util.Set<%1$s> serviceIfcs2 = new java.util.HashSet<%1$s>();\n", generic);
+
+        for(FullyQualifiedName fqn: providedServices) {
+            result += format("serviceIfcs2.add(%s.class);\n", fqn);
+        }
+        result += "serviceIfcs = java.util.Collections.unmodifiableSet(serviceIfcs2);\n"+
+            "}\n";
+
+        // add isModuleImplementingServiceInterface and getImplementedServiceIntefaces methods
+
+        result += format("\n"+
+            "@Override\n"+
+            "public final boolean isModuleImplementingServiceInterface(Class<? extends %1$s> serviceInterface) {\n"+
+                "for (Class<?> ifc: serviceIfcs) {\n"+
+                    "if (serviceInterface.isAssignableFrom(ifc)){\n"+
+                        "return true;\n"+
+                    "}\n"+
+                "}\n"+
+                "return false;\n"+
+            "}\n"+
+            "\n"+
+            "@Override\n"+
+            "public java.util.Set<Class<? extends %1$s>> getImplementedServiceIntefaces() {\n"+
+                "return serviceIfcs;\n"+
+            "}\n", AbstractServiceInterface.class.getCanonicalName());
+
+        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
deleted file mode 100644 (file)
index 930acff..0000000
+++ /dev/null
@@ -1,400 +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.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/AbsModuleGeneratedObjectFactory.java b/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/gofactory/AbsModuleGeneratedObjectFactory.java
new file mode 100644 (file)
index 0000000..aa06cb9
--- /dev/null
@@ -0,0 +1,417 @@
+/*
+ * 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 static java.lang.String.format;
+
+import com.google.common.base.Joiner;
+import com.google.common.base.Optional;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+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.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 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.getHeaderString();
+
+        List<FullyQualifiedName> implementedInterfaces = new ArrayList<>();
+        for(String implemented: abstractModuleTemplate.getTypeDeclaration().getImplemented()) {
+            implementedInterfaces.add(FullyQualifiedName.fromString(implemented));
+        }
+        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.getYangModuleQName());
+    }
+
+    public GeneratedObject toGeneratedObject(FullyQualifiedName abstractFQN,
+                                             Optional<String> copyright,
+                                             Optional<String> header,
+                                             Optional<String> classJavaDoc,
+                                             List<FullyQualifiedName> implementedInterfaces,
+                                             List<ModuleField> moduleFields,
+                                             Optional<FullyQualifiedName> maybeRegistratorType,
+                                             List<? extends 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);
+        for(FullyQualifiedName implemented: implementedInterfaces) {
+            b.addImplementsFQN(implemented);
+        }
+        if (classJavaDoc.isPresent()) {
+            b.addClassAnnotation(format("@%s(value=\"%s\")", Description.class.getCanonicalName(), classJavaDoc.get()));
+        }
+
+        // add logger:
+        b.addToBody(getLogger(abstractFQN));
+
+        b.addToBody("//attributes start");
+        for(ModuleField moduleField: moduleFields) {
+            b.addToBody(moduleField.toString() +"\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<? extends Method>  methods) {
+        String result = "\n// getters and setters\n";
+        for(Method method: methods) {
+            result += method.toString()+"\n";
+        }
+        return result;
+    }
+
+    private static String getEqualsAndHashCode(FullyQualifiedName abstractFQN) {
+        return "\n"+
+            "@Override\n"+
+            "public boolean equals(Object o) {\n"+
+                "if (this == o) return true;\n"+
+                "if (o == null || getClass() != o.getClass()) return false;\n"+
+                format("%s that = (%1$s) o;\n", abstractFQN.getTypeName())+
+                "return identifier.equals(that.identifier);\n"+
+            "}\n"+
+            "\n"+
+            "@Override\n"+
+            "public int hashCode() {\n"+
+                "return identifier.hashCode();\n"+
+            "}\n";
+    }
+
+    private static String getReuseLogic(List<ModuleField> moduleFields, FullyQualifiedName abstractFQN) {
+        String result = "\n"+
+            format("public boolean canReuseInstance(%s oldModule){\n", abstractFQN.getTypeName())+
+                "// allow reusing of old instance if no parameters was changed\n"+
+                "return isSame(oldModule);\n"+
+            "}\n"+
+            "\n"+
+            format("public %s reuseInstance(%1$s oldInstance){\n", AutoCloseable.class.getCanonicalName())+
+                "// implement if instance reuse should be supported. Override canReuseInstance to change the criteria.\n"+
+                "return oldInstance;\n"+
+            "}\n";
+        // isSame method that detects changed fields
+        result += "\n"+
+            format("public boolean isSame(%s other) {\n", abstractFQN.getTypeName())+
+                "if (other == null) {\n"+
+                    "throw new IllegalArgumentException(\"Parameter 'other' is null\");\n"+
+                "}\n";
+        // loop through fields, do deep equals on each field
+
+        for (ModuleField moduleField : moduleFields) {
+            if (moduleField.isListOfDependencies()) {
+                result += format(
+                    "if (%1$sDependency.equals(other.%1$sDependency) == false) {\n"+
+                        "return false;\n"+
+                    "}\n"+
+                    "for (int idx = 0; idx < %1$sDependency.size(); idx++) {\n"+
+                        "if (%1$sDependency.get(idx) != other.%1$sDependency.get(idx)) {\n"+
+                            "return false;\n"+
+                        "}\n"+
+                    "}\n" ,moduleField.getName());
+            } else if (moduleField.isDependent()) {
+                result += format(
+                    "if (%sDependency != other.%1$sDependency) { // reference to dependency must be same\n"+
+                        "return false;\n"+
+                    "}\n",moduleField.getName());
+            } else {
+                result += format(
+                    "if (java.util.Objects.deepEquals(%s, other.%1$s) == false) {\n"+
+                        "return false;\n"+
+                    "}\n", moduleField.getName());
+            }
+        }
+        result += "\n"+
+                "return true;\n"+
+            "}\n";
+
+        return result;
+    }
+
+    private static String getGetInstance(List<ModuleField> moduleFields) {
+        String result = "\n"+
+            "@Override\n"+
+            format("public final %s getInstance() {\n", AutoCloseable.class.getCanonicalName())+
+                "if(instance==null) {\n";
+        // 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 = new HashMap<>();
+        for(ModuleField moduleField: moduleFields) {
+            if (moduleField.isDependent()) {
+                String str;
+                String osgi = moduleField.getDependency().getSie().getExportedOsgiClassName();
+                if (moduleField.isList()) {
+                    str = format(
+                        "%sDependency = new java.util.ArrayList<%s>();\n"+
+                        "for(javax.management.ObjectName dep : %1$s) {\n"+
+                            "%1$sDependency.add(dependencyResolver.resolveInstance(%2$s.class, dep, %1$sJmxAttribute));\n"+
+                        "}\n", moduleField.getName(), osgi);
+                } else {
+                    str = format(
+                        "%1$sDependency = dependencyResolver.resolveInstance(%2$s.class, %1$s, %1$sJmxAttribute);",
+                        moduleField.getName(), osgi);
+                }
+                resolveDependenciesMap.put(moduleField, str);
+            }
+        }
+
+        // wrap each field resolvation statement with if !=null when dependency is not mandatory
+        for (Map.Entry<ModuleField, String> entry : resolveDependenciesMap.entrySet()) {
+            if (entry.getKey().getDependency().isMandatory() == false) {
+                result += format("if (%s!=null) {\n%s;\n}", entry.getKey().getName(), entry.getValue());
+            } else {
+                result += entry.getValue();
+            }
+        }
+
+        // add code to inject dependency resolver to fields that support it
+        for(ModuleField moduleField: moduleFields) {
+            if (moduleField.isNeedsDepResolver()) {
+                result += format("if (%s!=null){\n", moduleField.getName());
+                if (moduleField.isList()) {
+                    result += format(
+                        "for(%s candidate : %s) {\n"+
+                            "candidate.injectDependencyResolver(dependencyResolver);\n"+
+                        "}\n", moduleField.getGenericInnerType(), moduleField.getName());
+                } else {
+                    result += format("%s.injectDependencyResolver(dependencyResolver);\n", moduleField.getName());
+                }
+                result += "}\n";
+            }
+        }
+
+        // identity refs need to be injected with dependencyResolver and base class
+        for (ModuleField moduleField : moduleFields) {
+            if (moduleField.isIdentityRef()) {
+                result += format("if (%s!=null) {", moduleField.getName());
+                result += format("set%s(%s.resolveIdentity(dependencyResolver, %s.class));",
+                        moduleField.getAttributeName(), moduleField.getName(),
+                        ((IdentityRefModuleField)moduleField).getIdentityBaseClass());
+                result += "}\n";
+            }
+        }
+
+        // create instance end: reuse and recreate logic
+        result +=   "if(oldInstance!=null && canReuseInstance(oldModule)) {\n"+
+                        "instance = reuseInstance(oldInstance);\n"+
+                    "} else {\n"+
+                        "if(oldInstance!=null) {\n"+
+                           "try {\n"+
+                                "oldInstance.close();\n"+
+                            "} catch(Exception e) {\n"+
+                                "logger.error(\"An error occurred while closing old instance \" + oldInstance, e);\n"+
+                            "}\n"+
+                        "}\n"+
+                        "instance = createInstance();\n"+
+                        "if (instance == null) {\n"+
+                            "throw new IllegalStateException(\"Error in createInstance - null is not allowed as return value\");\n"+
+                        "}\n"+
+                    "}\n"+
+                "}\n"+
+                "return instance;\n"+
+            "}\n"+
+            format("public abstract %s createInstance();\n", AutoCloseable.class.getCanonicalName());
+
+        return result;
+    }
+
+    private static String getCommonFields(FullyQualifiedName abstractFQN) {
+        return "\n"+
+            format("private final %s oldModule;\n", abstractFQN.getTypeName())+
+            format("private final %s oldInstance;\n", AutoCloseable.class.getCanonicalName())+
+            format("private %s instance;\n", AutoCloseable.class.getCanonicalName())+
+            format("private final %s dependencyResolver;\n", DependencyResolver.class.getCanonicalName())+
+            format("private final %s identifier;\n", ModuleIdentifier.class.getCanonicalName())+
+            "@Override\n"+
+            format("public %s getIdentifier() {\n", ModuleIdentifier.class.getCanonicalName())+
+                "return identifier;\n"+
+            "}\n";
+    }
+
+    private static String getCachesOfResolvedIdentityRefs(List<ModuleField> moduleFields) {
+        StringBuilder result = new StringBuilder();
+        for (ModuleField moduleField : moduleFields) {
+            if (moduleField.isIdentityRef()) {
+                IdentityRefModuleField field = (IdentityRefModuleField) moduleField;
+                result.append(format("private %s %s;\n", field.getIdentityClassType(), field.getIdentityClassName()));
+            }
+        }
+        return result.toString();
+    }
+
+    private static String getCachesOfResolvedDependencies(List<ModuleField> moduleFields) {
+        StringBuilder result = new StringBuilder();
+        for (ModuleField moduleField: moduleFields) {
+            if (moduleField.isDependent()) {
+                String osgi = moduleField.getDependency().getSie().getExportedOsgiClassName();
+                if (moduleField.isList()) {
+                    result
+                            .append(format("private java.util.List<%s> %sDependency = new java.util.ArrayList<%s>();", osgi, moduleField.getName(), osgi))
+                            .append(format("protected final java.util.List<%s> get%sDependency(){\n", osgi, moduleField.getAttributeName()))
+                            .append(format("return %sDependency;\n", moduleField.getName()))
+                            .append("}\n");
+                } else {
+                    result.append(format(
+                    "private %s %sDependency;\n"+
+                    "protected final %s get%sDependency(){\n"+
+                        "return %sDependency;\n"+
+                    "}",
+                    osgi, moduleField.getName(), osgi, moduleField.getAttributeName(), moduleField.getName()));
+                }
+            }
+        }
+        return result.toString();
+    }
+
+    private static String getRuntimeRegistratorCode(Optional<FullyQualifiedName> maybeRegistratorType) {
+        if (maybeRegistratorType.isPresent()) {
+            String registratorType = maybeRegistratorType.get().toString();
+
+            return "\n"+
+                format("private %s rootRuntimeBeanRegistratorWrapper;\n", registratorType)+
+                "\n"+
+                format("public %s getRootRuntimeBeanRegistratorWrapper(){\n", registratorType)+
+                    "return rootRuntimeBeanRegistratorWrapper;\n"+
+                "}\n"+
+                "\n"+
+                "@Override\n"+
+                format("public void setRuntimeBeanRegistrator(%s rootRuntimeRegistrator){\n", RootRuntimeBeanRegistrator.class.getCanonicalName())+
+                    format("this.rootRuntimeBeanRegistratorWrapper = new %s(rootRuntimeRegistrator);\n", registratorType)+
+                "}\n";
+        } else {
+            return "";
+        }
+    }
+
+    private static String getValidationMethods(List<ModuleField> moduleFields) {
+        String result = "\n"+
+            "@Override\n"+
+            "public void validate() {\n";
+        // validate each mandatory dependency
+        for(ModuleField moduleField: moduleFields) {
+            if (moduleField.isDependent() && moduleField.getDependency().isMandatory()) {
+                if (moduleField.isList()) {
+                    result += "" +
+                            format("for(javax.management.ObjectName dep : %s) {\n", moduleField.getName()) +
+                            format("    dependencyResolver.validateDependency(%s.class, dep, %sJmxAttribute);\n",
+                                    moduleField.getDependency().getSie().getFullyQualifiedName(), moduleField.getName()) +
+                            "}\n";
+                } else {
+                    result += format("dependencyResolver.validateDependency(%s.class, %s, %sJmxAttribute);",
+                            moduleField.getDependency().getSie().getFullyQualifiedName(), moduleField.getName(), moduleField.getName());
+                }
+            }
+        }
+        result += "\n"+
+                "customValidation();\n"+
+            "}\n"+
+            "\n"+
+            "protected void customValidation() {\n"+
+            "}\n";
+        return result;
+    }
+
+    private static String getLogger(FullyQualifiedName fqn) {
+        return format("private static final %s logger = %s.getLogger(%s.class);",
+                Logger.class.getCanonicalName(), LoggerFactory.class.getCanonicalName(), fqn);
+    }
+
+    // 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) {
+        String paramString = Joiner.on(",").withKeyValueSeparator(" ").join(parameters);
+        String setters = "";
+        for (String paramName : parameters.values()) {
+            setters += format("this.%s = %1$s;\n", paramName);
+        }
+        return format("public %s(", fqn.getTypeName()) +
+                paramString +
+                ") {\n" +
+                setters +
+                after +
+                "}\n";
+    }
+
+    private static String getNewConstructor(FullyQualifiedName abstractFQN) {
+        LinkedHashMap<String, String> parameters = new LinkedHashMap<>();
+        parameters.put(ModuleIdentifier.class.getCanonicalName(), "identifier");
+        parameters.put(DependencyResolver.class.getCanonicalName(), "dependencyResolver");
+
+        String setToNulls = "this.oldInstance=null;\n;" +
+                "this.oldModule=null;\n";
+        return getConstructorStart(abstractFQN, parameters, setToNulls);
+    }
+
+    private static String getCopyFromOldConstructor(FullyQualifiedName abstractFQN) {
+        LinkedHashMap<String, String> parameters = new LinkedHashMap<>();
+        parameters.put(ModuleIdentifier.class.getCanonicalName(), "identifier");
+        parameters.put(DependencyResolver.class.getCanonicalName(), "dependencyResolver");
+        parameters.put(abstractFQN.getTypeName(), "oldModule");
+        parameters.put(AutoCloseable.class.getCanonicalName(), "oldInstance");
+        return getConstructorStart(abstractFQN, parameters, "");
+    }
+}
index fbc507d0b464ebb6ad0f1948a91b70efffef4afa..051b1a7f5b81b31b2e899fa2c53b772b4b002c6c 100644 (file)
@@ -1,7 +1,7 @@
 package org.opendaylight.controller.config.yangjmxgenerator.plugin.gofactory;
 
-import com.google.common.base.Joiner;
-import com.google.common.base.Optional;
+import java.util.LinkedHashMap;
+
 import org.opendaylight.controller.config.api.DependencyResolver;
 import org.opendaylight.controller.config.api.ModuleIdentifier;
 import org.opendaylight.controller.config.yangjmxgenerator.ModuleMXBeanEntry;
@@ -11,7 +11,8 @@ import org.opendaylight.controller.config.yangjmxgenerator.plugin.java.Generated
 import org.opendaylight.controller.config.yangjmxgenerator.plugin.java.JavaFileInputBuilder;
 import org.opendaylight.controller.config.yangjmxgenerator.plugin.java.TypeName;
 
-import java.util.LinkedHashMap;
+import com.google.common.base.Joiner;
+import com.google.common.base.Optional;
 
 public class ConcreteModuleGeneratedObjectFactory {
 
@@ -46,12 +47,10 @@ public class ConcreteModuleGeneratedObjectFactory {
     }
 
     private static String getNewCtor(FullyQualifiedName fqn) {
-        LinkedHashMap<String, String> parameters = new LinkedHashMap<String, String>(){
-            {
-                put(ModuleIdentifier.class.getCanonicalName(), "identifier");
-                put(DependencyResolver.class.getCanonicalName(), "dependencyResolver");
-            }
-        };
+        LinkedHashMap<String, String> parameters = new LinkedHashMap<>();
+        parameters.put(ModuleIdentifier.class.getCanonicalName(), "identifier");
+        parameters.put(DependencyResolver.class.getCanonicalName(), "dependencyResolver");
+
         StringBuilder stringBuilder = getCtor(fqn, parameters);
         return stringBuilder.toString();
     }
@@ -72,14 +71,11 @@ public class ConcreteModuleGeneratedObjectFactory {
     }
 
     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");
-            }
-        };
+        LinkedHashMap<String, String> parameters = new LinkedHashMap<>();
+        parameters.put(ModuleIdentifier.class.getCanonicalName(), "identifier");
+        parameters.put(DependencyResolver.class.getCanonicalName(), "dependencyResolver");
+        parameters.put(fqn.toString(), "oldModule");
+        parameters.put(AutoCloseable.class.getCanonicalName(), "oldInstance");
         StringBuilder stringBuilder = getCtor(fqn, parameters);
         return stringBuilder.toString();
     }
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
deleted file mode 100644 (file)
index 6504aac..0000000
+++ /dev/null
@@ -1,40 +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.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/gofactory/GenericGeneratedObjectFactory.java b/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/gofactory/GenericGeneratedObjectFactory.java
new file mode 100644 (file)
index 0000000..11bb677
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ * 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.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.Method;
+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.getHeaderString());
+        b.setFqn(new FullyQualifiedName(template.getPackageName(), template.getTypeDeclaration().getName()));
+        b.setClassJavaDoc(template.getMaybeJavadoc());
+        for (Annotation annotation : template.getAnnotations()) {
+            b.addClassAnnotation(annotation);
+        }
+        // type declaration
+        for (String extended : template.getTypeDeclaration().getExtended()) {
+            b.addExtendsFQN(FullyQualifiedName.fromString(extended));
+        }
+        for (String implemented : template.getTypeDeclaration().getImplemented()) {
+            b.addImplementsFQN(FullyQualifiedName.fromString(implemented));
+        }
+        b.setCopyright(copyright);
+        b.setTypeName(template.getTypeDeclaration().toTypeName());
+        // fields
+        for (Field field : template.getFields()) {
+            b.addToBody(field.toString());
+        }
+        // constructors
+        for (Constructor constructor : template.getConstructors()) {
+            b.addToBody(constructor.toString());
+        }
+        // methods
+        for (Method method : template.getMethods()) {
+            b.addToBody(method.toString());
+        }
+        return new GeneratedObjectBuilder(b.build()).toGeneratedObject();
+    }
+}
index 265aea10c59f8f858fb036b5fb97216ccc404a35..bcc55a203eb05a17aa6cb7b386e649f9f69d7043 100644 (file)
@@ -4,14 +4,11 @@ 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;
 
@@ -61,13 +58,18 @@ public class StringUtil {
 
 
     public static Optional<String> loadCopyright() {
-        try (InputStream in = StringUtil.class.getResourceAsStream("/copyright.txt")) {
-            if (in != null) {
-                return Optional.of(IOUtils.toString(in));
+        /*
+         * FIXME: BUG-980: this is a nice feature, but the copyright needs to come
+         *        from the project being processed, not this one.
+            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);
             }
-        } catch (IOException e) {
-            logger.warn("Cannot load copyright.txt", e);
-        }
+
+        */
         return Optional.absent();
     }
 
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
deleted file mode 100644 (file)
index 4a0c355..0000000
+++ /dev/null
@@ -1,5 +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
index b0217a4ba93e7cf012dd9b50030c0ad5af2cc802..1ad0207c2bc05d9b495ab78592def151fa0f7c40 100644 (file)
@@ -1,5 +1,6 @@
 package org.opendaylight.controller.config.yangjmxgenerator.plugin.util;
 
+import org.junit.Ignore;
 import org.junit.Test;
 import org.opendaylight.controller.config.yangjmxgenerator.plugin.java.FullyQualifiedName;
 
@@ -24,6 +25,7 @@ public class StringUtilTest {
     }
 
     @Test
+    @Ignore
     public void testCopyright() throws IOException {
         assertTrue(StringUtil.loadCopyright().isPresent());
     }
index f2a56f2b1bfbe2a1e1066a90f3ef16ba6afef660..7a20f22440a75dc97f45ed9575c1d9364f40c3fb 100644 (file)
@@ -44,22 +44,53 @@ public class ProcessSources extends AbstractMojo{
 
         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"));
-                if (stubFile.exists()) {
-                    try {
-                        rewrite(sourceFile, FileUtils.readFileToString(stubFile));
-                    } catch (IOException e) {
-                        getLog().error("Error while reading/writing to files.", e);
+            if (sourceFile.getName().endsWith(".java")) {
+                String sourceContent;
+                try {
+                    sourceContent = FileUtils.readFileToString(sourceFile);
+                } catch (IOException e) {
+                    getLog().error("Cannot read " + sourceFile.getAbsolutePath(), e);
+                    continue;
+                }
+                if (sourceFile.getName().endsWith("Module.java") || sourceFile.getName().endsWith("ModuleFactory.java")) {
+                    File stubFile = new File(sourceFile.getPath().replace(".java", "Stub.txt"));
+                    if (stubFile.exists()) {
+                        String stubContent = null;
+                        try {
+                            stubContent = FileUtils.readFileToString(stubFile);
+                        } catch (IOException e) {
+                            getLog().error("Cannot read " + stubFile.getAbsolutePath(), e);
+                        }
+                        if (stubContent != null) {
+                            sourceContent = rewriteStub(sourceContent, stubContent);
+                        }
                     }
                 }
+                // remove copyright headers as they can contain timestamp
+                sourceContent = removeCopyrights(sourceContent);
+
+                // replace the file content
+                try {
+                    FileUtils.write(sourceFile, sourceContent);
+                } catch (IOException e) {
+                    getLog().error("Cannot write " + sourceFile.getAbsolutePath(), 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);
+    private static Pattern MULTILINE_COMMENT_PATTERN = Pattern.compile("/\\*.*\\*/", Pattern.MULTILINE | Pattern.DOTALL);
+    private static String removeCopyrights(String source) {
+        String target = MULTILINE_COMMENT_PATTERN.matcher(source).replaceAll("\n");
+        //FileUtils.write(sourceFile, target);
+        return target;
+    }
+
+    private static Pattern UNSUPPORTED_OP_PATTERN = Pattern.compile("^.*TODO.*\n.*throw new java.lang.UnsupportedOperationException.*$", Pattern.MULTILINE);
+
+    private static String rewriteStub(String source, String replaceTODOWith) {
+        String target = UNSUPPORTED_OP_PATTERN.matcher(source).replaceFirst(replaceTODOWith);
+        return target;
     }
 }
index 07d7438a00b9758ccd28ee10b70f2059b37f77a8..78ac362e594e393b2a9128cce895d3e4d2c9f4e7 100644 (file)
@@ -1,10 +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
-*/
+
+
 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) {
index 330f804e0eae6caa252ec5de740a87cffa2f5078..026dd9aca28b873c2268d0f269dab5702dca1bba 100644 (file)
@@ -1,19 +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
-*/
-/*
-* 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: Fri Apr 25 09:12:08 CEST 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 a5b7f55df382b4b403404f168a32bfd04c8a1976..ddf72f39b4da73d529ddac371b9fc64cd9158a0f 100644 (file)
@@ -1,10 +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
-*/
+
+
 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) {
index b57d1dc1d4347b0ff4cf436a8c2149c3ca2e974d..3a4348d376f8841d1dbc3c9f17ef391214588f82 100644 (file)
@@ -1,19 +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
-*/
-/*
-* 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: Fri Apr 25 09:12:08 CEST 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 ecbf4aba33c436b9354f4c4abe0a674de258745c..943fe3b0d7709cc979a84c54ed6c7df8c24d3fc8 100644 (file)
@@ -1,10 +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
-*/
+
+
 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) {
index 74a05496df7e7f31c3c78cda03b3e813cfaefdfa..587089b10f488d9f9c03090469cb00f6d9b0a865 100644 (file)
@@ -1,19 +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
-*/
-/*
-* 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: Fri Apr 25 09:12:08 CEST 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 4de980433753e4165f66dec8fe2eb7081073ddd5..1d5cda036f8a05867b94d04e947c0c0ddec4a88f 100644 (file)
@@ -1,10 +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
- */
+
+
 package org.opendaylight.controller.config.yang.test.impl;
 
 import com.google.common.collect.Lists;
index 9132407356e8b4c52ab23610079d1d189e029c8b..7b049e7b578e9ae8d94bd85a7e4a18a842a520ca 100644 (file)
@@ -1,10 +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
-*/
+
+
 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) {
index 9680bffd6b42d0391d637f52109f172206918aad..de9ac2fef3ad363e8952384b526be688ab5b6dbc 100644 (file)
@@ -1,19 +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
-*/
-/*
-* 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: Fri Apr 25 09:12:08 CEST 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 281c1aade55db8972553f578595d89e3128d5d46..13a31f59766c7e4ecb1936aa8ca64c3d7c8b85ee 100644 (file)
@@ -48,7 +48,7 @@ public class NetconfTestImplModuleTest  extends AbstractConfigTest {
     public void setUp() {
 
         factory = new NetconfTestImplModuleFactory();
-        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(factory,
+        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(mockedContext,factory,
                 new DepTestImplModuleFactory(), new IdentityTestModuleFactory()));
     }
 
index 992e4b08d1c785212e08a1dff6b041c858d609f9..ef27bfd5e453516f904d67fded5d1a208aa2e776 100644 (file)
@@ -23,7 +23,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index b6d2229121584b5c1bbedb51488075262d29b3a9..a4a7ba67469d3161e7d93c18eb4ed1d443142af6 100644 (file)
@@ -35,7 +35,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index b3a427a8f7d4d26e026396bc2295a920a2a4270d..c4ced042d022e929ea3f362d873ba9a1c9d2ea1e 100644 (file)
@@ -27,7 +27,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index 5adcc89ee80fdb72054136861b75155873cbac7f..8be119d50739d8427feb9769de2516a57333cc17 100644 (file)
@@ -39,7 +39,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index 5bfededfe527fca0d44ec98e8b637d9ee9a67256..a19e27189a2dfcd6e7b344fa0111454800e17607 100644 (file)
@@ -27,7 +27,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index b7b9e0abda47974c5632a306a00b686f4ca52dbe..3ead8be65a0db92858b8d25e69dd80ab464bfa8b 100644 (file)
@@ -43,7 +43,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index 2727f77d9092308fbb4d0a2f6e581ffe7fc077a4..a3f140d7e119868737cf11235958e5ce93f80e67 100644 (file)
@@ -35,7 +35,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
diff --git a/opendaylight/distribution/opendaylight-karaf/pom.xml b/opendaylight/distribution/opendaylight-karaf/pom.xml
new file mode 100644 (file)
index 0000000..1414fac
--- /dev/null
@@ -0,0 +1,222 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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.opendaylight</artifactId>
+    <version>1.4.2-SNAPSHOT</version>
+    <relativePath>../../commons/opendaylight</relativePath>
+  </parent>
+  <artifactId>distribution.opendaylight-karaf</artifactId>
+  <packaging>pom</packaging>
+  <prerequisites>
+    <maven>3.0</maven>
+  </prerequisites>
+
+  <dependencies>
+    <dependency>
+      <!-- scope is compile so all features (there is only one) are installed
+            into startup.properties and the feature repo itself is not installed -->
+      <groupId>org.apache.karaf.features</groupId>
+      <artifactId>framework</artifactId>
+      <version>${karaf.version}</version>
+      <type>kar</type>
+    </dependency>
+    <dependency>
+      <groupId>org.opendaylight.controller</groupId>
+      <artifactId>config-features</artifactId>
+      <version>${config.version}</version>
+      <classifier>features</classifier>
+      <type>xml</type>
+      <scope>runtime</scope>
+    </dependency>
+    <!-- scope is runtime so the feature repo is listed in the features
+      service config file, and features may be installed using the
+      karaf-maven-plugin configuration -->
+    <!-- dependencies commented out till we can get them in
+    <dependency>
+      <groupId>org.apache.karaf.features</groupId>
+      <artifactId>standard</artifactId>
+      <version>${karaf.version}</version>
+      <classifier>features</classifier>
+      <type>xml</type>
+      <scope>runtime</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.opendaylight.controller</groupId>
+      <artifactId>controller-features</artifactId>
+      <version>${project.version}</version>
+      <classifier>features</classifier>
+      <type>xml</type>
+      <scope>runtime</scope>
+    </dependency>
+  -->
+    <dependency>
+      <groupId>org.opendaylight.controller</groupId>
+      <artifactId>mdsal-features</artifactId>
+      <version>${mdsal.version}</version>
+      <classifier>features</classifier>
+      <type>xml</type>
+      <scope>runtime</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.opendaylight.yangtools</groupId>
+      <artifactId>features-file</artifactId>
+      <version>${yangtools.version}</version>
+      <classifier>features</classifier>
+      <type>xml</type>
+      <scope>runtime</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <groupId>org.eclipse.m2e</groupId>
+          <artifactId>lifecycle-mapping</artifactId>
+          <version>1.0.0</version>
+          <configuration>
+            <lifecycleMappingMetadata>
+              <pluginExecutions>
+                <pluginExecution>
+                  <pluginExecutionFilter>
+                    <groupId>org.apache.felix</groupId>
+                    <artifactId>maven-bundle-plugin</artifactId>
+                    <versionRange>[0,)</versionRange>
+                    <goals>
+                      <goal>cleanVersions</goal>
+                    </goals>
+                  </pluginExecutionFilter>
+                  <action>
+                    <ignore></ignore>
+                  </action>
+                </pluginExecution>
+                <pluginExecution>
+                  <pluginExecutionFilter>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-dependency-plugin</artifactId>
+                    <versionRange>[0,)</versionRange>
+                    <goals>
+                      <goal>copy</goal>
+                      <goal>unpack</goal>
+                    </goals>
+                  </pluginExecutionFilter>
+                  <action>
+                    <ignore></ignore>
+                  </action>
+                </pluginExecution>
+                <pluginExecution>
+                  <pluginExecutionFilter>
+                    <groupId>org.apache.karaf.tooling</groupId>
+                    <artifactId>karaf-maven-plugin</artifactId>
+                    <versionRange>[0,)</versionRange>
+                    <goals>
+                      <goal>commands-generate-help</goal>
+                    </goals>
+                  </pluginExecutionFilter>
+                  <action>
+                    <ignore></ignore>
+                  </action>
+                </pluginExecution>
+                <pluginExecution>
+                  <pluginExecutionFilter>
+                    <groupId>org.fusesource.scalate</groupId>
+                    <artifactId>maven-scalate-plugin</artifactId>
+                    <versionRange>[0,)</versionRange>
+                    <goals>
+                      <goal>sitegen</goal>
+                    </goals>
+                  </pluginExecutionFilter>
+                  <action>
+                    <ignore></ignore>
+                  </action>
+                </pluginExecution>
+                <pluginExecution>
+                  <pluginExecutionFilter>
+                    <groupId>org.apache.servicemix.tooling</groupId>
+                    <artifactId>depends-maven-plugin</artifactId>
+                    <versionRange>[0,)</versionRange>
+                    <goals>
+                      <goal>generate-depends-file</goal>
+                    </goals>
+                  </pluginExecutionFilter>
+                  <action>
+                    <ignore></ignore>
+                  </action>
+                </pluginExecution>
+              </pluginExecutions>
+            </lifecycleMappingMetadata>
+          </configuration>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.karaf.tooling</groupId>
+        <artifactId>karaf-maven-plugin</artifactId>
+        <version>${karaf.version}</version>
+        <extensions>true</extensions>
+        <configuration>
+          <!-- no startupFeatures -->
+          <bootFeatures>
+            <feature>standard</feature>
+          </bootFeatures>
+          <!-- no installedFeatures -->
+        </configuration>
+        <executions>
+          <execution>
+            <id>process-resources</id>
+            <goals>
+              <goal>install-kars</goal>
+            </goals>
+            <phase>process-resources</phase>
+          </execution>
+          <execution>
+            <id>package</id>
+            <goals>
+              <goal>instance-create-archive</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-checkstyle-plugin</artifactId>
+        <version>${checkstyle.version}</version>
+        <configuration>
+          <excludes>**\/target\/,**\/bin\/,**\/target-ide\/,**\/configuration\/initial\/</excludes>
+        </configuration>
+      </plugin>
+      <plugin>
+        <artifactId>maven-resources-plugin</artifactId>
+        <version>2.6</version>
+        <executions>
+          <execution>
+            <id>copy-resources</id>
+            <goals>
+              <goal>copy-resources</goal>
+            </goals>
+            <!-- here the phase you need -->
+            <phase>process-resources</phase>
+            <configuration>
+              <outputDirectory>${basedir}/target/assembly</outputDirectory>
+              <overwrite>true</overwrite>
+              <resources>
+                <resource>
+                  <directory>${basedir}/src/main/resources</directory>
+                </resource>
+              </resources>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+  <scm>
+    <connection>scm:git:ssh://git.opendaylight.org:29418/controller.git</connection>
+    <developerConnection>scm:git:ssh://git.opendaylight.org:29418/controller.git</developerConnection>
+    <tag>HEAD</tag>
+    <url>https://wiki.opendaylight.org/view/OpenDaylight_Controller:Main</url>
+  </scm>
+</project>
diff --git a/opendaylight/distribution/opendaylight-karaf/src/main/resources/configuration/context.xml b/opendaylight/distribution/opendaylight-karaf/src/main/resources/configuration/context.xml
new file mode 100644 (file)
index 0000000..90b9ddf
--- /dev/null
@@ -0,0 +1 @@
+<Context crossContext="true" sessionCookiePath="/" useHttpOnly="false"/>
diff --git a/opendaylight/distribution/opendaylight-karaf/src/main/resources/configuration/initial/00-netty.xml b/opendaylight/distribution/opendaylight-karaf/src/main/resources/configuration/initial/00-netty.xml
new file mode 100644 (file)
index 0000000..2365c70
--- /dev/null
@@ -0,0 +1,60 @@
+<snapshot>
+    <required-capabilities>
+        <capability>urn:opendaylight:params:xml:ns:yang:controller:netty?module=netty&amp;revision=2013-11-19</capability>
+        <capability>urn:opendaylight:params:xml:ns:yang:controller:netty:eventexecutor?module=netty-event-executor&amp;revision=2013-11-12</capability>
+        <capability>urn:opendaylight:params:xml:ns:yang:controller:netty:threadgroup?module=threadgroup&amp;revision=2013-11-07</capability>
+        <capability>urn:opendaylight:params:xml:ns:yang:controller:netty:timer?module=netty-timer&amp;revision=2013-11-19</capability>
+    </required-capabilities>
+    <configuration>
+    
+        <data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
+            <modules xmlns="urn:opendaylight:params:xml:ns:yang:controller:config">
+                <module>
+                    <type xmlns:netty="urn:opendaylight:params:xml:ns:yang:controller:netty:threadgroup">netty:netty-threadgroup-fixed</type>
+                    <name>global-boss-group</name>
+                </module>
+                <module>
+                    <type xmlns:netty="urn:opendaylight:params:xml:ns:yang:controller:netty:threadgroup">netty:netty-threadgroup-fixed</type>
+                    <name>global-worker-group</name>
+                </module>
+                <module>
+                    <type xmlns:netty="urn:opendaylight:params:xml:ns:yang:controller:netty:timer">netty:netty-hashed-wheel-timer</type>
+                    <name>global-timer</name>
+                </module>
+                <module>
+                    <type xmlns:netty="urn:opendaylight:params:xml:ns:yang:controller:netty:eventexecutor">netty:netty-global-event-executor</type>
+                    <name>singleton</name>
+                </module>
+            </modules>
+            
+            <services xmlns="urn:opendaylight:params:xml:ns:yang:controller:config">
+                <service>
+                    <type xmlns:netty="urn:opendaylight:params:xml:ns:yang:controller:netty">netty:netty-threadgroup</type>
+                    <instance>
+                        <name>global-boss-group</name>
+                        <provider>/modules/module[type='netty-threadgroup-fixed'][name='global-boss-group']</provider>
+                    </instance>
+                    <instance>
+                        <name>global-worker-group</name>
+                        <provider>/modules/module[type='netty-threadgroup-fixed'][name='global-worker-group']</provider>
+                    </instance>
+                </service>
+                <service>
+                    <type xmlns:netty="urn:opendaylight:params:xml:ns:yang:controller:netty">netty:netty-event-executor</type>
+                    <instance>
+                        <name>global-event-executor</name>
+                        <provider>/modules/module[type='netty-global-event-executor'][name='singleton']</provider>
+                    </instance>
+                </service>
+                <service>
+                    <type xmlns:netty="urn:opendaylight:params:xml:ns:yang:controller:netty">netty:netty-timer</type>
+                    <instance>
+                        <name>global-timer</name>
+                        <provider>/modules/module[type='netty-hashed-wheel-timer'][name='global-timer']</provider>
+                    </instance>
+                </service>
+            </services>
+        </data>
+
+    </configuration>
+</snapshot>
diff --git a/opendaylight/distribution/opendaylight-karaf/src/main/resources/configuration/initial/01-md-sal.xml b/opendaylight/distribution/opendaylight-karaf/src/main/resources/configuration/initial/01-md-sal.xml
new file mode 100644 (file)
index 0000000..619ab06
--- /dev/null
@@ -0,0 +1,203 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- vi: set et smarttab sw=4 tabstop=4: -->
+<!--
+ 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
+-->
+<snapshot>
+    <configuration>
+        <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:md:sal:dom:impl">prefix:schema-service-singleton</type>
+                    <name>yang-schema-service</name>
+                </module>
+                <!-- To enable use of new in-memory datastore and new implementations
+                     of data brokers, comment out all parts of this
+                     xml which are marked with DATA-BROKER and uncomment all parts
+                     of this xml which are marked with NEW-DATA-BROKER
+                -->
+                <!-- DATA-BROKER start-->
+                <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>
+                </module>
+                <!-- DATA BROKER end -->
+                <!-- NEW-DATA-BROKER start -->
+                <!--
+                <module>
+                    <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:impl">prefix:dom-inmemory-data-broker</type>
+                    <name>async-data-broker</name>
+                    <schema-service>
+                        <type xmlns:dom="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">dom:schema-service</type>
+                        <name>yang-schema-service</name>
+                    </schema-service>
+                </module>
+                -->
+                <!-- NEW-DATA-BROKER end -->
+                <module>
+                    <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:impl">prefix:dom-broker-impl</type>
+                    <name>dom-broker</name>
+                    <!-- DATA-BROKER start -->
+                    <data-store xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:impl">
+                        <type xmlns:dom="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">dom:dom-data-store</type>
+                        <!-- to switch to the clustered data store, comment out the hash-map-data-store <name> and uncomment the cluster-data-store one -->
+                        <name>hash-map-data-store</name>
+                        <!-- <name>cluster-data-store</name> -->
+                    </data-store>
+                    <!-- DATA-BROKER end -->
+                    <!-- NEW-DATA-BROKER start -->
+                    <!--
+                    <async-data-broker>
+                        <type xmlns:dom="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">dom:dom-async-data-broker</type>
+                        <name>async-data-broker</name>
+                    </async-data-broker>
+                    -->
+                    <!-- NEW-DATA-BROKER end -->
+                </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>
+                    <notification-service xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">
+                        <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-notification-service</type>
+                        <name>binding-notification-broker</name>
+                    </notification-service>
+                    <data-broker xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">
+                        <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-data-broker</type>
+                        <name>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>
+                </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>
+                </module>
+                <!-- DATA-BROKER start -->
+                <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>
+                    <dom-broker xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">
+                        <type xmlns:dom="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">dom:dom-broker-osgi-registry</type>
+                        <name>dom-broker</name>
+                    </dom-broker>
+                    <mapping-service xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">
+                        <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">binding:binding-dom-mapping-service</type>
+                        <name>runtime-mapping-singleton</name>
+                    </mapping-service>
+                </module>
+                <!-- DATA-BROKER end -->
+                <!-- NEW-DATA-BROKER start -->
+                <!--
+                <module>
+                    <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">prefix:binding-data-compatible-broker</type>
+                    <name>binding-data-broker</name>
+                    <dom-async-broker xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">
+                        <type xmlns:dom="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">dom:dom-broker-osgi-registry</type>
+                        <name>dom-broker</name>
+                    </dom-async-broker>
+                    <binding-mapping-service xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">
+                        <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">binding:binding-dom-mapping-service</type>
+                        <name>runtime-mapping-singleton</name>
+                    </binding-mapping-service>
+                </module>
+                -->
+                <!-- NEW-DATA-BROKER end -->
+            </modules>
+            <services xmlns="urn:opendaylight:params:xml:ns:yang:controller:config">
+                <service>
+                    <type xmlns:dom="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">dom:schema-service</type>
+                    <instance>
+                        <name>yang-schema-service</name>
+                        <provider>/modules/module[type='schema-service-singleton'][name='yang-schema-service']</provider>
+                    </instance>
+                </service>
+                <service>
+                    <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-notification-service</type>
+                    <instance>
+                        <name>binding-notification-broker</name>
+                        <provider>/modules/module[type='binding-notification-broker'][name='binding-notification-broker']</provider>
+                    </instance>
+                </service>
+                <!-- DATA-BROKER start -->
+                <service>
+                    <type xmlns:dom="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">dom:dom-data-store</type>
+                    <instance>
+                        <name>hash-map-data-store</name>
+                        <provider>/modules/module[type='hash-map-data-store'][name='hash-map-data-store']</provider>
+                    </instance>
+                </service>
+                <!-- DATA-BROKER end -->
+                <!-- NEW-DATA-BROKER start -->
+                <!--
+                <service>
+                    <type  xmlns:dom="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">dom:dom-async-data-broker</type>
+                    <instance>
+                        <name>async-data-broker</name>
+                        <provider>/modules/module[type='dom-inmemory-data-broker'][name='async-data-broker']</provider>
+                    </instance>
+                </service>
+                -->
+                <!-- NEW-DATA-BROKER end -->
+                <service>
+                    <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-broker-osgi-registry</type>
+                    <instance>
+                        <name>binding-osgi-broker</name>
+                        <provider>/modules/module[type='binding-broker-impl'][name='binding-broker-impl']</provider>
+                    </instance>
+                </service>
+                <service>
+                    <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-rpc-registry</type>
+                    <instance>
+                        <name>binding-rpc-broker</name>
+                        <provider>/modules/module[type='binding-broker-impl'][name='binding-broker-impl']</provider>
+                    </instance>
+                </service>
+                <service>
+                    <type xmlns:binding-impl="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">binding-impl:binding-dom-mapping-service</type>
+                    <instance>
+                        <name>runtime-mapping-singleton</name>
+                        <provider>/modules/module[type='runtime-generated-mapping'][name='runtime-mapping-singleton']</provider>
+                    </instance>
+                </service>
+                <service>
+                <type xmlns:dom="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">dom:dom-broker-osgi-registry</type>
+                    <instance>
+                        <name>dom-broker</name>
+                        <provider>/modules/module[type='dom-broker-impl'][name='dom-broker']</provider>
+                    </instance>
+                </service>
+
+                <service>
+                    <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-data-broker</type>
+                    <instance>
+                        <name>binding-data-broker</name>
+                        <!--  DATA-BROKER start -->
+                        <provider>/modules/module[type='binding-data-broker'][name='binding-data-broker']</provider>
+                        <!--  DATA-BROKER end -->
+                        <!-- NEW-DATA-BROKER start -->
+                        <!--
+                        <provider>/modules/module[type='binding-data-compatible-broker'][name='binding-data-broker']</provider>
+                        -->
+                        <!--  NEW-DATA-BROKER end -->
+                    </instance>
+                </service>
+
+            </services>
+        </data>
+    </configuration>
+    <required-capabilities>
+        <capability>urn:opendaylight:params:xml:ns:yang:controller:netty:eventexecutor?module=netty-event-executor&amp;revision=2013-11-12</capability>
+        <capability>urn:opendaylight:params:xml:ns:yang:controller:threadpool?module=threadpool&amp;revision=2013-04-09</capability>
+        <capability>urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding?module=opendaylight-md-sal-binding&amp;revision=2013-10-28</capability>
+        <capability>urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom?module=opendaylight-md-sal-dom&amp;revision=2013-10-28</capability>
+        <capability>urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl?module=opendaylight-sal-binding-broker-impl&amp;revision=2013-10-28</capability>
+        <capability>urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:impl?module=opendaylight-sal-dom-broker-impl&amp;revision=2013-10-28</capability>
+        <capability>urn:opendaylight:params:xml:ns:yang:controller:md:sal:common?module=opendaylight-md-sal-common&amp;revision=2013-10-28</capability>
+    </required-capabilities>
+</snapshot>
diff --git a/opendaylight/distribution/opendaylight-karaf/src/main/resources/configuration/initial/02-clustering.xml b/opendaylight/distribution/opendaylight-karaf/src/main/resources/configuration/initial/02-clustering.xml
new file mode 100644 (file)
index 0000000..7853b86
--- /dev/null
@@ -0,0 +1,27 @@
+<snapshot>
+    <configuration>
+        <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:md:sal:remote:rpc">prefix:remote-zeromq-rpc-server</type>
+                   <name>remoter</name>
+                   <port xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote:rpc">5666</port>
+                   <dom-broker xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote:rpc">
+                       <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">prefix:dom-broker-osgi-registry</type>
+                       <name>dom-broker</name>
+                   </dom-broker>
+               </module>
+            </modules>
+            <services xmlns="urn:opendaylight:params:xml:ns:yang:controller:config">
+            </services>
+        </data>
+    </configuration>
+
+    <required-capabilities>
+       <capability>urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom?module=opendaylight-md-sal-dom&amp;revision=2013-10-28</capability>
+        <capability>urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:impl?module=opendaylight-sal-dom-broker-impl&amp;revision=2013-10-28</capability>
+        <capability>urn:opendaylight:params:xml:ns:yang:controller:md:sal:common?module=opendaylight-md-sal-common&amp;revision=2013-10-28</capability>
+        <capability>urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote:rpc?module=odl-sal-dom-rpc-remote-cfg&amp;revision=2013-10-28</capability>
+    </required-capabilities>
+</snapshot>
+
diff --git a/opendaylight/distribution/opendaylight-karaf/src/main/resources/configuration/initial/03-toaster-sample.xml b/opendaylight/distribution/opendaylight-karaf/src/main/resources/configuration/initial/03-toaster-sample.xml
new file mode 100644 (file)
index 0000000..c481485
--- /dev/null
@@ -0,0 +1,73 @@
+<snapshot>
+    <configuration>
+        <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:config:toaster-provider:impl">
+                        prefix:toaster-provider-impl
+                    </type>
+                    <name>toaster-provider-impl</name>
+
+                    <rpc-registry>
+                        <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-rpc-registry</type>
+                        <name>binding-rpc-broker</name>
+                    </rpc-registry>
+
+                    <notification-service>
+                        <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">
+                            binding:binding-notification-service
+                        </type>
+                        <name>binding-notification-broker</name>
+                    </notification-service>
+                </module>
+
+                <module>
+                    <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:config:toaster-consumer:impl">
+                        prefix:toaster-consumer-impl
+                    </type>
+                    <name>toaster-consumer-impl</name>
+
+                    <rpc-registry>
+                        <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-rpc-registry</type>
+                        <name>binding-rpc-broker</name>
+                    </rpc-registry>
+
+                    <notification-service>
+                        <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">
+                            binding:binding-notification-service
+                        </type>
+                        <name>binding-notification-broker</name>
+                    </notification-service>
+                </module>
+            </modules>
+
+            <services xmlns="urn:opendaylight:params:xml:ns:yang:controller:config">
+                <service>
+                    <type xmlns:toaster="urn:opendaylight:params:xml:ns:yang:controller:config:toaster-provider">toaster:toaster-provider</type>
+                    <instance>
+                        <name>toaster-provider</name>
+                        <provider>/modules/module[type='toaster-provider-impl'][name='toaster-provider-impl']</provider>
+                    </instance>
+                </service>
+                <service>
+                    <type xmlns:toaster="urn:opendaylight:params:xml:ns:yang:controller:config:toaster-consumer">toaster:toaster-consumer</type>
+                    <instance>
+                        <name>toaster-consumer</name>
+                        <provider>/modules/module[type='toaster-consumer-impl'][name='toaster-consumer-impl']</provider>
+                    </instance>
+                </service>
+            </services>
+        </data>
+
+    </configuration>
+
+    <required-capabilities>
+        <capability>urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding?module=opendaylight-md-sal-binding&amp;revision=2013-10-28</capability>
+        <capability>urn:opendaylight:params:xml:ns:yang:controller:config:toaster-consumer?module=toaster-consumer&amp;revision=2014-01-31</capability>
+        <capability>urn:opendaylight:params:xml:ns:yang:controller:config:toaster-consumer:impl?module=toaster-consumer-impl&amp;revision=2014-01-31</capability>
+        <capability>urn:opendaylight:params:xml:ns:yang:controller:config:toaster-provider?module=toaster-provider&amp;revision=2014-01-31</capability>
+        <capability>urn:opendaylight:params:xml:ns:yang:controller:config:toaster-provider:impl?module=toaster-provider-impl&amp;revision=2014-01-31</capability>
+    </required-capabilities>
+
+</snapshot>
+
diff --git a/opendaylight/distribution/opendaylight-karaf/src/main/resources/configuration/logback.xml b/opendaylight/distribution/opendaylight-karaf/src/main/resources/configuration/logback.xml
new file mode 100644 (file)
index 0000000..d1a5dcc
--- /dev/null
@@ -0,0 +1,97 @@
+ <configuration scan="true">
+
+  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+    <encoder>
+      <pattern>%date{"yyyy-MM-dd HH:mm:ss.SSS z"} [%thread] %-5level %logger{36} - %msg%n</pattern>
+    </encoder>
+  </appender>
+  <appender name="opendaylight.log" class="ch.qos.logback.core.rolling.RollingFileAppender">
+    <file>logs/opendaylight.log</file>
+
+    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+      <fileNamePattern>logs/opendaylight.%d.log.zip</fileNamePattern>
+      <maxHistory>1</maxHistory>
+    </rollingPolicy>
+
+    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
+      <maxFileSize>10MB</maxFileSize>
+    </triggeringPolicy>
+
+    <encoder>
+      <pattern>%date{"yyyy-MM-dd HH:mm:ss.SSS z"} [%thread] %-5level %logger{35} - %msg%n</pattern>
+    </encoder>
+  </appender>
+  <appender name="audit-file" class="ch.qos.logback.core.FileAppender">
+        <file>logs/audit.log</file>
+        <append>true</append>
+        <encoder>
+            <pattern>%date{"yyyy-MM-dd HH:mm:ss.SSS z"} %msg %n</pattern>
+        </encoder>
+  </appender>
+  <root level="error">
+    <appender-ref ref="STDOUT" />
+    <appender-ref ref="opendaylight.log" />
+  </root>
+
+  <!--  Base log level  -->
+  <logger name="org.opendaylight" level="INFO"/>
+
+
+  <!-- Controller log level -->
+  <logger name="org.opendaylight.controller" level="INFO"/>
+
+  <!-- OSGi logging bridge -->
+  <logger name="org.opendaylight.controller.logging.bridge" level="WARN"/>
+  <logger name="org.opendaylight.controller.logging.bridge.internal" level="WARN"/>
+
+  <!-- Netty -->
+  <logger name="io.netty" level="WARN"/>
+
+  <!-- Openflow Protocol Plugin -->
+  <logger name="org.opendaylight.controller.protocol_plugin.openflow" level="INFO"/>
+  <logger name="org.opendaylight.controller.protocol_plugin.openflow.internal.DiscoveryService" level="INFO"/>
+  <logger name="org.opendaylight.controller.protocol_plugin.openflow.internal.InventoryService" level="INFO"/>
+  <logger name="org.opendaylight.controller.protocol_plugin.openflow.internal.InventoryServiceShim" level="INFO"/>
+  <logger name="org.opendaylight.controller.protocol_plugin.openflow.internal.TopologyServices" level="INFO"/>
+  <logger name="org.opendaylight.controller.protocol_plugin.openflow.internal.TopologyServiceShim" level="INFO"/>
+  <logger name="org.opendaylight.controller.protocol_plugin.openflow.core.internal.Controller" level="INFO"/>
+  <logger name="org.opendaylight.controller.protocol_plugin.openflow.core.internal.SwitchHandler" level="INFO"/>
+  <logger name="org.opendaylight.controller.protocol_plugin.openflow.core.internal.SwitchIOSecureService" level="INFO"/>
+  <!-- SAL  -->
+  <logger name="org.opendaylight.controller.sal" level="INFO"/>
+  <logger name="org.opendaylight.controller.sal.implementation" level="INFO"/>
+  <logger name="org.opendaylight.controller.sal.implementation.internal.Inventory" level="INFO"/>
+  <logger name="org.opendaylight.controller.sal.implementation.internal.Topology" level="INFO"/>
+     <!-- remoterpc router and remoterpc routing table -->
+  <logger name="org.opendaylight.controller.sal.connector.remoterpc" level="INFO" />
+  <!-- Functional Modules -->
+  <logger name="org.opendaylight.controller.arphandler" level="INFO"/>
+  <logger name="org.opendaylight.controller.hosttracker" level="INFO"/>
+  <logger name="org.opendaylight.controller.routing" level="INFO"/>
+  <logger name="org.opendaylight.controller.forwardingrulesmanager" level="INFO"/>
+  <logger name="org.opendaylight.controller.forwarding.ipswitch" level="INFO"/>
+  <logger name="org.opendaylight.controller.switchmanager" level="INFO"/>
+  <logger name="org.opendaylight.controller.topologymanager" level="INFO"/>
+  <logger name="org.opendaylight.controller.usermanager" level="INFO"/>
+  <!-- Web modules -->
+  <logger name="org.opendaylight.controller.web" level="INFO"/>
+
+  <!--
+       Unsynchronized controller startup causes models to crop up in random
+       order, which results in temporary inability to fully resolve a model,
+       which is usually resolved. Do not flood console, but keep the messages,
+       as they may be indicating and error.
+  -->
+  <logger name="org.opendaylight.yangtools.yang.parser.util.ModuleDependencySort" level="INFO" additivity="false">
+    <appender-ref ref="opendaylight.log"/>
+  </logger>
+
+  <!-- To debug MD-SAL schema loading issues, uncomment this -->
+  <!--logger name="org.opendaylight.yangtools.yang.parser.impl.util.URLSchemaContextResolver" level="DEBUG"/>
+  <logger name="org.opendaylight.yangtools.sal.binding.generator.impl.RuntimeGeneratedMappingServiceImpl" level="TRACE"/-->
+
+  <!-- additivity=false ensures analytics data only goes to the analytics log -->
+  <logger name="audit" level="INFO" additivity="false">
+       <appender-ref ref="audit-file"/>
+  </logger>
+</configuration>
diff --git a/opendaylight/distribution/opendaylight-karaf/src/main/resources/configuration/tomcat-logging.properties b/opendaylight/distribution/opendaylight-karaf/src/main/resources/configuration/tomcat-logging.properties
new file mode 100644 (file)
index 0000000..3dbd992
--- /dev/null
@@ -0,0 +1,42 @@
+############################################################
+# Configuration file for tomcat logging
+############################################################
+# Handlers:
+# "handlers" specifies a comma separated list of log Handler
+# classes.  These handlers will be installed during VM startup.
+# Note that these classes must be on the system classpath.
+# Following line configures a ConsoleHandler and a FileHandler
+
+handlers= java.util.logging.FileHandler,java.util.logging.ConsoleHandler
+
+############################################################
+# Handler specific properties
+# Describes specific configuration info for Handlers
+# JUL does not support rolling file handler based on date
+# For now we will keep count of files to 5 with rolling size of 10MB
+############################################################
+
+java.util.logging.FileHandler.pattern = logs/tomcat%g.log
+java.util.logging.FileHandler.limit = 104857600
+java.util.logging.FileHandler.count = 5
+java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
+java.util.logging.FileHandler.append = true
+java.util.logging.FileHandler.level = INFO
+
+# Limit the message that are printed on the console to SEVERE and above.
+java.util.logging.ConsoleHandler.level = WARNING
+java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
+
+# SimpleFormatter output format to print one-line log message like this:
+# <YYYY>-<MM>-<DD> <HH>:<MM>:<SS> <TimeZone> [<SOURCE>] ><LOG_LEVEL> <LOGGER> <MESSAGE> <THROWABLE>
+#
+java.util.logging.SimpleFormatter.format=%1$tF %1$tT %1$tZ [%3$s] %4$s %2$s %5$s%6$s%n
+
+############################################################
+# Facility specific properties.
+# Provides extra control for each logger.
+############################################################
+
+# For example, set the com.xyz.foo logger to only log SEVERE
+# messages
+#org.apache.catalina = SEVERE
diff --git a/opendaylight/distribution/opendaylight-karaf/src/main/resources/configuration/tomcat-server.xml b/opendaylight/distribution/opendaylight-karaf/src/main/resources/configuration/tomcat-server.xml
new file mode 100644 (file)
index 0000000..f6f923e
--- /dev/null
@@ -0,0 +1,61 @@
+<?xml version='1.0' encoding='utf-8'?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<Server>
+  <!--APR library loader. Documentation at /docs/apr.html -->
+  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
+  <!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html -->
+  <Listener className="org.apache.catalina.core.JasperListener" />
+  <!-- Prevent memory leaks due to use of particular java/javax APIs-->
+  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
+  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
+  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
+
+  <Service name="Catalina">
+    <Connector port="8080" protocol="HTTP/1.1"
+               connectionTimeout="20000"
+               redirectPort="8443" />
+
+<!--
+        Please remove the comments around the following Connector tag to enable HTTPS Authentication support.
+        Remember to add a valid keystore in the configuration folder.
+        More info : http://tomcat.apache.org/tomcat-7.0-doc/ssl-howto.html#Configuration
+-->
+
+ <!--
+    <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
+               maxThreads="150" scheme="https" secure="true"
+               clientAuth="false" sslProtocol="TLS"
+               keystoreFile="configuration/keystore"
+               keystorePass="changeit"/>
+ -->
+
+    <Engine name="Catalina" defaultHost="localhost">
+      <Host name="localhost" appBase=""
+            unpackWARs="false" autoDeploy="false"
+            deployOnStartup="false" createDirs="false">
+<!--         <Realm className="org.opendaylight.controller.security.ControllerCustomRealm" />
+            <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
+ -->
+            <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
+                        prefix="web_access_log_" suffix=".txt" resolveHosts="false"
+                        rotatable="true" fileDateFormat="yyyy-MM"
+                        pattern="%{yyyy-MM-dd HH:mm:ss.SSS z}t - [%a] - %r"/>
+      </Host>
+    </Engine>
+  </Service>
+</Server>
diff --git a/opendaylight/distribution/opendaylight-karaf/src/main/resources/etc/custom.properties b/opendaylight/distribution/opendaylight-karaf/src/main/resources/etc/custom.properties
new file mode 100644 (file)
index 0000000..9a86866
--- /dev/null
@@ -0,0 +1,114 @@
+# Extra packages to import from the boot class loader
+org.osgi.framework.system.packages.extra=sun.reflect,sun.reflect.misc,sun.misc,sun.nio.ch
+
+# https://bugs.eclipse.org/bugs/show_bug.cgi?id=325578
+# Extend the framework to avoid the resources to be presented with
+# a URL of type bundleresource: but to be presented as file:
+osgi.hook.configurators.include=org.eclipse.virgo.kernel.equinox.extensions.hooks.ExtensionsHookConfigurator
+
+# Embedded Tomcat configuration File
+org.eclipse.gemini.web.tomcat.config.path=configuration/tomcat-server.xml
+org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true
+
+# Use Equinox as default OSGi Framework Implementation
+karaf.framework=equinox
+
+# Netconf startup configuration
+netconf.tcp.address=127.0.0.1
+netconf.tcp.port=8383
+
+netconf.tcp.client.address=127.0.0.1
+netconf.tcp.client.port=8383
+
+netconf.ssh.address=0.0.0.0
+netconf.ssh.port=1830
+netconf.ssh.pk.path = ./configuration/RSA.pk
+
+
+netconf.config.persister.active=1,2
+# read startup configuration
+netconf.config.persister.1.storageAdapterClass=org.opendaylight.controller.config.persist.storage.directory.xml.XmlDirectoryStorageAdapter
+netconf.config.persister.1.properties.directoryStorage=configuration/initial/
+
+# include only xml files, files with other extensions will be skipped, multiple extensions are permitted e.g. netconf.config.persister.1.properties.includeExtensions=xml,cfg,config
+netconf.config.persister.1.properties.includeExtensions=xml
+netconf.config.persister.1.readonly=true
+
+netconf.config.persister.2.storageAdapterClass=org.opendaylight.controller.config.persist.storage.file.xml.XmlFileStorageAdapter
+netconf.config.persister.2.properties.fileStorage=configuration/current/controller.currentconfig.xml
+netconf.config.persister.2.properties.numberOfBackups=1
+
+# logback configuration
+logback.configurationFile=configuration/logback.xml
+
+# Container configuration
+container.profile = Container
+
+# Connection manager configuration
+connection.scheme = ANY_CONTROLLER_ONE_MASTER
+
+# Open Flow related system parameters
+# TCP port on which the controller is listening (default 6633)
+# of.listenPort=6633
+# IP address of the controller (default: wild card)
+# of.address = 127.0.0.1
+# The time (in milliseconds) the controller will wait for a response after sending a Barrier Request or a Statistic Request message (default 2000 msec)
+# of.messageResponseTimer=2000
+# The switch liveness timeout value (default 60500 msec)
+# of.switchLivenessTimeout=60500
+# The size of the queue holding pending statistics requests (default 64). For large networks of n switches, it is recommended to set the queue size to n
+# of.statsQueueSize = 64
+# The flow statistics polling interval in second (default 10 sec)
+# of.flowStatsPollInterval=10
+# The port statistics polling interval in second (default 5 sec)
+# of.portStatsPollInterval=5
+# The description statistics polling interval in second (default 60 sec)
+# of.descStatsPollInterval=60
+# The table statistics polling interval in second (default 10 sec)
+# of.tableStatsPollInterval=10
+# The maximum number of asynchronous messages can be sent before sending a Barrier Request (default 100)
+# of.barrierMessagePriorCount=100
+# The interval which determines how often the discovery packets should be sent (default 300 sec)
+# of.discoveryInterval=300
+# The timeout multiple of discovery interval
+# of.discoveryTimeoutMultiple=2
+# For newly added ports, allow one more retry if the elapsed time exceeds this threshold (default 30 sec)
+# of.discoveryThreshold=30
+# The maximum number of ports handled in one discovery batch (default 512)
+# of.discoveryBatchMaxPorts=512
+
+# OVSDB configuration
+# ovsdb plugin supports both active and passive connections. It listens on port 6640 by default for Active connections.
+ovsdb.listenPort=6640
+
+# ovsdb creates Openflow nodes/bridges. This configuration configures the bridge's Openflow version.
+# default Openflow version = 1.0, we also support 1.3.
+# ovsdb.of.version=1.3
+
+# TLS configuration
+# To enable TLS, set secureChannelEnabled=true and specify the location of controller Java KeyStore and TrustStore files.
+# The Java KeyStore contains controller's private key and certificate. The Java TrustStore contains the trusted certificate
+# entries, including switches' Certification Authority (CA) certificates. For example,
+# secureChannelEnabled=true
+# controllerKeyStore=./configuration/ctlKeyStore
+# controllerKeyStorePassword=xxxxxxxx (this password should match the password used for KeyStore generation and at least 6 characters)
+# controllerTrustStore=./configuration/ctlTrustStore
+# controllerTrustStorePassword=xxxxxxxx (this password should match the password used for TrustStore generation and at least 6 characters)
+
+secureChannelEnabled=false
+controllerKeyStore=
+controllerKeyStorePassword=
+controllerTrustStore=
+controllerTrustStorePassword=
+
+# User Manager configurations
+enableStrongPasswordCheck = false
+
+#Jolokia configurations
+org.jolokia.listenForHttpService=false
+
+# Logging configuration for Tomcat-JUL logging
+java.util.logging.config.file=configuration/tomcat-logging.properties
+
+#Hosttracker hostsdb key scheme setting
+hosttracker.keyscheme=IP
\ No newline at end of file
diff --git a/opendaylight/distribution/opendaylight-karaf/src/main/resources/version.properties b/opendaylight/distribution/opendaylight-karaf/src/main/resources/version.properties
new file mode 100644 (file)
index 0000000..90af49d
--- /dev/null
@@ -0,0 +1,6 @@
+org.opendaylight.controller.version = 0.1
+org.opendaylight.controller.build.scm.version = ${buildNumber}
+org.opendaylight.controller.build.user = ${env.USER}
+org.opendaylight.controller.build.workspace = **********
+org.opendaylight.controller.build.timestamp = ${timestamp}
+org.opendaylight.controller.build.machine = **********
index f9985cbcc110403a8c60fd6988c170009ed5e996..72ce89d14e9c7fced35c16b91577d36d0a503384 100644 (file)
       <artifactId>jackson-databind</artifactId>
     </dependency>
 
+    <dependency>
+      <groupId>com.fasterxml.jackson.datatype</groupId>
+      <artifactId>jackson-datatype-json-org</artifactId>
+    </dependency>
+
     <dependency>
       <groupId>com.fasterxml.jackson.jaxrs</groupId>
       <artifactId>jackson-jaxrs-base</artifactId>
@@ -53,6 +58,7 @@
       <groupId>com.fasterxml.jackson.module</groupId>
       <artifactId>jackson-module-jaxb-annotations</artifactId>
     </dependency>
+
     <dependency>
       <groupId>com.google.code.gson</groupId>
       <artifactId>gson</artifactId>
       <groupId>org.jolokia</groupId>
       <artifactId>jolokia-osgi</artifactId>
     </dependency>
+
+    <dependency>
+      <groupId>org.json</groupId>
+      <artifactId>json</artifactId>
+    </dependency>
     <dependency>
       <groupId>org.opendaylight.controller</groupId>
       <artifactId>appauth</artifactId>
           <groupId>org.opendaylight.controller</groupId>
           <artifactId>netconf-client</artifactId>
         </dependency>
+
+        <!--Netconf config-->
+        <dependency>
+          <groupId>org.opendaylight.controller</groupId>
+          <artifactId>netconf-config-dispatcher</artifactId>
+        </dependency>
         <dependency>
           <groupId>org.opendaylight.controller</groupId>
           <artifactId>netconf-impl</artifactId>
           <groupId>org.opendaylight.controller</groupId>
           <artifactId>sal-rest-connector</artifactId>
         </dependency>
+        <dependency>
+          <groupId>org.opendaylight.controller</groupId>
+          <artifactId>sal-rest-docgen</artifactId>
+        </dependency>
         <dependency>
           <groupId>org.opendaylight.controller</groupId>
           <artifactId>sal-restconf-broker</artifactId>
           <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.opendaylight.yangtools</groupId>
           <artifactId>binding-generator-api</artifactId>
         <dependency>
           <groupId>org.opendaylight.yangtools</groupId>
           <artifactId>binding-generator-impl</artifactId>
-          <version>${yangtools.version}</version>
         </dependency>
         <dependency>
           <groupId>org.opendaylight.yangtools</groupId>
           <artifactId>binding-generator-spi</artifactId>
-          <version>${yangtools.version}</version>
         </dependency>
         <dependency>
           <groupId>org.opendaylight.yangtools</groupId>
           <artifactId>binding-generator-util</artifactId>
-          <version>${yangtools.version}</version>
         </dependency>
         <dependency>
           <groupId>org.opendaylight.yangtools</groupId>
         <dependency>
           <groupId>org.opendaylight.yangtools</groupId>
           <artifactId>binding-type-provider</artifactId>
-          <version>${yangtools.version}</version>
         </dependency>
         <dependency>
           <groupId>org.opendaylight.yangtools</groupId>
         <dependency>
           <groupId>org.opendaylight.yangtools</groupId>
           <artifactId>yang-parser-api</artifactId>
-          <version>${yangtools.version}</version>
         </dependency>
         <dependency>
           <groupId>org.opendaylight.yangtools</groupId>
           <artifactId>yang-parser-impl</artifactId>
-          <version>${yangtools.version}</version>
         </dependency>
         <!-- yang model dependencies -->
         <dependency>
           <artifactId>xtend-lib-osgi</artifactId>
           <version>2.4.3</version>
         </dependency>
+        <dependency>
+          <groupId>org.openexi</groupId>
+          <artifactId>nagasena</artifactId>
+        </dependency>
+        <dependency>
+          <groupId>org.openexi</groupId>
+          <artifactId>nagasena-rta</artifactId>
+        </dependency>
         <dependency>
           <groupId>org.zeromq</groupId>
           <artifactId>jeromq</artifactId>
index 9d0d6c1888a480aa96042fc2c7824aaf41b5ecbf..234e0feb45047ed2ca14e45e2b2e1dd18432834e 100644 (file)
@@ -22,6 +22,8 @@ netconf.tcp.client.port=8383
 netconf.ssh.address=0.0.0.0
 netconf.ssh.port=1830
 netconf.ssh.pk.path = ./configuration/RSA.pk
+netconf.ssh.default.user = netconf
+netconf.ssh.default.password = netconf
 
 
 netconf.config.persister.active=1,2
index 619ab06d8d3c3da7ca181949b4fff7ddd7596e6e..d872bfd47b229c4047d0bcfb05e98034474e93d3 100644 (file)
                     <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:impl">prefix:schema-service-singleton</type>
                     <name>yang-schema-service</name>
                 </module>
-                <!-- To enable use of new in-memory datastore and new implementations
-                     of data brokers, comment out all parts of this
-                     xml which are marked with DATA-BROKER and uncomment all parts
-                     of this xml which are marked with NEW-DATA-BROKER
-                -->
-                <!-- DATA-BROKER start-->
-                <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>
-                </module>
-                <!-- DATA BROKER end -->
-                <!-- NEW-DATA-BROKER start -->
-                <!--
                 <module>
-                    <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:impl">prefix:dom-inmemory-data-broker</type>
-                    <name>async-data-broker</name>
-                    <schema-service>
-                        <type xmlns:dom="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">dom:schema-service</type>
-                        <name>yang-schema-service</name>
-                    </schema-service>
+                    <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">prefix:runtime-generated-mapping</type>
+                    <name>runtime-mapping-singleton</name>
                 </module>
-                -->
-                <!-- NEW-DATA-BROKER end -->
                 <module>
-                    <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:impl">prefix:dom-broker-impl</type>
-                    <name>dom-broker</name>
-                    <!-- DATA-BROKER start -->
-                    <data-store xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:impl">
-                        <type xmlns:dom="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">dom:dom-data-store</type>
-                        <!-- to switch to the clustered data store, comment out the hash-map-data-store <name> and uncomment the cluster-data-store one -->
-                        <name>hash-map-data-store</name>
-                        <!-- <name>cluster-data-store</name> -->
-                    </data-store>
-                    <!-- DATA-BROKER end -->
-                    <!-- NEW-DATA-BROKER start -->
-                    <!--
-                    <async-data-broker>
-                        <type xmlns:dom="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">dom:dom-async-data-broker</type>
-                        <name>async-data-broker</name>
-                    </async-data-broker>
-                    -->
-                    <!-- NEW-DATA-BROKER end -->
+                    <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">prefix:binding-notification-broker</type>
+                    <name>binding-notification-broker</name>
                 </module>
                 <module>
                     <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">prefix:binding-broker-impl</type>
                         <name>binding-data-broker</name>
                     </data-broker>
                 </module>
+
+                <!--
+                     Tree-based in-memory data store. This is the data store which is currently
+                     recommended for single-node deployments.
+                -->
                 <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>
-                </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>
+                    <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:impl">prefix:dom-inmemory-data-broker</type>
+                    <name>inmemory-data-broker</name>
+                    <schema-service>
+                        <type xmlns:dom="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">dom:schema-service</type>
+                        <name>yang-schema-service</name>
+                    </schema-service>
                 </module>
-                <!-- DATA-BROKER start -->
                 <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>
-                    <dom-broker xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">
-                        <type xmlns:dom="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">dom:dom-broker-osgi-registry</type>
-                        <name>dom-broker</name>
-                    </dom-broker>
-                    <mapping-service xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">
-                        <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">binding:binding-dom-mapping-service</type>
-                        <name>runtime-mapping-singleton</name>
-                    </mapping-service>
+                    <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:impl">prefix:dom-broker-impl</type>
+                    <name>inmemory-dom-broker</name>
+                    <async-data-broker>
+                        <type xmlns:dom="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">dom:dom-async-data-broker</type>
+                        <name>inmemory-data-broker</name>
+                    </async-data-broker>
                 </module>
-                <!-- DATA-BROKER end -->
-                <!-- NEW-DATA-BROKER start -->
-                <!--
                 <module>
                     <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">prefix:binding-data-compatible-broker</type>
-                    <name>binding-data-broker</name>
+                    <name>inmemory-binding-data-broker</name>
                     <dom-async-broker xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">
                         <type xmlns:dom="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">dom:dom-broker-osgi-registry</type>
                         <name>dom-broker</name>
                         <name>runtime-mapping-singleton</name>
                     </binding-mapping-service>
                 </module>
-                -->
-                <!-- NEW-DATA-BROKER end -->
             </modules>
             <services xmlns="urn:opendaylight:params:xml:ns:yang:controller:config">
-                <service>
-                    <type xmlns:dom="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">dom:schema-service</type>
-                    <instance>
-                        <name>yang-schema-service</name>
-                        <provider>/modules/module[type='schema-service-singleton'][name='yang-schema-service']</provider>
-                    </instance>
-                </service>
-                <service>
-                    <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-notification-service</type>
-                    <instance>
-                        <name>binding-notification-broker</name>
-                        <provider>/modules/module[type='binding-notification-broker'][name='binding-notification-broker']</provider>
-                    </instance>
-                </service>
-                <!-- DATA-BROKER start -->
-                <service>
-                    <type xmlns:dom="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">dom:dom-data-store</type>
-                    <instance>
-                        <name>hash-map-data-store</name>
-                        <provider>/modules/module[type='hash-map-data-store'][name='hash-map-data-store']</provider>
-                    </instance>
-                </service>
-                <!-- DATA-BROKER end -->
-                <!-- NEW-DATA-BROKER start -->
-                <!--
-                <service>
-                    <type  xmlns:dom="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">dom:dom-async-data-broker</type>
-                    <instance>
-                        <name>async-data-broker</name>
-                        <provider>/modules/module[type='dom-inmemory-data-broker'][name='async-data-broker']</provider>
-                    </instance>
-                </service>
-                -->
-                <!-- NEW-DATA-BROKER end -->
-                <service>
-                    <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-broker-osgi-registry</type>
-                    <instance>
-                        <name>binding-osgi-broker</name>
-                        <provider>/modules/module[type='binding-broker-impl'][name='binding-broker-impl']</provider>
-                    </instance>
-                </service>
-                <service>
-                    <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-rpc-registry</type>
-                    <instance>
-                        <name>binding-rpc-broker</name>
-                        <provider>/modules/module[type='binding-broker-impl'][name='binding-broker-impl']</provider>
-                    </instance>
-                </service>
-                <service>
-                    <type xmlns:binding-impl="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">binding-impl:binding-dom-mapping-service</type>
-                    <instance>
-                        <name>runtime-mapping-singleton</name>
-                        <provider>/modules/module[type='runtime-generated-mapping'][name='runtime-mapping-singleton']</provider>
-                    </instance>
-                </service>
-                <service>
-                <type xmlns:dom="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">dom:dom-broker-osgi-registry</type>
-                    <instance>
-                        <name>dom-broker</name>
-                        <provider>/modules/module[type='dom-broker-impl'][name='dom-broker']</provider>
-                    </instance>
-                </service>
+                    <service>
+                        <type xmlns:dom="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">dom:schema-service</type>
+                        <instance>
+                            <name>yang-schema-service</name>
+                            <provider>/modules/module[type='schema-service-singleton'][name='yang-schema-service']</provider>
+                        </instance>
+                    </service>
+                    <service>
+                        <type xmlns:binding-impl="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">binding-impl:binding-dom-mapping-service</type>
+                        <instance>
+                            <name>runtime-mapping-singleton</name>
+                            <provider>/modules/module[type='runtime-generated-mapping'][name='runtime-mapping-singleton']</provider>
+                        </instance>
+                    </service>
+                    <service>
+                        <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-notification-service</type>
+                        <instance>
+                            <name>binding-notification-broker</name>
+                            <provider>/modules/module[type='binding-notification-broker'][name='binding-notification-broker']</provider>
+                        </instance>
+                    </service>
+                    <service>
+                        <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-broker-osgi-registry</type>
+                        <instance>
+                            <name>binding-osgi-broker</name>
+                            <provider>/modules/module[type='binding-broker-impl'][name='binding-broker-impl']</provider>
+                        </instance>
+                    </service>
+                    <service>
+                        <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-rpc-registry</type>
+                        <instance>
+                            <name>binding-rpc-broker</name>
+                            <provider>/modules/module[type='binding-broker-impl'][name='binding-broker-impl']</provider>
+                        </instance>
+                    </service>
 
-                <service>
-                    <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-data-broker</type>
-                    <instance>
-                        <name>binding-data-broker</name>
-                        <!--  DATA-BROKER start -->
-                        <provider>/modules/module[type='binding-data-broker'][name='binding-data-broker']</provider>
-                        <!--  DATA-BROKER end -->
-                        <!-- NEW-DATA-BROKER start -->
-                        <!--
-                        <provider>/modules/module[type='binding-data-compatible-broker'][name='binding-data-broker']</provider>
-                        -->
-                        <!--  NEW-DATA-BROKER end -->
-                    </instance>
-                </service>
+                    <service>
+                        <type xmlns:dom="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">dom:dom-broker-osgi-registry</type>
+                        <instance>
+                            <name>dom-broker</name>
+                            <provider>/modules/module[type='dom-broker-impl'][name='inmemory-dom-broker']</provider>
+                        </instance>
+                    </service>
 
+                    <service>
+                        <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-data-broker</type>
+                        <instance>
+                            <name>binding-data-broker</name>
+                            <provider>/modules/module[type='binding-data-compatible-broker'][name='inmemory-binding-data-broker']</provider>
+                        </instance>
+                    </service>
+
+                    <service>
+                        <type xmlns:dom="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">dom:dom-async-data-broker</type>
+                        <instance>
+                            <name>inmemory-data-broker</name>
+                            <provider>/modules/module[type='dom-inmemory-data-broker'][name='inmemory-data-broker']</provider>
+                        </instance>
+                    </service>
             </services>
         </data>
     </configuration>
diff --git a/opendaylight/distribution/opendaylight/src/main/resources/configuration/initial/01-netconf-connector.xml b/opendaylight/distribution/opendaylight/src/main/resources/configuration/initial/01-netconf-connector.xml
new file mode 100644 (file)
index 0000000..fcbec19
--- /dev/null
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- vi: set et smarttab sw=4 tabstop=4: -->
+<!--
+ 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
+-->
+<snapshot>
+  <configuration>
+    <data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
+      <modules xmlns="urn:opendaylight:params:xml:ns:yang:controller:config">
+
+        <!-- Netconf dispatcher to be used by all netconf-connectors --> 
+        <module>
+          <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:config:netconf:client:dispatcher">prefix:netconf-client-dispatcher</type>
+          <name>global-netconf-dispatcher</name>
+          <boss-thread-group xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:netconf:client:dispatcher">
+            <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:netty">prefix:netty-threadgroup</type>
+            <name>global-boss-group</name>
+          </boss-thread-group>
+          <worker-thread-group xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:netconf:client:dispatcher">
+            <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:netty">prefix:netty-threadgroup</type>
+            <name>global-worker-group</name>
+          </worker-thread-group>
+          <timer xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:netconf:client:dispatcher">
+            <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:netty">prefix:netty-timer</type>
+            <name>global-timer</name>
+          </timer>
+        </module>  
+
+        <!-- Loopback connection to netconf server in controller using netconf-connector -->
+        <module>
+          <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">prefix:sal-netconf-connector</type>
+          <name>controller-config</name>
+          <address xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">127.0.0.1</address>
+          <port xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">1830</port>
+          <username xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">admin</username>
+          <password xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">admin</password>
+          <tcp-only xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">false</tcp-only>
+          <event-executor xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">
+            <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:netty">prefix:netty-event-executor</type>
+            <name>global-event-executor</name>
+          </event-executor>
+          <dom-registry xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">
+            <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">prefix:dom-broker-osgi-registry</type>
+            <name>dom-broker</name>
+          </dom-registry>
+          <client-dispatcher xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">
+            <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:config:netconf">prefix:netconf-client-dispatcher</type>
+            <name>global-netconf-dispatcher</name>
+          </client-dispatcher>
+        </module>
+      </modules>
+
+      <services xmlns="urn:opendaylight:params:xml:ns:yang:controller:config">
+        <service>
+          <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:config:netconf">prefix:netconf-client-dispatcher</type>
+          <instance>
+            <name>global-netconf-dispatcher</name>
+            <provider>/modules/module[type='netconf-client-dispatcher'][name='global-netconf-dispatcher']</provider>
+          </instance>
+        </service>
+      </services>
+
+    </data>
+  </configuration>
+  <required-capabilities>
+      <capability>urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf?module=odl-sal-netconf-connector-cfg&amp;revision=2013-10-28</capability>
+      <capability>urn:opendaylight:params:xml:ns:yang:controller:config:netconf:client:dispatcher?module=odl-netconfig-client-cfg&amp;revision=2014-04-08</capability>
+  </required-capabilities>
+</snapshot>
diff --git a/opendaylight/distribution/opendaylight/src/main/resources/configuration/initial/04-netconf-connector.xml b/opendaylight/distribution/opendaylight/src/main/resources/configuration/initial/04-netconf-connector.xml
deleted file mode 100644 (file)
index 8143a38..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- vi: set et smarttab sw=4 tabstop=4: -->
-<!--
- 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
--->
-<snapshot>
-  <configuration>
-    <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:md:sal:connector:netconf">prefix:sal-netconf-connector</type>
-      <name>controller-config</name>
-      <port xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">1830</port>
-      <username xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">admin</username>
-      <worker-thread-group xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">
-        <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:netty">prefix:netty-threadgroup</type>
-        <name>global-worker-group</name>
-      </worker-thread-group>
-      <address xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">127.0.0.1</address>
-      <tcp-only xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">false</tcp-only>
-      <event-executor xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">
-        <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:netty">prefix:netty-event-executor</type>
-        <name>global-event-executor</name>
-      </event-executor>
-      <password xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">admin</password>
-      <boss-thread-group xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">
-        <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:netty">prefix:netty-threadgroup</type>
-        <name>global-boss-group</name>
-      </boss-thread-group>
-      <dom-registry xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">
-        <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">prefix:dom-broker-osgi-registry</type>
-        <name>dom-broker</name>
-      </dom-registry>
-    </module>
-      </modules>
-    </data>
-  </configuration>
-  <required-capabilities>
-      <capability>urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf?module=odl-sal-netconf-connector-cfg&amp;revision=2013-10-28</capability>
-  </required-capabilities>
-</snapshot>
index 21245a0259e964cde52bd631d106e052d023b64c..dba996a99425036ed0044514380726513671b47b 100755 (executable)
@@ -161,7 +161,7 @@ fi
 ########################################
 # Now add to classpath the OSGi JAR
 ########################################
-CLASSPATH="${basedir}"/lib/org.eclipse.osgi-3.8.1.v20120830-144521.jar
+CLASSPATH=${CLASSPATH}:${basedir}/lib/org.eclipse.osgi-3.8.1.v20120830-144521.jar
 FWCLASSPATH=file:"${basedir}"/lib/org.eclipse.osgi-3.8.1.v20120830-144521.jar
 
 ########################################
index 893776c567b03c37e1fe7bb94f0e4f879484e417..793e8356477476b20d89b92f45788c0b5dcf6a29 100644 (file)
@@ -23,7 +23,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
diff --git a/opendaylight/dummy-console/README b/opendaylight/dummy-console/README
new file mode 100644 (file)
index 0000000..09974d5
--- /dev/null
@@ -0,0 +1,2 @@
+This bundle is temporary only and should be removed as soon as possible
+it is only for compatibility layer in Karaf.
diff --git a/opendaylight/dummy-console/pom.xml b/opendaylight/dummy-console/pom.xml
new file mode 100644 (file)
index 0000000..6d90eb3
--- /dev/null
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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.opendaylight</artifactId>
+    <version>1.4.2-SNAPSHOT</version>
+    <relativePath>../commons/opendaylight</relativePath>
+  </parent>
+  <artifactId>dummy-console</artifactId>
+  <version>1.1.0-SNAPSHOT</version>
+  <packaging>bundle</packaging>
+  <description>Dummy Console Interfaces for Equinox-specific CLI</description>
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.felix</groupId>
+        <artifactId>maven-bundle-plugin</artifactId>
+        <version>${bundle.plugin.version}</version>
+        <extensions>true</extensions>
+        <configuration>
+          <instructions>
+            <Import-Package>*</Import-Package>
+            <Export-Package>org.eclipse.osgi.framework.console</Export-Package>
+          </instructions>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+  <scm>
+    <connection>scm:git:ssh://git.opendaylight.org:29418/controller.git</connection>
+    <developerConnection>scm:git:ssh://git.opendaylight.org:29418/controller.git</developerConnection>
+    <tag>HEAD</tag>
+    <url>https://wiki.opendaylight.org/view/OpenDaylight_Controller:Main</url>
+  </scm>
+</project>
diff --git a/opendaylight/dummy-console/src/main/java/org/eclipse/osgi/framework/console/CommandInterpreter.java b/opendaylight/dummy-console/src/main/java/org/eclipse/osgi/framework/console/CommandInterpreter.java
new file mode 100644 (file)
index 0000000..29e9fc9
--- /dev/null
@@ -0,0 +1,12 @@
+/*
+ * Copyright(c)2014 Inocybe Technologies, 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.eclipse.osgi.framework.console;
+
+/** Empty tag interface for Command Interpreter **/
+public interface CommandInterpreter {}
diff --git a/opendaylight/dummy-console/src/main/java/org/eclipse/osgi/framework/console/CommandProvider.java b/opendaylight/dummy-console/src/main/java/org/eclipse/osgi/framework/console/CommandProvider.java
new file mode 100644 (file)
index 0000000..a781f6f
--- /dev/null
@@ -0,0 +1,12 @@
+/*
+ * Copyright(c)2014 Inocybe Technologies, 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.eclipse.osgi.framework.console;
+
+/** Empty tag interface for Command Provider **/
+public interface CommandProvider {}
index 6a73a21e7336a15de272df505a852cdc444d9870..37c0a3a09d1990d741ba0d9ea88c3b0a5621332a 100644 (file)
@@ -39,7 +39,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index 82f5f9b9e9d2e8640c96a42b1923b5b185a06397..b6e1dd68d1cf97a690f6d94d2b55d2a5d13ec327 100644 (file)
@@ -35,7 +35,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index a5a15f685ca502b07b9cb4e6608ac80289eb79ef..f87bed8780e003bf5eb7d70b43d8f848f28c62fe 100644 (file)
@@ -55,7 +55,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index f7b647dd721a1f1f9117d95bc3723867574e5064..46008b24c638241c665a7bde863f0ff5052d587a 100644 (file)
@@ -2342,7 +2342,7 @@ public class ForwardingRulesManager implements
         for (FlowConfig flowConfig : flowConfigForNode) {
             if (doesFlowContainNodeConnector(flowConfig.getFlow(), nodeConnector)) {
                 if (flowConfig.installInHw() && !flowConfig.getStatus().equals(StatusCode.SUCCESS.toString())) {
-                    Status status = this.installFlowEntry(flowConfig.getFlowEntry());
+                    Status status = this.installFlowEntryAsync(flowConfig.getFlowEntry());
                     if (!status.isSuccess()) {
                         flowConfig.setStatus(status.getDescription());
                     } else {
index d8f31ca65af5f4f29a86cf452ef2cc8c4ce01b88..b48d7abd7220323ac16104e6ba393a30e3852f92 100644 (file)
@@ -26,7 +26,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index 9da62bdfe73c97d89f7d0a1a7b434d666f43df2a..cb09322b641acc460c4ae1e3a3023a756f50b05c 100644 (file)
@@ -58,7 +58,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index 1dec4e55745b3d35e53529e820d95d06a64e3332..240976b9c8155ab183f158dc4e6a3f99b7cb7dce 100644 (file)
@@ -38,7 +38,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index aaaf3abacf676cc78165772f6cc088687fd91aad..036dd5dd3185a71e4f6989c313695d69ea2442d3 100644 (file)
@@ -62,7 +62,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index 26fd11c5ef52edf3601ce28b529db08bc056c4c0..82bc6cd9c1eabf251df853848a28e75996ded281 100644 (file)
@@ -43,7 +43,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index 93ce0dd4f7161874ec6d7954e4a4729befdec461..7770c153498fe8a4491e81785236d3e2f21d25bd 100644 (file)
       <groupId>com.google.guava</groupId>
       <artifactId>guava</artifactId>
     </dependency>
-    <dependency>
-      <groupId>org.eclipse.xtend</groupId>
-      <artifactId>org.eclipse.xtend.lib</artifactId>
-    </dependency>
     <dependency>
       <groupId>org.opendaylight.controller</groupId>
       <artifactId>forwardingrulesmanager</artifactId>
           </instructions>
         </configuration>
       </plugin>
-      <plugin>
-        <groupId>org.eclipse.xtend</groupId>
-        <artifactId>xtend-maven-plugin</artifactId>
-      </plugin>
     </plugins>
   </build>
   <scm>
diff --git a/opendaylight/md-sal/compatibility/flow-management-compatibility/src/main/java/org/opendaylight/controller/md/frm/compatibility/ConfigurationReader.java b/opendaylight/md-sal/compatibility/flow-management-compatibility/src/main/java/org/opendaylight/controller/md/frm/compatibility/ConfigurationReader.java
new file mode 100644 (file)
index 0000000..411af28
--- /dev/null
@@ -0,0 +1,62 @@
+/**
+ * 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.frm.compatibility;
+
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.opendaylight.controller.forwardingrulesmanager.FlowConfig;
+import org.opendaylight.controller.forwardingrulesmanager.IForwardingRulesManager;
+import org.opendaylight.controller.sal.compatibility.NodeMapping;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.config.rev130819.Flows;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.config.rev130819.FlowsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.config.rev130819.flows.Flow;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.config.rev130819.flows.FlowKey;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class ConfigurationReader implements FlowManagementReader {
+
+    private final static Logger LOG = LoggerFactory.getLogger(ConfigurationReader.class);
+
+    private IForwardingRulesManager manager;
+
+    @Override
+    public Flows readAllFlows() {
+        List<FlowConfig> staticFlows = this.manager.getStaticFlows();
+        List<Flow> flowMap = new ArrayList<Flow>(staticFlows.size());
+
+        for (FlowConfig conf : staticFlows) {
+            flowMap.add(FlowConfigMapping.toConfigurationFlow(conf));
+        }
+        final FlowsBuilder flowsBuilder = new FlowsBuilder();
+        return (flowsBuilder.setFlow(flowMap)).build();
+    }
+
+    @Override
+    public Flow readFlow(final FlowKey key) {
+        try {
+            final FlowConfig flowConf =
+                    this.manager.getStaticFlow(String.valueOf(key.getId()), NodeMapping.toADNode(key.getNode()));
+            return FlowConfigMapping.toConfigurationFlow(flowConf);
+        } catch (Exception e) {
+            String errMsg = MessageFormat.format("readFlow by key {} fail", key);
+            LOG.error(errMsg, e);
+            throw new RuntimeException(errMsg, e);
+        }
+    }
+
+    public IForwardingRulesManager getManager() {
+        return this.manager;
+    }
+
+    public void setManager(final IForwardingRulesManager manager) {
+        this.manager = manager;
+    }
+}
diff --git a/opendaylight/md-sal/compatibility/flow-management-compatibility/src/main/java/org/opendaylight/controller/md/frm/compatibility/FRMRuntimeDataProvider.java b/opendaylight/md-sal/compatibility/flow-management-compatibility/src/main/java/org/opendaylight/controller/md/frm/compatibility/FRMRuntimeDataProvider.java
new file mode 100644 (file)
index 0000000..be3add1
--- /dev/null
@@ -0,0 +1,122 @@
+/**
+ * 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.frm.compatibility;
+
+import java.util.Collections;
+
+import org.opendaylight.controller.forwardingrulesmanager.FlowConfig;
+import org.opendaylight.controller.forwardingrulesmanager.IForwardingRulesManager;
+import org.opendaylight.controller.md.sal.common.api.data.DataChangeListener;
+import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandler;
+import org.opendaylight.controller.md.sal.common.api.data.DataModification;
+import org.opendaylight.controller.sal.binding.api.data.DataProviderService;
+import org.opendaylight.controller.sal.binding.api.data.RuntimeDataProvider;
+import org.opendaylight.controller.sal.common.util.Arguments;
+import org.opendaylight.controller.sal.common.util.Rpcs;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.config.rev130819.Flows;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.config.rev130819.flows.FlowKey;
+import org.opendaylight.yangtools.concepts.Registration;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.Identifier;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.IdentifiableItem;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.PathArgument;
+import org.opendaylight.yangtools.yang.common.RpcError;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+
+import com.google.common.base.Objects;
+import com.google.common.base.Preconditions;
+
+public class FRMRuntimeDataProvider implements RuntimeDataProvider, DataCommitHandler<InstanceIdentifier<? extends DataObject>,DataObject> {
+
+    private final static InstanceIdentifier<Flows> FLOWS_PATH = InstanceIdentifier.<Flows> builder(Flows.class).toInstance();
+
+    private final FlowManagementReader configuration = new ConfigurationReader();
+    private DataChangeListener<InstanceIdentifier<? extends DataObject>, DataObject> changeListener;
+    private DataProviderService dataService;
+    private IForwardingRulesManager manager;
+
+    public Registration<DataCommitHandler<InstanceIdentifier<? extends DataObject>, DataObject>> init() {
+        return this.dataService.registerCommitHandler(FRMRuntimeDataProvider.FLOWS_PATH, this);
+    }
+
+    @Override
+    public DataObject readConfigurationData(final InstanceIdentifier<? extends DataObject> path) {
+        return this.readFrom(this.configuration, path);
+    }
+
+    @Override
+    public DataObject readOperationalData(final InstanceIdentifier<? extends DataObject> path) {
+        return this.readFrom(this.configuration, path);
+    }
+
+    public DataObject readFrom(final FlowManagementReader store, final InstanceIdentifier<? extends DataObject> path) {
+        if (Objects.equal(FRMRuntimeDataProvider.FLOWS_PATH, path)) {
+            return store.readAllFlows();
+        }
+        if (FRMRuntimeDataProvider.FLOWS_PATH.contains(path)) {
+            return store.readFlow(this.toFlowKey(path));
+        }
+        return null;
+    }
+
+    @Override
+    public FlowCommitTransaction requestCommit(final DataModification<InstanceIdentifier<? extends DataObject>, DataObject> modification) {
+        return new FlowCommitTransaction(this, modification);
+    }
+
+    public FlowKey toFlowKey(final InstanceIdentifier<? extends DataObject> identifier) {
+        Preconditions.<InstanceIdentifier<? extends DataObject>> checkNotNull(identifier);
+
+        Iterable<PathArgument> path = identifier.getPathArguments();
+        PathArgument get = path.iterator().next();
+        final Identifier itemKey = Arguments.<IdentifiableItem> checkInstanceOf(get, IdentifiableItem.class).getKey();
+        return Arguments.<FlowKey> checkInstanceOf(itemKey, FlowKey.class);
+    }
+
+    public RpcResult<Void> finish(final FlowCommitTransaction transaction) {
+        Iterable<FlowConfig> toRemove = transaction.getToRemove();
+        for (final FlowConfig flow : toRemove) {
+            this.manager.removeStaticFlow(flow.getName(), flow.getNode());
+        }
+        Iterable<FlowConfig> toUpdate = transaction.getToUpdate();
+        for (final FlowConfig flow : toUpdate) {
+            this.manager.removeStaticFlow(flow.getName(), flow.getNode());
+            this.manager.addStaticFlow(flow);
+        }
+        return Rpcs.<Void> getRpcResult(true, null, Collections.<RpcError> emptySet());
+    }
+
+    public RpcResult<Void> rollback(final FlowCommitTransaction transaction) {
+        return null;
+    }
+
+    public DataProviderService getDataService() {
+        return this.dataService;
+    }
+
+    public void setDataService(final DataProviderService dataService) {
+        this.dataService = dataService;
+    }
+
+    public DataChangeListener<InstanceIdentifier<? extends DataObject>, DataObject> getChangeListener() {
+        return this.changeListener;
+    }
+
+    public void setChangeListener(final DataChangeListener<InstanceIdentifier<? extends DataObject>, DataObject> changeListener) {
+        this.changeListener = changeListener;
+    }
+
+    public IForwardingRulesManager getManager() {
+        return this.manager;
+    }
+
+    public void setManager(final IForwardingRulesManager manager) {
+        this.manager = manager;
+    }
+}
diff --git a/opendaylight/md-sal/compatibility/flow-management-compatibility/src/main/java/org/opendaylight/controller/md/frm/compatibility/FRMRuntimeDataProvider.xtend b/opendaylight/md-sal/compatibility/flow-management-compatibility/src/main/java/org/opendaylight/controller/md/frm/compatibility/FRMRuntimeDataProvider.xtend
deleted file mode 100644 (file)
index 2d4e7d2..0000000
+++ /dev/null
@@ -1,172 +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.md.frm.compatibility
-
-import org.opendaylight.controller.sal.binding.api.data.RuntimeDataProvider
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier
-import org.opendaylight.yangtools.yang.binding.DataObject
-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.DataCommitHandler.DataCommitTransaction
-import org.opendaylight.controller.sal.binding.api.data.DataProviderService
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.config.rev130819.flows.FlowKey
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.config.rev130819.flows.Flow
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.config.rev130819.Flows
-import org.opendaylight.controller.md.sal.common.api.data.DataChangeListener
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.config.rev130819.FlowsBuilder
-import org.opendaylight.controller.forwardingrulesmanager.IForwardingRulesManager
-import static com.google.common.base.Preconditions.*;
-import static extension org.opendaylight.controller.md.frm.compatibility.FlowConfigMapping.*;
-import static extension org.opendaylight.controller.sal.compatibility.NodeMapping.*;
-import org.opendaylight.controller.sal.common.util.Arguments
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.IdentifiableItem
-import org.opendaylight.yangtools.yang.common.RpcResult
-import org.opendaylight.controller.forwardingrulesmanager.FlowConfig
-import java.util.HashSet
-import org.opendaylight.controller.sal.common.util.Rpcs
-import java.util.Collections
-import org.opendaylight.yangtools.yang.common.RpcError
-
-class FRMRuntimeDataProvider implements RuntimeDataProvider, DataCommitHandler<InstanceIdentifier<? extends DataObject>, DataObject> {
-
-    static val FLOWS_PATH = InstanceIdentifier.builder(Flows).toInstance;
-
-    @Property
-    var DataProviderService dataService;
-
-    @Property
-    var DataChangeListener changeListener;
-    
-    @Property
-    var IForwardingRulesManager manager;
-
-    FlowManagementReader configuration = new ConfigurationReader();
-
-    def init() {
-        //dataService.registerDataChangeListener(FLOWS_PATH, changeListener);
-        dataService.registerCommitHandler(FLOWS_PATH, this);
-    }
-
-    override readConfigurationData(InstanceIdentifier<? extends DataObject> path) {
-        return readFrom(configuration, path);
-    }
-
-    override DataObject readOperationalData(InstanceIdentifier<? extends DataObject> path) {
-        return readFrom(configuration, path);
-    }
-
-    def DataObject readFrom(FlowManagementReader store, InstanceIdentifier<? extends DataObject> path) {
-        if (FLOWS_PATH == path) {
-            return store.readAllFlows();
-        }
-        if (FLOWS_PATH.contains(path)) {
-            return store.readFlow(path.toFlowKey());
-        }
-        return null;
-    }
-
-    override FlowCommitTransaction requestCommit(
-        DataModification modification) {
-        return new FlowCommitTransaction(this,modification);
-    }
-
-    def toFlowKey(InstanceIdentifier<? extends DataObject> identifier) {
-        checkNotNull(identifier)
-        val item = Arguments.checkInstanceOf(identifier.path.get(1),IdentifiableItem);
-        val key = Arguments.checkInstanceOf(item.key,FlowKey)
-        return key;
-    }
-    
-    def RpcResult<Void> finish(FlowCommitTransaction transaction) {
-        for(flw: transaction.toRemove) {
-            manager.removeStaticFlow(flw.name,flw.node)
-        }
-        
-        for(flw: transaction.toUpdate) {
-            manager.removeStaticFlow(flw.name,flw.node);
-            manager.addStaticFlow(flw);
-        }
-        
-        return Rpcs.<Void>getRpcResult(true,null,Collections.<RpcError>emptySet())
-    }
-    
-    def RpcResult<Void> rollback(FlowCommitTransaction transaction) {
-        // NOOP: We did not changed any state.
-    }
-
-}
-
-class ConfigurationReader implements FlowManagementReader {
-
-    @Property
-    var IForwardingRulesManager manager;
-
-    override Flows readAllFlows() {
-        val it = new FlowsBuilder();
-        flow = manager.staticFlows.map[
-            toConfigurationFlow();
-        ]
-        return it.build();
-    }
-
-    override readFlow(FlowKey key) {
-        val flowCfg = manager.getStaticFlow(String.valueOf(key.id), key.node.toADNode());
-        return flowCfg.toConfigurationFlow;
-    }
-}
-
-public static class FlowCommitTransaction implements DataCommitTransaction<InstanceIdentifier<? extends DataObject>, DataObject> {
-
-    @Property
-    val DataModification<InstanceIdentifier<? extends DataObject>, DataObject> modification;
-
-    @Property
-    val FRMRuntimeDataProvider flowManager;
-    
-    @Property
-    val toAdd = new HashSet<FlowConfig>();
-    
-    @Property
-    var Iterable<FlowConfig> toUpdate
-    
-    @Property
-    var Iterable<FlowConfig> toRemove
-    
-
-    new(FRMRuntimeDataProvider flowManager,DataModification<InstanceIdentifier<? extends DataObject>, DataObject> modification) {
-        super();
-        _flowManager = flowManager;
-        _modification = modification;
-        processModification();
-    }
-
-    override finish() throws IllegalStateException {
-        return flowManager.finish(this);
-    }
-
-    override rollback() throws IllegalStateException
-{
-        return flowManager.rollback(this);
-    }
-
-    def processModification() {
-        val updated = modification.updatedConfigurationData.entrySet;
-        
-        val _toUpdate = updated.filter[key.isFlowPath].map[
-             return (value as Flow).toFlowConfig
-        ]
-        toUpdate = _toUpdate as Iterable<FlowConfig>
-        
-        
-        val _toRemove = modification.removedConfigurationData.filter[isFlowPath].map[
-             toFlowConfig
-        ]
-        toRemove = _toRemove as Iterable<FlowConfig>
-        
-    }
-}
diff --git a/opendaylight/md-sal/compatibility/flow-management-compatibility/src/main/java/org/opendaylight/controller/md/frm/compatibility/FlowCommitTransaction.java b/opendaylight/md-sal/compatibility/flow-management-compatibility/src/main/java/org/opendaylight/controller/md/frm/compatibility/FlowCommitTransaction.java
new file mode 100644 (file)
index 0000000..bf0050d
--- /dev/null
@@ -0,0 +1,99 @@
+/**
+ * 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.frm.compatibility;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map.Entry;
+import java.util.Set;
+
+import org.opendaylight.controller.forwardingrulesmanager.FlowConfig;
+import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandler.DataCommitTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.DataModification;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.config.rev130819.flows.Flow;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+
+public class FlowCommitTransaction implements DataCommitTransaction<InstanceIdentifier<? extends DataObject>, DataObject> {
+
+    private final DataModification<InstanceIdentifier<? extends DataObject>, DataObject> modification;
+    private final HashSet<FlowConfig> toAdd = new HashSet<FlowConfig>();
+    private final FRMRuntimeDataProvider flowManager;
+    private Iterable<FlowConfig> toUpdate;
+    private Iterable<FlowConfig> toRemove;
+
+    public FlowCommitTransaction(
+            final FRMRuntimeDataProvider flowManager,
+            final DataModification<InstanceIdentifier<? extends DataObject>, DataObject> modification) {
+        this.flowManager = flowManager;
+        this.modification = modification;
+        this.processModification();
+    }
+
+    @Override
+    public RpcResult<Void> finish() throws IllegalStateException {
+        return this.flowManager.finish(this);
+    }
+
+    @Override
+    public RpcResult<Void> rollback() throws IllegalStateException {
+        return this.flowManager.rollback(this);
+    }
+
+    public void processModification() {
+        final Set<Entry<InstanceIdentifier<? extends DataObject>, DataObject>> updated =
+                this.modification.getUpdatedConfigurationData().entrySet();
+        final List<FlowConfig> forUpdate = new ArrayList<FlowConfig>(updated.size());
+
+        if (updated != null && !(updated.isEmpty())) {
+            for (Entry<InstanceIdentifier<? extends DataObject>, DataObject> entry : updated) {
+                if (FlowConfigMapping.isFlowPath(entry.getKey())) {
+                    forUpdate.add(FlowConfigMapping.toFlowConfig((Flow) entry.getValue()));
+                }
+            }
+        }
+        this.toUpdate = Collections.unmodifiableCollection(forUpdate);
+
+        final Set<InstanceIdentifier<? extends DataObject>> removedConfigurationData =
+                this.modification.getRemovedConfigurationData();
+        final List<FlowConfig> forRemove = new ArrayList<FlowConfig>(removedConfigurationData.size());
+
+        if (removedConfigurationData != null && !(removedConfigurationData.isEmpty())) {
+            for (InstanceIdentifier<? extends DataObject> data : removedConfigurationData) {
+                if (FlowConfigMapping.isFlowPath(data)) {
+                    forRemove.add(FlowConfigMapping.toFlowConfig(data));
+                }
+            }
+        }
+        this.toRemove = Collections.unmodifiableCollection(forRemove);
+    }
+
+    @Override
+    public DataModification<InstanceIdentifier<? extends DataObject>, DataObject> getModification() {
+        return this.modification;
+    }
+
+    public FRMRuntimeDataProvider getFlowManager() {
+        return this.flowManager;
+    }
+
+    public HashSet<FlowConfig> getToAdd() {
+        return this.toAdd;
+    }
+
+    public Iterable<FlowConfig> getToUpdate() {
+        return this.toUpdate;
+    }
+
+    public Iterable<FlowConfig> getToRemove() {
+        return this.toRemove;
+    }
+}
diff --git a/opendaylight/md-sal/compatibility/flow-management-compatibility/src/main/java/org/opendaylight/controller/md/frm/compatibility/FlowConfigMapping.java b/opendaylight/md-sal/compatibility/flow-management-compatibility/src/main/java/org/opendaylight/controller/md/frm/compatibility/FlowConfigMapping.java
new file mode 100644 (file)
index 0000000..58c60ec
--- /dev/null
@@ -0,0 +1,109 @@
+/**
+ * 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.frm.compatibility;
+
+import java.text.MessageFormat;
+import java.util.Iterator;
+
+import org.opendaylight.controller.forwardingrulesmanager.FlowConfig;
+import org.opendaylight.controller.sal.compatibility.MDFlowMapping;
+import org.opendaylight.controller.sal.compatibility.NodeMapping;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.config.rev130819.flows.Flow;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.config.rev130819.flows.FlowBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.config.rev130819.flows.FlowKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.FlowAdded;
+import org.opendaylight.yangtools.yang.binding.Identifiable;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.IdentifiableItem;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.PathArgument;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class FlowConfigMapping {
+
+    private final static Logger LOG = LoggerFactory.getLogger(FlowConfigMapping.class);
+
+    /* nodes/node/flow  -> 0 / 1 / 2  */
+    private static final int FLOW_KEY_IDENTIFIER_DEEP = 2;
+
+    public static Flow toConfigurationFlow(final FlowConfig sourceCfg) {
+        final FlowAdded source = MDFlowMapping.flowAdded(sourceCfg.getFlow());
+        final FlowBuilder flowBuilder = new FlowBuilder();
+        flowBuilder.setInstructions(source.getInstructions());
+        flowBuilder.setCookie(source.getCookie());
+        flowBuilder.setHardTimeout(source.getHardTimeout());
+        flowBuilder.setIdleTimeout(source.getIdleTimeout());
+        flowBuilder.setMatch(source.getMatch());
+        flowBuilder.setNode(source.getNode());
+
+        FlowKey flowKey =
+                new FlowKey(Long.valueOf(sourceCfg.getName()), flowBuilder.getNode());
+        flowBuilder.setKey(flowKey);
+        return flowBuilder.build();
+    }
+
+    public static FlowConfig toFlowConfig(final Flow sourceCfg) {
+        try {
+            final FlowConfig flowConfig = new FlowConfig();
+            flowConfig.setName(String.valueOf(sourceCfg.getId()));
+            flowConfig.setNode(NodeMapping.toADNode(sourceCfg.getNode()));
+            return flowConfig;
+        } catch (Exception e) {
+            String errMsg = MessageFormat.format("Convert from Flow {} to FlowConfig fail", sourceCfg);
+            LOG.error(errMsg, e);
+            throw new RuntimeException(errMsg, e);
+        }
+    }
+
+    public static FlowConfig toFlowConfig(final InstanceIdentifier<? extends Object> identifier) {
+        try {
+            PathArgument pathArg = FlowConfigMapping.getSecondPathArgumentFromPath(identifier);
+            if (pathArg != null) {
+                final FlowConfig flowConfig = new FlowConfig();
+                FlowKey key = ((IdentifiableItem<Flow, FlowKey>) pathArg).getKey();
+                flowConfig.setName(String.valueOf(key.getId()));
+                flowConfig.setNode(NodeMapping.toADNode(key.getNode()));
+                return flowConfig;
+            }
+            return null;
+        } catch (Exception e) {
+            String errMsg = MessageFormat.format("Convert from InstanceIdentifier {} to FlowConfig fail", identifier);
+            LOG.error(errMsg, e);
+            throw new RuntimeException(errMsg, e);
+        }
+    }
+
+    public static boolean isFlowPath(final InstanceIdentifier<? extends Object> path) {
+        PathArgument pathArg = FlowConfigMapping.getSecondPathArgumentFromPath(path);
+        if (pathArg == null) {
+            return false;
+        }
+        if (pathArg instanceof IdentifiableItem<?,?>) {
+            final Identifiable<?> key = ((IdentifiableItem<?, ? extends Identifiable<?>>) pathArg).getKey();
+            if ((key instanceof FlowKey)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private static PathArgument getSecondPathArgumentFromPath(final InstanceIdentifier<? extends Object> path) {
+        if (path != null && path.getPathArguments() != null) {
+            Iterator<PathArgument> iterator = path.getPathArguments().iterator();
+            int deep = 0;
+            while (iterator.hasNext()) {
+                PathArgument pathArg = iterator.next();
+                if (deep == FlowConfigMapping.FLOW_KEY_IDENTIFIER_DEEP) {
+                    return pathArg;
+                }
+                deep++;
+            }
+        }
+        return null;
+    }
+}
diff --git a/opendaylight/md-sal/compatibility/flow-management-compatibility/src/main/java/org/opendaylight/controller/md/frm/compatibility/FlowConfigMapping.xtend b/opendaylight/md-sal/compatibility/flow-management-compatibility/src/main/java/org/opendaylight/controller/md/frm/compatibility/FlowConfigMapping.xtend
deleted file mode 100644 (file)
index e15b3c6..0000000
+++ /dev/null
@@ -1,66 +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.md.frm.compatibility
-
-import org.opendaylight.controller.forwardingrulesmanager.FlowConfig
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.config.rev130819.flows.FlowBuilder
-
-import static extension org.opendaylight.controller.sal.compatibility.NodeMapping.*
-import static org.opendaylight.controller.sal.compatibility.MDFlowMapping.*
-import static org.opendaylight.controller.sal.compatibility.ToSalConversionsUtils.*
-
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.config.rev130819.flows.FlowKey
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.config.rev130819.flows.Flow
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.IdentifiableItem
-import org.opendaylight.yangtools.yang.binding.Identifiable
-
-class FlowConfigMapping {
-
-    static def toConfigurationFlow(FlowConfig sourceCfg) {
-        val source = flowAdded(sourceCfg.flow);
-        val it = new FlowBuilder();
-        instructions = source.instructions;
-        cookie = source.cookie;
-        hardTimeout = source.hardTimeout
-        idleTimeout = source.idleTimeout
-        match = source.match
-        node = source.node
-        key = new FlowKey(Long.parseLong(sourceCfg.name),node);
-        return it.build();
-    }
-
-    static def toFlowConfig(Flow sourceCfg) {
-        val it = new FlowConfig;
-        name = String.valueOf(sourceCfg.id);
-        node = sourceCfg.node.toADNode();
-
-        return it
-    }
-
-    static def toFlowConfig(InstanceIdentifier<?> identifier) {
-        val it = new FlowConfig()
-        val FlowKey key = ((identifier.path.get(2) as IdentifiableItem<Flow,FlowKey>).key)
-        name = String.valueOf(key.id);
-        node = key.node.toADNode();
-
-        return it;
-    }
-
-    static def boolean isFlowPath(InstanceIdentifier<?> path) {
-        if(path.path.size < 2) return false;
-        if (path.path.get(2) instanceof IdentifiableItem<?,?>) {
-            val IdentifiableItem<?,? extends Identifiable<?>> item = path.path.get(2) as IdentifiableItem<?,? extends Identifiable<?>>;
-            val Identifiable<?> key = item.key;
-            if (key instanceof FlowKey) {
-                return true;
-            }
-        }
-        return false;
-    }
-}
index fad37ae4f34cdd4fecc1eb3fb6ee6a7c39cb35bc..c4c1ee93519cf4276de26115419e0de187655fca 100644 (file)
@@ -1,15 +1,16 @@
 /**
  * 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.compatibility;
 
-import com.google.common.base.Objects;
-import com.google.common.base.Preconditions;
-import org.eclipse.xtext.xbase.lib.Exceptions;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.List;
+
 import org.opendaylight.controller.sal.common.util.Arguments;
 import org.opendaylight.controller.sal.core.AdvertisedBandwidth;
 import org.opendaylight.controller.sal.core.Bandwidth;
@@ -58,36 +59,30 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.IdentifiableItem;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.PathArgument;
 
-import java.util.Date;
-import java.util.HashSet;
-import java.util.List;
+import com.google.common.base.Objects;
+import com.google.common.base.Preconditions;
 
-@SuppressWarnings("all")
-public class NodeMapping {
+public final class NodeMapping {
   public final static String MD_SAL_TYPE = "MD_SAL";
-  
+
   private final static Class<Node> NODE_CLASS = Node.class;
-  
+
   private final static Class<NodeConnector> NODECONNECTOR_CLASS = NodeConnector.class;
-  
+
   private NodeMapping() {
     throw new UnsupportedOperationException("Utility class. Instantiation is not allowed.");
   }
-  
+
   public static org.opendaylight.controller.sal.core.Node toADNode(final InstanceIdentifier<? extends Object> node) throws ConstructionException {
     NodeId nodeId = NodeMapping.toNodeId(node);
     return NodeMapping.toADNode(nodeId);
   }
-  
-  public static org.opendaylight.controller.sal.core.Node toADNode(final NodeId id) {
-    try {
+
+  public static org.opendaylight.controller.sal.core.Node toADNode(final NodeId id) throws ConstructionException {
       String aDNodeId = NodeMapping.toADNodeId(id);
       return  new org.opendaylight.controller.sal.core.Node(NodeMapping.MD_SAL_TYPE, aDNodeId);
-    } catch (Throwable e) {
-      throw Exceptions.sneakyThrow(e);
-    }
   }
-  
+
   public static NodeId toNodeId(final InstanceIdentifier<? extends Object> node) {
     Preconditions.<InstanceIdentifier<? extends Object>>checkNotNull(node);
     List<PathArgument> path = node.getPath();
@@ -96,16 +91,16 @@ public class NodeMapping {
     Preconditions.checkArgument(size >= 2);
     final PathArgument arg = path.get(1);
     final IdentifiableItem item = Arguments.<IdentifiableItem>checkInstanceOf(arg, IdentifiableItem.class);
-    Identifier key = item.getKey();
+    Identifier<?> key = item.getKey();
     final NodeKey nodeKey = Arguments.<NodeKey>checkInstanceOf(key, NodeKey.class);
     return nodeKey.getId();
   }
-  
+
   public static String toADNodeId(final NodeId nodeId) {
     Preconditions.<NodeId>checkNotNull(nodeId);
     return nodeId.getValue();
   }
-  
+
   public static org.opendaylight.controller.sal.core.NodeConnector toADNodeConnector(final NodeConnectorRef source) throws ConstructionException {
     Preconditions.<NodeConnectorRef>checkNotNull(source);
     final InstanceIdentifier<?> path = Preconditions.<InstanceIdentifier<? extends Object>>checkNotNull(source.getValue());
@@ -115,18 +110,14 @@ public class NodeMapping {
     final NodeConnectorKey connectorKey = Arguments.<NodeConnectorKey>checkInstanceOf(item.getKey(), NodeConnectorKey.class);
     return NodeMapping.toADNodeConnector(connectorKey.getId(), NodeMapping.toNodeId(path));
   }
-  
-  public static org.opendaylight.controller.sal.core.NodeConnector toADNodeConnector(final NodeConnectorId ncid, final NodeId nid) {
-    try {
-      String nodeConnectorType = NodeMapping.toNodeConnectorType(ncid, nid);
-      Object aDNodeConnectorId = NodeMapping.toADNodeConnectorId(ncid, nid);
-      org.opendaylight.controller.sal.core.Node aDNode = NodeMapping.toADNode(nid);
-      return new org.opendaylight.controller.sal.core.NodeConnector(nodeConnectorType, aDNodeConnectorId, aDNode);
-    } catch (Throwable e) {
-      throw Exceptions.sneakyThrow(e);
-    }
+
+  public static org.opendaylight.controller.sal.core.NodeConnector toADNodeConnector(final NodeConnectorId ncid, final NodeId nid) throws ConstructionException {
+    String nodeConnectorType = NodeMapping.toNodeConnectorType(ncid, nid);
+    Object aDNodeConnectorId = NodeMapping.toADNodeConnectorId(ncid, nid);
+    org.opendaylight.controller.sal.core.Node aDNode = NodeMapping.toADNode(nid);
+    return new org.opendaylight.controller.sal.core.NodeConnector(nodeConnectorType, aDNodeConnectorId, aDNode);
   }
-  
+
   public static String toNodeConnectorType(final NodeConnectorId ncId, final NodeId nodeId) {
     if (ncId.equals(toLocalNodeConnectorId(nodeId))) {
         return NodeConnectorIDType.SWSTACK;
@@ -146,19 +137,19 @@ public class NodeMapping {
     }
     return nodeConnectorId.getValue();
   }
-  
+
   public static NodeConnectorId toControllerNodeConnectorId(final NodeId node) {
     return new NodeConnectorId(node.getValue() + ":" + 4294967293L);
   }
-  
+
   public static NodeConnectorId toLocalNodeConnectorId(final NodeId node) {
     return new NodeConnectorId(node.getValue() + ":" + 4294967294L);
   }
-  
+
   public static NodeConnectorId toNormalNodeConnectorId(final NodeId node) {
     return new NodeConnectorId(node.getValue() + ":" + 4294967290L);
   }
-  
+
   public static NodeRef toNodeRef(final org.opendaylight.controller.sal.core.Node node) {
     Preconditions.checkArgument(MD_SAL_TYPE.equals(node.getType()));
     final String nodeId = Arguments.<String>checkInstanceOf(node.getID(), String.class);
@@ -166,7 +157,7 @@ public class NodeMapping {
     final InstanceIdentifier<Node> nodePath = InstanceIdentifier.builder(Nodes.class).child(NODE_CLASS, nodeKey).toInstance();
     return new NodeRef(nodePath);
   }
-  
+
   public static NodeConnectorRef toNodeConnectorRef(final org.opendaylight.controller.sal.core.NodeConnector nodeConnector) {
 
     final NodeRef node = NodeMapping.toNodeRef(nodeConnector.getNode());
@@ -187,14 +178,14 @@ public class NodeMapping {
         nodeConnectorId = new NodeConnectorId(Arguments.<String>checkInstanceOf(nodeConnector.getID(), String.class));
     }
     final NodeConnectorKey connectorKey = new NodeConnectorKey(nodeConnectorId);
-    final InstanceIdentifier<NodeConnector> path = InstanceIdentifier.builder(nodePath).child(NODECONNECTOR_CLASS, connectorKey).toInstance();
+    final InstanceIdentifier<NodeConnector> path = nodePath.child(NODECONNECTOR_CLASS, connectorKey);
     return new NodeConnectorRef(path);
   }
-  
+
   public static org.opendaylight.controller.sal.core.Node toADNode(final NodeRef node) throws ConstructionException {
     return NodeMapping.toADNode(node.getValue());
   }
-  
+
   public static HashSet<Property> toADNodeConnectorProperties(final NodeConnectorUpdated nc) {
     final FlowCapableNodeConnectorUpdated fcncu = nc.<FlowCapableNodeConnectorUpdated>getAugmentation(FlowCapableNodeConnectorUpdated.class);
     if (!Objects.equal(fcncu, null)) {
@@ -202,7 +193,7 @@ public class NodeMapping {
     }
     return new HashSet<Property>();
   }
-  
+
   public static HashSet<Property> toADNodeConnectorProperties(final NodeConnector nc) {
     final FlowCapableNodeConnector fcnc = nc.<FlowCapableNodeConnector>getAugmentation(FlowCapableNodeConnector.class);
     if (!Objects.equal(fcnc, null)) {
@@ -210,7 +201,7 @@ public class NodeMapping {
     }
     return new HashSet<Property>();
   }
-  
+
   public static HashSet<Property> toADNodeConnectorProperties(final FlowNodeConnector fcncu) {
 
     final HashSet<org.opendaylight.controller.sal.core.Property> props = new HashSet<>();
@@ -239,11 +230,11 @@ public class NodeMapping {
     }
     return props;
   }
-  
+
   public static Name toAdName(final String name) {
     return new Name(name);
   }
-  
+
   public static Config toAdConfig(final PortConfig pc) {
     Config config = null;
     if (pc.isPORTDOWN()) {
@@ -253,7 +244,7 @@ public class NodeMapping {
     }
     return config;
   }
-  
+
   public static org.opendaylight.controller.sal.core.State toAdState(final State s) {
 
     org.opendaylight.controller.sal.core.State state = null;
@@ -264,7 +255,7 @@ public class NodeMapping {
     }
     return state;
   }
-  
+
   public static Bandwidth toAdBandwidth(final PortFeatures pf) {
     Bandwidth bw = null;
     if (pf.isTenMbHd() || pf.isTenMbFd()) {
@@ -286,7 +277,7 @@ public class NodeMapping {
     }
     return bw;
   }
-  
+
   public static AdvertisedBandwidth toAdAdvertizedBandwidth(final PortFeatures pf) {
     AdvertisedBandwidth abw = null;
     final Bandwidth bw = toAdBandwidth(pf);
@@ -295,7 +286,7 @@ public class NodeMapping {
     }
     return abw;
   }
-  
+
   public static SupportedBandwidth toAdSupportedBandwidth(final PortFeatures pf) {
     SupportedBandwidth sbw = null;
     final Bandwidth bw = toAdBandwidth(pf);
@@ -304,7 +295,7 @@ public class NodeMapping {
     }
     return sbw;
   }
-  
+
   public static PeerBandwidth toAdPeerBandwidth(final PortFeatures pf) {
     PeerBandwidth pbw = null;
     final Bandwidth bw = toAdBandwidth(pf);
@@ -313,7 +304,7 @@ public class NodeMapping {
     }
     return pbw;
   }
-  
+
   public static HashSet<Property> toADNodeProperties(final NodeUpdated nu) {
     final FlowCapableNodeUpdated fcnu = nu.getAugmentation(FlowCapableNodeUpdated.class);
     if (fcnu != null) {
@@ -321,7 +312,7 @@ public class NodeMapping {
     }
     return new HashSet<org.opendaylight.controller.sal.core.Property>();
   }
-  
+
   public static HashSet<Property> toADNodeProperties(final FlowNode fcnu, final NodeId id) {
 
     final HashSet<org.opendaylight.controller.sal.core.Property> props = new HashSet<>();
@@ -348,13 +339,13 @@ public class NodeMapping {
     }
     return props;
   }
-  
+
   public static TimeStamp toADTimestamp() {
     final Date date = new Date();
     final TimeStamp timestamp = new TimeStamp(date.getTime(), "connectedSince");
     return timestamp;
   }
-  
+
   public static MacAddress toADMacAddress(final NodeId id) {
     final String nodeId = id.getValue().replaceAll("openflow:", "");
     long lNodeId = Long.parseLong(nodeId);
@@ -362,11 +353,11 @@ public class NodeMapping {
     byte[] bytesFromDpid = ToSalConversionsUtils.bytesFromDpid(lNodeId);
     return new MacAddress(bytesFromDpid);
   }
-  
+
   public static Tables toADTables(final Short tables) {
     return new Tables(tables.byteValue());
   }
-  
+
   public static Capabilities toADCapabiliities(final List<Class<? extends FeatureCapability>> capabilities) {
 
     int b = 0;
@@ -389,7 +380,7 @@ public class NodeMapping {
     }
     return new Capabilities(b);
   }
-  
+
   public static Buffers toADBuffers(final Long buffers) {
     return new Buffers(buffers.intValue());
   }
diff --git a/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/topology/TopologyCommitHandler.java b/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/topology/TopologyCommitHandler.java
new file mode 100644 (file)
index 0000000..e798b68
--- /dev/null
@@ -0,0 +1,93 @@
+/*
+ * 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.compatibility.topology;
+
+import static org.opendaylight.controller.sal.compatibility.topology.TopologyMapping.toAdEdge;
+import static org.opendaylight.controller.sal.compatibility.topology.TopologyMapping.toTopoEdgeUpdate;
+
+import java.util.Map.Entry;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import org.opendaylight.controller.md.sal.binding.util.TypeSafeDataReader;
+import org.opendaylight.controller.md.sal.common.api.data.DataChangeEvent;
+import org.opendaylight.controller.sal.binding.api.data.DataChangeListener;
+import org.opendaylight.controller.sal.binding.api.data.DataProviderService;
+import org.opendaylight.controller.sal.core.UpdateType;
+import org.opendaylight.controller.sal.topology.IPluginOutTopologyService;
+import org.opendaylight.controller.sal.topology.TopoEdgeUpdate;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Link;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TopologyCommitHandler implements DataChangeListener {
+    private static final Logger LOG = LoggerFactory.getLogger(TopologyCommitHandler.class);
+
+    private IPluginOutTopologyService topologyPublisher;
+
+    private final DataProviderService dataService;
+
+    public TopologyCommitHandler(final DataProviderService dataService, final IPluginOutTopologyService topologyPub) {
+        this.topologyPublisher = topologyPub;
+        this.dataService = dataService;
+    }
+
+    @Override
+    public void onDataChanged(final DataChangeEvent<InstanceIdentifier<?>, DataObject> modification) {
+        CopyOnWriteArrayList<TopoEdgeUpdate> msg = new CopyOnWriteArrayList<TopoEdgeUpdate>();
+        try {
+            TypeSafeDataReader reader = TypeSafeDataReader.forReader(dataService);
+            InstanceIdentifier<Topology> topologyPath = InstanceIdentifier.builder(NetworkTopology.class)
+                    .child(Topology.class, new TopologyKey(new TopologyId("flow:1"))).build();
+            Topology topology = reader.readOperationalData(topologyPath);
+
+            for (Entry<InstanceIdentifier<? extends DataObject>, DataObject> entry : modification
+                    .getCreatedOperationalData().entrySet()) {
+                if (entry.getValue() instanceof Link
+                        && modification.getCreatedOperationalData().containsKey(entry.getKey())) {
+                    msg.add(toTopoEdgeUpdate(toAdEdge((Link) entry.getValue(), topology), UpdateType.ADDED, reader));
+                }
+            }
+
+            for (Entry<InstanceIdentifier<? extends DataObject>, DataObject> entry : modification
+                    .getUpdatedOperationalData().entrySet()) {
+                if (entry.getValue() instanceof Link) {
+                    msg.add(toTopoEdgeUpdate(toAdEdge((Link) entry.getValue(), topology), UpdateType.CHANGED, reader));
+                }
+            }
+            for (InstanceIdentifier<? extends DataObject> path : modification.getRemovedOperationalData()) {
+                if (path.getTargetType() == Link.class) {
+                    Link link = (Link) modification.getOriginalOperationalData().get(path);
+                    msg.add(toTopoEdgeUpdate(toAdEdge(link, topology), UpdateType.REMOVED, reader));
+                }
+
+            }
+
+            if (topologyPublisher != null && msg != null && !msg.isEmpty()) {
+                topologyPublisher.edgeUpdate(msg);
+            }
+
+        } catch (Exception e) {
+            LOG.error("Exception caught", e);
+        }
+    }
+
+    protected IPluginOutTopologyService getTopologyPublisher() {
+        return topologyPublisher;
+    }
+
+    protected void setTopologyPublisher(final IPluginOutTopologyService topologyPublisher) {
+        this.topologyPublisher = topologyPublisher;
+    }
+
+}
diff --git a/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/topology/TopologyCommitHandler.xtend b/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/topology/TopologyCommitHandler.xtend
deleted file mode 100644 (file)
index fcf86f2..0000000
+++ /dev/null
@@ -1,69 +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.compatibility.topology
-
-import com.google.common.collect.FluentIterable
-import java.util.concurrent.CopyOnWriteArrayList
-import org.opendaylight.controller.md.sal.binding.util.TypeSafeDataReader
-import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandler
-import org.opendaylight.controller.md.sal.common.api.data.DataModification
-import org.opendaylight.controller.sal.binding.api.data.DataProviderService
-import org.opendaylight.controller.sal.core.UpdateType
-import org.opendaylight.controller.sal.topology.IPluginOutTopologyService
-import org.opendaylight.controller.sal.topology.TopoEdgeUpdate
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Link
-import org.opendaylight.yangtools.yang.binding.DataObject
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier
-import static extension org.opendaylight.controller.sal.compatibility.topology.TopologyMapping.*
-import org.slf4j.LoggerFactory
-
-class TopologyCommitHandler implements DataCommitHandler<InstanceIdentifier<? extends DataObject>, DataObject> {
-    static val LOG = LoggerFactory.getLogger(TopologyCommitHandler);
-    @Property
-    IPluginOutTopologyService topologyPublisher;
-    
-    @Property
-    DataProviderService dataService;
-    
-    new(DataProviderService dataService) {
-        _topologyPublisher = topologyPublisher
-        _dataService = dataService
-    }
-    
-    override requestCommit(DataModification<InstanceIdentifier<? extends DataObject>, DataObject> modification) {
-        val msg = new CopyOnWriteArrayList<TopoEdgeUpdate>()
-        try {
-            val reader = TypeSafeDataReader.forReader(dataService)
-            val topologyPath = InstanceIdentifier.builder(NetworkTopology).child(Topology, new TopologyKey(new TopologyId("flow:1"))).toInstance
-            val topology = reader.readOperationalData(topologyPath)
-            val adds = FluentIterable.from(modification.createdOperationalData.entrySet)
-                .filter[value instanceof Link]
-                .transform[(value as Link).toAdEdge(topology).toTopoEdgeUpdate(UpdateType.ADDED,reader)]
-                .toList
-            val updates = FluentIterable.from(modification.updatedOperationalData.entrySet)
-                .filter[!modification.createdOperationalData.containsKey(key) && (value instanceof Link)]
-                .transform[(value as Link).toAdEdge(topology).toTopoEdgeUpdate(UpdateType.ADDED,reader)] // Evidently the ADSAL does not expect edge 'CHANGED"
-                .toList
-            val removes = FluentIterable.from(modification.removedOperationalData)
-                .transform[reader.readOperationalData(it as InstanceIdentifier<DataObject>)]
-                .filter[it instanceof Link]
-                .transform[(it as Link).toAdEdge(topology).toTopoEdgeUpdate(UpdateType.REMOVED,reader)]
-                .toList
-            msg.addAll(adds)
-            msg.addAll(updates)
-            msg.addAll(removes)
-         } catch (Exception e) {
-            LOG.error("Exception caught",e)
-         }
-        return new TopologyTransaction(modification,topologyPublisher,dataService,msg)
-    }
-}
index 4aef75d9916565dc20c3c18a87149669116f4753..21f2b35f40a82c846df07e7ce05fab2ae540029c 100644 (file)
@@ -15,10 +15,10 @@ import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey
 import org.opendaylight.yangtools.yang.binding.DataObject
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier
-import org.opendaylight.yangtools.concepts.Registration
-import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandler
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Link
 import org.slf4j.LoggerFactory
+import org.opendaylight.yangtools.concepts.ListenerRegistration
+import org.opendaylight.controller.sal.binding.api.data.DataChangeListener
 
 class TopologyProvider implements AutoCloseable{
     static val LOG = LoggerFactory.getLogger(TopologyProvider);
@@ -30,8 +30,9 @@ class TopologyProvider implements AutoCloseable{
     @Property
     DataProviderService dataService;
     
-    Registration<DataCommitHandler<InstanceIdentifier<? extends DataObject>,DataObject>> commitHandlerRegistration;
-
+    ListenerRegistration<DataChangeListener> listenerRegistration
+    
+    
     def void start() {
 
     }
@@ -40,18 +41,17 @@ class TopologyProvider implements AutoCloseable{
             LOG.error("dataService not set");
             return;
         }
-        commitHandler = new TopologyCommitHandler(dataService)
-        commitHandler.setTopologyPublisher(topologyPublisher)
+        commitHandler = new TopologyCommitHandler(dataService,topologyPublisher);
         val InstanceIdentifier<? extends DataObject> path = InstanceIdentifier.builder(NetworkTopology)
             .child(Topology,new TopologyKey(new TopologyId("flow:1")))
             .child(Link)
             .toInstance();
-        commitHandlerRegistration = dataService.registerCommitHandler(path,commitHandler);
+        listenerRegistration = dataService.registerDataChangeListener(path,commitHandler);
         LOG.info("TopologyProvider started")
     }
     
     override close() throws Exception {
-        commitHandlerRegistration.close
+        listenerRegistration.close
     }
     
     def setTopologyPublisher(IPluginOutTopologyService topologyPublisher) {
diff --git a/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/topology/TopologyTransaction.xtend b/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/topology/TopologyTransaction.xtend
deleted file mode 100644 (file)
index 4de78ca..0000000
+++ /dev/null
@@ -1,73 +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.compatibility.topology
-
-import java.util.Collections
-import java.util.List
-import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandler.DataCommitTransaction
-import org.opendaylight.controller.md.sal.common.api.data.DataModification
-import org.opendaylight.controller.sal.binding.api.data.DataProviderService
-import org.opendaylight.controller.sal.topology.IPluginOutTopologyService
-import org.opendaylight.controller.sal.topology.TopoEdgeUpdate
-import org.opendaylight.yangtools.yang.binding.DataObject
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier
-import org.opendaylight.yangtools.yang.common.RpcResult
-import org.slf4j.LoggerFactory
-
-class TopologyTransaction implements DataCommitTransaction<InstanceIdentifier<?extends DataObject>, DataObject> {
-    static val LOG = LoggerFactory.getLogger(TopologyTransaction);
-    @Property
-    val DataModification<InstanceIdentifier<? extends DataObject>, DataObject> modification;
-    
-    @Property
-    IPluginOutTopologyService topologyPublisher;
-    
-    @Property
-    DataProviderService dataService;
-    @Property
-    List<TopoEdgeUpdate> edgeUpdates;
-    
-    new(DataModification<InstanceIdentifier<? extends DataObject>, DataObject> modification,IPluginOutTopologyService topologyPublisher,
-        DataProviderService dataService,List<TopoEdgeUpdate> edgeUpdates) {
-        _modification = modification;
-        _topologyPublisher = topologyPublisher
-        _dataService = dataService
-        _edgeUpdates = edgeUpdates
-    }
-    override finish() throws IllegalStateException {
-        
-        if(topologyPublisher != null && _edgeUpdates != null && !edgeUpdates.empty) {
-            topologyPublisher.edgeUpdate(edgeUpdates)
-        }
-         
-         return new RpcResultTo()
-    }
-    
-    override getModification() {
-        return _modification;
-    }
-    
-    override rollback() throws IllegalStateException {
-        // NOOP
-    }
-}
-class RpcResultTo implements RpcResult<Void> {
-    
-    override getErrors() {
-        return Collections.emptySet
-    }
-    
-    override getResult() {
-        return null;
-    }
-    
-    override isSuccessful() {
-        return true;
-    }
-    
-}
diff --git a/opendaylight/md-sal/feature/pom.xml b/opendaylight/md-sal/feature/pom.xml
new file mode 100644 (file)
index 0000000..c08c3e5
--- /dev/null
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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>sal-parent</artifactId>
+    <version>1.1-SNAPSHOT</version>
+  </parent>
+  <artifactId>mdsal-features</artifactId>
+
+  <packaging>pom</packaging>
+
+  <properties>
+    <features.file>features.xml</features.file>
+  </properties>
+
+  <dependencies></dependencies>
+
+  <build>
+    <resources>
+      <resource>
+        <filtering>true</filtering>
+        <directory>src/main/resources</directory>
+      </resource>
+    </resources>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-resources-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>filter</id>
+            <goals>
+              <goal>resources</goal>
+            </goals>
+            <phase>generate-resources</phase>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>build-helper-maven-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>attach-artifacts</id>
+            <goals>
+              <goal>attach-artifact</goal>
+            </goals>
+            <phase>package</phase>
+            <configuration>
+              <artifacts>
+                <artifact>
+                  <file>${project.build.directory}/classes/${features.file}</file>
+                  <type>xml</type>
+                  <classifier>features</classifier>
+                </artifact>
+              </artifacts>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+  <scm>
+    <connection>scm:git:ssh://git.opendaylight.org:29418/controller.git</connection>
+    <developerConnection>scm:git:ssh://git.opendaylight.org:29418/controller.git</developerConnection>
+    <tag>HEAD</tag>
+    <url>https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL</url>
+  </scm>
+</project>
diff --git a/opendaylight/md-sal/feature/src/main/resources/features.xml b/opendaylight/md-sal/feature/src/main/resources/features.xml
new file mode 100644 (file)
index 0000000..f816018
--- /dev/null
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<features name="mdsal-${project.version}" xmlns="http://karaf.apache.org/xmlns/features/v1.2.0"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
+    <feature name='mdsal-all' version='${project.version}'>
+        <feature version='${project.version}'>odl-mdsal-commons</feature>
+        <feature version='${project.version}'>odl-mdsal-broker</feature>
+        <feature version='${project.version}'>odl-mdsal-restconf</feature>
+    </feature>
+    <feature name='odl-mdsal-commons' version='${project.version}'>
+        <feature version='${yangtools.version}'>yangtools-concepts</feature>
+        <feature version='${yangtools.version}'>yangtools-binding</feature>
+        <bundle>mvn:org.opendaylight.controller/sal-common/${project.version}</bundle>
+        <bundle>mvn:org.opendaylight.controller/sal-common-api/${project.version}</bundle>
+        <bundle>mvn:org.opendaylight.controller/sal-common-impl/${project.version}</bundle>
+        <bundle>mvn:org.opendaylight.controller/sal-common-util/${project.version}</bundle>
+        <bundle>wrap:mvn:com.google.guava/guava/${guava.version}</bundle>
+        <bundle>wrap:mvn:org.eclipse.xtend/org.eclipse.xtend.lib/${xtend.version}</bundle>
+    </feature>
+    <feature name='odl-mdsal-broker' version='${project.version}'>
+        <feature version='${yangtools.version}'>yangtools-concepts</feature>
+        <feature version='${yangtools.version}'>yangtools-binding</feature>
+        <feature version='${mdsal.version}'>odl-mdsal-commons</feature>
+        <feature version='${config.version}'>odl-config-subsystem</feature>
+        <bundle>mvn:org.opendaylight.controller/sal-core-api/${project.version}</bundle>
+        <bundle>mvn:org.opendaylight.controller/sal-core-spi/${project.version}</bundle>
+        <bundle>mvn:org.opendaylight.controller/sal-broker-impl/${project.version}</bundle>
+        <bundle>mvn:org.opendaylight.controller/sal-binding-api/${project.version}</bundle>
+        <bundle>mvn:org.opendaylight.controller/sal-binding-config/${project.version}</bundle>
+        <bundle>mvn:org.opendaylight.controller/sal-binding-broker-impl/${project.version}</bundle>
+        <bundle>mvn:org.opendaylight.controller/sal-binding-util/${project.version}</bundle>
+        <bundle>mvn:org.opendaylight.controller/sal-connector-api/${project.version}</bundle>
+    </feature>
+    <feature name='odl-mdsal-restconf' version='${project.version}'>
+        <feature version='${mdsal.version}'>odl-mdsal-broker</feature>
+        <bundle>mvn:org.opendaylight.controller/sal-rest-connector/${project.version}</bundle>
+        <bundle>wrap:mvn:com.google.code.gson/gson/${gson.version}</bundle>
+        <bundle>wrap:mvn:com.sun.jersey/jersey-core/${jersey.version}</bundle>
+        <bundle>wrap:mvn:com.sun.jersey/jersey-server/${jersey.version}</bundle>
+        <bundle>mvn:org.opendaylight.controller.thirdparty/com.sun.jersey.jersey-servlet/${jersey.version}</bundle>
+        <bundle>wrap:mvn:io.netty/netty-buffer/${netty.version}</bundle>
+        <bundle>wrap:mvn:io.netty/netty-codec/${netty.version}</bundle>
+        <bundle>wrap:mvn:io.netty/netty-codec-http/${netty.version}</bundle>
+        <bundle>wrap:mvn:io.netty/netty-common/${netty.version}</bundle>
+        <bundle>wrap:mvn:io.netty/netty-handler/${netty.version}</bundle>
+        <bundle>wrap:mvn:io.netty/netty-transport/${netty.version}</bundle>
+    </feature>
+</features>
\ No newline at end of file
index 919a53c3643c406fbe8cfabfc595adfff950f204..9bd63d3c3bb5268d8d6e5142dd38da888a90b906 100644 (file)
           </instructions>
         </configuration>
       </plugin>
-      <plugin>
-        <groupId>org.eclipse.xtend</groupId>
-        <artifactId>xtend-maven-plugin</artifactId>
-      </plugin>
     </plugins>
   </build>
 
diff --git a/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/AbstractChangeListener.java b/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/AbstractChangeListener.java
new file mode 100644 (file)
index 0000000..426f4ba
--- /dev/null
@@ -0,0 +1,94 @@
+/**
+ * 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.frm;
+
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.Map.Entry;
+import java.util.concurrent.atomic.AtomicLong;
+
+import org.opendaylight.controller.md.sal.common.api.data.DataChangeEvent;
+import org.opendaylight.controller.sal.binding.api.data.DataChangeListener;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+/**
+ * 
+ * @author <a href="mailto:vdemcak@cisco.com">Vaclav Demcak</a>
+ *
+ */
+public abstract class AbstractChangeListener implements DataChangeListener {
+
+    private final AtomicLong txNum = new AtomicLong();
+    private String transactionId;
+
+    @Override
+    public void onDataChanged(DataChangeEvent<InstanceIdentifier<?>, DataObject> changeEvent) {
+        this.transactionId = this.newTransactionIdentifier().toString();
+
+        final Set<Entry<InstanceIdentifier<? extends DataObject>, DataObject>> createdEntries = 
+                changeEvent.getCreatedConfigurationData().entrySet();
+        final Set<Entry<InstanceIdentifier<? extends DataObject>, DataObject>> updatedEntries = 
+                new HashSet<Entry<InstanceIdentifier<? extends DataObject>, DataObject>>();
+
+        Set<Entry<InstanceIdentifier<? extends DataObject>, DataObject>> updateConfigEntrySet = 
+                changeEvent.getUpdatedConfigurationData().entrySet();
+        updatedEntries.addAll(updateConfigEntrySet);
+        updatedEntries.removeAll(createdEntries);
+
+        final Set<InstanceIdentifier<? extends DataObject>> removeEntriesInstanceIdentifiers = 
+                changeEvent.getRemovedConfigurationData();
+
+        for (final Entry<InstanceIdentifier<? extends DataObject>, DataObject> createdEntry : createdEntries) {
+            InstanceIdentifier<? extends DataObject> c_key = createdEntry.getKey();
+            DataObject c_value = createdEntry.getValue();
+            this.add(c_key, c_value);
+        }
+
+        for (final Entry<InstanceIdentifier<?>, DataObject> updatedEntrie : updatedEntries) {
+            Map<InstanceIdentifier<? extends DataObject>, DataObject> origConfigData = 
+                    changeEvent.getOriginalConfigurationData();
+
+            InstanceIdentifier<? extends Object> u_key = updatedEntrie.getKey();
+            final DataObject originalFlow = origConfigData.get(u_key);
+            final DataObject updatedFlow = updatedEntrie.getValue();
+            this.update(u_key, originalFlow, updatedFlow);
+        }
+
+        for (final InstanceIdentifier<?> instanceId : removeEntriesInstanceIdentifiers) {
+            Map<InstanceIdentifier<? extends DataObject>, DataObject> origConfigData = 
+                    changeEvent.getOriginalConfigurationData();
+
+            final DataObject removeValue = origConfigData.get(instanceId);
+            this.remove(instanceId, removeValue);
+        }
+    }
+
+    public String getTransactionId() {
+        return this.transactionId;
+    }
+
+    private Object newTransactionIdentifier() {
+        return "DOM-" + txNum.getAndIncrement();
+    }
+
+    protected abstract void validate() throws IllegalStateException;
+
+    protected abstract void remove(
+            final InstanceIdentifier<? extends DataObject> identifier,
+            final DataObject remove);
+
+    protected abstract void update(
+            final InstanceIdentifier<? extends DataObject> identifier,
+            final DataObject original, final DataObject update);
+
+    protected abstract void add(
+            final InstanceIdentifier<? extends DataObject> identifier,
+            final DataObject add);
+}
diff --git a/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/AbstractTransaction.xtend b/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/AbstractTransaction.xtend
deleted file mode 100644 (file)
index cb1e90d..0000000
+++ /dev/null
@@ -1,106 +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.frm
-
-import java.util.Collections
-import java.util.HashSet
-import java.util.Map.Entry
-import java.util.Set
-import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandler.DataCommitTransaction
-import org.opendaylight.controller.md.sal.common.api.data.DataModification
-import org.opendaylight.controller.sal.common.util.Rpcs
-import org.opendaylight.yangtools.yang.binding.DataObject
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier
-import org.opendaylight.yangtools.yang.common.RpcError
-
-abstract class AbstractTransaction implements DataCommitTransaction<InstanceIdentifier<?extends DataObject>, DataObject> {
-        
-    @Property
-    val DataModification<InstanceIdentifier<? extends DataObject>, DataObject> modification;
-    
-    new(DataModification<InstanceIdentifier<? extends DataObject>, DataObject> modification) {
-        _modification = modification;
-    }
-    
-    def void validate() throws IllegalStateException
-    
-    override finish() throws IllegalStateException {
-        validate()
-        callRpcs();
-        return Rpcs.getRpcResult(true, null, Collections.<RpcError>emptySet());     
-    }
-    
-    override getModification() {
-        return _modification;
-    }
-    
-    override rollback() throws IllegalStateException {
-        rollbackRpcs();
-        return Rpcs.getRpcResult(true, null, Collections.<RpcError>emptySet());
-    }
-    
-    def private callRpcs() {
-        val Set<Entry<InstanceIdentifier<? extends DataObject>, DataObject>> createdEntries = _modification.getCreatedConfigurationData().entrySet();
-
-        /*
-         * This little dance is because updatedEntries contains both created and modified entries
-         * The reason I created a new HashSet is because the collections we are returned are immutable.
-         */
-        val Set<Entry<InstanceIdentifier<? extends DataObject>, DataObject>> updatedEntries = new HashSet<Entry<InstanceIdentifier<? extends DataObject>, DataObject>>();
-        updatedEntries.addAll(_modification.getUpdatedConfigurationData().entrySet());
-        updatedEntries.removeAll(createdEntries);
-
-        val Set<InstanceIdentifier<? extends DataObject>> removeEntriesInstanceIdentifiers = _modification.getRemovedConfigurationData();
-        for (Entry<InstanceIdentifier<? extends DataObject >, DataObject> entry : createdEntries) {
-            add(entry.key,entry.value);
-        }
-        for (Entry<InstanceIdentifier<?>, DataObject> entry : updatedEntries) {
-                val originalFlow = _modification.originalConfigurationData.get(entry.key);
-                val updatedFlow = entry.value
-                update(entry.key, originalFlow ,updatedFlow);
-        }
-
-        for (InstanceIdentifier<?> instanceId : removeEntriesInstanceIdentifiers ) {
-            val removeValue = _modification.getOriginalConfigurationData.get(instanceId);
-                remove(instanceId,removeValue);
-        }
-    }
-    
-    def void remove(InstanceIdentifier<?> identifier, DataObject remove)
-    
-    def void update(InstanceIdentifier<?> identifier, DataObject original, DataObject update)
-    
-    def void add(InstanceIdentifier<?> identifier, DataObject add)
-    
-    def private rollbackRpcs() {
-        val Set<Entry<InstanceIdentifier<? extends DataObject>, DataObject>> createdEntries = _modification.getCreatedConfigurationData().entrySet();
-
-        /*
-         * This little dance is because updatedEntries contains both created and modified entries
-         * The reason I created a new HashSet is because the collections we are returned are immutable.
-         */
-        val Set<Entry<InstanceIdentifier<? extends DataObject>, DataObject>> updatedEntries = new HashSet<Entry<InstanceIdentifier<? extends DataObject>, DataObject>>();
-        updatedEntries.addAll(_modification.getUpdatedConfigurationData().entrySet());
-        updatedEntries.removeAll(createdEntries);
-
-        val Set<InstanceIdentifier<? >> removeEntriesInstanceIdentifiers = _modification.getRemovedConfigurationData();
-        for (Entry<InstanceIdentifier<?>, DataObject> entry : createdEntries) {
-            remove(entry.key,entry.value); // because we are rolling back, remove what we would have added.            
-        }
-        for (Entry<InstanceIdentifier<?>, DataObject> entry : updatedEntries) {
-            val originalFlow = _modification.originalConfigurationData.get(entry.key);
-            val updatedFlow = entry.value
-            update(entry.key, updatedFlow ,originalFlow);// because we are rolling back, replace the updated with the original
-        }
-
-        for (InstanceIdentifier<?> instanceId : removeEntriesInstanceIdentifiers ) {
-            val removeValue = _modification.getOriginalConfigurationData.get(instanceId);
-            add(instanceId,removeValue);// because we are rolling back, add what we would have removed.
-        }
-    }    
-}
diff --git a/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/FRMActivator.java b/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/FRMActivator.java
new file mode 100644 (file)
index 0000000..929c489
--- /dev/null
@@ -0,0 +1,61 @@
+/**
+ * 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.frm;
+
+import org.opendaylight.controller.frm.flow.FlowProvider;
+import org.opendaylight.controller.frm.group.GroupProvider;
+import org.opendaylight.controller.frm.meter.MeterProvider;
+import org.opendaylight.controller.sal.binding.api.AbstractBindingAwareProvider;
+import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
+import org.opendaylight.controller.sal.binding.api.data.DataProviderService;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.SalFlowService;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.SalGroupService;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.SalMeterService;
+import org.osgi.framework.BundleContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class FRMActivator extends AbstractBindingAwareProvider {
+
+    private final static Logger LOG = LoggerFactory.getLogger(FRMActivator.class);
+
+    private static FlowProvider flowProvider = new FlowProvider(); 
+    private static GroupProvider groupProvider = new GroupProvider();
+    private static MeterProvider meterProvider = new MeterProvider();
+    
+    @Override
+    public void onSessionInitiated(final ProviderContext session) {
+        DataProviderService flowSalService = session.<DataProviderService>getSALService(DataProviderService.class);
+        FRMActivator.flowProvider.setDataService(flowSalService);
+        SalFlowService rpcFlowSalService = session.<SalFlowService>getRpcService(SalFlowService.class);
+        FRMActivator.flowProvider.setSalFlowService(rpcFlowSalService);
+        FRMActivator.flowProvider.start();
+        DataProviderService groupSalService = session.<DataProviderService>getSALService(DataProviderService.class);
+        FRMActivator.groupProvider.setDataService(groupSalService);
+        SalGroupService rpcGroupSalService = session.<SalGroupService>getRpcService(SalGroupService.class);
+        FRMActivator.groupProvider.setSalGroupService(rpcGroupSalService);
+        FRMActivator.groupProvider.start();
+        DataProviderService meterSalService = session.<DataProviderService>getSALService(DataProviderService.class);
+        FRMActivator.meterProvider.setDataService(meterSalService);
+        SalMeterService rpcMeterSalService = session.<SalMeterService>getRpcService(SalMeterService.class);
+        FRMActivator.meterProvider.setSalMeterService(rpcMeterSalService);
+        FRMActivator.meterProvider.start();
+    }
+    
+    @Override
+    protected void stopImpl(final BundleContext context) {
+        try {
+            FRMActivator.flowProvider.close();
+            FRMActivator.groupProvider.close();
+            FRMActivator.meterProvider.close();
+        } catch (Throwable e) {
+            LOG.error("Unexpected error by stopping FRMActivator", e);
+            throw new RuntimeException(e);
+        }
+    }
+  }
\ No newline at end of file
diff --git a/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/FRMActivator.xtend b/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/FRMActivator.xtend
deleted file mode 100644 (file)
index 8ec9d79..0000000
+++ /dev/null
@@ -1,47 +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.frm
-
-import org.opendaylight.controller.frm.flow.FlowProvider
-import org.opendaylight.controller.frm.group.GroupProvider
-import org.opendaylight.controller.frm.meter.MeterProvider
-import org.opendaylight.controller.sal.binding.api.AbstractBindingAwareProvider
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext
-import org.opendaylight.controller.sal.binding.api.data.DataProviderService
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.SalFlowService
-import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.SalGroupService
-import org.osgi.framework.BundleContext
-import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.SalMeterService
-
-class FRMActivator extends AbstractBindingAwareProvider {
-
-    static var FlowProvider provider = new FlowProvider();
-    static var GroupProvider groupProvider = new GroupProvider();
-    static var MeterProvider meterProvider = new MeterProvider();
-
-    override onSessionInitiated(ProviderContext session) {
-        provider.dataService = session.getSALService(DataProviderService)
-        provider.salFlowService = session.getRpcService(SalFlowService);
-        provider.start();
-        
-        groupProvider.dataService = session.getSALService(DataProviderService)
-        groupProvider.salGroupService = session.getRpcService(SalGroupService)
-        groupProvider.start();
-        
-        meterProvider.dataService = session.getSALService(DataProviderService)
-        meterProvider.salMeterService = session.getRpcService(SalMeterService)
-        meterProvider.start();
-    }
-
-    override protected stopImpl(BundleContext context) {
-        provider.close();
-        groupProvider.close();
-        meterProvider.close();
-    }
-
-}
diff --git a/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/flow/FlowChangeListener.java b/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/flow/FlowChangeListener.java
new file mode 100644 (file)
index 0000000..df086c7
--- /dev/null
@@ -0,0 +1,120 @@
+/**
+ * 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.frm.flow;
+
+import org.opendaylight.controller.frm.AbstractChangeListener;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.Table;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.AddFlowInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.AddFlowInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.FlowTableRef;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.RemoveFlowInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.RemoveFlowInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.SalFlowService;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.UpdateFlowInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.UpdateFlowInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.flow.update.OriginalFlow;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.flow.update.OriginalFlowBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.flow.update.UpdatedFlow;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.flow.update.UpdatedFlowBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.Flow;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowRef;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * 
+ * @author <a href="mailto:vdemcak@cisco.com">Vaclav Demcak</a>
+ *
+ */
+public class FlowChangeListener extends AbstractChangeListener {
+
+    private final static Logger LOG = LoggerFactory.getLogger(FlowChangeListener.class);
+
+    private final SalFlowService salFlowService;
+
+    public SalFlowService getSalFlowService() {
+        return this.salFlowService;
+    }
+    
+    public FlowChangeListener(final SalFlowService manager) {
+        this.salFlowService = manager;
+    }
+
+    @Override
+    protected void validate() throws IllegalStateException {
+        FlowTransactionValidator.validate(this);
+    }
+
+    @Override
+    protected void remove(InstanceIdentifier<? extends DataObject> identifier, DataObject removeDataObj) {
+        if ((removeDataObj instanceof Flow)) {
+            
+            final Flow flow = ((Flow) removeDataObj);
+            final InstanceIdentifier<Table> tableInstanceId = identifier.<Table> firstIdentifierOf(Table.class);
+            final InstanceIdentifier<Node> nodeInstanceId = identifier.<Node> firstIdentifierOf(Node.class);
+            final RemoveFlowInputBuilder builder = new RemoveFlowInputBuilder(flow);
+            
+            builder.setFlowRef(new FlowRef(identifier));
+            builder.setNode(new NodeRef(nodeInstanceId));
+            builder.setFlowTable(new FlowTableRef(tableInstanceId));
+            
+            Uri uri = new Uri(this.getTransactionId());
+            builder.setTransactionUri(uri);
+            this.salFlowService.removeFlow((RemoveFlowInput) builder.build());
+            LOG.debug("Transaction {} - Removed Flow has removed flow: {}", new Object[]{uri, removeDataObj});
+        }
+    }
+
+    @Override
+    protected void update(InstanceIdentifier<? extends DataObject> identifier, DataObject original, DataObject update) {
+        if (original instanceof Flow && update instanceof Flow) {
+            
+            final Flow originalFlow = ((Flow) original);
+            final Flow updatedFlow = ((Flow) update);
+            final InstanceIdentifier<Node> nodeInstanceId = identifier.<Node>firstIdentifierOf(Node.class);
+            final UpdateFlowInputBuilder builder = new UpdateFlowInputBuilder();
+            
+            builder.setNode(new NodeRef(nodeInstanceId));
+            builder.setFlowRef(new FlowRef(identifier));
+            
+            Uri uri = new Uri(this.getTransactionId());
+            builder.setTransactionUri(uri);
+            
+            builder.setUpdatedFlow((UpdatedFlow) (new UpdatedFlowBuilder(updatedFlow)).build());
+            builder.setOriginalFlow((OriginalFlow) (new OriginalFlowBuilder(originalFlow)).build());
+            
+            this.salFlowService.updateFlow((UpdateFlowInput) builder.build());
+            LOG.debug("Transaction {} - Update Flow has updated flow {} with {}", new Object[]{uri, original, update});
+      }
+    }
+
+    @Override
+    protected void add(InstanceIdentifier<? extends DataObject> identifier, DataObject addDataObj) {
+        if ((addDataObj instanceof Flow)) {
+            
+            final Flow flow = ((Flow) addDataObj);
+            final InstanceIdentifier<Table> tableInstanceId = identifier.<Table> firstIdentifierOf(Table.class);
+            final InstanceIdentifier<Node> nodeInstanceId = identifier.<Node> firstIdentifierOf(Node.class);
+            final AddFlowInputBuilder builder = new AddFlowInputBuilder(flow);
+            
+            builder.setNode(new NodeRef(nodeInstanceId));
+            builder.setFlowRef(new FlowRef(identifier));
+            builder.setFlowTable(new FlowTableRef(tableInstanceId));
+            
+            Uri uri = new Uri(this.getTransactionId());
+            builder.setTransactionUri(uri);
+            this.salFlowService.addFlow((AddFlowInput) builder.build());
+            LOG.debug("Transaction {} - Add Flow has added flow: {}", new Object[]{uri, addDataObj});
+        }
+    }
+}
diff --git a/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/flow/FlowCommitHandler.xtend b/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/flow/FlowCommitHandler.xtend
deleted file mode 100644 (file)
index 188bfcd..0000000
+++ /dev/null
@@ -1,29 +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.frm.flow
-
-import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandler
-import org.opendaylight.controller.md.sal.common.api.data.DataModification
-import org.opendaylight.yangtools.yang.binding.DataObject
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.SalFlowService
-
-class FlowCommitHandler implements DataCommitHandler<InstanceIdentifier<? extends DataObject>, DataObject> {
-       
-    @Property
-    val SalFlowService salFlowService;
-    
-    new(SalFlowService manager) {
-        _salFlowService = manager;
-    }
-    
-    override requestCommit(DataModification<InstanceIdentifier<? extends DataObject>, DataObject> modification) {
-        return new FlowTransaction(modification,salFlowService);
-    }
-    
-}
diff --git a/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/flow/FlowProvider.java b/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/flow/FlowProvider.java
new file mode 100644 (file)
index 0000000..afdd628
--- /dev/null
@@ -0,0 +1,70 @@
+/**
+ * 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.frm.flow;
+
+import org.opendaylight.controller.sal.binding.api.data.DataChangeListener;
+import org.opendaylight.controller.sal.binding.api.data.DataModificationTransaction;
+import org.opendaylight.controller.sal.binding.api.data.DataProviderService;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.Table;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.SalFlowService;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class FlowProvider implements AutoCloseable {
+
+    private final static Logger LOG = LoggerFactory.getLogger(FlowProvider.class);
+
+    private SalFlowService salFlowService;
+    private DataProviderService dataService;
+
+    /* DataChangeListener */
+    private FlowChangeListener flowDataChangeListener;
+    ListenerRegistration<DataChangeListener> flowDataChangeListenerRegistration;
+
+    public void start() {
+        /* Build Path */
+        InstanceIdentifierBuilder<Nodes> nodesBuilder = InstanceIdentifier.<Nodes> builder(Nodes.class);
+        InstanceIdentifierBuilder<Node> nodeChild = nodesBuilder.<Node> child(Node.class);
+        InstanceIdentifierBuilder<FlowCapableNode> augmentFlowCapNode = nodeChild.<FlowCapableNode> augmentation(FlowCapableNode.class);
+        InstanceIdentifierBuilder<Table> tableChild = augmentFlowCapNode.<Table> child(Table.class);
+        InstanceIdentifierBuilder<Flow> flowChild = tableChild.<Flow> child(Flow.class);
+        final InstanceIdentifier<? extends DataObject> flowDataObjectPath = flowChild.toInstance();
+        
+        /* DataChangeListener registration */
+        this.flowDataChangeListener = new FlowChangeListener(this.salFlowService);
+        this.flowDataChangeListenerRegistration = this.dataService.registerDataChangeListener(flowDataObjectPath, flowDataChangeListener);
+        LOG.info("Flow Config Provider started.");
+    }
+
+    protected DataModificationTransaction startChange() {
+        return this.dataService.beginTransaction();
+    }
+
+    @Override
+    public void close() throws Exception {
+        if(flowDataChangeListenerRegistration != null){
+            flowDataChangeListenerRegistration.close();
+        }
+    }
+
+    public void setDataService(final DataProviderService dataService) {
+        this.dataService = dataService;
+    }
+
+    public void setSalFlowService(final SalFlowService salFlowService) {
+        this.salFlowService = salFlowService;
+    }
+}
diff --git a/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/flow/FlowProvider.xtend b/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/flow/FlowProvider.xtend
deleted file mode 100644 (file)
index d2ed541..0000000
+++ /dev/null
@@ -1,57 +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.frm.flow
-
-import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandler
-import org.opendaylight.controller.sal.binding.api.data.DataProviderService
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.Table
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.SalFlowService
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node
-import org.opendaylight.yangtools.concepts.Registration
-import org.opendaylight.yangtools.yang.binding.DataObject
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier
-import org.slf4j.LoggerFactory
-
-class FlowProvider implements AutoCloseable {
-    
-    @Property
-    DataProviderService dataService;
-    
-    @Property
-    SalFlowService salFlowService;
-    
-    FlowCommitHandler commitHandler
-
-    Registration<DataCommitHandler<InstanceIdentifier<? extends DataObject>,DataObject>> commitHandlerRegistration;
-    
-    static val LOG = LoggerFactory.getLogger(FlowProvider);
-    
-    def void start() {
-        commitHandler = new FlowCommitHandler(salFlowService)
-        val InstanceIdentifier<? extends DataObject> path = InstanceIdentifier.builder(Nodes)
-            .child(Node)
-            .augmentation(FlowCapableNode)
-            .child(Table)
-            .child(Flow)
-            .toInstance();
-        commitHandlerRegistration = dataService.registerCommitHandler(path,commitHandler);
-        LOG.info("Flow Config Provider started.");
-    }
-
-    protected def startChange() {
-        return dataService.beginTransaction;
-    }
-    
-    override close() throws Exception {
-        throw new UnsupportedOperationException("TODO: auto-generated method stub")
-    }
-    
-}
diff --git a/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/flow/FlowTransaction.xtend b/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/flow/FlowTransaction.xtend
deleted file mode 100644 (file)
index 26846ad..0000000
+++ /dev/null
@@ -1,88 +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.frm.flow
-
-import org.opendaylight.controller.frm.AbstractTransaction
-import org.opendaylight.controller.md.sal.common.api.data.DataModification
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.Table
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.AddFlowInputBuilder
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.FlowTableRef
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.RemoveFlowInputBuilder
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.UpdateFlowInputBuilder
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.flow.update.OriginalFlowBuilder
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.flow.update.UpdatedFlowBuilder
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.Flow
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node
-import org.opendaylight.yangtools.yang.binding.DataObject
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.SalFlowService
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowRef
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri
-
-class FlowTransaction extends AbstractTransaction {
-    
-    @Property
-    val SalFlowService salFlowService;   
-    
-    
-    new(DataModification<InstanceIdentifier<? extends DataObject>, DataObject> modification,SalFlowService salFlowService) {
-        super(modification)        
-        _salFlowService = salFlowService;
-    }
-    
-    override remove(InstanceIdentifier<?> instanceId, DataObject obj) {
-        if(obj instanceof Flow) {
-            val flow = (obj as Flow)
-            val tableInstanceId = instanceId.firstIdentifierOf(Table);
-            val nodeInstanceId = instanceId.firstIdentifierOf(Node);
-            val builder = new RemoveFlowInputBuilder(flow);
-            builder.setFlowRef(new FlowRef(instanceId));            
-            builder.setNode(new NodeRef(nodeInstanceId));
-            builder.setFlowTable(new FlowTableRef(tableInstanceId));
-            builder.setTransactionUri(new Uri(modification.getIdentifier() as String));
-            _salFlowService.removeFlow(builder.build());            
-        }
-    }
-    
-    override update(InstanceIdentifier<?> instanceId, DataObject originalObj, DataObject updatedObj) {
-        if(originalObj instanceof Flow && updatedObj instanceof Flow) {
-            val originalFlow = (originalObj as Flow)
-            val updatedFlow = (updatedObj as Flow)
-            val nodeInstanceId = instanceId.firstIdentifierOf(Node);
-            val builder = new UpdateFlowInputBuilder();
-            builder.setNode(new NodeRef(nodeInstanceId));
-            builder.setFlowRef(new FlowRef(instanceId));
-            val ufb = new UpdatedFlowBuilder(updatedFlow);
-            builder.setUpdatedFlow((ufb.build()));
-            builder.setTransactionUri(new Uri(modification.getIdentifier() as String));
-            val ofb = new OriginalFlowBuilder(originalFlow);
-            builder.setOriginalFlow(ofb.build());      
-            _salFlowService.updateFlow(builder.build());
-           
-        }
-    }
-    
-    override add(InstanceIdentifier<?> instanceId, DataObject obj) {
-        if(obj instanceof Flow) {
-            val flow = (obj as Flow)
-            val tableInstanceId = instanceId.firstIdentifierOf(Table);
-            val nodeInstanceId = instanceId.firstIdentifierOf(Node);
-            val builder = new AddFlowInputBuilder(flow);
-            builder.setNode(new NodeRef(nodeInstanceId));
-            builder.setTransactionUri(new Uri(modification.getIdentifier() as String));
-            builder.setFlowRef(new FlowRef(instanceId));
-            builder.setFlowTable(new FlowTableRef(tableInstanceId));
-            _salFlowService.addFlow(builder.build());            
-        }
-    }
-    
-    override validate() throws IllegalStateException {
-        FlowTransactionValidator.validate(this)
-    }  
-}
index 7c6f1ff1cb8afcf6fcd797194c99db160b8935e9..4ef93a55e9d515ebcc8e15312ae72108658d379b 100644 (file)
@@ -1,6 +1,6 @@
-/*
+/**
  * 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
@@ -9,8 +9,7 @@ package org.opendaylight.controller.frm.flow;
 
 public class FlowTransactionValidator {
 
-    public static void validate(FlowTransaction transaction) throws IllegalStateException {
+    public static void validate(FlowChangeListener transaction) throws IllegalStateException {
         // NOOP
     }
-
 }
diff --git a/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/group/GroupChangeListener.java b/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/group/GroupChangeListener.java
new file mode 100644 (file)
index 0000000..1260f0e
--- /dev/null
@@ -0,0 +1,113 @@
+/**
+ * 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.frm.group;
+
+import org.opendaylight.controller.frm.AbstractChangeListener;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.AddGroupInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.AddGroupInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.RemoveGroupInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.RemoveGroupInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.SalGroupService;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.UpdateGroupInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.UpdateGroupInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.group.update.OriginalGroup;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.group.update.OriginalGroupBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.group.update.UpdatedGroup;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.group.update.UpdatedGroupBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupRef;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.groups.Group;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * 
+ * @author <a href="mailto:vdemcak@cisco.com">Vaclav Demcak</a>
+ *
+ */
+public class GroupChangeListener extends AbstractChangeListener {
+
+    private final static Logger LOG = LoggerFactory.getLogger(GroupChangeListener.class);
+
+    private final SalGroupService salGroupService;
+
+    public SalGroupService getSalGroupService() {
+        return this.salGroupService;
+    }
+    
+    public GroupChangeListener(final SalGroupService manager) {
+        this.salGroupService = manager;
+    }
+
+    @Override
+    protected void validate() throws IllegalStateException {
+        GroupTransactionValidator.validate(this);
+    }
+
+    @Override
+    protected void remove(InstanceIdentifier<? extends DataObject> identifier, DataObject removeDataObj) {
+        if ((removeDataObj instanceof Group)) {
+            
+            final Group group = ((Group) removeDataObj);
+            final InstanceIdentifier<Node> nodeInstanceId = identifier.<Node> firstIdentifierOf(Node.class);
+            final RemoveGroupInputBuilder builder = new RemoveGroupInputBuilder(group);
+            
+            builder.setNode(new NodeRef(nodeInstanceId));
+            builder.setGroupRef(new GroupRef(identifier));
+            
+            Uri uri = new Uri(this.getTransactionId());
+            builder.setTransactionUri(uri);
+            this.salGroupService.removeGroup((RemoveGroupInput) builder.build());
+            LOG.debug("Transaction {} - Remove Group has removed group: {}", new Object[]{uri, removeDataObj});
+        }
+    }
+
+    @Override
+    protected void update(InstanceIdentifier<? extends DataObject> identifier, DataObject original, DataObject update) {
+        if (original instanceof Group && update instanceof Group) {
+            
+            final Group originalGroup = ((Group) original);
+            final Group updatedGroup = ((Group) update);
+            final InstanceIdentifier<Node> nodeInstanceId = identifier.<Node> firstIdentifierOf(Node.class);
+            final UpdateGroupInputBuilder builder = new UpdateGroupInputBuilder();
+            
+            builder.setNode(new NodeRef(nodeInstanceId));
+            builder.setGroupRef(new GroupRef(identifier));
+            
+            Uri uri = new Uri(this.getTransactionId());
+            builder.setTransactionUri(uri);
+            
+            builder.setUpdatedGroup((UpdatedGroup) (new UpdatedGroupBuilder(updatedGroup)).build());
+            builder.setOriginalGroup((OriginalGroup) (new OriginalGroupBuilder(originalGroup)).build());
+            
+            this.salGroupService.updateGroup((UpdateGroupInput) builder.build());
+            LOG.debug("Transaction {} - Update Group has updated group {} with group {}", new Object[]{uri, original, update});
+        }
+    }
+
+    @Override
+    protected void add(InstanceIdentifier<? extends DataObject> identifier, DataObject addDataObj) {
+        if ((addDataObj instanceof Group)) {
+            final Group group = ((Group) addDataObj);
+            final InstanceIdentifier<Node> nodeInstanceId = identifier.<Node> firstIdentifierOf(Node.class);
+            final AddGroupInputBuilder builder = new AddGroupInputBuilder(group);
+            
+            builder.setNode(new NodeRef(nodeInstanceId));
+            builder.setGroupRef(new GroupRef(identifier));
+            
+            Uri uri = new Uri(this.getTransactionId());
+            builder.setTransactionUri(uri);
+            this.salGroupService.addGroup((AddGroupInput) builder.build());
+            LOG.debug("Transaction {} - Add Group has added group: {}", new Object[]{uri, addDataObj});
+        }
+    }
+}
diff --git a/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/group/GroupCommitHandler.xtend b/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/group/GroupCommitHandler.xtend
deleted file mode 100644 (file)
index b6d3851..0000000
+++ /dev/null
@@ -1,29 +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.frm.group
-
-import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandler
-import org.opendaylight.controller.md.sal.common.api.data.DataModification
-import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.SalGroupService
-import org.opendaylight.yangtools.yang.binding.DataObject
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier
-
-class GroupCommitHandler implements DataCommitHandler<InstanceIdentifier<? extends DataObject>, DataObject> {
-       
-    @Property
-    val SalGroupService groupService;
-    
-    new(SalGroupService groupService) {
-        _groupService = groupService;
-    }
-    
-    override requestCommit(DataModification<InstanceIdentifier<? extends DataObject>, DataObject> modification) {
-        return new GroupTransaction(modification,groupService);
-    }
-    
-}
diff --git a/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/group/GroupProvider.java b/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/group/GroupProvider.java
new file mode 100644 (file)
index 0000000..14b1b6f
--- /dev/null
@@ -0,0 +1,67 @@
+/**
+ * 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.frm.group;
+
+import org.opendaylight.controller.sal.binding.api.data.DataChangeListener;
+import org.opendaylight.controller.sal.binding.api.data.DataModificationTransaction;
+import org.opendaylight.controller.sal.binding.api.data.DataProviderService;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.SalGroupService;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.groups.Group;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class GroupProvider implements AutoCloseable {
+
+    private final static Logger LOG = LoggerFactory.getLogger(GroupProvider.class);
+
+    private SalGroupService salGroupService;
+    private DataProviderService dataService;
+
+    /* DataChangeListener */
+    private GroupChangeListener groupDataChangeListener;
+    ListenerRegistration<DataChangeListener> groupDataChangeListenerRegistration;
+
+    public void start() {
+        /* Build Path */
+        InstanceIdentifierBuilder<Nodes> nodesBuilder = InstanceIdentifier.<Nodes> builder(Nodes.class);
+        InstanceIdentifierBuilder<Node> nodeChild = nodesBuilder.<Node> child(Node.class);
+        InstanceIdentifierBuilder<FlowCapableNode> augmentFlowCapNode = nodeChild.<FlowCapableNode> augmentation(FlowCapableNode.class);
+        InstanceIdentifierBuilder<Group> groupChild = augmentFlowCapNode.<Group> child(Group.class);
+        final InstanceIdentifier<? extends DataObject> groupDataObjectPath = groupChild.toInstance();
+
+        /* DataChangeListener registration */
+        this.groupDataChangeListener = new GroupChangeListener(this.salGroupService);
+        this.groupDataChangeListenerRegistration = this.dataService.registerDataChangeListener(groupDataObjectPath, groupDataChangeListener);
+        LOG.info("Group Config Provider started.");
+    }
+    
+    protected DataModificationTransaction startChange() {
+        return this.dataService.beginTransaction();
+    }
+    
+    public void close() throws Exception {
+        if(groupDataChangeListenerRegistration != null){
+            groupDataChangeListenerRegistration.close();
+        }
+    }
+
+    public void setDataService(final DataProviderService dataService) {
+        this.dataService = dataService;
+    }
+
+    public void setSalGroupService(final SalGroupService salGroupService) {
+        this.salGroupService = salGroupService;
+    }
+}
diff --git a/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/group/GroupProvider.xtend b/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/group/GroupProvider.xtend
deleted file mode 100644 (file)
index 4ded8b6..0000000
+++ /dev/null
@@ -1,55 +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.frm.group
-
-import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandler
-import org.opendaylight.controller.sal.binding.api.data.DataProviderService
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode
-import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.SalGroupService
-import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.groups.Group
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node
-import org.opendaylight.yangtools.concepts.Registration
-import org.opendaylight.yangtools.yang.binding.DataObject
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier
-import org.slf4j.LoggerFactory
-
-class GroupProvider implements AutoCloseable {
-    
-    @Property
-    DataProviderService dataService;
-    
-    @Property
-    SalGroupService salGroupService;
-    
-    GroupCommitHandler commitHandler
-
-    Registration<DataCommitHandler<InstanceIdentifier<? extends DataObject>,DataObject>> commitHandlerRegistration;
-    
-    static val LOG = LoggerFactory.getLogger(GroupProvider);
-    
-    def void start() {
-        commitHandler = new GroupCommitHandler(salGroupService)
-        val InstanceIdentifier<? extends DataObject> path = InstanceIdentifier.builder(Nodes)
-            .child(Node)
-            .augmentation(FlowCapableNode)
-            .child(Group)
-            .toInstance();
-        commitHandlerRegistration = dataService.registerCommitHandler(path,commitHandler);
-        LOG.info("Group Config Provider started.");
-    }
-
-    protected def startChange() {
-        return dataService.beginTransaction;
-    }
-    
-    override close() throws Exception {
-        throw new UnsupportedOperationException("TODO: auto-generated method stub")
-    }
-    
-}
diff --git a/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/group/GroupTransaction.xtend b/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/group/GroupTransaction.xtend
deleted file mode 100644 (file)
index e8d9982..0000000
+++ /dev/null
@@ -1,81 +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.frm.group
-
-import org.opendaylight.controller.frm.AbstractTransaction
-import org.opendaylight.controller.md.sal.common.api.data.DataModification
-import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.AddGroupInputBuilder
-import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.RemoveGroupInputBuilder
-import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.SalGroupService
-import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.UpdateGroupInputBuilder
-import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.group.update.OriginalGroupBuilder
-import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.group.update.UpdatedGroupBuilder
-import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupRef
-import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.groups.Group
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node
-import org.opendaylight.yangtools.yang.binding.DataObject
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri
-
-class GroupTransaction extends AbstractTransaction {
-    
-    @Property
-    val SalGroupService groupService;
-        
-    new(DataModification<InstanceIdentifier<? extends DataObject>, DataObject> modification,SalGroupService groupService) {
-        super(modification)        
-        _groupService = groupService;
-    }
-    
-    override remove(InstanceIdentifier<?> instanceId, DataObject obj) {
-        if(obj instanceof Group) {
-            val group = (obj as Group)
-            val nodeInstanceId = instanceId.firstIdentifierOf(Node);
-            val builder = new RemoveGroupInputBuilder(group);
-            builder.setNode(new NodeRef(nodeInstanceId));
-            builder.setTransactionUri(new Uri(modification.getIdentifier() as String));
-            builder.setGroupRef(new GroupRef(instanceId));
-            _groupService.removeGroup(builder.build());            
-        }
-    }
-    
-    override update(InstanceIdentifier<?> instanceId, DataObject originalObj, DataObject updatedObj) {
-        if(originalObj instanceof Group && updatedObj instanceof Group) {
-            val originalGroup = (originalObj as Group)
-            val updatedGroup = (updatedObj as Group)
-            val nodeInstanceId = instanceId.firstIdentifierOf(Node);
-            val builder = new UpdateGroupInputBuilder();
-            builder.setNode(new NodeRef(nodeInstanceId));
-            builder.setGroupRef(new GroupRef(instanceId));
-            val ufb = new UpdatedGroupBuilder(updatedGroup);
-            builder.setUpdatedGroup((ufb.build()));
-            builder.setTransactionUri(new Uri(modification.getIdentifier() as String));
-            val ofb = new OriginalGroupBuilder(originalGroup);
-            builder.setOriginalGroup(ofb.build());      
-            _groupService.updateGroup(builder.build());
-           
-        }
-    }
-    
-    override add(InstanceIdentifier<?> instanceId, DataObject obj) {
-        if(obj instanceof Group) {
-            val group = (obj as Group)
-            val nodeInstanceId = instanceId.firstIdentifierOf(Node);
-            val builder = new AddGroupInputBuilder(group);
-            builder.setNode(new NodeRef(nodeInstanceId));
-            builder.setGroupRef(new GroupRef(instanceId));
-            builder.setTransactionUri(new Uri(modification.getIdentifier() as String));
-            _groupService.addGroup(builder.build());            
-        }
-    }
-    
-    override validate() throws IllegalStateException {
-        GroupTransactionValidator.validate(this)
-    }  
-}
index 92baf7bdf0a022a7d1783e78d28bfffc4fc7a243..88eea0db343eb6c2725d7d6dc11580ceaddb50a1 100644 (file)
@@ -1,4 +1,4 @@
-/*
+/**
  * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -9,8 +9,7 @@ package org.opendaylight.controller.frm.group;
 
 public class GroupTransactionValidator {
 
-    public static void validate(GroupTransaction transaction) throws IllegalStateException {
+    public static void validate(GroupChangeListener transaction) throws IllegalStateException {
         // NOOP
     }
-
 }
diff --git a/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/meter/MeterChangeListener.java b/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/meter/MeterChangeListener.java
new file mode 100644 (file)
index 0000000..839e556
--- /dev/null
@@ -0,0 +1,114 @@
+/**
+ * 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.frm.meter;
+
+import org.opendaylight.controller.frm.AbstractChangeListener;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.AddMeterInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.AddMeterInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.RemoveMeterInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.RemoveMeterInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.SalMeterService;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.UpdateMeterInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.UpdateMeterInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.meter.update.OriginalMeter;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.meter.update.OriginalMeterBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.meter.update.UpdatedMeter;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.meter.update.UpdatedMeterBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.Meter;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterRef;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * 
+ * @author <a href="mailto:vdemcak@cisco.com">Vaclav Demcak</a>
+ *
+ */
+public class MeterChangeListener extends AbstractChangeListener {
+
+    private final static Logger LOG = LoggerFactory.getLogger(MeterChangeListener.class);
+
+    private final SalMeterService salMeterService;
+
+    public SalMeterService getSalMeterService() {
+        return this.salMeterService;
+    }
+    
+    public MeterChangeListener(final SalMeterService manager) {
+        this.salMeterService = manager;
+    }
+
+    @Override
+    protected void validate() throws IllegalStateException {
+        MeterTransactionValidator.validate(this);
+    }
+
+    @Override
+    protected void remove(InstanceIdentifier<? extends DataObject> identifier, DataObject removeDataObj) {
+        if ((removeDataObj instanceof Meter)) {
+            
+            final Meter meter = ((Meter) removeDataObj);
+            final InstanceIdentifier<Node> nodeInstanceId = identifier.<Node> firstIdentifierOf(Node.class);
+            final RemoveMeterInputBuilder builder = new RemoveMeterInputBuilder(meter);
+            
+            builder.setNode(new NodeRef(nodeInstanceId));
+            builder.setMeterRef(new MeterRef(identifier));
+            
+            Uri uri = new Uri(this.getTransactionId());
+            builder.setTransactionUri(uri);
+            this.salMeterService.removeMeter((RemoveMeterInput) builder.build());
+            LOG.debug("Transaction {} - Remove Meter has removed meter: {}", new Object[]{uri, removeDataObj});
+        }
+    }
+
+    @Override
+    protected void update(InstanceIdentifier<? extends DataObject> identifier, DataObject original, DataObject update) {
+        if (original instanceof Meter && update instanceof Meter) {
+            
+            final Meter originalMeter = ((Meter) original);
+            final Meter updatedMeter = ((Meter) update);
+            final InstanceIdentifier<Node> nodeInstanceId = identifier.<Node> firstIdentifierOf(Node.class);
+            final UpdateMeterInputBuilder builder = new UpdateMeterInputBuilder();
+            
+            builder.setNode(new NodeRef(nodeInstanceId));
+            builder.setMeterRef(new MeterRef(identifier));
+            
+            Uri uri = new Uri(this.getTransactionId());
+            builder.setTransactionUri(uri);
+            
+            builder.setUpdatedMeter((UpdatedMeter) (new UpdatedMeterBuilder(updatedMeter)).build());
+            builder.setOriginalMeter((OriginalMeter) (new OriginalMeterBuilder(originalMeter)).build());
+            
+            this.salMeterService.updateMeter((UpdateMeterInput) builder.build());
+            LOG.debug("Transaction {} - Update Meter has updated meter {} with {}", new Object[]{uri, original, update});
+        }
+    }
+
+    @Override
+    protected void add(InstanceIdentifier<? extends DataObject> identifier, DataObject addDataObj) {
+        if ((addDataObj instanceof Meter)) {
+            
+            final Meter meter = ((Meter) addDataObj);
+            final InstanceIdentifier<Node> nodeInstanceId = identifier.<Node> firstIdentifierOf(Node.class);
+            final AddMeterInputBuilder builder = new AddMeterInputBuilder(meter);
+            
+            builder.setNode(new NodeRef(nodeInstanceId));
+            builder.setMeterRef(new MeterRef(identifier));
+            
+            Uri uri = new Uri(this.getTransactionId());
+            builder.setTransactionUri(uri);
+            this.salMeterService.addMeter((AddMeterInput) builder.build());
+            LOG.debug("Transaction {} - Add Meter has added meter: {}", new Object[]{uri, addDataObj});
+        }
+    }
+}
\ No newline at end of file
diff --git a/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/meter/MeterCommitHandler.xtend b/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/meter/MeterCommitHandler.xtend
deleted file mode 100644 (file)
index d5292f0..0000000
+++ /dev/null
@@ -1,29 +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.frm.meter
-
-import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandler
-import org.opendaylight.controller.md.sal.common.api.data.DataModification
-import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.SalMeterService
-import org.opendaylight.yangtools.yang.binding.DataObject
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier
-
-class FlowCommitHandler implements DataCommitHandler<InstanceIdentifier<? extends DataObject>, DataObject> {
-       
-    @Property
-    val SalMeterService salMeterService;
-    
-    new(SalMeterService manager) {
-        _salMeterService = manager;
-    }
-    
-    override requestCommit(DataModification<InstanceIdentifier<? extends DataObject>, DataObject> modification) {
-        return new MeterTransaction(modification,salMeterService);
-    }
-    
-}
diff --git a/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/meter/MeterProvider.java b/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/meter/MeterProvider.java
new file mode 100644 (file)
index 0000000..620801f
--- /dev/null
@@ -0,0 +1,67 @@
+/**
+ * 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.frm.meter;
+
+import org.opendaylight.controller.sal.binding.api.data.DataChangeListener;
+import org.opendaylight.controller.sal.binding.api.data.DataModificationTransaction;
+import org.opendaylight.controller.sal.binding.api.data.DataProviderService;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.meters.Meter;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.SalMeterService;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class MeterProvider implements AutoCloseable {
+
+    private final static Logger LOG = LoggerFactory.getLogger(MeterProvider.class);
+
+    private DataProviderService dataService;
+    private SalMeterService salMeterService;
+
+    /* DataChangeListener */
+    private MeterChangeListener meterDataChangeListener;
+    ListenerRegistration<DataChangeListener> meterDataChangeListenerRegistration;
+
+    public void start() {
+        /* Build Path */
+        InstanceIdentifierBuilder<Nodes> nodesBuilder = InstanceIdentifier.<Nodes> builder(Nodes.class);
+        InstanceIdentifierBuilder<Node> nodeChild = nodesBuilder.<Node> child(Node.class);
+        InstanceIdentifierBuilder<FlowCapableNode> augmentFlowCapNode = nodeChild.<FlowCapableNode> augmentation(FlowCapableNode.class);
+        InstanceIdentifierBuilder<Meter> meterChild = augmentFlowCapNode.<Meter> child(Meter.class);
+        final InstanceIdentifier<? extends DataObject> meterDataObjectPath = meterChild.toInstance();
+
+        /* DataChangeListener registration */
+        this.meterDataChangeListener = new MeterChangeListener(this.salMeterService);
+        this.meterDataChangeListenerRegistration = this.dataService.registerDataChangeListener(meterDataObjectPath, meterDataChangeListener);
+        LOG.info("Meter Config Provider started.");
+    }
+    
+    protected DataModificationTransaction startChange() {
+        return this.dataService.beginTransaction();
+    }
+
+    public void close() throws Exception {
+        if(meterDataChangeListenerRegistration != null){
+            meterDataChangeListenerRegistration.close();
+        }
+    }
+
+    public void setDataService(final DataProviderService dataService) {
+        this.dataService = dataService;
+    }
+
+    public void setSalMeterService(final SalMeterService salMeterService) {
+        this.salMeterService = salMeterService;
+    }
+}
\ No newline at end of file
diff --git a/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/meter/MeterProvider.xtend b/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/meter/MeterProvider.xtend
deleted file mode 100644 (file)
index 323da57..0000000
+++ /dev/null
@@ -1,55 +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.frm.meter
-
-import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandler
-import org.opendaylight.controller.sal.binding.api.data.DataProviderService
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.meters.Meter
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node
-import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.SalMeterService
-import org.opendaylight.yangtools.concepts.Registration
-import org.opendaylight.yangtools.yang.binding.DataObject
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier
-import org.slf4j.LoggerFactory
-
-class MeterProvider implements AutoCloseable {
-    
-    @Property
-    DataProviderService dataService;
-    
-    @Property
-    SalMeterService salMeterService;
-    
-    FlowCommitHandler commitHandler
-
-    Registration<DataCommitHandler<InstanceIdentifier<? extends DataObject>,DataObject>> commitHandlerRegistration;
-    
-    static val LOG = LoggerFactory.getLogger(MeterProvider);
-    
-    def void start() {
-        commitHandler = new FlowCommitHandler(salMeterService)
-        val InstanceIdentifier<? extends DataObject> path = InstanceIdentifier.builder(Nodes)
-            .child(Node)
-            .augmentation(FlowCapableNode)
-            .child(Meter)
-            .toInstance();
-        commitHandlerRegistration = dataService.registerCommitHandler(path,commitHandler);
-        LOG.info("Meter Config Provider started.");
-    }
-
-    protected def startChange() {
-        return dataService.beginTransaction;
-    }
-    
-    override close() throws Exception {
-        throw new UnsupportedOperationException("TODO: auto-generated method stub")
-    }
-    
-}
diff --git a/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/meter/MeterTransaction.xtend b/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/meter/MeterTransaction.xtend
deleted file mode 100644 (file)
index 491fa08..0000000
+++ /dev/null
@@ -1,81 +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.frm.meter
-
-import org.opendaylight.controller.frm.AbstractTransaction
-import org.opendaylight.controller.md.sal.common.api.data.DataModification
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node
-import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.AddMeterInputBuilder
-import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.RemoveMeterInputBuilder
-import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.SalMeterService
-import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.UpdateMeterInputBuilder
-import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.meter.update.OriginalMeterBuilder
-import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.meter.update.UpdatedMeterBuilder
-import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.Meter
-import org.opendaylight.yangtools.yang.binding.DataObject
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier
-import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterRef
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri
-
-class MeterTransaction extends AbstractTransaction {
-    
-    @Property
-    val SalMeterService salMeterService;
-        
-    new(DataModification<InstanceIdentifier<? extends DataObject>, DataObject> modification,SalMeterService salMeterService) {
-        super(modification)    
-        _salMeterService = salMeterService;
-    }
-    
-    override remove(InstanceIdentifier<?> instanceId, DataObject obj) {
-        if(obj instanceof Meter) {
-            val meter = (obj as Meter)
-            val nodeInstanceId = instanceId.firstIdentifierOf(Node);
-            val builder = new RemoveMeterInputBuilder(meter);
-            builder.setNode(new NodeRef(nodeInstanceId));
-            builder.setMeterRef(new MeterRef(instanceId));
-            builder.setTransactionUri(new Uri(modification.getIdentifier() as String));
-            _salMeterService.removeMeter(builder.build());            
-        }
-    }
-    
-    override update(InstanceIdentifier<?> instanceId, DataObject originalObj, DataObject updatedObj) {
-        if(originalObj instanceof Meter && updatedObj instanceof Meter) {
-            val originalMeter = (originalObj as Meter)
-            val updatedMeter = (updatedObj as Meter)
-            val nodeInstanceId = instanceId.firstIdentifierOf(Node);
-            val builder = new UpdateMeterInputBuilder();
-            builder.setNode(new NodeRef(nodeInstanceId));
-            builder.setMeterRef(new MeterRef(instanceId));
-            val ufb = new UpdatedMeterBuilder(updatedMeter);
-            builder.setUpdatedMeter((ufb.build()));
-            builder.setTransactionUri(new Uri(modification.getIdentifier() as String));
-            val ofb = new OriginalMeterBuilder(originalMeter);
-            builder.setOriginalMeter(ofb.build());      
-            _salMeterService.updateMeter(builder.build());
-           
-        }
-    }
-    
-    override add(InstanceIdentifier<?> instanceId, DataObject obj) {
-        if(obj instanceof Meter) {
-            val meter = (obj as Meter)
-            val nodeInstanceId = instanceId.firstIdentifierOf(Node);
-            val builder = new AddMeterInputBuilder(meter);
-            builder.setNode(new NodeRef(nodeInstanceId));
-            builder.setMeterRef(new MeterRef(instanceId));
-            builder.setTransactionUri(new Uri(modification.getIdentifier() as String));
-            _salMeterService.addMeter(builder.build());            
-        }
-    }
-    
-    override validate() throws IllegalStateException {
-        MeterTransactionValidator.validate(this)
-    }  
-}
index b16739cc5b8f551dc25e10bfa24aed91ccfde46e..c8fba23b93601e4c3bde099e4e4a45221f1a2fdc 100644 (file)
@@ -1,4 +1,4 @@
-/*
+/**
  * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -9,8 +9,7 @@ package org.opendaylight.controller.frm.meter;
 
 public class MeterTransactionValidator {
 
-    public static void validate(MeterTransaction transaction) throws IllegalStateException {
+    public static void validate(MeterChangeListener transaction) throws IllegalStateException {
         // NOOP
     }
-
 }
index 40a79033a7d163f3e5ecdd520cc5f938715131aa..1706996ce4a301ef4564ac765032c608c39bea68 100644 (file)
       <groupId>com.google.guava</groupId>
       <artifactId>guava</artifactId>
     </dependency>
-    <dependency>
-      <groupId>org.eclipse.xtend</groupId>
-      <artifactId>org.eclipse.xtend.lib</artifactId>
-    </dependency>
     <dependency>
       <groupId>org.opendaylight.controller</groupId>
       <artifactId>sal-binding-api</artifactId>
           </instructions>
         </configuration>
       </plugin>
-      <plugin>
-        <groupId>org.eclipse.xtend</groupId>
-        <artifactId>xtend-maven-plugin</artifactId>
-      </plugin>
     </plugins>
   </build>
   <scm>
diff --git a/opendaylight/md-sal/inventory-manager/src/main/java/org/opendaylight/controller/md/inventory/manager/FlowCapableInventoryProvider.java b/opendaylight/md-sal/inventory-manager/src/main/java/org/opendaylight/controller/md/inventory/manager/FlowCapableInventoryProvider.java
new file mode 100644 (file)
index 0000000..7e4190f
--- /dev/null
@@ -0,0 +1,67 @@
+/**
+ * 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.inventory.manager;
+
+import org.opendaylight.controller.sal.binding.api.NotificationProviderService;
+import org.opendaylight.controller.sal.binding.api.data.DataModificationTransaction;
+import org.opendaylight.controller.sal.binding.api.data.DataProviderService;
+import org.opendaylight.yangtools.concepts.Registration;
+import org.opendaylight.yangtools.yang.binding.NotificationListener;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class FlowCapableInventoryProvider implements AutoCloseable {
+
+    private final static Logger LOG = LoggerFactory.getLogger(FlowCapableInventoryProvider.class);
+
+    private DataProviderService dataService;
+    private NotificationProviderService notificationService;
+    private Registration<NotificationListener> listenerRegistration;
+    private final NodeChangeCommiter changeCommiter = new NodeChangeCommiter(FlowCapableInventoryProvider.this);
+
+    public void start() {
+        this.listenerRegistration = this.notificationService.registerNotificationListener(this.changeCommiter);
+        LOG.info("Flow Capable Inventory Provider started.");
+    }
+
+    protected DataModificationTransaction startChange() {
+        DataProviderService _dataService = this.dataService;
+        return _dataService.beginTransaction();
+    }
+
+    @Override
+    public void close() {
+        try {
+            LOG.info("Flow Capable Inventory Provider stopped.");
+            if (this.listenerRegistration != null) {
+                this.listenerRegistration.close();
+            }
+        } catch (Exception e) {
+            String errMsg = "Error by stop Flow Capable Inventory Provider.";
+            LOG.error(errMsg, e);
+            throw new RuntimeException(errMsg, e);
+        }
+    }
+
+    public DataProviderService getDataService() {
+        return this.dataService;
+    }
+
+    public void setDataService(final DataProviderService dataService) {
+        this.dataService = dataService;
+    }
+
+    public NotificationProviderService getNotificationService() {
+        return this.notificationService;
+    }
+
+    public void setNotificationService(
+            final NotificationProviderService notificationService) {
+        this.notificationService = notificationService;
+    }
+}
diff --git a/opendaylight/md-sal/inventory-manager/src/main/java/org/opendaylight/controller/md/inventory/manager/FlowCapableInventoryProvider.xtend b/opendaylight/md-sal/inventory-manager/src/main/java/org/opendaylight/controller/md/inventory/manager/FlowCapableInventoryProvider.xtend
deleted file mode 100644 (file)
index ec8da86..0000000
+++ /dev/null
@@ -1,63 +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.md.inventory.manager
-
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.OpendaylightInventoryListener
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorRemoved
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorUpdated
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRemoved
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeUpdated
-import org.opendaylight.controller.sal.binding.api.NotificationProviderService
-import org.opendaylight.controller.sal.binding.api.data.DataProviderService
-import org.opendaylight.yangtools.concepts.Registration
-import org.opendaylight.yangtools.yang.binding.NotificationListener
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier
-import org.opendaylight.yangtools.yang.binding.DataObject
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorBuilder
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnectorUpdated
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeUpdated
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnector
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorKey
-import static extension org.opendaylight.controller.md.inventory.manager.InventoryMapping.*
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeBuilder
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey
-import org.slf4j.LoggerFactory
-
-class FlowCapableInventoryProvider implements AutoCloseable {
-
-
-    static val LOG = LoggerFactory.getLogger(FlowCapableInventoryProvider);
-
-    @Property
-    DataProviderService dataService;
-
-    @Property
-    NotificationProviderService notificationService;
-    val NodeChangeCommiter changeCommiter = new NodeChangeCommiter(this);
-
-    Registration<NotificationListener> listenerRegistration
-
-    def void start() {
-        listenerRegistration = notificationService.registerNotificationListener(changeCommiter);
-        LOG.info("Flow Capable Inventory Provider started.");
-        
-    }
-
-    protected def startChange() {
-        return dataService.beginTransaction;
-    }
-
-    override close() {
-       LOG.info("Flow Capable Inventory Provider stopped.");
-        listenerRegistration?.close();
-    }
-    
-}
\ No newline at end of file
diff --git a/opendaylight/md-sal/inventory-manager/src/main/java/org/opendaylight/controller/md/inventory/manager/InventoryActivator.java b/opendaylight/md-sal/inventory-manager/src/main/java/org/opendaylight/controller/md/inventory/manager/InventoryActivator.java
new file mode 100644 (file)
index 0000000..6c06088
--- /dev/null
@@ -0,0 +1,34 @@
+/**
+ * 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.inventory.manager;
+
+import org.opendaylight.controller.sal.binding.api.AbstractBindingAwareProvider;
+import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
+import org.opendaylight.controller.sal.binding.api.NotificationProviderService;
+import org.opendaylight.controller.sal.binding.api.data.DataProviderService;
+import org.osgi.framework.BundleContext;
+
+public class InventoryActivator extends AbstractBindingAwareProvider {
+
+    private static FlowCapableInventoryProvider provider = new FlowCapableInventoryProvider();
+
+    @Override
+    public void onSessionInitiated(final ProviderContext session) {
+        DataProviderService salDataService = session.<DataProviderService> getSALService(DataProviderService.class);
+        NotificationProviderService salNotifiService =
+                session.<NotificationProviderService> getSALService(NotificationProviderService.class);
+        InventoryActivator.provider.setDataService(salDataService);
+        InventoryActivator.provider.setNotificationService(salNotifiService);
+        InventoryActivator.provider.start();
+    }
+
+    @Override
+    protected void stopImpl(final BundleContext context) {
+        InventoryActivator.provider.close();
+    }
+}
diff --git a/opendaylight/md-sal/inventory-manager/src/main/java/org/opendaylight/controller/md/inventory/manager/InventoryActivator.xtend b/opendaylight/md-sal/inventory-manager/src/main/java/org/opendaylight/controller/md/inventory/manager/InventoryActivator.xtend
deleted file mode 100644 (file)
index 5d76924..0000000
+++ /dev/null
@@ -1,30 +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.md.inventory.manager
-
-import org.opendaylight.controller.sal.binding.api.AbstractBindingAwareProvider
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext
-import org.osgi.framework.BundleContext
-import org.opendaylight.controller.sal.binding.api.data.DataProviderService
-import org.opendaylight.controller.sal.binding.api.NotificationProviderService
-
-class InventoryActivator extends AbstractBindingAwareProvider {
-
-    static var FlowCapableInventoryProvider provider = new FlowCapableInventoryProvider();
-
-    override onSessionInitiated(ProviderContext session) {
-        provider.dataService = session.getSALService(DataProviderService)
-        provider.notificationService = session.getSALService(NotificationProviderService)
-        provider.start();
-    }
-
-    override protected stopImpl(BundleContext context) {
-        provider.close();
-    }
-
-}
diff --git a/opendaylight/md-sal/inventory-manager/src/main/java/org/opendaylight/controller/md/inventory/manager/InventoryMapping.java b/opendaylight/md-sal/inventory-manager/src/main/java/org/opendaylight/controller/md/inventory/manager/InventoryMapping.java
new file mode 100644 (file)
index 0000000..928ae76
--- /dev/null
@@ -0,0 +1,44 @@
+/**
+ * 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.inventory.manager;
+
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnector;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnectorBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowNode;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowNodeConnector;
+
+public class InventoryMapping {
+
+    public static FlowCapableNodeConnector toInventoryAugment(final FlowNodeConnector updated) {
+        if ((updated instanceof FlowCapableNodeConnector)) {
+            return ((FlowCapableNodeConnector) updated);
+        }
+        final FlowCapableNodeConnectorBuilder builder = new FlowCapableNodeConnectorBuilder();
+        builder.setAdvertisedFeatures(updated.getAdvertisedFeatures());
+        builder.setConfiguration(updated.getConfiguration());
+        builder.setCurrentFeature(updated.getCurrentFeature());
+        builder.setCurrentSpeed(updated.getCurrentSpeed());
+        builder.setHardwareAddress(updated.getHardwareAddress());
+        builder.setMaximumSpeed(updated.getMaximumSpeed());
+        builder.setName(updated.getName());
+        builder.setPeerFeatures(updated.getPeerFeatures());
+        builder.setPortNumber(updated.getPortNumber());
+        builder.setState(updated.getState());
+        builder.setSupported(updated.getSupported());
+        return builder.build();
+    }
+
+    public static FlowCapableNode toInventoryAugment(final FlowNode source) {
+        if ((source instanceof FlowCapableNode)) {
+            return ((FlowCapableNode) source);
+        }
+        return (new FlowCapableNodeBuilder(source)).build();
+    }
+}
diff --git a/opendaylight/md-sal/inventory-manager/src/main/java/org/opendaylight/controller/md/inventory/manager/InventoryMapping.xtend b/opendaylight/md-sal/inventory-manager/src/main/java/org/opendaylight/controller/md/inventory/manager/InventoryMapping.xtend
deleted file mode 100644 (file)
index 6f1ef5e..0000000
+++ /dev/null
@@ -1,46 +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.md.inventory.manager
-
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnector
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowNodeConnector
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnectorBuilder
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowNode
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeBuilder
-
-class InventoryMapping {
-
-    static def FlowCapableNodeConnector toInventoryAugment(FlowNodeConnector updated) {
-        if (updated instanceof FlowCapableNodeConnector) {
-            return updated as FlowCapableNodeConnector;
-        }
-        val it = new FlowCapableNodeConnectorBuilder();
-        advertisedFeatures = updated.advertisedFeatures
-        configuration = updated.configuration
-        currentFeature = updated.currentFeature
-        currentSpeed = updated.currentSpeed
-        hardwareAddress = updated.hardwareAddress
-        maximumSpeed = updated.maximumSpeed
-        name = updated.name
-        peerFeatures = updated.peerFeatures
-        portNumber = updated.portNumber
-        state = updated.state
-        supported = updated.supported
-        return build();
-    }
-
-    static def FlowCapableNode toInventoryAugment(FlowNode source) {
-        if (source instanceof FlowCapableNode) {
-            return source as FlowCapableNode;
-        }
-        val it = new FlowCapableNodeBuilder(source);
-        return build();
-    }
-
-}
index ebb3de7dcae6d8380b1ad465a63e8900689740c1..2a3d8fd37e26c1cafc012c68102f417063c51713 100644 (file)
@@ -7,7 +7,6 @@
  */
 package org.opendaylight.controller.md.inventory.manager;
 
-import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Future;
 
 import org.opendaylight.controller.md.sal.common.api.TransactionStatus;
@@ -20,7 +19,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeCon
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorRef;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorRemoved;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorUpdated;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRemoved;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeUpdated;
@@ -38,10 +36,13 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.google.common.base.Objects;
+import com.google.common.util.concurrent.FutureCallback;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.JdkFutureAdapters;
 
-@SuppressWarnings("all")
 public class NodeChangeCommiter implements OpendaylightInventoryListener {
-    private final static Logger LOG = LoggerFactory.getLogger(NodeChangeCommiter.class);
+
+    protected final static Logger LOG = LoggerFactory.getLogger(NodeChangeCommiter.class);
 
     private final FlowCapableInventoryProvider manager;
 
@@ -58,15 +59,10 @@ public class NodeChangeCommiter implements OpendaylightInventoryListener {
 
         final NodeConnectorRef ref = connector.getNodeConnectorRef();
         final DataModificationTransaction it = this.getManager().startChange();
-        NodeChangeCommiter.LOG.debug("removing node connector {} ", ref.getValue());
+        LOG.debug("removing node connector {} ", ref.getValue());
         it.removeOperationalData(ref.getValue());
         Future<RpcResult<TransactionStatus>> commitResult = it.commit();
-        try {
-            commitResult.get();
-        } catch (InterruptedException | ExecutionException e) {
-            LOG.error("Node Connector {} not removed.", ref.getValue(), e);
-        }
-
+        listenOnTransactionState(it.getIdentifier(), commitResult, "nodeConnector removal", ref.getValue());
     }
 
     @Override
@@ -75,7 +71,7 @@ public class NodeChangeCommiter implements OpendaylightInventoryListener {
         final NodeConnectorRef ref = connector.getNodeConnectorRef();
         final FlowCapableNodeConnectorUpdated flowConnector = connector
                 .getAugmentation(FlowCapableNodeConnectorUpdated.class);
-        final DataModificationTransaction it = this.getManager().startChange();
+        final DataModificationTransaction it = this.manager.startChange();
         final NodeConnectorBuilder data = new NodeConnectorBuilder(connector);
         NodeConnectorId id = connector.getId();
         NodeConnectorKey nodeConnectorKey = new NodeConnectorKey(id);
@@ -86,39 +82,22 @@ public class NodeChangeCommiter implements OpendaylightInventoryListener {
             data.addAugmentation(FlowCapableNodeConnector.class, augment);
         }
         InstanceIdentifier<? extends Object> value = ref.getValue();
-        String string = value.toString();
-        String plus = ("updating node connector : " + string);
-        NodeChangeCommiter.LOG.debug(plus);
-        InstanceIdentifier<? extends Object> value1 = ref.getValue();
+        LOG.debug("updating node connector : {}.", value);
         NodeConnector build = data.build();
-        it.putOperationalData((value1), build);
+        it.putOperationalData((value), build);
         Future<RpcResult<TransactionStatus>> commitResult = it.commit();
-        try {
-            commitResult.get();
-        } catch (InterruptedException | ExecutionException e) {
-            LOG.error("Node Connector {} not updated.", ref.getValue(), e);
-        }
-
+        listenOnTransactionState(it.getIdentifier(), commitResult, "nodeConnector update", ref.getValue());
     }
 
     @Override
     public synchronized void onNodeRemoved(final NodeRemoved node) {
 
         final NodeRef ref = node.getNodeRef();
-        FlowCapableInventoryProvider manager = this.getManager();
-        final DataModificationTransaction it = manager.startChange();
-        InstanceIdentifier<? extends Object> value = ref.getValue();
-        String string = value.toString();
-        String plus = ("removing node : " + string);
-        NodeChangeCommiter.LOG.debug(plus);
-        InstanceIdentifier<? extends Object> value1 = ref.getValue();
-        it.removeOperationalData((value1));
+        final DataModificationTransaction it = this.manager.startChange();
+        LOG.debug("removing node : {}", ref.getValue());
+        it.removeOperationalData((ref.getValue()));
         Future<RpcResult<TransactionStatus>> commitResult = it.commit();
-        try {
-            commitResult.get();
-        } catch (InterruptedException | ExecutionException e) {
-            LOG.error("Node {} not removed.", ref.getValue(), e);
-        }
+        listenOnTransactionState(it.getIdentifier(), commitResult, "node removal", ref.getValue());
     }
 
     @Override
@@ -127,33 +106,49 @@ public class NodeChangeCommiter implements OpendaylightInventoryListener {
         final NodeRef ref = node.getNodeRef();
         final FlowCapableNodeUpdated flowNode = node
                 .<FlowCapableNodeUpdated> getAugmentation(FlowCapableNodeUpdated.class);
-        FlowCapableInventoryProvider manager = this.getManager();
-        final DataModificationTransaction it = manager.startChange();
-        NodeBuilder nodeBuilder = new NodeBuilder(node);
-        final NodeBuilder data = nodeBuilder;
-        NodeId id = node.getId();
-        NodeKey nodeKey = new NodeKey(id);
-        data.setKey(nodeKey);
+        final DataModificationTransaction it = this.manager.startChange();
+        final NodeBuilder nodeBuilder = new NodeBuilder(node);
+        nodeBuilder.setKey(new NodeKey(node.getId()));
         boolean equals = Objects.equal(flowNode, null);
         if (equals) {
             return;
         }
         final FlowCapableNode augment = InventoryMapping.toInventoryAugment(flowNode);
-        data.addAugmentation(FlowCapableNode.class, augment);
+        nodeBuilder.addAugmentation(FlowCapableNode.class, augment);
         InstanceIdentifier<? extends Object> value = ref.getValue();
-        InstanceIdentifierBuilder<Node> builder = InstanceIdentifier.<Node> builder(((InstanceIdentifier<Node>) value));
+        InstanceIdentifierBuilder<Node> builder = ((InstanceIdentifier<Node>) value).builder();
         InstanceIdentifierBuilder<FlowCapableNode> augmentation = builder
                 .<FlowCapableNode> augmentation(FlowCapableNode.class);
         final InstanceIdentifier<FlowCapableNode> path = augmentation.build();
-        NodeChangeCommiter.LOG.debug("updating node :{} ", path);
+        LOG.debug("updating node :{} ", path);
         it.putOperationalData(path, augment);
 
         Future<RpcResult<TransactionStatus>> commitResult = it.commit();
-        try {
-            commitResult.get();
-        } catch (InterruptedException | ExecutionException e) {
-            LOG.error("Node  {} not updated.", ref.getValue(), e);
-        }
-
+        listenOnTransactionState(it.getIdentifier(), commitResult, "node update", ref.getValue());
+    }
+    
+    /**
+     * @param txId transaction identificator
+     * @param future transaction result
+     * @param action performed by transaction
+     * @param nodeConnectorPath target value
+     */
+    private static void listenOnTransactionState(final Object txId, Future<RpcResult<TransactionStatus>> future,
+            final String action, final InstanceIdentifier<?> nodeConnectorPath) {
+        Futures.addCallback(JdkFutureAdapters.listenInPoolThread(future),new FutureCallback<RpcResult<TransactionStatus>>() {
+            
+            @Override
+            public void onFailure(Throwable t) {
+                LOG.error("Action {} [{}] failed for Tx:{}", action, nodeConnectorPath, txId, t);
+                
+            }
+            
+            @Override
+            public void onSuccess(RpcResult<TransactionStatus> result) {
+                if(!result.isSuccessful()) {
+                    LOG.error("Action {} [{}] failed for Tx:{}", action, nodeConnectorPath, txId);
+                }
+            }
+        });
     }
 }
index 4e933c5bcf5c04dac1e0a11d013ae04248b8df58..a13d2bb06f5a4cfd9124ff9526998558d005db8f 100644 (file)
     <module>sal-remoterpc-connector/implementation</module>
     <!--module>clustered-data-store/implementation</module>
         -->
+    <!-- Documentation -->
+    <module>sal-rest-docgen</module>
+
+    <!--  Karaf feature -->
+    <module>feature</module>
 
   </modules>
 
           <configuration>
             <lifecycleMappingMetadata>
               <pluginExecutions>
-                <pluginExecution>
-                  <pluginExecutionFilter>
-                    <groupId>org.opendaylight.yangtools</groupId>
-                    <artifactId>yang-maven-plugin</artifactId>
-                    <versionRange>[0,)</versionRange>
-                    <goals>
-                      <goal>generate-sources</goal>
-                    </goals>
-                  </pluginExecutionFilter>
-                  <action>
-                    <ignore></ignore>
-                  </action>
-                </pluginExecution>
                 <pluginExecution>
                   <pluginExecutionFilter>
                     <groupId>net.alchim31.maven</groupId>
       <plugin>
         <groupId>org.opendaylight.yangtools</groupId>
         <artifactId>yang-maven-plugin</artifactId>
-        <version>${yangtools.version}</version>
         <dependencies>
           <dependency>
             <groupId>org.opendaylight.controller</groupId>
index 14006a3fce2ff3eea04e4fcae84bf0e412ea850b..750defc0e95ac17ad535b299bfad52e4c4a489f2 100644 (file)
@@ -7,11 +7,10 @@
  */
 package org.opendaylight.controller.config.yang.md.sal.binding.impl;
 
-import com.google.common.base.Optional;
-import com.google.common.base.Preconditions;
 import java.util.Hashtable;
 import java.util.Map.Entry;
 import java.util.Set;
+
 import org.opendaylight.controller.sal.binding.codegen.impl.SingletonHolder;
 import org.opendaylight.yangtools.concepts.Delegator;
 import org.opendaylight.yangtools.sal.binding.generator.impl.RuntimeGeneratedMappingServiceImpl;
@@ -28,6 +27,9 @@ import org.opendaylight.yangtools.yang.model.api.SchemaServiceListener;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceReference;
 
+import com.google.common.base.Optional;
+import com.google.common.base.Preconditions;
+
 /**
 *
 */
@@ -61,14 +63,13 @@ public final class RuntimeMappingModule extends
 
     @Override
     public java.lang.AutoCloseable createInstance() {
-        
+
         RuntimeGeneratedMappingServiceProxy potential = tryToReuseGlobalInstance();
         if(potential != null) {
             return potential;
         }
-        RuntimeGeneratedMappingServiceImpl service = new RuntimeGeneratedMappingServiceImpl();
-        service.setPool(SingletonHolder.CLASS_POOL);
-        service.init();
+
+        final RuntimeGeneratedMappingServiceImpl service = new RuntimeGeneratedMappingServiceImpl(SingletonHolder.CLASS_POOL);
         bundleContext.registerService(SchemaServiceListener.class, service, new Hashtable<String,String>());
         return service;
     }
@@ -98,7 +99,7 @@ public final class RuntimeMappingModule extends
     BindingIndependentMappingService, //
     Delegator<BindingIndependentMappingService>, //
     AutoCloseable {
-        
+
         private BindingIndependentMappingService delegate;
         private ServiceReference<BindingIndependentMappingService> reference;
         private BundleContext bundleContext;
@@ -111,35 +112,42 @@ public final class RuntimeMappingModule extends
             this.delegate = Preconditions.checkNotNull(delegate);
         }
 
+        @Override
         public CodecRegistry getCodecRegistry() {
             return delegate.getCodecRegistry();
         }
 
+        @Override
         public CompositeNode toDataDom(DataObject data) {
             return delegate.toDataDom(data);
         }
 
+        @Override
         public Entry<InstanceIdentifier, CompositeNode> toDataDom(
                 Entry<org.opendaylight.yangtools.yang.binding.InstanceIdentifier<? extends DataObject>, DataObject> entry) {
             return delegate.toDataDom(entry);
         }
 
+        @Override
         public InstanceIdentifier toDataDom(
                 org.opendaylight.yangtools.yang.binding.InstanceIdentifier<? extends DataObject> path) {
             return delegate.toDataDom(path);
         }
 
+        @Override
         public DataObject dataObjectFromDataDom(
                 org.opendaylight.yangtools.yang.binding.InstanceIdentifier<? extends DataObject> path,
                 CompositeNode result) throws DeserializationException {
             return delegate.dataObjectFromDataDom(path, result);
         }
 
+        @Override
         public org.opendaylight.yangtools.yang.binding.InstanceIdentifier<?> fromDataDom(InstanceIdentifier entry)
                 throws DeserializationException {
             return delegate.fromDataDom(entry);
         }
 
+        @Override
         public Set<QName> getRpcQNamesFor(Class<? extends RpcService> service) {
             return delegate.getRpcQNamesFor(service);
         }
@@ -149,10 +157,11 @@ public final class RuntimeMappingModule extends
             return delegate.getRpcServiceClassFor(namespace,revision);
         }
 
+        @Override
         public DataContainer dataObjectFromDataDom(Class<? extends DataContainer> inputClass, CompositeNode domInput) {
             return delegate.dataObjectFromDataDom(inputClass, domInput);
         }
-        
+
         @Override
         public void close() throws Exception {
             if(delegate != null) {
index 685a91979c7c9f8ea7c1493b047867622dfa8d81..2a866a94b358ebcc031c5965e16305dcc5930b0f 100644 (file)
@@ -96,10 +96,14 @@ public abstract class AbstractForwardedDataBroker implements Delegator<DOMDataBr
         for (Map.Entry<org.opendaylight.yangtools.yang.data.api.InstanceIdentifier, ? extends NormalizedNode<?, ?>> entry : normalized
                 .entrySet()) {
             try {
-                Entry<InstanceIdentifier<? extends DataObject>, DataObject> binding = getCodec().toBinding(entry);
-                newMap.put(binding.getKey(), binding.getValue());
+                Optional<Entry<InstanceIdentifier<? extends DataObject>, DataObject>> potential = getCodec().toBinding(
+                        entry);
+                if (potential.isPresent()) {
+                    Entry<InstanceIdentifier<? extends DataObject>, DataObject> binding = potential.get();
+                    newMap.put(binding.getKey(), binding.getValue());
+                }
             } catch (DeserializationException e) {
-                LOG.debug("Omitting {}", entry, e);
+                LOG.warn("Failed to transform {}, omitting it", entry, e);
             }
         }
         return newMap;
@@ -110,17 +114,20 @@ public abstract class AbstractForwardedDataBroker implements Delegator<DOMDataBr
         Set<InstanceIdentifier<?>> hashSet = new HashSet<>();
         for (org.opendaylight.yangtools.yang.data.api.InstanceIdentifier normalizedPath : normalized) {
             try {
-                InstanceIdentifier<? extends DataObject> binding = getCodec().toBinding(normalizedPath);
-                hashSet.add(binding);
+                Optional<InstanceIdentifier<? extends DataObject>> potential = getCodec().toBinding(normalizedPath);
+                if (potential.isPresent()) {
+                    InstanceIdentifier<? extends DataObject> binding = potential.get();
+                    hashSet.add(binding);
+                }
             } catch (DeserializationException e) {
-                LOG.debug("Omitting {}", normalizedPath, e);
+                LOG.warn("Failed to transform {}, omitting it", normalizedPath, e);
             }
         }
         return hashSet;
     }
 
     protected Optional<DataObject> toBindingData(final InstanceIdentifier<?> path, final NormalizedNode<?, ?> data) {
-        if(path.isWildcarded()) {
+        if (path.isWildcarded()) {
             return Optional.absent();
         }
 
@@ -207,7 +214,11 @@ public abstract class AbstractForwardedDataBroker implements Delegator<DOMDataBr
         @Override
         public DataObject getOriginalSubtree() {
             if (originalDataCache == null) {
-                originalDataCache = toBindingData(path, domEvent.getOriginalSubtree());
+                if(domEvent.getOriginalSubtree() != null) {
+                    originalDataCache = toBindingData(path, domEvent.getOriginalSubtree());
+                } else {
+                    originalDataCache = Optional.absent();
+                }
             }
             return originalDataCache.orNull();
         }
@@ -215,20 +226,23 @@ public abstract class AbstractForwardedDataBroker implements Delegator<DOMDataBr
         @Override
         public DataObject getUpdatedSubtree() {
             if (updatedDataCache == null) {
-                updatedDataCache = toBindingData(path, domEvent.getUpdatedSubtree());
+                if(domEvent.getUpdatedSubtree() != null) {
+                    updatedDataCache = toBindingData(path, domEvent.getUpdatedSubtree());
+                } else {
+                    updatedDataCache = Optional.absent();
+                }
             }
-
             return updatedDataCache.orNull();
         }
 
         @Override
         public String toString() {
             return Objects.toStringHelper(TranslatedDataChangeEvent.class) //
-                .add("created", getCreatedData()) //
-                .add("updated", getUpdatedData()) //
-                .add("removed", getRemovedPaths()) //
-                .add("dom", domEvent) //
-                .toString();
+                    .add("created", getCreatedData()) //
+                    .add("updated", getUpdatedData()) //
+                    .add("removed", getRemovedPaths()) //
+                    .add("dom", domEvent) //
+                    .toString();
         }
     }
 
index 6bd6e6aaf52294ed0ada1b2809995ea1b7877260..a935a33a5eb26ee13371554165db996f390469b8 100644 (file)
@@ -17,7 +17,6 @@ import java.util.concurrent.TimeUnit;
 
 import javax.annotation.Nullable;
 
-import org.eclipse.xtext.xbase.lib.Exceptions;
 import org.opendaylight.controller.md.sal.common.api.TransactionStatus;
 import org.opendaylight.controller.md.sal.common.api.data.AsyncTransaction;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
@@ -79,17 +78,21 @@ public class AbstractForwardedTransaction<T extends AsyncTransaction<org.openday
             @Nullable
             @Override
             public Optional<DataObject> apply(@Nullable final Optional<NormalizedNode<?, ?>> normalizedNode) {
-                try {
-                    final DataObject dataObject = normalizedNode.isPresent() ? codec.toBinding(path,
-                            normalizedNode.get()) : null;
-                    if(dataObject != null) {
+                if (normalizedNode.isPresent()) {
+                    final DataObject dataObject;
+                    try {
+                        dataObject = codec.toBinding(path, normalizedNode.get());
+                    } catch (DeserializationException e) {
+                        LOG.warn("Failed to create dataobject from node {}", normalizedNode.get(), e);
+                        throw new IllegalStateException("Failed to create dataobject", e);
+                    }
+
+                    if (dataObject != null) {
                         updateCache(store, path, dataObject);
+                        return Optional.of(dataObject);
                     }
-                    return Optional.fromNullable(dataObject);
-                } catch (DeserializationException e) {
-                    Exceptions.sneakyThrow(e);
                 }
-                return null;
+                return Optional.absent();
             }
         });
     }
@@ -108,7 +111,28 @@ public class AbstractForwardedTransaction<T extends AsyncTransaction<org.openday
         final Entry<org.opendaylight.yangtools.yang.data.api.InstanceIdentifier, NormalizedNode<?, ?>> normalized = codec
                 .toNormalizedNode(path, data);
 
-        org.opendaylight.yangtools.yang.data.api.InstanceIdentifier normalizedPath = normalized.getKey();
+        final org.opendaylight.yangtools.yang.data.api.InstanceIdentifier normalizedPath = normalized.getKey();
+        ensureParentsByMerge(writeTransaction, store, normalizedPath, path);
+        LOG.debug("Tx: {} : Putting data {}", getDelegate().getIdentifier(), normalizedPath);
+        writeTransaction.put(store, normalizedPath, normalized.getValue());
+    }
+
+    protected void doMergeWithEnsureParents(final DOMDataReadWriteTransaction writeTransaction,
+            final LogicalDatastoreType store, final InstanceIdentifier<?> path, final DataObject data) {
+        invalidateCache(store, path);
+        final Entry<org.opendaylight.yangtools.yang.data.api.InstanceIdentifier, NormalizedNode<?, ?>> normalized = codec
+                .toNormalizedNode(path, data);
+
+        final org.opendaylight.yangtools.yang.data.api.InstanceIdentifier normalizedPath = normalized.getKey();
+        ensureParentsByMerge(writeTransaction, store, normalizedPath, path);
+        LOG.debug("Tx: {} : Merge data {}",getDelegate().getIdentifier(),normalizedPath);
+        writeTransaction.merge(store, normalizedPath, normalized.getValue());
+    }
+
+    private void ensureParentsByMerge(final DOMDataReadWriteTransaction writeTransaction,
+            final LogicalDatastoreType store,
+            final org.opendaylight.yangtools.yang.data.api.InstanceIdentifier normalizedPath,
+            final InstanceIdentifier<?> path) {
         List<PathArgument> currentArguments = new ArrayList<>();
         DataNormalizationOperation<?> currentOp = codec.getDataNormalizer().getRootOperation();
         Iterator<PathArgument> iterator = normalizedPath.getPath().iterator();
@@ -135,8 +159,6 @@ public class AbstractForwardedTransaction<T extends AsyncTransaction<org.openday
                 writeTransaction.merge(store, currentPath, currentOp.createDefault(currentArg));
             }
         }
-        //LOG .info("Tx: {} : Putting data {}",getDelegate().getIdentifier(),normalized.getKey());
-        writeTransaction.put(store, normalized.getKey(), normalized.getValue());
     }
 
     protected void doMerge(final DOMDataWriteTransaction writeTransaction, final LogicalDatastoreType store,
index 35ebe76499f51e6bb5b629c4cf42a944fe727ea8..53615ad7dedc6c7d751554fb7f28bf446b96f1ee 100644 (file)
@@ -7,28 +7,45 @@
  */
 package org.opendaylight.controller.md.sal.binding.impl;
 
+import java.lang.reflect.Method;
+import java.lang.reflect.Type;
 import java.util.AbstractMap.SimpleEntry;
+import java.util.LinkedList;
+import java.util.List;
 import java.util.Map.Entry;
+import java.util.concurrent.Callable;
 
 import org.opendaylight.controller.md.sal.common.impl.util.compat.DataNormalizationException;
+import org.opendaylight.controller.md.sal.common.impl.util.compat.DataNormalizationOperation;
 import org.opendaylight.controller.md.sal.common.impl.util.compat.DataNormalizer;
+import org.opendaylight.yangtools.concepts.util.ClassLoaderUtils;
 import org.opendaylight.yangtools.yang.binding.Augmentation;
+import org.opendaylight.yangtools.yang.binding.DataContainer;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.Item;
+import org.opendaylight.yangtools.yang.binding.util.BindingReflections;
+import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.CompositeNode;
+import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.AugmentationIdentifier;
+import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.NodeIdentifier;
 import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.PathArgument;
 import org.opendaylight.yangtools.yang.data.api.schema.AugmentationNode;
+import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
 import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild;
 import org.opendaylight.yangtools.yang.data.api.schema.DataContainerNode;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 import org.opendaylight.yangtools.yang.data.impl.codec.BindingIndependentMappingService;
 import org.opendaylight.yangtools.yang.data.impl.codec.DeserializationException;
+import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.model.api.SchemaContextListener;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.google.common.base.Optional;
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Iterables;
 
 public class BindingToNormalizedNodeCodec implements SchemaContextListener {
 
@@ -44,10 +61,16 @@ public class BindingToNormalizedNodeCodec implements SchemaContextListener {
 
     public org.opendaylight.yangtools.yang.data.api.InstanceIdentifier toNormalized(
             final InstanceIdentifier<? extends DataObject> binding) {
-        final org.opendaylight.yangtools.yang.data.api.InstanceIdentifier legacyPath = bindingToLegacy.toDataDom(binding);
-        final org.opendaylight.yangtools.yang.data.api.InstanceIdentifier normalized = legacyToNormalized.toNormalized(legacyPath);
-        LOG.trace("InstanceIdentifier Path {} Serialization: Legacy representation {}, Normalized representation: {}",binding,legacyPath,normalized);
-        return normalized;
+
+        // Used instance-identifier codec do not support serialization of last
+        // path
+        // argument if it is Augmentation (behaviour expected by old datastore)
+        // in this case, we explicitly check if last argument is augmentation
+        // to process it separately
+        if (isAugmentationIdentifier(binding)) {
+            return toNormalizedAugmented(binding);
+        }
+        return toNormalizedImpl(binding);
     }
 
     public Entry<org.opendaylight.yangtools.yang.data.api.InstanceIdentifier, NormalizedNode<?, ?>> toNormalizedNode(
@@ -58,40 +81,122 @@ public class BindingToNormalizedNodeCodec implements SchemaContextListener {
 
     public Entry<org.opendaylight.yangtools.yang.data.api.InstanceIdentifier, NormalizedNode<?, ?>> toNormalizedNode(
             final Entry<org.opendaylight.yangtools.yang.binding.InstanceIdentifier<? extends DataObject>, DataObject> binding) {
-        Entry<org.opendaylight.yangtools.yang.data.api.InstanceIdentifier, CompositeNode> legacyEntry = bindingToLegacy.toDataDom(binding);
-        Entry<org.opendaylight.yangtools.yang.data.api.InstanceIdentifier, NormalizedNode<?, ?>> normalizedEntry = legacyToNormalized.toNormalized(legacyEntry);
-        LOG.trace("Serialization of {}, Legacy Representation: {}, Normalized Representation: {}",binding,legacyEntry,normalizedEntry);
-        if(Augmentation.class.isAssignableFrom(binding.getKey().getTargetType())) {
-
-            for(DataContainerChild<? extends PathArgument, ?> child : ((DataContainerNode<?>) normalizedEntry.getValue()).getValue()) {
-               if(child instanceof AugmentationNode) {
-                   ImmutableList<PathArgument> childArgs = ImmutableList.<PathArgument>builder()
-                           .addAll(normalizedEntry.getKey().getPath())
-                           .add(child.getIdentifier())
-                           .build();
-                   org.opendaylight.yangtools.yang.data.api.InstanceIdentifier childPath = new org.opendaylight.yangtools.yang.data.api.InstanceIdentifier(childArgs);
-                   return new SimpleEntry<org.opendaylight.yangtools.yang.data.api.InstanceIdentifier, NormalizedNode<?, ?>>(childPath,child);
-               }
+        Entry<org.opendaylight.yangtools.yang.data.api.InstanceIdentifier, CompositeNode> legacyEntry = bindingToLegacy
+                .toDataDom(binding);
+        Entry<org.opendaylight.yangtools.yang.data.api.InstanceIdentifier, NormalizedNode<?, ?>> normalizedEntry = legacyToNormalized
+                .toNormalized(legacyEntry);
+        LOG.trace("Serialization of {}, Legacy Representation: {}, Normalized Representation: {}", binding,
+                legacyEntry, normalizedEntry);
+        if (Augmentation.class.isAssignableFrom(binding.getKey().getTargetType())) {
+
+            for (DataContainerChild<? extends PathArgument, ?> child : ((DataContainerNode<?>) normalizedEntry
+                    .getValue()).getValue()) {
+                if (child instanceof AugmentationNode) {
+                    ImmutableList<PathArgument> childArgs = ImmutableList.<PathArgument> builder()
+                            .addAll(normalizedEntry.getKey().getPath()).add(child.getIdentifier()).build();
+                    org.opendaylight.yangtools.yang.data.api.InstanceIdentifier childPath = new org.opendaylight.yangtools.yang.data.api.InstanceIdentifier(
+                            childArgs);
+                    return new SimpleEntry<org.opendaylight.yangtools.yang.data.api.InstanceIdentifier, NormalizedNode<?, ?>>(
+                            childPath, child);
+                }
             }
 
         }
         return normalizedEntry;
 
+    }
 
+    /**
+     *
+     * Returns a Binding-Aware instance identifier from normalized
+     * instance-identifier if it is possible to create representation.
+     *
+     * Returns Optional.absent for cases where target is mixin node except
+     * augmentation.
+     *
+     */
+    public Optional<InstanceIdentifier<? extends DataObject>> toBinding(
+            final org.opendaylight.yangtools.yang.data.api.InstanceIdentifier normalized)
+            throws DeserializationException {
+
+        PathArgument lastArgument = Iterables.getLast(normalized.getPath());
+        // Used instance-identifier codec do not support serialization of last
+        // path
+        // argument if it is AugmentationIdentifier (behaviour expected by old
+        // datastore)
+        // in this case, we explicitly check if last argument is augmentation
+        // to process it separately
+        if (lastArgument instanceof AugmentationIdentifier) {
+            return toBindingAugmented(normalized);
+        }
+        return toBindingImpl(normalized);
     }
 
-    public InstanceIdentifier<? extends DataObject> toBinding(
+    private Optional<InstanceIdentifier<? extends DataObject>> toBindingAugmented(
             final org.opendaylight.yangtools.yang.data.api.InstanceIdentifier normalized)
             throws DeserializationException {
+        Optional<InstanceIdentifier<? extends DataObject>> potential = toBindingImpl(normalized);
+        // Shorthand check, if codec already supports deserialization
+        // of AugmentationIdentifier we will return
+        if (potential.isPresent() && isAugmentationIdentifier(potential.get())) {
+            return potential;
+        }
+
+        AugmentationIdentifier lastArgument = (AugmentationIdentifier) Iterables.getLast(normalized.getPath());
 
+        // Here we employ small trick - Binding-aware Codec injects an pointer
+        // to augmentation class
+        // if child is referenced - so we will reference child and then shorten
+        // path.
+        for (QName child : lastArgument.getPossibleChildNames()) {
+            org.opendaylight.yangtools.yang.data.api.InstanceIdentifier childPath = new org.opendaylight.yangtools.yang.data.api.InstanceIdentifier(
+                    ImmutableList.<PathArgument> builder().addAll(normalized.getPath()).add(new NodeIdentifier(child))
+                            .build());
+            try {
+                if (!isChoiceOrCasePath(childPath)) {
+                    InstanceIdentifier<? extends DataObject> potentialPath = shortenToLastAugment(toBindingImpl(
+                            childPath).get());
+                    return Optional.<InstanceIdentifier<? extends DataObject>> of(potentialPath);
+                }
+            } catch (Exception e) {
+                LOG.trace("Unable to deserialize aug. child path for {}", childPath, e);
+            }
+        }
+        return toBindingImpl(normalized);
+    }
+
+    private Optional<InstanceIdentifier<? extends DataObject>> toBindingImpl(
+            final org.opendaylight.yangtools.yang.data.api.InstanceIdentifier normalized)
+            throws DeserializationException {
         org.opendaylight.yangtools.yang.data.api.InstanceIdentifier legacyPath;
+
         try {
+            if (isChoiceOrCasePath(normalized)) {
+                return Optional.absent();
+            }
             legacyPath = legacyToNormalized.toLegacy(normalized);
         } catch (DataNormalizationException e) {
-            throw new IllegalStateException("Could not denormalize path.",e);
+            throw new IllegalStateException("Could not denormalize path.", e);
         }
-        LOG.trace("InstanceIdentifier Path Deserialization: Legacy representation {}, Normalized representation: {}",legacyPath,normalized);
-        return bindingToLegacy.fromDataDom(legacyPath);
+        LOG.trace("InstanceIdentifier Path Deserialization: Legacy representation {}, Normalized representation: {}",
+                legacyPath, normalized);
+        return Optional.<InstanceIdentifier<? extends DataObject>> of(bindingToLegacy.fromDataDom(legacyPath));
+    }
+
+    private boolean isChoiceOrCasePath(final org.opendaylight.yangtools.yang.data.api.InstanceIdentifier normalized)
+            throws DataNormalizationException {
+        DataNormalizationOperation<?> op = findNormalizationOperation(normalized);
+        return op.isMixin() && op.getIdentifier() instanceof NodeIdentifier;
+    }
+
+    private DataNormalizationOperation<?> findNormalizationOperation(
+            final org.opendaylight.yangtools.yang.data.api.InstanceIdentifier normalized)
+            throws DataNormalizationException {
+        DataNormalizationOperation<?> current = legacyToNormalized.getRootOperation();
+        for (PathArgument arg : normalized.getPath()) {
+            current = current.getChild(arg);
+        }
+        return current;
     }
 
     private static final Entry<org.opendaylight.yangtools.yang.binding.InstanceIdentifier<? extends DataObject>, DataObject> toEntry(
@@ -103,19 +208,39 @@ public class BindingToNormalizedNodeCodec implements SchemaContextListener {
 
     public DataObject toBinding(final InstanceIdentifier<?> path, final NormalizedNode<?, ?> normalizedNode)
             throws DeserializationException {
-        return bindingToLegacy.dataObjectFromDataDom(path, (CompositeNode) DataNormalizer.toLegacy(normalizedNode));
+        CompositeNode legacy = null;
+        if (isAugmentationIdentifier(path) && normalizedNode instanceof AugmentationNode) {
+            QName augIdentifier = BindingReflections.findQName(path.getTargetType());
+            ContainerNode virtualNode = Builders.containerBuilder() //
+                    .withNodeIdentifier(new NodeIdentifier(augIdentifier)) //
+                    .withChild((DataContainerChild<?, ?>) normalizedNode) //
+                    .build();
+            legacy = (CompositeNode) DataNormalizer.toLegacy(virtualNode);
+        } else {
+            legacy = (CompositeNode) DataNormalizer.toLegacy(normalizedNode);
+        }
+
+        return bindingToLegacy.dataObjectFromDataDom(path, legacy);
     }
 
     public DataNormalizer getDataNormalizer() {
         return legacyToNormalized;
     }
 
-    public Entry<org.opendaylight.yangtools.yang.binding.InstanceIdentifier<? extends DataObject>, DataObject> toBinding(
+    public Optional<Entry<org.opendaylight.yangtools.yang.binding.InstanceIdentifier<? extends DataObject>, DataObject>> toBinding(
             final Entry<org.opendaylight.yangtools.yang.data.api.InstanceIdentifier, ? extends NormalizedNode<?, ?>> normalized)
             throws DeserializationException {
-        InstanceIdentifier<? extends DataObject> bindingPath = toBinding(normalized.getKey());
-        DataObject bindingData = toBinding(bindingPath, normalized.getValue());
-        return toEntry(bindingPath, bindingData);
+        Optional<InstanceIdentifier<? extends DataObject>> potentialPath = toBinding(normalized.getKey());
+        if (potentialPath.isPresent()) {
+            InstanceIdentifier<? extends DataObject> bindingPath = potentialPath.get();
+            DataObject bindingData = toBinding(bindingPath, normalized.getValue());
+            if (bindingData == null) {
+                LOG.warn("Failed to deserialize {} to Binding format. Binding path is: {}", normalized, bindingPath);
+            }
+            return Optional.of(toEntry(bindingPath, bindingData));
+        } else {
+            return Optional.absent();
+        }
     }
 
     @Override
@@ -123,4 +248,139 @@ public class BindingToNormalizedNodeCodec implements SchemaContextListener {
         legacyToNormalized = new DataNormalizer(arg0);
     }
 
+    private org.opendaylight.yangtools.yang.data.api.InstanceIdentifier toNormalizedAugmented(
+            final InstanceIdentifier<?> augPath) {
+        org.opendaylight.yangtools.yang.data.api.InstanceIdentifier processed = toNormalizedImpl(augPath);
+        // If used instance identifier codec added supports for deserialization
+        // of last AugmentationIdentifier we will just reuse it
+        if (isAugmentationIdentifier(processed)) {
+            return processed;
+        }
+        // Here we employ small trick - DataNormalizer injecst augmentation
+        // identifier if child is
+        // also part of the path (since using a child we can safely identify
+        // augmentation)
+        // so, we scan augmentation for children add it to path
+        // and use original algorithm, then shorten it to last augmentation
+        for (@SuppressWarnings("rawtypes")
+        Class augChild : getAugmentationChildren(augPath.getTargetType())) {
+            @SuppressWarnings("unchecked")
+            InstanceIdentifier<?> childPath = augPath.child(augChild);
+            org.opendaylight.yangtools.yang.data.api.InstanceIdentifier normalized = toNormalizedImpl(childPath);
+            org.opendaylight.yangtools.yang.data.api.InstanceIdentifier potentialDiscovered = shortenToLastAugmentation(normalized);
+            if (potentialDiscovered != null) {
+                return potentialDiscovered;
+            }
+        }
+        return processed;
+    }
+
+    private org.opendaylight.yangtools.yang.data.api.InstanceIdentifier shortenToLastAugmentation(
+            final org.opendaylight.yangtools.yang.data.api.InstanceIdentifier normalized) {
+        int position = 0;
+        int foundPosition = -1;
+        for (PathArgument arg : normalized.getPath()) {
+            position++;
+            if (arg instanceof AugmentationIdentifier) {
+                foundPosition = position;
+            }
+        }
+        if (foundPosition > 0) {
+            return new org.opendaylight.yangtools.yang.data.api.InstanceIdentifier(normalized.getPath().subList(0,
+                    foundPosition));
+        }
+        return null;
+    }
+
+    private InstanceIdentifier<? extends DataObject> shortenToLastAugment(
+            final InstanceIdentifier<? extends DataObject> binding) {
+        int position = 0;
+        int foundPosition = -1;
+        for (org.opendaylight.yangtools.yang.binding.InstanceIdentifier.PathArgument arg : binding.getPathArguments()) {
+            position++;
+            if (isAugmentation(arg.getType())) {
+                foundPosition = position;
+            }
+        }
+        return InstanceIdentifier.create(Iterables.limit(binding.getPathArguments(), foundPosition));
+    }
+
+    private org.opendaylight.yangtools.yang.data.api.InstanceIdentifier toNormalizedImpl(
+            final InstanceIdentifier<? extends DataObject> binding) {
+        final org.opendaylight.yangtools.yang.data.api.InstanceIdentifier legacyPath = bindingToLegacy
+                .toDataDom(binding);
+        final org.opendaylight.yangtools.yang.data.api.InstanceIdentifier normalized = legacyToNormalized
+                .toNormalized(legacyPath);
+        return normalized;
+    }
+
+    @SuppressWarnings("unchecked")
+    private Iterable<Class<? extends DataObject>> getAugmentationChildren(final Class<?> targetType) {
+        List<Class<? extends DataObject>> ret = new LinkedList<>();
+        for (Method method : targetType.getMethods()) {
+            Class<?> entity = getYangModeledType(method);
+            if (entity != null) {
+                ret.add((Class<? extends DataObject>) entity);
+            }
+        }
+        return ret;
+    }
+
+    @SuppressWarnings({ "rawtypes", "unchecked" })
+    private Class<? extends DataObject> getYangModeledType(final Method method) {
+        if (method.getName().equals("getClass") || !method.getName().startsWith("get")
+                || method.getParameterTypes().length > 0) {
+            return null;
+        }
+
+        Class<?> returnType = method.getReturnType();
+        if (DataContainer.class.isAssignableFrom(returnType)) {
+            return (Class) returnType;
+        } else if (List.class.isAssignableFrom(returnType)) {
+            try {
+                return ClassLoaderUtils.withClassLoader(method.getDeclaringClass().getClassLoader(),
+                        new Callable<Class>() {
+
+                            @SuppressWarnings("rawtypes")
+                            @Override
+                            public Class call() throws Exception {
+                                Type listResult = ClassLoaderUtils.getFirstGenericParameter(method
+                                        .getGenericReturnType());
+                                if (listResult instanceof Class
+                                        && DataObject.class.isAssignableFrom((Class) listResult)) {
+                                    return (Class<?>) listResult;
+                                }
+                                return null;
+                            }
+
+                        });
+            } catch (Exception e) {
+                LOG.debug("Could not get YANG modeled entity for {}", method, e);
+                return null;
+            }
+
+        }
+        return null;
+    }
+
+    @SuppressWarnings({ "unchecked", "rawtypes" })
+    private static InstanceIdentifier<?> toWildcarded(final InstanceIdentifier<?> orig) {
+        List<org.opendaylight.yangtools.yang.binding.InstanceIdentifier.PathArgument> wildArgs = new LinkedList<>();
+        for (org.opendaylight.yangtools.yang.binding.InstanceIdentifier.PathArgument arg : orig.getPathArguments()) {
+            wildArgs.add(new Item(arg.getType()));
+        }
+        return InstanceIdentifier.create(wildArgs);
+    }
+
+    private static boolean isAugmentation(final Class<? extends DataObject> type) {
+        return Augmentation.class.isAssignableFrom(type);
+    }
+
+    private static boolean isAugmentationIdentifier(final InstanceIdentifier<?> potential) {
+        return Augmentation.class.isAssignableFrom(potential.getTargetType());
+    }
+
+    private boolean isAugmentationIdentifier(final org.opendaylight.yangtools.yang.data.api.InstanceIdentifier processed) {
+        return Iterables.getLast(processed.getPath()) instanceof AugmentationIdentifier;
+    }
 }
index ab0dc6e24fb91c96ebf6e40aaa2b6251489a3c2b..ddc79ae075e7551cfd369a81795da0f040b427e6 100644 (file)
@@ -195,6 +195,7 @@ public class ForwardedBackwardsCompatibleDataBroker extends AbstractForwardedDat
     private class ForwardedBackwardsCompatibleTransacion extends
             AbstractForwardedTransaction<DOMDataReadWriteTransaction> implements DataModificationTransaction {
 
+        private final ListenerRegistry<DataTransactionListener> listeners = ListenerRegistry.create();
         private final Map<InstanceIdentifier<? extends DataObject>, DataObject> updated = new HashMap<>();
         private final Map<InstanceIdentifier<? extends DataObject>, DataObject> created = new HashMap<>();
         private final Set<InstanceIdentifier<? extends DataObject>> removed = new HashSet<>();
@@ -218,13 +219,17 @@ public class ForwardedBackwardsCompatibleDataBroker extends AbstractForwardedDat
 
         @Override
         public void putOperationalData(final InstanceIdentifier<? extends DataObject> path, final DataObject data) {
-            posponedRemovedOperational.remove(path);
-            doPutWithEnsureParents(getDelegate(), LogicalDatastoreType.OPERATIONAL, path, data);
+            boolean previouslyRemoved = posponedRemovedOperational.remove(path);
+            if(previouslyRemoved) {
+                doPutWithEnsureParents(getDelegate(), LogicalDatastoreType.OPERATIONAL, path, data);
+            } else {
+                doMergeWithEnsureParents(getDelegate(), LogicalDatastoreType.OPERATIONAL, path, data);
+            }
         }
 
         @Override
         public void putConfigurationData(final InstanceIdentifier<? extends DataObject> path, final DataObject data) {
-            posponedRemovedConfiguration.remove(path);
+            boolean previouslyRemoved = posponedRemovedConfiguration.remove(path);
             DataObject originalObj = readConfigurationData(path);
             if (originalObj != null) {
                 original.put(path, originalObj);
@@ -233,7 +238,11 @@ public class ForwardedBackwardsCompatibleDataBroker extends AbstractForwardedDat
                 created.put(path, data);
             }
             updated.put(path, data);
-            doPutWithEnsureParents(getDelegate(), LogicalDatastoreType.CONFIGURATION, path, data);
+            if(previouslyRemoved) {
+                doPutWithEnsureParents(getDelegate(), LogicalDatastoreType.CONFIGURATION, path, data);
+            } else {
+                doMergeWithEnsureParents(getDelegate(), LogicalDatastoreType.CONFIGURATION, path, data);
+            }
         }
 
         @Override
@@ -314,6 +323,14 @@ public class ForwardedBackwardsCompatibleDataBroker extends AbstractForwardedDat
         private void changeStatus(final TransactionStatus status) {
             LOG.trace("Transaction {} changed status to {}", getIdentifier(), status);
             this.status = status;
+
+            for(ListenerRegistration<DataTransactionListener> listener : listeners) {
+                try {
+                    listener.getInstance().onStatusUpdated(this, status);
+                } catch (Exception e) {
+                    LOG.error("Error during invoking transaction listener {}",listener.getInstance(),e);
+                }
+            }
         }
 
         @Override
@@ -327,10 +344,10 @@ public class ForwardedBackwardsCompatibleDataBroker extends AbstractForwardedDat
                 doDelete(getDelegate(), LogicalDatastoreType.OPERATIONAL, path);
             }
 
-            final ListenableFuture<RpcResult<TransactionStatus>> f = ForwardedBackwardsCompatibleDataBroker.this.commit(this);
-
             changeStatus(TransactionStatus.SUBMITED);
 
+            final ListenableFuture<RpcResult<TransactionStatus>> f = ForwardedBackwardsCompatibleDataBroker.this.commit(this);
+
             Futures.addCallback(f, new FutureCallback<RpcResult<TransactionStatus>>() {
                 @Override
                 public void onSuccess(final RpcResult<TransactionStatus> result) {
@@ -349,7 +366,7 @@ public class ForwardedBackwardsCompatibleDataBroker extends AbstractForwardedDat
 
         @Override
         public ListenerRegistration<DataTransactionListener> registerListener(final DataTransactionListener listener) {
-            throw new UnsupportedOperationException();
+            return listeners.register(listener);
         }
 
     }
index ea8b6c0972b29943c2129db6eb2b00e7096b1a9c..ae90a7739eb6fff27d8aff5265d3d6c397b5e5ad 100644 (file)
  */
 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);
+public final class RuntimeCodeHelper {
+    private RuntimeCodeHelper() {
+        throw new UnsupportedOperationException("Utility class should never be instantiated");
+    }
+
+    private static Field getField(final Class<?> cls, final String name) {
+        try {
+            return cls.getField(name);
+        } catch (NoSuchFieldException e) {
+            throw new IllegalArgumentException(
+                    String.format("Class %s is missing field %s", cls, name), e);
+        } catch (SecurityException e) {
+            throw new IllegalStateException(String.format("Failed to examine class %s", cls), 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 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);
+    private static Field getDelegateField(final Class<?> cls) {
+        return getField(cls, RuntimeCodeSpecification.DELEGATE_FIELD);
     }
-  }
 
-  /**
-   * 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);
+    private static Object getFieldValue(final Field field, final Object obj) {
+        try {
+            return field.get(obj);
+        } catch (IllegalAccessException e) {
+            throw new IllegalStateException(String.format("Failed to get field %s of object %s", field, obj), e);
+        }
+    }
+
+    private static void setFieldValue(final Field field, final Object obj, final Object value) {
+        try {
+            field.set(obj, value);
+        } catch (IllegalAccessException e) {
+            throw new IllegalStateException(String.format("Failed to set field %s to %s", field, value), e);
+        }
+    }
+
+    /**
+     * 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 necessary.
+     */
+    @SuppressWarnings("unchecked")
+    public static <T extends RpcService> T getDelegate(final RpcService proxy) {
+        return (T)getFieldValue(getDelegateField(proxy.getClass()), 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 void setDelegate(final Object proxy, final Object delegate) {
+        final Field field = getDelegateField(proxy.getClass());
+
+        if (delegate != null) {
+            final Class<?> ft = field.getType();
+            if (!ft.isAssignableFrom(delegate.getClass())) {
+                throw new IllegalArgumentException(
+                        String.format("Field %s type %s is not compatible with delegate type %s",
+                                field, ft, delegate.getClass()));
+            }
+        }
+
+        setFieldValue(field, proxy, delegate);
     }
-  }
 
-  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);
+    @SuppressWarnings("unchecked")
+    public static Map<InstanceIdentifier<? extends Object>,? extends RpcService> getRoutingTable(final RpcService target, final Class<? extends BaseIdentity> tableClass) {
+        final Field field = getField(target.getClass(), RuntimeCodeSpecification.getRoutingTableField(tableClass));
+        return (Map<InstanceIdentifier<? extends Object>,? extends RpcService>) getFieldValue(field, target);
     }
-  }
 
-  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);
+    public static void setRoutingTable(final RpcService target, final Class<? extends BaseIdentity> tableClass, final Map<InstanceIdentifier<? extends Object>,? extends RpcService> routingTable) {
+        final Field field = getField(target.getClass(), RuntimeCodeSpecification.getRoutingTableField(tableClass));
+        setFieldValue(field, target, routingTable);
     }
-  }
-}
\ No newline at end of file
+}
index 6723713645511b6f608eb7ef0d371901f7ad9243..465a1f7d9dd2d1e5ef33fd088ed076a2597a326b 100644 (file)
@@ -43,13 +43,11 @@ import javassist.LoaderClassPath
 class RuntimeCodeGenerator implements org.opendaylight.controller.sal.binding.codegen.RuntimeCodeGenerator, NotificationInvokerFactory {
 
     val CtClass BROKER_NOTIFICATION_LISTENER;
-    val ClassPool classPool;
     val extension JavassistUtils utils;
     val Map<Class<? extends NotificationListener>, RuntimeGeneratedInvokerPrototype> invokerClasses;
 
 
     new(ClassPool pool) {
-        classPool = pool;
         utils = new JavassistUtils(pool);
         invokerClasses = new WeakHashMap();
         BROKER_NOTIFICATION_LISTENER = org.opendaylight.controller.sal.binding.api.NotificationListener.asCtClass;
index ac26445bf408677b6e397c9fbb77bcf4fcaa19de..827644676665a1d1576abdbd2fe5caf2d8113a66 100644 (file)
@@ -7,13 +7,6 @@
  */
 package org.opendaylight.controller.sal.binding.codegen.impl;
 
-import com.google.common.util.concurrent.ListeningExecutorService;
-import com.google.common.util.concurrent.MoreExecutors;
-import com.google.common.util.concurrent.ThreadFactoryBuilder;
-import javassist.ClassPool;
-import org.opendaylight.controller.sal.binding.codegen.RuntimeCodeGenerator;
-import org.opendaylight.controller.sal.binding.spi.NotificationInvokerFactory;
-
 import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
@@ -23,7 +16,20 @@ import java.util.concurrent.ThreadFactory;
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
 
+import javassist.ClassPool;
+
+import org.apache.commons.lang3.StringUtils;
+import org.opendaylight.controller.sal.binding.codegen.RuntimeCodeGenerator;
+import org.opendaylight.controller.sal.binding.spi.NotificationInvokerFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.util.concurrent.ListeningExecutorService;
+import com.google.common.util.concurrent.MoreExecutors;
+import com.google.common.util.concurrent.ThreadFactoryBuilder;
+
 public class SingletonHolder {
+    private static final Logger logger = LoggerFactory.getLogger(SingletonHolder.class);
 
     public static final ClassPool CLASS_POOL = ClassPool.getDefault();
     public static final org.opendaylight.controller.sal.binding.codegen.impl.RuntimeCodeGenerator RPC_GENERATOR_IMPL = new org.opendaylight.controller.sal.binding.codegen.impl.RuntimeCodeGenerator(
@@ -33,7 +39,10 @@ public class SingletonHolder {
 
     public static final int CORE_NOTIFICATION_THREADS = 4;
     public static final int MAX_NOTIFICATION_THREADS = 32;
+    // block caller thread after MAX_NOTIFICATION_THREADS + MAX_NOTIFICATION_QUEUE_SIZE pending notifications
+    public static final int MAX_NOTIFICATION_QUEUE_SIZE = 1000;
     public static final int NOTIFICATION_THREAD_LIFE = 15;
+    private static final String NOTIFICATION_QUEUE_SIZE_PROPERTY = "mdsal.notificationqueue.size";
 
     private static ListeningExecutorService NOTIFICATION_EXECUTOR = null;
     private static ListeningExecutorService COMMIT_EXECUTOR = null;
@@ -44,22 +53,31 @@ public class SingletonHolder {
      *             should use service injection to make the executor configurable.
      */
     @Deprecated
-    public static synchronized final ListeningExecutorService getDefaultNotificationExecutor() {
+    public static synchronized ListeningExecutorService getDefaultNotificationExecutor() {
 
         if (NOTIFICATION_EXECUTOR == null) {
-            // Overriding the queue since we need an unbounded queue
-            // and threadpoolexecutor would not create new threads if the queue is not full
-            BlockingQueue<Runnable> queue = new LinkedBlockingQueue<Runnable>() {
+            int queueSize = MAX_NOTIFICATION_QUEUE_SIZE;
+            String queueValue = System.getProperty(NOTIFICATION_QUEUE_SIZE_PROPERTY);
+            if (StringUtils.isNotBlank(queueValue)) {
+                try {
+                    queueSize = Integer.parseInt(queueValue);
+                    logger.trace("Queue size was set to {}", queueSize);
+                }catch(NumberFormatException e) {
+                    logger.warn("Cannot parse {} as set by {}, using default {}", queueValue,
+                            NOTIFICATION_QUEUE_SIZE_PROPERTY, queueSize);
+                }
+            }
+            // Overriding the queue:
+            // ThreadPoolExecutor would not create new threads if the queue is not full, thus adding
+            // occurs in RejectedExecutionHandler.
+            // This impl saturates threadpool first, then queue. When both are full caller will get blocked.
+            BlockingQueue<Runnable> queue = new LinkedBlockingQueue<Runnable>(queueSize) {
+                private static final long serialVersionUID = 1L;
+
                 @Override
                 public boolean offer(Runnable r) {
-                    if (size() <= 1) {
-                        // if the queue is empty (or has just 1), no need to rampup the threads
-                        return super.offer(r);
-                    } else {
-                        // if the queue is not empty, force the queue to return false.
-                        // threadpoolexecutor will spawn a new thread if the queue.offer returns false.
-                        return false;
-                    }
+                    // ThreadPoolExecutor will spawn a new thread after core size is reached only if the queue.offer returns false.
+                    return false;
                 }
             };
 
@@ -74,7 +92,8 @@ public class SingletonHolder {
                             try {
                                 executor.getQueue().put(r);
                             } catch (InterruptedException e) {
-                                e.printStackTrace();
+                                Thread.currentThread().interrupt();// set interrupt flag after clearing
+                                throw new IllegalStateException(e);
                             }
                         }
                     });
@@ -90,7 +109,7 @@ public class SingletonHolder {
      *             should use service injection to make the executor configurable.
      */
     @Deprecated
-    public static synchronized final ListeningExecutorService getDefaultCommitExecutor() {
+    public static synchronized ListeningExecutorService getDefaultCommitExecutor() {
         if (COMMIT_EXECUTOR == null) {
             ThreadFactory factory = new ThreadFactoryBuilder().setDaemon(true).setNameFormat("md-sal-binding-commit-%d").build();
             /*
index a398abc75a3254c3160ae685f9d829920f726f6c..b27c80d784e39fce232ae227a752f3dd3b77ab99 100644 (file)
@@ -98,11 +98,8 @@ public class BindingIndependentConnector implements //
         Provider, //
         AutoCloseable {
 
-
-
     private final Logger LOG = LoggerFactory.getLogger(BindingIndependentConnector.class);
 
-
     private static final org.opendaylight.yangtools.yang.data.api.InstanceIdentifier ROOT_BI = org.opendaylight.yangtools.yang.data.api.InstanceIdentifier
             .builder().toInstance();
 
@@ -200,30 +197,30 @@ public class BindingIndependentConnector implements //
     private DataModificationTransaction createBindingToDomTransaction(
             final DataModification<InstanceIdentifier<? extends DataObject>, DataObject> source) {
         DataModificationTransaction target = biDataService.beginTransaction();
-        LOG.debug("Created DOM Transaction {} for {},", target.getIdentifier(),source.getIdentifier());
+        LOG.debug("Created DOM Transaction {} for {},", target.getIdentifier(), source.getIdentifier());
         for (InstanceIdentifier<? extends DataObject> entry : source.getRemovedConfigurationData()) {
             org.opendaylight.yangtools.yang.data.api.InstanceIdentifier biEntry = mappingService.toDataDom(entry);
             target.removeConfigurationData(biEntry);
-            LOG.debug("Delete of Binding Configuration Data {} is translated to {}",entry,biEntry);
+            LOG.debug("Delete of Binding Configuration Data {} is translated to {}", entry, biEntry);
         }
         for (InstanceIdentifier<? extends DataObject> entry : source.getRemovedOperationalData()) {
             org.opendaylight.yangtools.yang.data.api.InstanceIdentifier biEntry = mappingService.toDataDom(entry);
             target.removeOperationalData(biEntry);
-            LOG.debug("Delete of Binding Operational Data {} is translated to {}",entry,biEntry);
+            LOG.debug("Delete of Binding Operational Data {} is translated to {}", entry, biEntry);
         }
         for (Entry<InstanceIdentifier<? extends DataObject>, DataObject> entry : source.getUpdatedConfigurationData()
                 .entrySet()) {
             Entry<org.opendaylight.yangtools.yang.data.api.InstanceIdentifier, CompositeNode> biEntry = mappingService
                     .toDataDom(entry);
             target.putConfigurationData(biEntry.getKey(), biEntry.getValue());
-            LOG.debug("Update of Binding Configuration Data {} is translated to {}",entry,biEntry);
+            LOG.debug("Update of Binding Configuration Data {} is translated to {}", entry, biEntry);
         }
         for (Entry<InstanceIdentifier<? extends DataObject>, DataObject> entry : source.getUpdatedOperationalData()
                 .entrySet()) {
             Entry<org.opendaylight.yangtools.yang.data.api.InstanceIdentifier, CompositeNode> biEntry = mappingService
                     .toDataDom(entry);
             target.putOperationalData(biEntry.getKey(), biEntry.getValue());
-            LOG.debug("Update of Binding Operational Data {} is translated to {}",entry,biEntry);
+            LOG.debug("Update of Binding Operational Data {} is translated to {}", entry, biEntry);
         }
 
         return target;
@@ -279,7 +276,8 @@ public class BindingIndependentConnector implements //
         return biDataService;
     }
 
-    protected void setDomDataService(final org.opendaylight.controller.sal.core.api.data.DataProviderService biDataService) {
+    protected void setDomDataService(
+            final org.opendaylight.controller.sal.core.api.data.DataProviderService biDataService) {
         this.biDataService = biDataService;
     }
 
@@ -300,14 +298,14 @@ public class BindingIndependentConnector implements //
     }
 
     public void startDataForwarding() {
-        if(baDataService instanceof AbstractForwardedDataBroker) {
+        if (baDataService instanceof AbstractForwardedDataBroker) {
             dataForwarding = true;
             return;
         }
 
         final DataProviderService baData;
         if (baDataService instanceof BindingMountPointImpl) {
-            baData = ((BindingMountPointImpl)baDataService).getDataBrokerImpl();
+            baData = ((BindingMountPointImpl) baDataService).getDataBrokerImpl();
             LOG.debug("Extracted BA Data provider {} from mount point {}", baData, baDataService);
         } else {
             baData = baDataService;
@@ -478,8 +476,8 @@ public class BindingIndependentConnector implements //
             }
             DataModificationTransaction domTransaction = createBindingToDomTransaction(bindingTransaction);
             BindingToDomTransaction wrapped = new BindingToDomTransaction(domTransaction, bindingTransaction);
-            LOG.trace("Forwarding Binding Transaction: {} as DOM Transaction: {} .", bindingTransaction.getIdentifier(),
-                    domTransaction.getIdentifier());
+            LOG.trace("Forwarding Binding Transaction: {} as DOM Transaction: {} .",
+                    bindingTransaction.getIdentifier(), domTransaction.getIdentifier());
             return wrapped;
         }
     }
@@ -489,7 +487,8 @@ public class BindingIndependentConnector implements //
             DataCommitHandler<org.opendaylight.yangtools.yang.data.api.InstanceIdentifier, CompositeNode> {
 
         @Override
-        public void onRegister(final DataCommitHandlerRegistration<InstanceIdentifier<? extends DataObject>, DataObject> registration) {
+        public void onRegister(
+                final DataCommitHandlerRegistration<InstanceIdentifier<? extends DataObject>, DataObject> registration) {
 
             org.opendaylight.yangtools.yang.data.api.InstanceIdentifier domPath = mappingService.toDataDom(registration
                     .getPath());
@@ -497,7 +496,8 @@ public class BindingIndependentConnector implements //
         }
 
         @Override
-        public void onUnregister(final DataCommitHandlerRegistration<InstanceIdentifier<? extends DataObject>, DataObject> registration) {
+        public void onUnregister(
+                final DataCommitHandlerRegistration<InstanceIdentifier<? extends DataObject>, DataObject> registration) {
             // NOOP for now
             // FIXME: do registration based on only active commit handlers.
         }
@@ -531,8 +531,7 @@ public class BindingIndependentConnector implements //
      *
      */
     private class DomToBindingRpcForwardingManager implements
-            RouteChangeListener<RpcContextIdentifier, InstanceIdentifier<?>>,
-            RouterInstantiationListener,
+            RouteChangeListener<RpcContextIdentifier, InstanceIdentifier<?>>, RouterInstantiationListener,
             GlobalRpcRegistrationListener {
 
         private final Map<Class<? extends RpcService>, DomToBindingRpcForwarder> forwarders = new WeakHashMap<>();
@@ -615,7 +614,7 @@ public class BindingIndependentConnector implements //
                 }
 
             } catch (Exception e) {
-                LOG.error("Could not forward Rpcs of type {}", service.getName(),e);
+                LOG.error("Could not forward Rpcs of type {}", service.getName(), e);
             }
             registrations = ImmutableSet.of();
         }
@@ -626,7 +625,8 @@ public class BindingIndependentConnector implements //
          * @param service
          * @param context
          */
-        public DomToBindingRpcForwarder(final Class<? extends RpcService> service, final Class<? extends BaseIdentity> context) {
+        public DomToBindingRpcForwarder(final Class<? extends RpcService> service,
+                final Class<? extends BaseIdentity> context) {
             this.rpcServiceType = new WeakReference<Class<? extends RpcService>>(service);
             this.supportedRpcs = mappingService.getRpcQNamesFor(service);
             Builder<RoutedRpcRegistration> registrationsBuilder = ImmutableSet
@@ -645,8 +645,8 @@ public class BindingIndependentConnector implements //
             registrations = registrationsBuilder.build();
         }
 
-        public void registerPaths(final Class<? extends BaseIdentity> context, final Class<? extends RpcService> service,
-                final Set<InstanceIdentifier<?>> set) {
+        public void registerPaths(final Class<? extends BaseIdentity> context,
+                final Class<? extends RpcService> service, final Set<InstanceIdentifier<?>> set) {
             QName ctx = BindingReflections.findQName(context);
             for (org.opendaylight.yangtools.yang.data.api.InstanceIdentifier path : FluentIterable.from(set).transform(
                     toDOMInstanceIdentifier)) {
@@ -656,7 +656,6 @@ public class BindingIndependentConnector implements //
             }
         }
 
-
         @Override
         public Object invoke(final Object proxy, final Method method, final Object[] args) throws Throwable {
             if (EQUALS_METHOD.equals(method)) {
@@ -700,7 +699,6 @@ public class BindingIndependentConnector implements //
             }
         }
 
-
         @Override
         public ListenableFuture<RpcResult<CompositeNode>> invokeRpc(final QName rpc, final CompositeNode domInput) {
             checkArgument(rpc != null);
@@ -748,12 +746,12 @@ public class BindingIndependentConnector implements //
                             strategy = new DefaultInvocationStrategy(rpc, targetMethod, outputClass.get(), inputClass
                                     .get());
                         } else {
-                            strategy = new NoInputNoOutputInvocationStrategy(rpc, targetMethod);
+                            strategy = new NoInputInvocationStrategy(rpc, targetMethod, outputClass.get());
                         }
-                    } else if(inputClass.isPresent()){
-                        strategy = new NoOutputInvocationStrategy(rpc,targetMethod, inputClass.get());
+                    } else if (inputClass.isPresent()) {
+                        strategy = new NoOutputInvocationStrategy(rpc, targetMethod, inputClass.get());
                     } else {
-                        strategy = new NoInputNoOutputInvocationStrategy(rpc,targetMethod);
+                        strategy = new NoInputNoOutputInvocationStrategy(rpc, targetMethod);
                     }
                     return strategy;
                 }
@@ -777,7 +775,8 @@ public class BindingIndependentConnector implements //
         public abstract RpcResult<CompositeNode> uncheckedInvoke(RpcService rpcService, CompositeNode domInput)
                 throws Exception;
 
-        public RpcResult<CompositeNode> invokeOn(final RpcService rpcService, final CompositeNode domInput) throws Exception {
+        public RpcResult<CompositeNode> invokeOn(final RpcService rpcService, final CompositeNode domInput)
+                throws Exception {
             return uncheckedInvoke(rpcService, domInput);
         }
     }
@@ -800,7 +799,8 @@ public class BindingIndependentConnector implements //
 
         @SuppressWarnings("unchecked")
         @Override
-        public RpcResult<CompositeNode> uncheckedInvoke(final RpcService rpcService, final CompositeNode domInput) throws Exception {
+        public RpcResult<CompositeNode> uncheckedInvoke(final RpcService rpcService, final CompositeNode domInput)
+                throws Exception {
             DataContainer bindingInput = mappingService.dataObjectFromDataDom(inputClass.get(), domInput);
             Future<RpcResult<?>> futureResult = (Future<RpcResult<?>>) targetMethod.invoke(rpcService, bindingInput);
             if (futureResult == null) {
@@ -809,31 +809,84 @@ public class BindingIndependentConnector implements //
             RpcResult<?> bindingResult = futureResult.get();
             final Object resultObj = bindingResult.getResult();
             if (resultObj instanceof DataObject) {
-                final CompositeNode output = mappingService.toDataDom((DataObject)resultObj);
-                return Rpcs.getRpcResult(true, output, Collections.<RpcError>emptySet());
+                final CompositeNode output = mappingService.toDataDom((DataObject) resultObj);
+                return Rpcs.getRpcResult(true, output, Collections.<RpcError> emptySet());
             }
             return Rpcs.getRpcResult(true);
         }
 
         @Override
         public ListenableFuture<RpcResult<?>> forwardToDomBroker(final DataObject input) {
-            if(biRpcRegistry == null) {
+            if (biRpcRegistry == null) {
                 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());
-                }
-            });
+            return Futures.transform(biRpcRegistry.invokeRpc(rpc, wrappedXml),
+                    new Function<RpcResult<CompositeNode>, RpcResult<?>>() {
+                        @Override
+                        public RpcResult<?> apply(final 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 NoInputInvocationStrategy extends RpcInvocationStrategy {
+
+        @SuppressWarnings("rawtypes")
+        private final WeakReference<Class> outputClass;
+
+        @SuppressWarnings({ "rawtypes", "unchecked" })
+        public NoInputInvocationStrategy(final QName rpc, final Method targetMethod, final Class<?> outputClass) {
+            super(rpc, targetMethod);
+            this.outputClass = new WeakReference(outputClass);
+        }
+
+        @SuppressWarnings("unchecked")
+        @Override
+        public RpcResult<CompositeNode> uncheckedInvoke(final RpcService rpcService, final CompositeNode domInput)
+                throws Exception {
+            Future<RpcResult<?>> futureResult = (Future<RpcResult<?>>) targetMethod.invoke(rpcService);
+            if (futureResult == null) {
+                return Rpcs.getRpcResult(false);
+            }
+            RpcResult<?> bindingResult = futureResult.get();
+            final Object resultObj = bindingResult.getResult();
+            if (resultObj instanceof DataObject) {
+                final CompositeNode output = mappingService.toDataDom((DataObject) resultObj);
+                return Rpcs.getRpcResult(true, output, Collections.<RpcError> emptySet());
+            }
+            return Rpcs.getRpcResult(true);
+        }
+
+        @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));
+                return Futures.transform(biRpcRegistry.invokeRpc(rpc, wrappedXml),
+                        new Function<RpcResult<CompositeNode>, RpcResult<?>>() {
+                            @Override
+                            public RpcResult<?> apply(final 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());
+                            }
+                        });
+            } else {
+                return Futures.<RpcResult<?>> immediateFuture(Rpcs.getRpcResult(false));
+            }
         }
     }
 
@@ -844,7 +897,8 @@ public class BindingIndependentConnector implements //
         }
 
         @Override
-        public RpcResult<CompositeNode> uncheckedInvoke(final RpcService rpcService, final CompositeNode domInput) throws Exception {
+        public RpcResult<CompositeNode> uncheckedInvoke(final RpcService rpcService, final CompositeNode domInput)
+                throws Exception {
             @SuppressWarnings("unchecked")
             Future<RpcResult<Void>> result = (Future<RpcResult<Void>>) targetMethod.invoke(rpcService);
             RpcResult<Void> bindingResult = result.get();
@@ -859,20 +913,19 @@ public class BindingIndependentConnector implements //
 
     private class NoOutputInvocationStrategy extends RpcInvocationStrategy {
 
-
         @SuppressWarnings("rawtypes")
         private final WeakReference<Class> inputClass;
 
         @SuppressWarnings({ "rawtypes", "unchecked" })
         public NoOutputInvocationStrategy(final QName rpc, final Method targetMethod,
                 final Class<? extends DataContainer> inputClass) {
-            super(rpc,targetMethod);
+            super(rpc, targetMethod);
             this.inputClass = new WeakReference(inputClass);
         }
 
-
         @Override
-        public RpcResult<CompositeNode> uncheckedInvoke(final RpcService rpcService, final CompositeNode domInput) throws Exception {
+        public RpcResult<CompositeNode> uncheckedInvoke(final RpcService rpcService, final CompositeNode domInput)
+                throws Exception {
             DataContainer bindingInput = mappingService.dataObjectFromDataDom(inputClass.get(), domInput);
             Future<RpcResult<?>> result = (Future<RpcResult<?>>) targetMethod.invoke(rpcService, bindingInput);
             if (result == null) {
@@ -884,19 +937,20 @@ public class BindingIndependentConnector implements //
 
         @Override
         public ListenableFuture<RpcResult<?>> forwardToDomBroker(final DataObject input) {
-            if(biRpcRegistry == null) {
+            if (biRpcRegistry == null) {
                 return Futures.<RpcResult<?>> immediateFuture(Rpcs.getRpcResult(false));
             }
 
             CompositeNode xml = mappingService.toDataDom(input);
-            CompositeNode wrappedXml = ImmutableCompositeNode.create(rpc,ImmutableList.<Node<?>>of(xml));
+            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());
-                }
-            });
+            return Futures.transform(biRpcRegistry.invokeRpc(rpc, wrappedXml),
+                    new Function<RpcResult<CompositeNode>, RpcResult<?>>() {
+                        @Override
+                        public RpcResult<?> apply(final RpcResult<CompositeNode> input) {
+                            return Rpcs.<Void> getRpcResult(input.isSuccessful(), null, input.getErrors());
+                        }
+                    });
         }
     }
 
diff --git a/opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/sal/binding/codegen/impl/SingletonHolderTest.java b/opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/sal/binding/codegen/impl/SingletonHolderTest.java
new file mode 100644 (file)
index 0000000..0e4c5cc
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * 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.codegen.impl;
+
+import com.google.common.util.concurrent.ListeningExecutorService;
+import java.lang.reflect.Field;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@Ignore
+public class SingletonHolderTest {
+    private static final Logger logger = LoggerFactory.getLogger(SingletonHolderTest.class);
+
+    @Test
+    public void testNotificationExecutor() throws Exception {
+        ListeningExecutorService executor = SingletonHolder.getDefaultNotificationExecutor();
+        ThreadPoolExecutor tpExecutor = (ThreadPoolExecutor) setAccessible(executor.getClass().getDeclaredField("delegate")).get(executor);
+        BlockingQueue<Runnable> queue = tpExecutor.getQueue();
+
+        for (int idx = 0; idx < 100; idx++) {
+            final int idx2 = idx;
+            logger.info("Adding {}\t{}\t{}", idx, queue.size(), tpExecutor.getActiveCount());
+            executor.execute(new Runnable() {
+
+                @Override
+                public void run() {
+                    logger.info("in  {}", idx2);
+                    try {
+                        Thread.sleep(1000);
+                    } catch (InterruptedException e) {
+                        e.printStackTrace();
+                    }
+                    logger.info("out {}", idx2);
+                }
+            });
+        }
+        executor.shutdown();
+        executor.awaitTermination(10, TimeUnit.SECONDS);
+    }
+
+    private static Field setAccessible(Field field) {
+        field.setAccessible(true);
+        return field;
+    }
+}
index b147e03d56668159aca62bf1aba89aca87ba6b58..6b2568aba7f8cf1d4346b53e319c18d37ef6cd54 100644 (file)
@@ -61,9 +61,8 @@ public class MultipleAugmentationPuts extends AbstractDataServiceTest implements
     private static final InstanceIdentifier<Nodes> NODES_INSTANCE_ID_BA = InstanceIdentifier.builder(Nodes.class) //
             .toInstance();
 
-    private static final InstanceIdentifier<Node> NODE_INSTANCE_ID_BA = InstanceIdentifier
-            .builder(NODES_INSTANCE_ID_BA) //
-            .child(Node.class, NODE_KEY).toInstance();
+    private static final InstanceIdentifier<Node> NODE_INSTANCE_ID_BA =
+            NODES_INSTANCE_ID_BA.child(Node.class, NODE_KEY);
 
     private static final org.opendaylight.yangtools.yang.data.api.InstanceIdentifier NODE_INSTANCE_ID_BI = //
     org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.builder() //
@@ -74,7 +73,7 @@ public class MultipleAugmentationPuts extends AbstractDataServiceTest implements
 
     /**
      * Test for Bug 148
-     * 
+     *
      * @throws Exception
      */
     @Test
@@ -111,12 +110,12 @@ public class MultipleAugmentationPuts extends AbstractDataServiceTest implements
 //        Node meterStatsNodeWithDuration = createTestNode(NodeMeterStatistics.class, nodeMeterStatistics(5, true));
 //        commitNodeAndVerifyTransaction(meterStatsNodeWithDuration);
 //
-//        
+//
 //        Node nodeWithUpdatedList = (Node) baDataService.readOperationalData(NODE_INSTANCE_ID_BA);
 //        AugmentationVerifier.from(nodeWithUpdatedList) //
 //                .assertHasAugmentation(FlowCapableNode.class) //
 //                .assertHasAugmentation(NodeMeterStatistics.class);
-//        
+//
 //        List<MeterStats> meterStats = nodeWithUpdatedList.getAugmentation(NodeMeterStatistics.class).getMeterStatistics().getMeterStats();
 //        assertNotNull(meterStats);
 //        assertFalse(meterStats.isEmpty());
index 9cdf70322c772568ad4f69f811711a9a5a5c39ac..ae65c8889a52d15dc5ce7d275ae84140c1fe2f66 100644 (file)
@@ -267,9 +267,7 @@ public class BindingTestContext implements AutoCloseable, SchemaContextProvider
 
     public void startBindingToDomMappingService() {
         checkState(classPool != null, "ClassPool needs to be present");
-        mappingServiceImpl = new RuntimeGeneratedMappingServiceImpl();
-        mappingServiceImpl.setPool(classPool);
-        mappingServiceImpl.init();
+        mappingServiceImpl = new RuntimeGeneratedMappingServiceImpl(classPool);
     }
 
     public void updateYangSchema(final String[] files) {
index 21fa207d781a8cd74a16b49b1f7dc72d77e89daf..d1354f897fdcd45133c3ae17c5045a1ddf046095 100644 (file)
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
     </dependency>
+    <dependency>
+      <groupId>org.opendaylight.yangtools</groupId>
+      <artifactId>yang-binding</artifactId>
+    </dependency>
     <dependency>
       <groupId>org.opendaylight.controller</groupId>
       <artifactId>sal-binding-broker-impl</artifactId>
       <type>test-jar</type>
       <scope>test</scope>
     </dependency>
-    <dependency>
-    <groupId>org.opendaylight.yangtools</groupId>
-    <artifactId>yang-binding</artifactId>
-    </dependency>
     <dependency>
       <groupId>org.opendaylight.controller.model</groupId>
       <artifactId>model-flow-management</artifactId>
   </dependencies>
   <build>
     <plugins>
-    <plugin>
-        <groupId>org.opendaylight.yangtools</groupId>
-        <artifactId>yang-maven-plugin</artifactId>
-        <executions>
-          <execution>
-            <goals>
-              <goal>generate-sources</goal>
-            </goals>
-            <configuration>
-              <codeGenerators>
-                <generator>
-                  <codeGeneratorClass>org.opendaylight.yangtools.maven.sal.api.gen.plugin.CodeGeneratorImpl</codeGeneratorClass>
-                  <outputBaseDir>${salGeneratorPath}</outputBaseDir>
-                </generator>
-              </codeGenerators>
-              <inspectDependencies>true</inspectDependencies>
-            </configuration>
-          </execution>
-        </executions>
-    </plugin>
       <plugin>
         <groupId>org.jacoco</groupId>
         <artifactId>jacoco-maven-plugin</artifactId>
           </execution>
         </executions>
       </plugin>
+      <plugin>
+        <groupId>org.opendaylight.yangtools</groupId>
+        <artifactId>yang-maven-plugin</artifactId>
+        <executions>
+          <execution>
+            <goals>
+              <goal>generate-sources</goal>
+            </goals>
+            <configuration>
+              <codeGenerators>
+                <generator>
+                  <codeGeneratorClass>org.opendaylight.yangtools.maven.sal.api.gen.plugin.CodeGeneratorImpl</codeGeneratorClass>
+                  <outputBaseDir>${salGeneratorPath}</outputBaseDir>
+                </generator>
+              </codeGenerators>
+              <inspectDependencies>true</inspectDependencies>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
     </plugins>
   </build>
   <scm>
index 61a73d63f41379951757d8f060584bc26cf778c1..c5dbdcecae747b7f4930b0f0f1119ec753f941e3 100644 (file)
@@ -30,10 +30,8 @@ public class ConcurrentImplicitCreateTest extends AbstractDataServiceTest {
     private static final NodeKey NODE_FOO_KEY = new NodeKey(new NodeId("foo"));
     private static final NodeKey NODE_BAR_KEY = new NodeKey(new NodeId("foo"));
     private static InstanceIdentifier<Nodes> NODES_PATH = InstanceIdentifier.builder(Nodes.class).build();
-    private static InstanceIdentifier<Node> NODE_FOO_PATH = InstanceIdentifier.builder(NODES_PATH)
-            .child(Node.class, NODE_FOO_KEY).build();
-    private static InstanceIdentifier<Node> NODE_BAR_PATH = InstanceIdentifier.builder(NODES_PATH)
-            .child(Node.class, NODE_FOO_KEY).build();
+    private static InstanceIdentifier<Node> NODE_FOO_PATH = NODES_PATH.child(Node.class, NODE_FOO_KEY);
+    private static InstanceIdentifier<Node> NODE_BAR_PATH = NODES_PATH.child(Node.class, NODE_FOO_KEY);
 
     @Test
     public void testConcurrentCreate() throws InterruptedException, ExecutionException {
index 0925e9bff40d00daf334acd98963393a7b749d28..800c1b4cc426e1ef09c04983f594ecb059d036d1 100644 (file)
@@ -75,13 +75,13 @@ public class ListProcessingAndOrderingTest extends AbstractDataServiceTest {
     private static final UnorderedListKey UNORDERED_FOO_KEY = new UnorderedListKey("foo");
     private static final UnorderedListKey UNORDERED_BAR_KEY = new UnorderedListKey("bar");
 
-    private static final InstanceIdentifier<UnorderedList> UNORDERED_FOO_PATH = InstanceIdentifier.builder(UNORDERED_CONTAINER_PATH).child(UnorderedList.class,UNORDERED_FOO_KEY).build();
-    private static final InstanceIdentifier<UnorderedList> UNORDERED_BAR_PATH = InstanceIdentifier.builder(UNORDERED_CONTAINER_PATH).child(UnorderedList.class,UNORDERED_BAR_KEY).build();
+    private static final InstanceIdentifier<UnorderedList> UNORDERED_FOO_PATH = UNORDERED_CONTAINER_PATH.child(UnorderedList.class,UNORDERED_FOO_KEY);
+    private static final InstanceIdentifier<UnorderedList> UNORDERED_BAR_PATH = UNORDERED_CONTAINER_PATH.child(UnorderedList.class,UNORDERED_BAR_KEY);
 
     private static final OrderedListKey ORDERED_FOO_KEY = new OrderedListKey("foo");
     private static final OrderedListKey ORDERED_BAR_KEY = new OrderedListKey("bar");
-    private static final InstanceIdentifier<OrderedList> ORDERED_FOO_PATH = InstanceIdentifier.builder(ORDERED_CONTAINER_PATH).child(OrderedList.class,ORDERED_FOO_KEY).build();
-    private static final InstanceIdentifier<OrderedList> ORDERED_BAR_PATH = InstanceIdentifier.builder(ORDERED_CONTAINER_PATH).child(OrderedList.class,ORDERED_BAR_KEY).build();
+    private static final InstanceIdentifier<OrderedList> ORDERED_FOO_PATH = ORDERED_CONTAINER_PATH.child(OrderedList.class,ORDERED_FOO_KEY);
+    private static final InstanceIdentifier<OrderedList> ORDERED_BAR_PATH = ORDERED_CONTAINER_PATH.child(OrderedList.class,ORDERED_BAR_KEY);
 
 
     @Test
index 450ca1cb3b142d57a29969415f9e8ffeaa6d0d73..6b4cc5779806288d4f0cf26116d2ef3f7ca10ba1 100644 (file)
@@ -78,14 +78,12 @@ public class WildcardedDataChangeListenerTest extends AbstractDataServiceTest {
 
     private static final FlowKey FLOW_KEY = new FlowKey(new FlowId("test"));
 
-    private static final InstanceIdentifier<Flow> NODE_0_FLOW_PATH = InstanceIdentifier.builder(NODE_0_TABLE_PATH)
-            .child(Flow.class, FLOW_KEY).build();
+    private static final InstanceIdentifier<Flow> NODE_0_FLOW_PATH = NODE_0_TABLE_PATH.child(Flow.class, FLOW_KEY);
 
-    private static final InstanceIdentifier<Flow> NODE_1_FLOW_PATH = InstanceIdentifier.builder(NODE_1_TABLE_PATH)
-            .child(Flow.class, FLOW_KEY).build();
+    private static final InstanceIdentifier<Flow> NODE_1_FLOW_PATH = NODE_1_TABLE_PATH.child(Flow.class, FLOW_KEY);
 
-    private static final InstanceIdentifier<TableFeatures> NODE_0_TABLE_FEATURES_PATH = InstanceIdentifier
-            .builder(NODE_0_TABLE_PATH).child(TableFeatures.class, TABLE_FEATURES_KEY).build();
+    private static final InstanceIdentifier<TableFeatures> NODE_0_TABLE_FEATURES_PATH =
+            NODE_0_TABLE_PATH.child(TableFeatures.class, TABLE_FEATURES_KEY);
 
     private static final TableFeatures TABLE_FEATURES = new TableFeaturesBuilder()//
             .setKey(TABLE_FEATURES_KEY) //
index e89371337e0a27af96679ca91437862c2cd2f2ef..ccbd52fc77ea27711c19c934fb2109a3991343d6 100644 (file)
@@ -60,13 +60,11 @@ public class DOMCodecBug03Test extends AbstractDataServiceTest implements DataCh
             .toInstance();
 
 
-    private static final InstanceIdentifier<Node> NODE_INSTANCE_ID_BA = InstanceIdentifier//
-            .builder(NODES_INSTANCE_ID_BA) //
-            .child(Node.class, NODE_KEY).toInstance();
+    private static final InstanceIdentifier<Node> NODE_INSTANCE_ID_BA = NODES_INSTANCE_ID_BA.child(Node.class, NODE_KEY);
 
 
-    private static final InstanceIdentifier<SupportedActions> SUPPORTED_ACTIONS_INSTANCE_ID_BA = InstanceIdentifier//
-            .builder(NODES_INSTANCE_ID_BA) //
+    private static final InstanceIdentifier<SupportedActions> SUPPORTED_ACTIONS_INSTANCE_ID_BA = //
+            NODES_INSTANCE_ID_BA.builder() //
             .child(Node.class, NODE_KEY) //
             .augmentation(FlowCapableNode.class) //
             .child(SupportedActions.class)
@@ -163,7 +161,7 @@ public class DOMCodecBug03Test extends AbstractDataServiceTest implements DataCh
 
         NodeConnectorId ncId = new NodeConnectorId("openflow:1:bar");
         NodeConnectorKey nodeKey = new NodeConnectorKey(ncId );
-        InstanceIdentifier<NodeConnector> ncInstanceId = InstanceIdentifier.builder(NODE_INSTANCE_ID_BA).child(NodeConnector.class, nodeKey).toInstance();
+        InstanceIdentifier<NodeConnector> ncInstanceId = NODE_INSTANCE_ID_BA.child(NodeConnector.class, nodeKey);
         NodeConnectorBuilder ncBuilder = new NodeConnectorBuilder();
         ncBuilder.setId(ncId);
         ncBuilder.setKey(nodeKey);
index 023bd795af8779d0805748d294745c969a6246c8..30c7af705f2ccba4a25e3b1d19f8261e3439386a 100644 (file)
@@ -7,7 +7,15 @@
  */
 package org.opendaylight.controller.sal.binding.test.bugfix;
 
-import com.google.common.collect.ImmutableSet;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
 import org.junit.Test;
 import org.opendaylight.controller.md.sal.common.api.TransactionStatus;
 import org.opendaylight.controller.sal.binding.api.data.DataModificationTransaction;
@@ -44,14 +52,7 @@ import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.data.api.CompositeNode;
 
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
+import com.google.common.collect.ImmutableSet;
 
 public class FlagsSerializationTest extends AbstractDataServiceTest {
 
@@ -65,7 +66,7 @@ public class FlagsSerializationTest extends AbstractDataServiceTest {
     private static final NodeKey NODE_KEY = new NodeKey(new NodeId(NODE_ID));
     private static final FlowKey FLOW_KEY = new FlowKey(new FlowId(FLOW_ID));
     private static final TableKey TABLE_KEY = new TableKey(TABLE_ID);
-    
+
     private static final Map<QName, Object> NODE_KEY_BI = Collections.<QName, Object> singletonMap(NODE_ID_QNAME,
             NODE_ID);
 
@@ -83,12 +84,12 @@ public class FlagsSerializationTest extends AbstractDataServiceTest {
 
 //    private static final org.opendaylight.yangtools.yang.data.api.InstanceIdentifier FLOW_INSTANCE_ID_BI = //
 //    org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.builder() //
-//            
+//
 //            .node(Flows.QNAME) //
 //            .nodeWithKey(Flow.QNAME, FLOW_KEY_BI) //
 //            .toInstance();
     private static final InstanceIdentifier<? extends DataObject> FLOW_INSTANCE_ID_BA = //
-    InstanceIdentifier.builder(NODE_INSTANCE_ID_BA) //
+            NODE_INSTANCE_ID_BA.builder() //
             .augmentation(FlowCapableNode.class)
             .child(Table.class,TABLE_KEY)
             .child(Flow.class, FLOW_KEY) //
@@ -101,34 +102,34 @@ public class FlagsSerializationTest extends AbstractDataServiceTest {
         FlowModFlags checkOverlapFlags = new FlowModFlags(true,false,false,false,false);
         ImmutableSet<String> domCheckOverlapFlags = ImmutableSet.<String>of("CHECK_OVERLAP");
         testFlags(checkOverlapFlags,domCheckOverlapFlags);
-        
-        
-        
+
+
+
         FlowModFlags allFalseFlags = new FlowModFlags(false,false,false,false,false);
         ImmutableSet<String> domAllFalseFlags = ImmutableSet.<String>of();
         testFlags(allFalseFlags,domAllFalseFlags);
-        
+
         FlowModFlags allTrueFlags = new FlowModFlags(true,true,true,true,true);
         ImmutableSet<String> domAllTrueFlags = ImmutableSet.<String>of("CHECK_OVERLAP","NO_BYT_COUNTS", "NO_PKT_COUNTS", "RESET_COUNTS", "SEND_FLOW_REM");
         testFlags(allTrueFlags,domAllTrueFlags);
-        
+
         FlowModFlags nullFlags = null;
         ImmutableSet<String> domNullFlags = null;
         testFlags(null,null);
-        
-        
+
+
 
     }
 
     private void testFlags(FlowModFlags flagsToTest, ImmutableSet<String> domFlags) throws Exception {
         Flow flow = createFlow(flagsToTest);
         assertNotNull(flow);
-        
+
         CompositeNode domFlow = biDataService.readConfigurationData(mappingService.toDataDom(FLOW_INSTANCE_ID_BA));
-        
+
         assertNotNull(domFlow);
         org.opendaylight.yangtools.yang.data.api.Node<?> readedFlags = domFlow.getFirstSimpleByName(FLOW_FLAGS_QNAME);
-        
+
         if(domFlags != null) {
             assertNotNull(readedFlags);
             assertEquals(domFlags,readedFlags.getValue());
@@ -136,12 +137,12 @@ public class FlagsSerializationTest extends AbstractDataServiceTest {
             assertNull(readedFlags);
         }
         assertEquals(flagsToTest, flow.getFlags());
-        
+
         DataModificationTransaction transaction = baDataService.beginTransaction();
         transaction.removeConfigurationData(FLOW_INSTANCE_ID_BA);
         RpcResult<TransactionStatus> result = transaction.commit().get();
         assertEquals(TransactionStatus.COMMITED, result.getResult());
-           
+
     }
 
     private Flow createFlow(FlowModFlags flagsToTest) throws Exception {
@@ -158,12 +159,12 @@ public class FlagsSerializationTest extends AbstractDataServiceTest {
 
         flow.setKey(FLOW_KEY);
         flow.setMatch(match.build());
-        
+
         flow.setFlags(flagsToTest);
-        
+
         InstructionsBuilder instructions = new InstructionsBuilder();
         InstructionBuilder instruction = new InstructionBuilder();
-        
+
         instruction.setOrder(10);
         ApplyActionsBuilder applyActions = new ApplyActionsBuilder();
         List<Action> actionList = new ArrayList<>();
index 027a8eeb9f103005c7fbf2140c7aa842e0471de3..7f1632081490003aa8921b14a8c37c6941df4c29 100644 (file)
@@ -58,18 +58,18 @@ public class PutAugmentationTest extends AbstractDataServiceTest implements Data
     private static final InstanceIdentifier<Nodes> NODES_INSTANCE_ID_BA = InstanceIdentifier.builder(Nodes.class) //
             .toInstance();
 
-    private static final InstanceIdentifier<Node> NODE_INSTANCE_ID_BA = InstanceIdentifier//
-            .builder(NODES_INSTANCE_ID_BA) //
+    private static final InstanceIdentifier<Node> NODE_INSTANCE_ID_BA = //
+            NODES_INSTANCE_ID_BA.builder() //
             .child(Node.class, NODE_KEY).toInstance();
 
-    private static final InstanceIdentifier<SupportedActions> SUPPORTED_ACTIONS_INSTANCE_ID_BA = InstanceIdentifier//
-            .builder(NODES_INSTANCE_ID_BA) //
+    private static final InstanceIdentifier<SupportedActions> SUPPORTED_ACTIONS_INSTANCE_ID_BA = //
+            NODES_INSTANCE_ID_BA.builder() //
             .child(Node.class, NODE_KEY) //
             .augmentation(FlowCapableNode.class) //
             .child(SupportedActions.class).toInstance();
 
-    private static final InstanceIdentifier<FlowCapableNode> ALL_FLOW_CAPABLE_NODES = InstanceIdentifier //
-            .builder(NODES_INSTANCE_ID_BA) //
+    private static final InstanceIdentifier<FlowCapableNode> ALL_FLOW_CAPABLE_NODES = //
+            NODES_INSTANCE_ID_BA.builder() //
             .child(Node.class) //
             .augmentation(FlowCapableNode.class) //
             .build();
@@ -88,8 +88,8 @@ public class PutAugmentationTest extends AbstractDataServiceTest implements Data
             .nodeWithKey(Node.QNAME, NODE_KEY_BI) //
             .node(SUPPORTED_ACTIONS_QNAME) //
             .toInstance();
-    private static final InstanceIdentifier<FlowCapableNode> FLOW_AUGMENTATION_PATH = InstanceIdentifier //
-            .builder(NODE_INSTANCE_ID_BA) //
+    private static final InstanceIdentifier<FlowCapableNode> FLOW_AUGMENTATION_PATH =
+            NODE_INSTANCE_ID_BA.builder() //
             .augmentation(FlowCapableNode.class) //
             .build();
 
@@ -126,8 +126,8 @@ public class PutAugmentationTest extends AbstractDataServiceTest implements Data
         fnub.setDescription("Description Foo");
         fnub.setSoftware("JUnit emulated");
         FlowCapableNode fnu = fnub.build();
-        InstanceIdentifier<FlowCapableNode> augmentIdentifier = InstanceIdentifier.builder(NODE_INSTANCE_ID_BA)
-                .augmentation(FlowCapableNode.class).toInstance();
+        InstanceIdentifier<FlowCapableNode> augmentIdentifier = NODE_INSTANCE_ID_BA
+                .augmentation(FlowCapableNode.class);
         DataModificationTransaction augmentedTransaction = baDataService.beginTransaction();
         augmentedTransaction.putOperationalData(augmentIdentifier, fnu);
 
@@ -183,8 +183,8 @@ public class PutAugmentationTest extends AbstractDataServiceTest implements Data
         lastReceivedChangeEvent = SettableFuture.create();
         assertEquals(TransactionStatus.COMMITED, result.getResult());
 
-        FlowCapableNode readedAugmentation = (FlowCapableNode) baDataService.readOperationalData(InstanceIdentifier
-                .builder(NODE_INSTANCE_ID_BA).augmentation(FlowCapableNode.class).toInstance());
+        FlowCapableNode readedAugmentation = (FlowCapableNode) baDataService.readOperationalData(
+                NODE_INSTANCE_ID_BA.augmentation(FlowCapableNode.class));
         assertNotNull(readedAugmentation);
 
         assertEquals(fnu.getHardware(), readedAugmentation.getHardware());
@@ -198,10 +198,10 @@ public class PutAugmentationTest extends AbstractDataServiceTest implements Data
 
     private void testPutNodeConnectorWithAugmentation() throws Exception {
         NodeConnectorKey ncKey = new NodeConnectorKey(new NodeConnectorId("test:0:0"));
-        InstanceIdentifier<NodeConnector> ncPath = InstanceIdentifier.builder(NODE_INSTANCE_ID_BA)
-                .child(NodeConnector.class, ncKey).toInstance();
-        InstanceIdentifier<FlowCapableNodeConnector> ncAugmentPath = InstanceIdentifier.builder(ncPath)
-                .augmentation(FlowCapableNodeConnector.class).toInstance();
+        InstanceIdentifier<NodeConnector> ncPath = NODE_INSTANCE_ID_BA
+                .child(NodeConnector.class, ncKey);
+        InstanceIdentifier<FlowCapableNodeConnector> ncAugmentPath = ncPath
+                .augmentation(FlowCapableNodeConnector.class);
 
         NodeConnectorBuilder nc = new NodeConnectorBuilder();
         nc.setKey(ncKey);
diff --git a/opendaylight/md-sal/sal-binding-dom-it/src/test/java/org/opendaylight/controller/sal/binding/test/bugfix/WriteParentListenAugmentTest.java b/opendaylight/md-sal/sal-binding-dom-it/src/test/java/org/opendaylight/controller/sal/binding/test/bugfix/WriteParentListenAugmentTest.java
new file mode 100644 (file)
index 0000000..cb31885
--- /dev/null
@@ -0,0 +1,89 @@
+/*
+ * 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.test.bugfix;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.util.concurrent.TimeUnit;
+
+import org.junit.Test;
+import org.opendaylight.controller.md.sal.common.api.data.DataChangeEvent;
+import org.opendaylight.controller.sal.binding.api.data.DataChangeListener;
+import org.opendaylight.controller.sal.binding.api.data.DataModificationTransaction;
+import org.opendaylight.controller.sal.binding.test.AbstractDataServiceTest;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+import com.google.common.util.concurrent.SettableFuture;
+
+public class WriteParentListenAugmentTest extends AbstractDataServiceTest {
+
+    private static final String NODE_ID = "node:1";
+
+    private static final NodeKey NODE_KEY = new NodeKey(new NodeId(NODE_ID));
+    private static final InstanceIdentifier<Node> NODE_INSTANCE_ID_BA = InstanceIdentifier.builder(Nodes.class) //
+            .child(Node.class, NODE_KEY).toInstance();
+
+    private static final InstanceIdentifier<FlowCapableNode> AUGMENT_WILDCARDED_PATH = InstanceIdentifier
+            .builder(Nodes.class).child(Node.class).augmentation(FlowCapableNode.class).toInstance();
+
+    private static final InstanceIdentifier<FlowCapableNode> AUGMENT_NODE_PATH = InstanceIdentifier
+            .builder(Nodes.class).child(Node.class, NODE_KEY).augmentation(FlowCapableNode.class).toInstance();
+
+    @Test
+    public void writeNodeListenAugment() throws Exception {
+
+        final SettableFuture<DataChangeEvent<InstanceIdentifier<?>, DataObject>> event = SettableFuture.create();
+
+        ListenerRegistration<DataChangeListener> dclRegistration = baDataService.registerDataChangeListener(
+                AUGMENT_WILDCARDED_PATH, new DataChangeListener() {
+
+                    @Override
+                    public void onDataChanged(final DataChangeEvent<InstanceIdentifier<?>, DataObject> change) {
+                        event.set(change);
+                    }
+                });
+
+        DataModificationTransaction modification = baDataService.beginTransaction();
+
+        Node node = new NodeBuilder() //
+                .setKey(NODE_KEY) //
+                .addAugmentation(FlowCapableNode.class, flowCapableNode("one")).build();
+        modification.putOperationalData(NODE_INSTANCE_ID_BA, node);
+        modification.commit().get();
+
+        DataChangeEvent<InstanceIdentifier<?>, DataObject> receivedEvent = event.get(1000, TimeUnit.MILLISECONDS);
+        assertTrue(receivedEvent.getCreatedOperationalData().containsKey(AUGMENT_NODE_PATH));
+
+        dclRegistration.close();
+
+        DataModificationTransaction mod2 = baDataService.beginTransaction();
+        mod2.putOperationalData(AUGMENT_NODE_PATH, flowCapableNode("two"));
+        mod2.commit().get();
+
+        FlowCapableNode readedAug = (FlowCapableNode) baDataService.readOperationalData(AUGMENT_NODE_PATH);
+        assertEquals("two", readedAug.getDescription());
+
+    }
+
+    private FlowCapableNode flowCapableNode(final String description) {
+        return new FlowCapableNodeBuilder() //
+                .setDescription(description) //
+                .build();
+    }
+}
\ No newline at end of file
index 35b4e92db43bbbfdbe8545ea5779c675c1413050..f7b81a44e9e2b685860b7269425c2630911b817b 100644 (file)
@@ -54,13 +54,11 @@ public class WriteParentReadChildTest extends AbstractDataServiceTest {
             .child(Node.class, NODE_KEY).toInstance();
 
     private static final InstanceIdentifier<Table> TABLE_INSTANCE_ID_BA = //
-    InstanceIdentifier.builder(NODE_INSTANCE_ID_BA) //
+            NODE_INSTANCE_ID_BA.builder() //
             .augmentation(FlowCapableNode.class).child(Table.class, TABLE_KEY).build();
 
     private static final InstanceIdentifier<? extends DataObject> FLOW_INSTANCE_ID_BA = //
-    InstanceIdentifier.builder(TABLE_INSTANCE_ID_BA) //
-            .child(Flow.class, FLOW_KEY) //
-            .toInstance();
+            TABLE_INSTANCE_ID_BA.child(Flow.class, FLOW_KEY);
     /**
      *
      * The scenario tests writing parent node, which also contains child items
@@ -103,11 +101,11 @@ public class WriteParentReadChildTest extends AbstractDataServiceTest {
         DataObject readedTable = baDataService.readConfigurationData(TABLE_INSTANCE_ID_BA);
         assertNotNull("Readed table should not be nul.", readedTable);
         assertTrue(readedTable instanceof Table);
-        
+
         DataObject readedFlow = baDataService.readConfigurationData(FLOW_INSTANCE_ID_BA);
         assertNotNull("Readed flow should not be null.",readedFlow);
         assertTrue(readedFlow instanceof Flow);
         assertEquals(flow, readedFlow);
 
     }
-}
\ No newline at end of file
+}
index 1661ff230d133fc1b2145070fd420fe98bc3dbbd..422b9ccee5c4cc9e1048d2812fe784d7a9a08075 100644 (file)
@@ -110,16 +110,14 @@ public class ChangeOriginatedInDomBrokerTest extends AbstractDataServiceTest {
     private static final TableKey TABLE_KEY_BA = new TableKey((short) 0);
 
     private static final InstanceIdentifier<Flow> FLOWS_PATH_BA = //
-    InstanceIdentifier.builder(NODE_INSTANCE_ID_BA) //
+            NODE_INSTANCE_ID_BA.builder() //
             .augmentation(FlowCapableNode.class) //
             .child(Table.class, TABLE_KEY_BA) //
             .child(Flow.class) //
             .toInstance();
 
     private static final InstanceIdentifier<Flow> FLOW_INSTANCE_ID_BA = //
-    InstanceIdentifier.builder(FLOWS_PATH_BA.firstIdentifierOf(Table.class)) //
-            .child(Flow.class, FLOW_KEY) //
-            .toInstance();
+    FLOWS_PATH_BA.firstIdentifierOf(Table.class).child(Flow.class, FLOW_KEY);
 
     @Test
     public void simpleModifyOperation() throws Exception {
index 63094ef3cb207ea1a99de3f1024f60b5b0a8781a..94570510ab0cd4d3c0fefe41ccd61e5670bf56d9 100644 (file)
@@ -61,8 +61,8 @@ public class CrossBrokerMountPointTest {
             .child(Node.class, NODE_KEY).toInstance();
     private static GroupKey GROUP_KEY = new GroupKey(new GroupId(0L));
 
-    private static final InstanceIdentifier<GroupStatistics> GROUP_STATISTICS_ID_BA = InstanceIdentifier
-            .builder(NODE_INSTANCE_ID_BA).augmentation(FlowCapableNode.class) //
+    private static final InstanceIdentifier<GroupStatistics> GROUP_STATISTICS_ID_BA = NODE_INSTANCE_ID_BA
+            .builder().augmentation(FlowCapableNode.class) //
             .child(Group.class, GROUP_KEY) //
             .augmentation(NodeGroupStatistics.class) //
             .child(GroupStatistics.class) //
index 0d20a07ad51a5a953ba98ba94d421bfe601e2e0a..70847aabea0bdeb3670352f2a44c17c8aca3b703 100644 (file)
       <groupId>org.opendaylight.controller</groupId>
       <artifactId>sal-binding-broker-impl</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.opendaylight.yangtools.thirdparty</groupId>
       <artifactId>antlr4-runtime-osgi-nohead</artifactId>
       <artifactId>xtend-lib-osgi</artifactId>
       <version>2.4.3</version>
     </dependency>
+    <dependency>
+      <groupId>org.openexi</groupId>
+      <artifactId>nagasena</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.openexi</groupId>
+      <artifactId>nagasena-rta</artifactId>
+    </dependency>
     <dependency>
       <groupId>org.ops4j.pax.exam</groupId>
       <artifactId>pax-exam</artifactId>
index 166216b226b9c0e26a36718b980bee27efdd8da4..734733a19cdde4179a776a3c20c181dc0b3ea6f3 100644 (file)
@@ -68,8 +68,8 @@ public class TestHelper {
 
                 mavenBundle(CONTROLLER, "netconf-client").versionAsInProject(), //
                 mavenBundle(CONTROLLER, "netconf-util").versionAsInProject(), //
-                mavenBundle(CONTROLLER + ".thirdparty", "nagasena").versionAsInProject(), //
-                mavenBundle(CONTROLLER + ".thirdparty", "nagasena-rta").versionAsInProject(), //
+                mavenBundle("org.openexi", "nagasena").versionAsInProject(), //
+                mavenBundle("org.openexi", "nagasena-rta").versionAsInProject(), //
                 mavenBundle(CONTROLLER + ".thirdparty", "ganymed").versionAsInProject(), //
                 mavenBundle(CONTROLLER, "netconf-mapping-api").versionAsInProject(), //
 
index 3d78f948615d2849862e0fee0c14bb3d028ca0b5..b2f89cf779c0f2363a98366b58075f15c8f1d898 100644 (file)
@@ -70,8 +70,8 @@ public abstract class AbstractTest {
                 mavenBundle("org.slf4j", "log4j-over-slf4j").versionAsInProject(), //
                 mavenBundle("ch.qos.logback", "logback-core").versionAsInProject(), //
                 mavenBundle("ch.qos.logback", "logback-classic").versionAsInProject(),
-                mavenBundle("org.opendaylight.controller.thirdparty", "nagasena").versionAsInProject(),
-                mavenBundle("org.opendaylight.controller.thirdparty", "nagasena-rta").versionAsInProject(),
+                mavenBundle("org.openexi", "nagasena").versionAsInProject(),
+                mavenBundle("org.openexi", "nagasena-rta").versionAsInProject(),
                  //
                 systemProperty("osgi.bundles.defaultStartLevel").value("4"),
                 systemPackages("sun.nio.ch"),
@@ -16,6 +16,7 @@ import java.util.Collection;
 import java.util.List;
 
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ConsumerContext;
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
@@ -36,7 +37,8 @@ import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.NotificationListener;
 import org.opendaylight.yangtools.yang.binding.RpcService;
 
-public class NoficationTest extends AbstractTest {
+@Ignore
+public class NotificationTest extends AbstractTest {
 
     private final FlowListener listener1 = new FlowListener();
     private final FlowListener listener2 = new FlowListener();
index 08d22b96d67bcee2331ca6512904154cc11b6868..37ef257224d30ad749a6030557fab85f7fb734c6 100644 (file)
                                 </provider>
                             </instance>
                         </service>
+
                         <service>
                             <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">
                                 binding:binding-broker-osgi-registry
                                 </provider>
                             </instance>
                         </service>
+                        <service>
+                            <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-rpc-registry</type>
+                            <instance>
+                                <name>binding-rpc-broker</name>
+                                <provider>/modules/module[type='binding-broker-impl'][name='binding-broker-impl']</provider>
+                            </instance>
+                        </service>
                         <service>
                             <type xmlns:binding-impl="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl">
                                 binding-impl:binding-dom-mapping-service
index 5200c90561ecdb464060e0ba112a687de065c9ec..6ce7b5a5c7f990360ff1d5cb3d01e63989fc42da 100644 (file)
@@ -15,4 +15,6 @@ public interface RoutedRegistration<C, P extends Path<P>, S> extends Registratio
     void registerPath(C context, P path);
     void unregisterPath(C context, P path);
 
+    @Override
+    void close();
 }
index 82ce44c5e994835ff5e484c951639defca407227..d8bde3d41a623178e1e202b6ba1bc67aa7b49525 100644 (file)
@@ -14,14 +14,12 @@ import java.util.HashSet;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
-import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Future;
 import java.util.concurrent.atomic.AtomicLong;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
 
-import org.eclipse.xtext.xbase.lib.Exceptions;
 import org.opendaylight.controller.md.sal.common.api.RegistrationListener;
 import org.opendaylight.controller.md.sal.common.api.TransactionStatus;
 import org.opendaylight.controller.md.sal.common.api.data.DataChangeEvent;
@@ -46,6 +44,7 @@ import org.slf4j.LoggerFactory;
 import com.google.common.base.Function;
 import com.google.common.base.Preconditions;
 import com.google.common.base.Predicate;
+import com.google.common.base.Supplier;
 import com.google.common.collect.FluentIterable;
 import com.google.common.collect.HashMultimap;
 import com.google.common.collect.ImmutableList;
@@ -120,9 +119,9 @@ public abstract class AbstractDataBroker<P extends Path<P>, D extends Object, DC
     }
 
     protected ImmutableList<DataCommitHandler<P, D>> affectedCommitHandlers(final Set<P> paths) {
-        final Callable<ImmutableList<DataCommitHandler<P, D>>> _function = new Callable<ImmutableList<DataCommitHandler<P, D>>>() {
+        final Supplier<ImmutableList<DataCommitHandler<P, D>>> _function = new Supplier<ImmutableList<DataCommitHandler<P, D>>>() {
             @Override
-            public ImmutableList<DataCommitHandler<P, D>> call() throws Exception {
+            public ImmutableList<DataCommitHandler<P, D>> get() {
                 Map<P, Collection<DataCommitHandlerRegistrationImpl<P, D>>> _asMap = commitHandlers.asMap();
                 Set<Entry<P, Collection<DataCommitHandlerRegistrationImpl<P, D>>>> _entrySet = _asMap.entrySet();
                 FluentIterable<Entry<P, Collection<DataCommitHandlerRegistrationImpl<P, D>>>> _from = FluentIterable
@@ -163,9 +162,9 @@ public abstract class AbstractDataBroker<P extends Path<P>, D extends Object, DC
     }
 
     protected ImmutableList<DataCommitHandler<P, D>> probablyAffectedCommitHandlers(final HashSet<P> paths) {
-        final Callable<ImmutableList<DataCommitHandler<P, D>>> _function = new Callable<ImmutableList<DataCommitHandler<P, D>>>() {
+        final Supplier<ImmutableList<DataCommitHandler<P, D>>> _function = new Supplier<ImmutableList<DataCommitHandler<P, D>>>() {
             @Override
-            public ImmutableList<DataCommitHandler<P, D>> call() throws Exception {
+            public ImmutableList<DataCommitHandler<P, D>> get() {
                 Map<P, Collection<DataCommitHandlerRegistrationImpl<P, D>>> _asMap = commitHandlers.asMap();
                 Set<Entry<P, Collection<DataCommitHandlerRegistrationImpl<P, D>>>> _entrySet = _asMap.entrySet();
                 FluentIterable<Entry<P, Collection<DataCommitHandlerRegistrationImpl<P, D>>>> _from = FluentIterable
@@ -221,12 +220,10 @@ public abstract class AbstractDataBroker<P extends Path<P>, D extends Object, DC
         return _dataReadRouter.readOperationalData(path);
     }
 
-    private static <T extends Object> T withLock(final Lock lock, final Callable<T> method) {
+    private static <T extends Object> T withLock(final Lock lock, final Supplier<T> method) {
         lock.lock();
         try {
-            return method.call();
-        } catch (Exception e) {
-            throw Exceptions.sneakyThrow(e);
+            return method.get();
         } finally {
             lock.unlock();
         }
index a91799d45823a2e2a6c8f90e69cd0931df18584d..19235d2ddfe56bac11b05cfe2bc9d36fee271bde 100644 (file)
@@ -11,6 +11,7 @@ import com.google.common.base.Predicate;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
 
 public final class ImmutableDataChangeEvent<P extends Path<P>, D> implements DataChangeEvent<P,D> {
 
@@ -127,6 +128,8 @@ public final class ImmutableDataChangeEvent<P extends Path<P>, D> implements Dat
             originalOperational.putAll(Maps.filterKeys(data.getOriginalOperationalData(), keyFilter));
             createdOperational.putAll(Maps.filterKeys(data.getCreatedOperationalData(), keyFilter));
             createdConfiguration.putAll(Maps.filterKeys(data.getCreatedConfigurationData(), keyFilter));
+            removedOperational.addAll(Sets.filter(data.getRemovedOperationalData(), keyFilter));
+            removedConfiguration.addAll(Sets.filter(data.getRemovedConfigurationData(), keyFilter));
             return this;
         }
 
index a7952ac824d3f595fa08ead9f307ccd31fff2736..375376f383aa8beedcc8dccba4d1c37aeec0c788 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 org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
index 3dfca40b4045d435cb79e909a7be0c9b77cec248..af479743aa12a824a0e7610e057b7bbdd299e448 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 java.util.Collections;
index 9961fcce8d25e00e42128928062485efcd5db731..11028dc842404fcc13298edff4ec72ff8be280f7 100644 (file)
@@ -16,7 +16,6 @@ import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 
 import com.google.common.base.Optional;
-import com.google.common.primitives.UnsignedLong;
 
 class DataAndMetadataSnapshot {
 
@@ -39,22 +38,14 @@ class DataAndMetadataSnapshot {
 
     public static DataAndMetadataSnapshot createEmpty(final NodeIdentifier rootNode) {
         NormalizedNode<?, ?> data = Builders.containerBuilder().withNodeIdentifier(rootNode).build();
-        StoreMetadataNode metadata = StoreMetadataNode.builder()
-                .setNodeVersion(UnsignedLong.ZERO)
-                .setSubtreeVersion(UnsignedLong.ZERO)
-                .setData(data)
-                .build();
+        StoreMetadataNode metadata = StoreMetadataNode.createEmpty(data);
         return new DataAndMetadataSnapshot(metadata,Optional.<SchemaContext>absent());
     }
 
     public static DataAndMetadataSnapshot createEmpty(final SchemaContext ctx) {
         NodeIdentifier rootNodeIdentifier = new NodeIdentifier(ctx.getQName());
         NormalizedNode<?, ?> data = Builders.containerBuilder().withNodeIdentifier(rootNodeIdentifier).build();
-        StoreMetadataNode metadata = StoreMetadataNode.builder()
-                .setData(data)
-                .setNodeVersion(UnsignedLong.ZERO)
-                .setSubtreeVersion(UnsignedLong.ZERO)
-                .build();
+        StoreMetadataNode metadata = StoreMetadataNode.createEmpty(data);
         return new DataAndMetadataSnapshot(metadata, Optional.of(ctx));
     }
 
index d3a892a2cd64cfedfa359d7334e952307efe61de..d8f024017ffa6a39fd2f2b8a0febce04414e9eb7 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 org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope;
@@ -6,17 +13,11 @@ import org.opendaylight.yangtools.concepts.ListenerRegistration;
 import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 
-public interface DataChangeListenerRegistration<L extends AsyncDataChangeListener<InstanceIdentifier, NormalizedNode<?, ?>>>
-extends ListenerRegistration<L> {
-
-
+public interface DataChangeListenerRegistration<L extends AsyncDataChangeListener<InstanceIdentifier, NormalizedNode<?, ?>>> extends ListenerRegistration<L> {
     @Override
-    public L getInstance();
+    L getInstance();
 
     InstanceIdentifier getPath();
 
     DataChangeScope getScope();
-
-
-
 }
diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/DataPreconditionFailedException.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/DataPreconditionFailedException.java
new file mode 100644 (file)
index 0000000..6baf764
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * 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 org.opendaylight.yangtools.yang.data.api.InstanceIdentifier;
+
+public class DataPreconditionFailedException extends Exception {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 596430355175413427L;
+    private final InstanceIdentifier path;
+
+    public DataPreconditionFailedException(final InstanceIdentifier path) {
+        this.path = path;
+    }
+
+    public DataPreconditionFailedException(final InstanceIdentifier path,final String message) {
+        super(message);
+        this.path = path;
+    }
+
+
+    public DataPreconditionFailedException(final InstanceIdentifier path,final Throwable cause) {
+        super(cause);
+        this.path = path;
+    }
+
+    public DataPreconditionFailedException(final InstanceIdentifier path,final String message, final Throwable cause) {
+        super(message, cause);
+        this.path = path;
+    }
+
+    public DataPreconditionFailedException(final InstanceIdentifier path,final String message, final Throwable cause, final boolean enableSuppression,
+            final boolean writableStackTrace) {
+        super(message, cause, enableSuppression, writableStackTrace);
+        this.path = path;
+    }
+
+    public InstanceIdentifier getPath() {
+        return path;
+    }
+
+}
index 9bbba1e24d8600f196f23df145105d1b787e9c6e..005e3b772dc1259356e11d6722cd1744963f23d1 100644 (file)
@@ -54,7 +54,6 @@ public class InMemoryDOMDataStore implements DOMStore, Identifiable<String>, Sch
     private static final Logger LOG = LoggerFactory.getLogger(InMemoryDOMDataStore.class);
     private static final InstanceIdentifier PUBLIC_ROOT_PATH = InstanceIdentifier.builder().build();
 
-
     private final ListeningExecutorService executor;
     private final String name;
     private final AtomicLong txCounter = new AtomicLong(0);
@@ -90,7 +89,7 @@ public class InMemoryDOMDataStore implements DOMStore, Identifiable<String>, Sch
 
     @Override
     public DOMStoreWriteTransaction newWriteOnlyTransaction() {
-        return new SnaphostBackedWriteTransaction(nextIdentifier(), snapshot.get(), this, operationTree);
+        return new SnapshotBackedWriteTransaction(nextIdentifier(), snapshot.get(), this, operationTree);
     }
 
     @Override
@@ -104,15 +103,15 @@ public class InMemoryDOMDataStore implements DOMStore, Identifiable<String>, Sch
             final InstanceIdentifier path, final L listener, final DataChangeScope scope) {
 
         /*
-         * Make sure commit is not occurring right now. Listener has to be registered and its
-         * state capture enqueued at a consistent point.
+         * Make sure commit is not occurring right now. Listener has to be
+         * registered and its state capture enqueued at a consistent point.
          *
-         * FIXME: improve this to read-write lock, such that multiple listener registrations
-         *        can occur simultaneously
+         * FIXME: improve this to read-write lock, such that multiple listener
+         * registrations can occur simultaneously
          */
         final DataChangeListenerRegistration<L> reg;
         synchronized (this) {
-            LOG.debug("{}: Registering data change listener {} for {}",name,listener,path);
+            LOG.debug("{}: Registering data change listener {} for {}", name, listener, path);
 
             reg = listenerTree.registerDataChangeListener(path, listener, scope);
 
@@ -138,9 +137,8 @@ public class InMemoryDOMDataStore implements DOMStore, Identifiable<String>, Sch
         };
     }
 
-    private synchronized DOMStoreThreePhaseCommitCohort submit(
-            final SnaphostBackedWriteTransaction writeTx) {
-        LOG.debug("Tx: {} is submitted. Modifications: {}",writeTx.getIdentifier(),writeTx.getMutatedView());
+    private synchronized DOMStoreThreePhaseCommitCohort submit(final SnapshotBackedWriteTransaction writeTx) {
+        LOG.debug("Tx: {} is submitted. Modifications: {}", writeTx.getIdentifier(), writeTx.getMutatedView());
         return new ThreePhaseCommitImpl(writeTx);
     }
 
@@ -148,12 +146,13 @@ public class InMemoryDOMDataStore implements DOMStore, Identifiable<String>, Sch
         return name + "-" + txCounter.getAndIncrement();
     }
 
-    private void commit(final DataAndMetadataSnapshot currentSnapshot,
-            final StoreMetadataNode newDataTree, final ResolveDataChangeEventsTask listenerResolver) {
-        LOG.debug("Updating Store snaphot version: {} with version:{}",currentSnapshot.getMetadataTree().getSubtreeVersion(),newDataTree.getSubtreeVersion());
+    private void commit(final DataAndMetadataSnapshot currentSnapshot, final StoreMetadataNode newDataTree,
+            final ResolveDataChangeEventsTask listenerResolver) {
+        LOG.debug("Updating Store snaphot version: {} with version:{}", currentSnapshot.getMetadataTree()
+                .getSubtreeVersion(), newDataTree.getSubtreeVersion());
 
-        if(LOG.isTraceEnabled()) {
-            LOG.trace("Data Tree is {}",StoreUtils.toStringTree(newDataTree));
+        if (LOG.isTraceEnabled()) {
+            LOG.trace("Data Tree is {}", StoreUtils.toStringTree(newDataTree));
         }
 
         final DataAndMetadataSnapshot newSnapshot = DataAndMetadataSnapshot.builder() //
@@ -162,14 +161,15 @@ public class InMemoryDOMDataStore implements DOMStore, Identifiable<String>, Sch
                 .build();
 
         /*
-         * The commit has to occur atomically with regard to listener registrations.
+         * The commit has to occur atomically with regard to listener
+         * registrations.
          */
         synchronized (this) {
             final boolean success = snapshot.compareAndSet(currentSnapshot, newSnapshot);
             checkState(success, "Store snapshot and transaction snapshot differ. This should never happen.");
 
             for (ChangeListenerNotifyTask task : listenerResolver.call()) {
-                LOG.trace("Scheduling invocation of listeners: {}",task);
+                LOG.trace("Scheduling invocation of listeners: {}", task);
                 executor.submit(task);
             }
         }
@@ -195,7 +195,8 @@ public class InMemoryDOMDataStore implements DOMStore, Identifiable<String>, Sch
         /**
          * Add class-specific toString attributes.
          *
-         * @param toStringHelper ToStringHelper instance
+         * @param toStringHelper
+         *            ToStringHelper instance
          * @return ToStringHelper instance which was passed in
          */
         protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) {
@@ -203,13 +204,15 @@ public class InMemoryDOMDataStore implements DOMStore, Identifiable<String>, Sch
         }
     }
 
-    private static class SnapshotBackedReadTransaction extends AbstractDOMStoreTransaction implements DOMStoreReadTransaction {
+    private static class SnapshotBackedReadTransaction extends AbstractDOMStoreTransaction implements
+            DOMStoreReadTransaction {
         private DataAndMetadataSnapshot stableSnapshot;
 
         public SnapshotBackedReadTransaction(final Object identifier, final DataAndMetadataSnapshot snapshot) {
             super(identifier);
             this.stableSnapshot = Preconditions.checkNotNull(snapshot);
-            LOG.debug("ReadOnly Tx: {} allocated with snapshot {}", identifier, snapshot.getMetadataTree().getSubtreeVersion());
+            LOG.debug("ReadOnly Tx: {} allocated with snapshot {}", identifier, snapshot.getMetadataTree()
+                    .getSubtreeVersion());
         }
 
         @Override
@@ -226,17 +229,19 @@ public class InMemoryDOMDataStore implements DOMStore, Identifiable<String>, Sch
         }
     }
 
-    private static class SnaphostBackedWriteTransaction extends AbstractDOMStoreTransaction implements DOMStoreWriteTransaction {
+    private static class SnapshotBackedWriteTransaction extends AbstractDOMStoreTransaction implements
+            DOMStoreWriteTransaction {
         private MutableDataTree mutableTree;
         private InMemoryDOMDataStore store;
         private boolean ready = false;
 
-        public SnaphostBackedWriteTransaction(final Object identifier, final DataAndMetadataSnapshot snapshot,
+        public SnapshotBackedWriteTransaction(final Object identifier, final DataAndMetadataSnapshot snapshot,
                 final InMemoryDOMDataStore store, final ModificationApplyOperation applyOper) {
             super(identifier);
             mutableTree = MutableDataTree.from(snapshot, applyOper);
             this.store = store;
-            LOG.debug("Write Tx: {} allocated with snapshot {}",identifier,snapshot.getMetadataTree().getSubtreeVersion());
+            LOG.debug("Write Tx: {} allocated with snapshot {}", identifier, snapshot.getMetadataTree()
+                    .getSubtreeVersion());
         }
 
         @Override
@@ -250,11 +255,11 @@ public class InMemoryDOMDataStore implements DOMStore, Identifiable<String>, Sch
         public void write(final InstanceIdentifier path, final NormalizedNode<?, ?> data) {
             checkNotReady();
             try {
-                LOG.trace("Tx: {} Write: {}:{}",getIdentifier(),path,data);
+                LOG.trace("Tx: {} Write: {}:{}", getIdentifier(), path, data);
                 mutableTree.write(path, data);
-              // FIXME: Add checked exception
+                // FIXME: Add checked exception
             } catch (Exception e) {
-                LOG.error("Tx: {}, failed to write {}:{} in {}",getIdentifier(),path,data,mutableTree,e);
+                LOG.error("Tx: {}, failed to write {}:{} in {}", getIdentifier(), path, data, mutableTree, e);
             }
         }
 
@@ -262,11 +267,11 @@ public class InMemoryDOMDataStore implements DOMStore, Identifiable<String>, Sch
         public void merge(final InstanceIdentifier path, final NormalizedNode<?, ?> data) {
             checkNotReady();
             try {
-                LOG.trace("Tx: {} Merge: {}:{}",getIdentifier(),path,data);
+                LOG.trace("Tx: {} Merge: {}:{}", getIdentifier(), path, data);
                 mutableTree.merge(path, data);
-              // FIXME: Add checked exception
+                // FIXME: Add checked exception
             } catch (Exception e) {
-                LOG.error("Tx: {}, failed to write {}:{} in {}",getIdentifier(),path,data,mutableTree,e);
+                LOG.error("Tx: {}, failed to write {}:{} in {}", getIdentifier(), path, data, mutableTree, e);
             }
         }
 
@@ -274,11 +279,11 @@ public class InMemoryDOMDataStore implements DOMStore, Identifiable<String>, Sch
         public void delete(final InstanceIdentifier path) {
             checkNotReady();
             try {
-                LOG.trace("Tx: {} Delete: {}",getIdentifier(),path);
+                LOG.trace("Tx: {} Delete: {}", getIdentifier(), path);
                 mutableTree.delete(path);
-             // FIXME: Add checked exception
+                // FIXME: Add checked exception
             } catch (Exception e) {
-                LOG.error("Tx: {}, failed to delete {} in {}",getIdentifier(),path,mutableTree,e);
+                LOG.error("Tx: {}, failed to delete {} in {}", getIdentifier(), path, mutableTree, e);
             }
         }
 
@@ -310,7 +315,7 @@ public class InMemoryDOMDataStore implements DOMStore, Identifiable<String>, Sch
         }
     }
 
-    private static class SnapshotBackedReadWriteTransaction extends SnaphostBackedWriteTransaction implements
+    private static class SnapshotBackedReadWriteTransaction extends SnapshotBackedWriteTransaction implements
             DOMStoreReadWriteTransaction {
 
         protected SnapshotBackedReadWriteTransaction(final Object identifier, final DataAndMetadataSnapshot snapshot,
@@ -320,11 +325,11 @@ public class InMemoryDOMDataStore implements DOMStore, Identifiable<String>, Sch
 
         @Override
         public ListenableFuture<Optional<NormalizedNode<?, ?>>> read(final InstanceIdentifier path) {
-            LOG.trace("Tx: {} Read: {}",getIdentifier(),path);
+            LOG.trace("Tx: {} Read: {}", getIdentifier(), path);
             try {
                 return Futures.immediateFuture(getMutatedView().read(path));
             } catch (Exception e) {
-                LOG.error("Tx: {} Failed Read of {}",getIdentifier(),path,e);
+                LOG.error("Tx: {} Failed Read of {}", getIdentifier(), path, e);
                 throw e;
             }
         }
@@ -332,14 +337,14 @@ public class InMemoryDOMDataStore implements DOMStore, Identifiable<String>, Sch
 
     private class ThreePhaseCommitImpl implements DOMStoreThreePhaseCommitCohort {
 
-        private final SnaphostBackedWriteTransaction transaction;
+        private final SnapshotBackedWriteTransaction transaction;
         private final NodeModification modification;
 
         private DataAndMetadataSnapshot storeSnapshot;
         private Optional<StoreMetadataNode> proposedSubtree;
         private ResolveDataChangeEventsTask listenerResolver;
 
-        public ThreePhaseCommitImpl(final SnaphostBackedWriteTransaction writeTransaction) {
+        public ThreePhaseCommitImpl(final SnapshotBackedWriteTransaction writeTransaction) {
             this.transaction = writeTransaction;
             this.modification = transaction.getMutatedView().getRootModification();
         }
@@ -353,9 +358,16 @@ public class InMemoryDOMDataStore implements DOMStore, Identifiable<String>, Sch
 
                 @Override
                 public Boolean call() throws Exception {
-                    boolean applicable = snapshotOperation.isApplicable(modification,
+                    Boolean applicable = false;
+                    try {
+                        snapshotOperation.checkApplicable(PUBLIC_ROOT_PATH, modification,
                             Optional.of(snapshotCapture.getMetadataTree()));
-                    LOG.debug("Store Transcation: {} : canCommit : {}", transaction.getIdentifier(), applicable);
+                        applicable = true;
+                    } catch (DataPreconditionFailedException e) {
+                        LOG.warn("Store Tx: {} Data Precondition failed for {}.",transaction.getIdentifier(),e.getPath(),e);
+                        applicable = false;
+                    }
+                    LOG.debug("Store Transaction: {} : canCommit : {}", transaction.getIdentifier(), applicable);
                     return applicable;
                 }
             });
@@ -364,13 +376,11 @@ public class InMemoryDOMDataStore implements DOMStore, Identifiable<String>, Sch
         @Override
         public ListenableFuture<Void> preCommit() {
             storeSnapshot = snapshot.get();
-            if(modification.getModificationType() == ModificationType.UNMODIFIED) {
+            if (modification.getModificationType() == ModificationType.UNMODIFIED) {
                 return Futures.immediateFuture(null);
             }
             return executor.submit(new Callable<Void>() {
 
-
-
                 @Override
                 public Void call() throws Exception {
                     StoreMetadataNode metadataTree = storeSnapshot.getMetadataTree();
@@ -399,14 +409,14 @@ public class InMemoryDOMDataStore implements DOMStore, Identifiable<String>, Sch
 
         @Override
         public ListenableFuture<Void> commit() {
-            if(modification.getModificationType() == ModificationType.UNMODIFIED) {
+            if (modification.getModificationType() == ModificationType.UNMODIFIED) {
                 return Futures.immediateFuture(null);
             }
 
-            checkState(proposedSubtree != null,"Proposed subtree must be computed");
-            checkState(storeSnapshot != null,"Proposed subtree must be computed");
+            checkState(proposedSubtree != null, "Proposed subtree must be computed");
+            checkState(storeSnapshot != null, "Proposed subtree must be computed");
             // return ImmediateFuture<>;
-            InMemoryDOMDataStore.this.commit(storeSnapshot, proposedSubtree.get(),listenerResolver);
+            InMemoryDOMDataStore.this.commit(storeSnapshot, proposedSubtree.get(), listenerResolver);
             return Futures.<Void> immediateFuture(null);
         }
 
@@ -421,7 +431,7 @@ public class InMemoryDOMDataStore implements DOMStore, Identifiable<String>, Sch
         }
 
         @Override
-        public boolean isApplicable(final NodeModification modification, final Optional<StoreMetadataNode> storeMetadata) {
+        public void checkApplicable(final InstanceIdentifier path,final NodeModification modification, final Optional<StoreMetadataNode> storeMetadata) {
             throw new IllegalStateException("Schema Context is not available.");
         }
 
index d02f1109d754680efe8afe0e053b179394a87d60..361be6800c41d22a4b02f9ed9441c1018b126c98 100644 (file)
@@ -10,6 +10,7 @@ package org.opendaylight.controller.md.sal.dom.store.impl;
 import org.opendaylight.controller.md.sal.dom.store.impl.tree.NodeModification;
 import org.opendaylight.controller.md.sal.dom.store.impl.tree.StoreMetadataNode;
 import org.opendaylight.controller.md.sal.dom.store.impl.tree.StoreTreeNode;
+import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.PathArgument;
 
 import com.google.common.base.Optional;
@@ -59,17 +60,6 @@ public interface ModificationApplyOperation extends StoreTreeNode<ModificationAp
      */
     Optional<StoreMetadataNode> apply(NodeModification modification, Optional<StoreMetadataNode> storeMeta, UnsignedLong subtreeVersion);
 
-    /**
-     *
-     * Checks if provided node modification could be applied to current metadata node.
-     *
-     * @param modification Modification
-     * @param current Metadata Node to which modification should be applied
-     * @return true if modification is applicable
-     *         false if modification is no applicable
-     */
-    boolean isApplicable(NodeModification modification, Optional<StoreMetadataNode> current);
-
     /**
      *
      * Performs structural verification of NodeModification, such as writen values / types
@@ -87,8 +77,17 @@ public interface ModificationApplyOperation extends StoreTreeNode<ModificationAp
      *    if suboperation is not supported for specified tree node.
      */
     @Override
-    public Optional<ModificationApplyOperation> getChild(PathArgument child);
-
-
+    Optional<ModificationApplyOperation> getChild(PathArgument child);
 
+    /**
+    *
+    * Checks if provided node modification could be applied to current metadata node.
+    *
+    * @param modification Modification
+    * @param current Metadata Node to which modification should be applied
+    * @return true if modification is applicable
+    *         false if modification is no applicable
+     * @throws DataPreconditionFailedException
+    */
+    void checkApplicable(InstanceIdentifier path, NodeModification modification, Optional<StoreMetadataNode> current) throws DataPreconditionFailedException;
 }
index 35864b6bc29cfeed97f35690f5548b5bb2c9ad48..780291e70f3b1399be48648a8d2a451a8608a134 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 org.opendaylight.controller.md.sal.dom.store.impl.tree.NodeModification;
@@ -38,10 +45,6 @@ public class OperationWithModification {
         return applyOperation;
     }
 
-    public boolean isApplicable(final Optional<StoreMetadataNode> data) {
-        return applyOperation.isApplicable(modification, data);
-    }
-
     public Optional<StoreMetadataNode> apply(final Optional<StoreMetadataNode> data, final UnsignedLong subtreeVersion) {
         return applyOperation.apply(modification, data, subtreeVersion);
     }
@@ -63,4 +66,4 @@ public class OperationWithModification {
         Optional<ModificationApplyOperation> childOp = applyOperation.getChild(childId);
         return from(childOp.get(),childMod);
     }
-}
\ No newline at end of file
+}
index c62c27dea8908f8043b05561685b7db5ac555adc..44d50166af21df772f478d057fa479d879e0b829 100644 (file)
@@ -327,12 +327,12 @@ public class ResolveDataChangeEventsTask implements Callable<Iterable<ChangeList
             final Collection<Node> listeners, final NormalizedNode<?, ?> beforeData,
             final NormalizedNode<?, ?> afterData) {
 
-        if (beforeData instanceof NormalizedNodeContainer<?, ?, ?> && !listeners.isEmpty()) {
+        if (beforeData instanceof NormalizedNodeContainer<?, ?, ?>) {
             // Node is container (contains child) and we have interested
             // listeners registered for it, that means we need to do
             // resolution of changes on children level and can not
             // shortcut resolution.
-
+            LOG.trace("Resolving subtree replace event for {} before {}, after {}",path,beforeData,afterData);
             @SuppressWarnings("unchecked")
             NormalizedNodeContainer<?, PathArgument, NormalizedNode<PathArgument, ?>> beforeCont = (NormalizedNodeContainer<?, PathArgument, NormalizedNode<PathArgument, ?>>) beforeData;
             @SuppressWarnings("unchecked")
@@ -342,7 +342,7 @@ public class ResolveDataChangeEventsTask implements Callable<Iterable<ChangeList
             // Node is either of Leaf type (does not contain child nodes)
             // or we do not have listeners, so normal equals method is
             // sufficient for determining change.
-
+            LOG.trace("Resolving leaf replace event for {} , before {}, after {}",path,beforeData,afterData);
             DOMImmutableDataChangeEvent event = builder(DataChangeScope.BASE).setBefore(beforeData).setAfter(afterData)
                     .addUpdated(path, beforeData, afterData).build();
             addPartialTask(listeners, event);
@@ -394,7 +394,8 @@ public class ResolveDataChangeEventsTask implements Callable<Iterable<ChangeList
 
         Builder eventBuilder = builder(potentialScope) //
                 .setBefore(beforeCont) //
-                .setAfter(afterCont);
+                .setAfter(afterCont)
+                .addUpdated(path, beforeCont, afterCont);
         for (DOMImmutableDataChangeEvent childChange : childChanges) {
             eventBuilder.merge(childChange);
         }
@@ -446,28 +447,37 @@ public class ResolveDataChangeEventsTask implements Callable<Iterable<ChangeList
     private DOMImmutableDataChangeEvent resolveSameEventRecursivelly(final InstanceIdentifier path,
             final Collection<Node> listeners, final NormalizedNode<PathArgument, ?> node,
             final SimpleEventFactory eventFactory) {
+        final DOMImmutableDataChangeEvent event = eventFactory.create(path, node);
+        DOMImmutableDataChangeEvent propagateEvent = event;
+        // We have listeners for this node or it's children, so we will try
+            // to do additional processing
+        if (node instanceof NormalizedNodeContainer<?, ?, ?>) {
+            LOG.trace("Resolving subtree recursive event for {}, type {}", path, eventFactory);
 
-        DOMImmutableDataChangeEvent event = eventFactory.create(path, node);
+            Builder eventBuilder = builder(DataChangeScope.BASE);
+            eventBuilder.merge(event);
+            eventBuilder.setBefore(event.getOriginalSubtree());
+            eventBuilder.setAfter(event.getUpdatedSubtree());
 
-        if (!listeners.isEmpty()) {
-            // We have listeners for this node or it's children, so we will try
-            // to do additional processing
-            if (node instanceof NormalizedNodeContainer<?, ?, ?>) {
-                // Node has children, so we will try to resolve it's children
-                // changes.
-                @SuppressWarnings("unchecked")
-                NormalizedNodeContainer<?, PathArgument, NormalizedNode<PathArgument, ?>> container = (NormalizedNodeContainer<?, PathArgument, NormalizedNode<PathArgument, ?>>) node;
-                for (NormalizedNode<PathArgument, ?> child : container.getValue()) {
-                    PathArgument childId = child.getIdentifier();
-                    Collection<Node> childListeners = getListenerChildrenWildcarded(listeners, childId);
-                    if (!childListeners.isEmpty()) {
-                        resolveSameEventRecursivelly(append(path, childId), childListeners, child, eventFactory);
-                    }
-                }
+            // Node has children, so we will try to resolve it's children
+            // changes.
+            @SuppressWarnings("unchecked")
+            NormalizedNodeContainer<?, PathArgument, NormalizedNode<PathArgument, ?>> container = (NormalizedNodeContainer<?, PathArgument, NormalizedNode<PathArgument, ?>>) node;
+            for (NormalizedNode<PathArgument, ?> child : container.getValue()) {
+                PathArgument childId = child.getIdentifier();
+                LOG.trace("Resolving event for child {}", childId);
+                Collection<Node> childListeners = getListenerChildrenWildcarded(listeners, childId);
+                eventBuilder.merge(resolveSameEventRecursivelly(append(path, childId), childListeners, child, eventFactory));
             }
-            addPartialTask(listeners, event);
+            propagateEvent = eventBuilder.build();
+        } else {
+            // We do not dispatch leaf events since Binding Aware components do not support them.
+            propagateEvent = builder(DataChangeScope.BASE).build();
         }
-        return event;
+        if (!listeners.isEmpty()) {
+            addPartialTask(listeners, propagateEvent);
+        }
+        return propagateEvent;
     }
 
     private DOMImmutableDataChangeEvent resolveSubtreeChangeEvent(final InstanceIdentifier path,
@@ -476,7 +486,7 @@ public class ResolveDataChangeEventsTask implements Callable<Iterable<ChangeList
 
         Builder one = builder(DataChangeScope.ONE).setBefore(before.getData()).setAfter(after.getData());
 
-        Builder subtree = builder(DataChangeScope.SUBTREE);
+        Builder subtree = builder(DataChangeScope.SUBTREE).setBefore(before.getData()).setAfter(after.getData());
 
         for (NodeModification childMod : modification.getModifications()) {
             PathArgument childId = childMod.getIdentifier();
@@ -513,9 +523,9 @@ public class ResolveDataChangeEventsTask implements Callable<Iterable<ChangeList
 
     private DOMImmutableDataChangeEvent addPartialTask(final Collection<ListenerTree.Node> listeners,
             final DOMImmutableDataChangeEvent event) {
-
         for (ListenerTree.Node listenerNode : listeners) {
             if (!listenerNode.getListeners().isEmpty()) {
+                LOG.trace("Adding event {} for listeners {}",event,listenerNode);
                 events.put(listenerNode, event);
             }
         }
index a5c9b7983a92f93a9a2e2049688e0d33eaed1c8b..2af522ea861791fcae324f2f5761b258d93b8845 100644 (file)
@@ -1,7 +1,15 @@
+/*
+ * 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 com.google.common.base.Preconditions.checkArgument;
 
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -12,6 +20,7 @@ import org.opendaylight.controller.md.sal.dom.store.impl.tree.NodeModification;
 import org.opendaylight.controller.md.sal.dom.store.impl.tree.StoreMetadataNode;
 import org.opendaylight.controller.md.sal.dom.store.impl.tree.StoreNodeCompositeBuilder;
 import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.AugmentationIdentifier;
 import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.NodeIdentifier;
 import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.NodeIdentifierWithPredicates;
@@ -26,18 +35,21 @@ import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
 import org.opendaylight.yangtools.yang.data.api.schema.MapNode;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodeContainer;
+import org.opendaylight.yangtools.yang.data.api.schema.OrderedLeafSetNode;
 import org.opendaylight.yangtools.yang.data.api.schema.OrderedMapNode;
 import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListEntryNode;
-import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeContainerBuilder;
+import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableAugmentationNodeBuilder;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableChoiceNodeBuilder;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableContainerNodeBuilder;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableLeafSetNodeBuilder;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableMapEntryNodeBuilder;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableMapNodeBuilder;
+import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableOrderedLeafSetNodeBuilder;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableOrderedMapNodeBuilder;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableUnkeyedListEntryNodeBuilder;
+import org.opendaylight.yangtools.yang.data.impl.schema.transform.base.AugmentationSchemaProxy;
 import org.opendaylight.yangtools.yang.model.api.AugmentationSchema;
 import org.opendaylight.yangtools.yang.model.api.AugmentationTarget;
 import org.opendaylight.yangtools.yang.model.api.ChoiceCaseNode;
@@ -56,8 +68,6 @@ import com.google.common.cache.CacheBuilder;
 import com.google.common.cache.CacheLoader;
 import com.google.common.cache.LoadingCache;
 import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.ImmutableSet.Builder;
 import com.google.common.primitives.UnsignedLong;
 
 public abstract class SchemaAwareApplyOperation implements ModificationApplyOperation {
@@ -70,7 +80,7 @@ public abstract class SchemaAwareApplyOperation implements ModificationApplyOper
         } else if (schemaNode instanceof ChoiceNode) {
             return new ChoiceModificationStrategy((ChoiceNode) schemaNode);
         } else if (schemaNode instanceof LeafListSchemaNode) {
-            return new LeafSetEntryModificationStrategy((LeafListSchemaNode) schemaNode);
+            return fromLeafListSchemaNode((LeafListSchemaNode) schemaNode);
         } else if (schemaNode instanceof LeafSchemaNode) {
             return new LeafModificationStrategy((LeafSchemaNode) schemaNode);
         }
@@ -89,6 +99,15 @@ public abstract class SchemaAwareApplyOperation implements ModificationApplyOper
         return new UnorderedMapModificationStrategy(schemaNode);
     }
 
+    private static SchemaAwareApplyOperation fromLeafListSchemaNode(final LeafListSchemaNode schemaNode) {
+        if(schemaNode.isUserOrdered()) {
+            return new OrderedLeafSetModificationStrategy(schemaNode);
+        } else {
+            return new UnorderedLeafSetModificationStrategy(schemaNode);
+        }
+    }
+
+
     public static SchemaAwareApplyOperation from(final DataNodeContainer resolvedTree,
             final AugmentationTarget augSchemas, final AugmentationIdentifier identifier) {
         AugmentationSchema augSchema = null;
@@ -123,55 +142,52 @@ public abstract class SchemaAwareApplyOperation implements ModificationApplyOper
     protected abstract void verifyWritenStructure(NormalizedNode<?, ?> writenValue);
 
     @Override
-    public boolean isApplicable(final NodeModification modification, final Optional<StoreMetadataNode> current) {
+    public void checkApplicable(final InstanceIdentifier path,final NodeModification modification, final Optional<StoreMetadataNode> current) throws DataPreconditionFailedException {
         switch (modification.getModificationType()) {
         case DELETE:
-            return isDeleteApplicable(modification, current);
+            checkDeleteApplicable(modification, current);
         case SUBTREE_MODIFIED:
-            return isSubtreeModificationApplicable(modification, current);
+            checkSubtreeModificationApplicable(path,modification, current);
+            return;
         case WRITE:
-            return isWriteApplicable(modification, current);
+            checkWriteApplicable(path,modification, current);
+            return;
         case MERGE:
-            return isMergeApplicable(modification,current);
+            checkMergeApplicable(path,modification,current);
+            return;
         case UNMODIFIED:
-            return true;
+            return;
         default:
-            return false;
+            throw new UnsupportedOperationException("Suplied modification type "+modification.getModificationType()+ "is not supported.");
         }
+
     }
 
-    private boolean isMergeApplicable(final NodeModification modification, final Optional<StoreMetadataNode> current) {
+    protected void checkMergeApplicable(final InstanceIdentifier path,final NodeModification modification, final Optional<StoreMetadataNode> current) throws DataPreconditionFailedException {
         Optional<StoreMetadataNode> original = modification.getOriginal();
         if (original.isPresent() && current.isPresent()) {
-            return isNotConflicting(original.get(), current.get());
-        } else if (current.isPresent()) {
-            return true;
+            checkNotConflicting(path,original.get(), current.get());
         }
-        return true;
     }
 
-    protected boolean isWriteApplicable(final NodeModification modification, final Optional<StoreMetadataNode> current) {
+    protected void checkWriteApplicable(final InstanceIdentifier path,final NodeModification modification, final Optional<StoreMetadataNode> current) throws DataPreconditionFailedException {
         Optional<StoreMetadataNode> original = modification.getOriginal();
         if (original.isPresent() && current.isPresent()) {
-            return isNotConflicting(original.get(), current.get());
-        } else if (current.isPresent()) {
-            return false;
+            checkNotConflicting(path,original.get(), current.get());
+        } else if(original.isPresent()) {
+            throw new DataPreconditionFailedException(path,"Node was deleted by other transaction.");
         }
-        return true;
-
     }
 
-    protected final boolean isNotConflicting(final StoreMetadataNode original, final StoreMetadataNode current) {
-        return original.getNodeVersion().equals(current.getNodeVersion())
-                && original.getSubtreeVersion().equals(current.getSubtreeVersion());
+    protected static final void checkNotConflicting(final InstanceIdentifier path,final StoreMetadataNode original, final StoreMetadataNode current) throws DataPreconditionFailedException {
+        checkDataPrecondition(path, original.getNodeVersion().equals(current.getNodeVersion()),"Node was replaced by other transaction.");
+        checkDataPrecondition(path,original.getSubtreeVersion().equals(current.getSubtreeVersion()), "Node children was modified by other transaction");
     }
 
-    protected abstract boolean isSubtreeModificationApplicable(final NodeModification modification,
-            final Optional<StoreMetadataNode> current);
+    protected abstract void checkSubtreeModificationApplicable(InstanceIdentifier path,final NodeModification modification,
+            final Optional<StoreMetadataNode> current) throws DataPreconditionFailedException;
 
-    private boolean isDeleteApplicable(final NodeModification modification, final Optional<StoreMetadataNode> current) {
-        // FiXME: Add delete conflict detection.
-        return true;
+    private void checkDeleteApplicable(final NodeModification modification, final Optional<StoreMetadataNode> current) {
     }
 
     @Override
@@ -253,9 +269,9 @@ public abstract class SchemaAwareApplyOperation implements ModificationApplyOper
         }
 
         @Override
-        protected boolean isSubtreeModificationApplicable(final NodeModification modification,
-                final Optional<StoreMetadataNode> current) {
-            return false;
+        protected void checkSubtreeModificationApplicable(final InstanceIdentifier path,final NodeModification modification,
+                final Optional<StoreMetadataNode> current) throws DataPreconditionFailedException {
+            throw new DataPreconditionFailedException(path, "Subtree modification is not allowed.");
         }
 
     }
@@ -294,6 +310,14 @@ public abstract class SchemaAwareApplyOperation implements ModificationApplyOper
             }
         }
 
+        @Override
+        protected void checkWriteApplicable(final InstanceIdentifier path, final NodeModification modification,
+                final Optional<StoreMetadataNode> current) throws DataPreconditionFailedException {
+            // FIXME: Implement proper write check for replacement of node container
+            //        prerequisite is to have transaction chain available for clients
+            //        otherwise this will break chained writes to same node.
+        }
+
         @SuppressWarnings("rawtypes")
         @Override
         protected void verifyWritenStructure(final NormalizedNode<?, ?> writenValue) {
@@ -309,30 +333,28 @@ public abstract class SchemaAwareApplyOperation implements ModificationApplyOper
         @Override
         protected StoreMetadataNode applyWrite(final NodeModification modification,
                 final Optional<StoreMetadataNode> currentMeta, final UnsignedLong subtreeVersion) {
-            //
+
             NormalizedNode<?, ?> newValue = modification.getWritenValue();
 
-            UnsignedLong nodeVersion = subtreeVersion;
+            final UnsignedLong nodeVersion;
             if (currentMeta.isPresent()) {
                 nodeVersion = StoreUtils.increase(currentMeta.get().getNodeVersion());
+            } else {
+                nodeVersion = subtreeVersion;
             }
-            StoreMetadataNode newValueMeta = StoreMetadataNode.createRecursively(newValue, nodeVersion, nodeVersion);
 
+            final StoreMetadataNode newValueMeta = StoreMetadataNode.createRecursively(newValue, nodeVersion, nodeVersion);
             if (!modification.hasAdditionalModifications()) {
                 return newValueMeta;
             }
+
             @SuppressWarnings("rawtypes")
-            NormalizedNodeContainerBuilder dataBuilder = createBuilder(modification.getIdentifier());
+            NormalizedNodeContainerBuilder dataBuilder = createBuilder(newValue);
             StoreNodeCompositeBuilder builder = StoreNodeCompositeBuilder.from(dataBuilder) //
                     .setNodeVersion(nodeVersion) //
                     .setSubtreeVersion(subtreeVersion);
 
-            Set<PathArgument> processedPreexisting = applyPreexistingChildren(modification, newValueMeta.getChildren(),
-                    builder, nodeVersion);
-            applyNewChildren(modification, processedPreexisting, builder, nodeVersion);
-
-            return builder.build();
-
+            return mutateChildren(modification.getModifications(), newValueMeta, builder, nodeVersion);
         }
 
         @Override
@@ -345,75 +367,64 @@ public abstract class SchemaAwareApplyOperation implements ModificationApplyOper
         @Override
         public StoreMetadataNode applySubtreeChange(final NodeModification modification,
                 final StoreMetadataNode currentMeta, final UnsignedLong subtreeVersion) {
+            // Bump subtree version to its new target
+            final UnsignedLong updatedSubtreeVersion = StoreUtils.increase(currentMeta.getSubtreeVersion());
 
-            UnsignedLong updatedSubtreeVersion = StoreUtils.increase(currentMeta.getSubtreeVersion());
             @SuppressWarnings("rawtypes")
-            NormalizedNodeContainerBuilder dataBuilder = createBuilder(modification.getIdentifier());
-            StoreNodeCompositeBuilder builder = StoreNodeCompositeBuilder.from(dataBuilder)
+            NormalizedNodeContainerBuilder dataBuilder = createBuilder(currentMeta.getData());
+            StoreNodeCompositeBuilder builder = StoreNodeCompositeBuilder.from(dataBuilder, currentMeta)
                     .setIdentifier(modification.getIdentifier()).setNodeVersion(currentMeta.getNodeVersion())
                     .setSubtreeVersion(updatedSubtreeVersion);
-            // We process preexisting nodes
-            Set<PathArgument> processedPreexisting = applyPreexistingChildren(modification, currentMeta.getChildren(),
-                    builder, updatedSubtreeVersion);
-            applyNewChildren(modification, processedPreexisting, builder, updatedSubtreeVersion);
-            return builder.build();
+
+            return mutateChildren(modification.getModifications(), currentMeta, builder, updatedSubtreeVersion);
         }
 
-        private void applyNewChildren(final NodeModification modification, final Set<PathArgument> ignore,
-                final StoreNodeCompositeBuilder builder, final UnsignedLong subtreeVersion) {
-            for (NodeModification childModification : modification.getModifications()) {
-                PathArgument childIdentifier = childModification.getIdentifier();
-                // We skip allready processed modifications
-                if (ignore.contains(childIdentifier)) {
-                    continue;
-                }
+        private StoreMetadataNode mutateChildren(final Iterable<NodeModification> modifications, final StoreMetadataNode meta,
+                final StoreNodeCompositeBuilder builder, final UnsignedLong nodeVersion) {
 
-                builder.addIfPresent(resolveChildOperation(childIdentifier) //
-                        .apply(childModification, Optional.<StoreMetadataNode> absent(), subtreeVersion));
-            }
-        }
+            for (NodeModification mod : modifications) {
+                final PathArgument id = mod.getIdentifier();
+                final Optional<StoreMetadataNode> cm = meta.getChild(id);
 
-        private Set<PathArgument> applyPreexistingChildren(final NodeModification modification,
-                final Iterable<StoreMetadataNode> children, final StoreNodeCompositeBuilder nodeBuilder,
-                final UnsignedLong subtreeVersion) {
-            Builder<PathArgument> processedModifications = ImmutableSet.<PathArgument> builder();
-            for (StoreMetadataNode childMeta : children) {
-                PathArgument childIdentifier = childMeta.getIdentifier();
-                // We retrieve Child modification metadata
-                Optional<NodeModification> childModification = modification.getChild(childIdentifier);
-                // Node is modified
-                if (childModification.isPresent()) {
-                    processedModifications.add(childIdentifier);
-                    Optional<StoreMetadataNode> result = resolveChildOperation(childIdentifier) //
-                            .apply(childModification.get(), Optional.of(childMeta), subtreeVersion);
-                    nodeBuilder.addIfPresent(result);
+                Optional<StoreMetadataNode> result = resolveChildOperation(id).apply(mod, cm, nodeVersion);
+                if (result.isPresent()) {
+                    builder.add(result.get());
                 } else {
-                    // Child is unmodified - reuse existing metadata and data
-                    // snapshot
-                    nodeBuilder.add(childMeta);
+                    builder.remove(id);
                 }
             }
-            return processedModifications.build();
+
+            return builder.build();
         }
 
         @Override
-        protected boolean isSubtreeModificationApplicable(final NodeModification modification,
-                final Optional<StoreMetadataNode> current) {
-            if (false == current.isPresent()) {
-                return false;
-            }
-            boolean result = true;
+        protected void checkSubtreeModificationApplicable(final InstanceIdentifier path,final NodeModification modification,
+                final Optional<StoreMetadataNode> current) throws DataPreconditionFailedException {
+            checkDataPrecondition(path, current.isPresent(), "Node was deleted by other transaction.");
+            checkChildPreconditions(path,modification,current);
+
+        }
+
+        private void checkChildPreconditions(final InstanceIdentifier path, final NodeModification modification, final Optional<StoreMetadataNode> current) throws DataPreconditionFailedException {
             StoreMetadataNode currentMeta = current.get();
             for (NodeModification childMod : modification.getModifications()) {
                 PathArgument childId = childMod.getIdentifier();
                 Optional<StoreMetadataNode> childMeta = currentMeta.getChild(childId);
-                result &= resolveChildOperation(childId).isApplicable(childMod, childMeta);
+                InstanceIdentifier childPath = StoreUtils.append(path, childId);
+                resolveChildOperation(childId).checkApplicable(childPath,childMod, childMeta);
+            }
+        }
+
+        @Override
+        protected void checkMergeApplicable(final InstanceIdentifier path, final NodeModification modification,
+                final Optional<StoreMetadataNode> current) throws DataPreconditionFailedException {
+            if(current.isPresent()) {
+                checkChildPreconditions(path,modification,current);
             }
-            return result;
         }
 
         @SuppressWarnings("rawtypes")
-        protected abstract NormalizedNodeContainerBuilder createBuilder(PathArgument identifier);
+        protected abstract NormalizedNodeContainerBuilder createBuilder(NormalizedNode<?, ?> original);
     }
 
     public static abstract class DataNodeContainerModificationStrategy<T extends DataNodeContainer> extends
@@ -458,7 +469,7 @@ public abstract class SchemaAwareApplyOperation implements ModificationApplyOper
 
         @Override
         @SuppressWarnings("rawtypes")
-        protected abstract DataContainerNodeBuilder createBuilder(PathArgument identifier);
+        protected abstract DataContainerNodeBuilder createBuilder(NormalizedNode<?, ?> original);
 
         @Override
         public String toString() {
@@ -476,12 +487,10 @@ public abstract class SchemaAwareApplyOperation implements ModificationApplyOper
 
         @Override
         @SuppressWarnings("rawtypes")
-        protected DataContainerNodeBuilder createBuilder(final PathArgument identifier) {
-            // TODO Auto-generated method stub
-            checkArgument(identifier instanceof NodeIdentifier);
-            return ImmutableContainerNodeBuilder.create().withNodeIdentifier((NodeIdentifier) identifier);
+        protected DataContainerNodeBuilder createBuilder(final NormalizedNode<?, ?> original) {
+            checkArgument(original instanceof ContainerNode);
+            return ImmutableContainerNodeBuilder.create((ContainerNode) original);
         }
-
     }
 
     public static class UnkeyedListItemModificationStrategy extends
@@ -493,27 +502,25 @@ public abstract class SchemaAwareApplyOperation implements ModificationApplyOper
 
         @Override
         @SuppressWarnings("rawtypes")
-        protected DataContainerNodeBuilder createBuilder(final PathArgument identifier) {
-            checkArgument(identifier instanceof NodeIdentifier);
-            return ImmutableUnkeyedListEntryNodeBuilder.create().withNodeIdentifier((NodeIdentifier) identifier);
+        protected DataContainerNodeBuilder createBuilder(final NormalizedNode<?, ?> original) {
+            checkArgument(original instanceof UnkeyedListEntryNode);
+            return ImmutableUnkeyedListEntryNodeBuilder.create((UnkeyedListEntryNode) original);
         }
-
     }
 
     public static class AugmentationModificationStrategy extends
             DataNodeContainerModificationStrategy<AugmentationSchema> {
 
         protected AugmentationModificationStrategy(final AugmentationSchema schema, final DataNodeContainer resolved) {
-            super(schema, AugmentationNode.class);
-            // FIXME: Use resolved children instead of unresolved.
-
+            super(createAugmentProxy(schema,resolved), AugmentationNode.class);
         }
 
         @Override
-        protected DataContainerNodeBuilder createBuilder(final PathArgument identifier) {
-            return Builders.augmentationBuilder().withNodeIdentifier((AugmentationIdentifier) identifier);
+        @SuppressWarnings("rawtypes")
+        protected DataContainerNodeBuilder createBuilder(final NormalizedNode<?, ?> original) {
+            checkArgument(original instanceof AugmentationNode);
+            return ImmutableAugmentationNodeBuilder.create((AugmentationNode) original);
         }
-
     }
 
     public static class ChoiceModificationStrategy extends NormalizedNodeContainerModificationStrategy {
@@ -542,11 +549,10 @@ public abstract class SchemaAwareApplyOperation implements ModificationApplyOper
 
         @Override
         @SuppressWarnings("rawtypes")
-        protected DataContainerNodeBuilder createBuilder(final PathArgument identifier) {
-            checkArgument(identifier instanceof NodeIdentifier);
-            return ImmutableChoiceNodeBuilder.create().withNodeIdentifier((NodeIdentifier) identifier);
+        protected DataContainerNodeBuilder createBuilder(final NormalizedNode<?, ?> original) {
+            checkArgument(original instanceof org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode);
+            return ImmutableChoiceNodeBuilder.create((org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode) original);
         }
-
     }
 
     public static class ListEntryModificationStrategy extends DataNodeContainerModificationStrategy<ListSchemaNode> {
@@ -557,26 +563,27 @@ public abstract class SchemaAwareApplyOperation implements ModificationApplyOper
 
         @Override
         @SuppressWarnings("rawtypes")
-        protected final DataContainerNodeBuilder createBuilder(final PathArgument identifier) {
-            return ImmutableMapEntryNodeBuilder.create().withNodeIdentifier((NodeIdentifierWithPredicates) identifier);
+        protected final DataContainerNodeBuilder createBuilder(final NormalizedNode<?, ?> original) {
+            checkArgument(original instanceof MapEntryNode);
+            return ImmutableMapEntryNodeBuilder.create((MapEntryNode) original);
         }
-
     }
 
-    public static class LeafSetModificationStrategy extends NormalizedNodeContainerModificationStrategy {
+    public static class UnorderedLeafSetModificationStrategy extends NormalizedNodeContainerModificationStrategy {
 
         private final Optional<ModificationApplyOperation> entryStrategy;
 
         @SuppressWarnings({ "unchecked", "rawtypes" })
-        protected LeafSetModificationStrategy(final LeafListSchemaNode schema) {
+        protected UnorderedLeafSetModificationStrategy(final LeafListSchemaNode schema) {
             super((Class) LeafSetNode.class);
             entryStrategy = Optional.<ModificationApplyOperation> of(new LeafSetEntryModificationStrategy(schema));
         }
 
         @SuppressWarnings("rawtypes")
         @Override
-        protected NormalizedNodeContainerBuilder createBuilder(final PathArgument identifier) {
-            return ImmutableLeafSetNodeBuilder.create().withNodeIdentifier((NodeIdentifier) identifier);
+        protected NormalizedNodeContainerBuilder createBuilder(final NormalizedNode<?, ?> original) {
+            checkArgument(original instanceof LeafSetNode<?>);
+            return ImmutableLeafSetNodeBuilder.create((LeafSetNode<?>) original);
         }
 
         @Override
@@ -586,7 +593,32 @@ public abstract class SchemaAwareApplyOperation implements ModificationApplyOper
             }
             return Optional.absent();
         }
+    }
+
+    public static class OrderedLeafSetModificationStrategy extends NormalizedNodeContainerModificationStrategy {
+
+        private final Optional<ModificationApplyOperation> entryStrategy;
+
+        @SuppressWarnings({ "unchecked", "rawtypes" })
+        protected OrderedLeafSetModificationStrategy(final LeafListSchemaNode schema) {
+            super((Class) LeafSetNode.class);
+            entryStrategy = Optional.<ModificationApplyOperation> of(new LeafSetEntryModificationStrategy(schema));
+        }
+
+        @SuppressWarnings("rawtypes")
+        @Override
+        protected NormalizedNodeContainerBuilder createBuilder(final NormalizedNode<?, ?> original) {
+            checkArgument(original instanceof OrderedLeafSetNode<?>);
+            return ImmutableOrderedLeafSetNodeBuilder.create((OrderedLeafSetNode<?>) original);
+        }
 
+        @Override
+        public Optional<ModificationApplyOperation> getChild(final PathArgument identifier) {
+            if (identifier instanceof NodeWithValue) {
+                return entryStrategy;
+            }
+            return Optional.absent();
+        }
     }
 
     public static class UnkeyedListModificationStrategy extends SchemaAwareApplyOperation {
@@ -629,9 +661,9 @@ public abstract class SchemaAwareApplyOperation implements ModificationApplyOper
         }
 
         @Override
-        protected boolean isSubtreeModificationApplicable(final NodeModification modification,
-                final Optional<StoreMetadataNode> current) {
-            return false;
+        protected void checkSubtreeModificationApplicable(final InstanceIdentifier path,final NodeModification modification,
+                final Optional<StoreMetadataNode> current) throws DataPreconditionFailedException {
+            throw new DataPreconditionFailedException(path, "Subtree modification is not allowed.");
         }
 
     }
@@ -647,8 +679,9 @@ public abstract class SchemaAwareApplyOperation implements ModificationApplyOper
 
         @SuppressWarnings("rawtypes")
         @Override
-        protected NormalizedNodeContainerBuilder createBuilder(final PathArgument identifier) {
-            return ImmutableMapNodeBuilder.create().withNodeIdentifier((NodeIdentifier) identifier);
+        protected NormalizedNodeContainerBuilder createBuilder(final NormalizedNode<?, ?> original) {
+            checkArgument(original instanceof MapNode);
+            return ImmutableMapNodeBuilder.create((MapNode) original);
         }
 
         @Override
@@ -676,8 +709,9 @@ public abstract class SchemaAwareApplyOperation implements ModificationApplyOper
 
         @SuppressWarnings("rawtypes")
         @Override
-        protected NormalizedNodeContainerBuilder createBuilder(final PathArgument identifier) {
-            return ImmutableOrderedMapNodeBuilder.create().withNodeIdentifier((NodeIdentifier) identifier);
+        protected NormalizedNodeContainerBuilder createBuilder(final NormalizedNode<?, ?> original) {
+            checkArgument(original instanceof OrderedMapNode);
+            return ImmutableOrderedMapNodeBuilder.create((OrderedMapNode) original);
         }
 
         @Override
@@ -698,4 +732,19 @@ public abstract class SchemaAwareApplyOperation implements ModificationApplyOper
 
     }
 
+    public static AugmentationSchema createAugmentProxy(final AugmentationSchema schema, final DataNodeContainer resolved) {
+        Set<DataSchemaNode> realChildSchemas = new HashSet<>();
+        for(DataSchemaNode augChild : schema.getChildNodes()) {
+            realChildSchemas.add(resolved.getDataChildByName(augChild.getQName()));
+        }
+        return new AugmentationSchemaProxy(schema, realChildSchemas);
+    }
+
+    public static boolean checkDataPrecondition(final InstanceIdentifier path, final boolean condition, final String message) throws DataPreconditionFailedException {
+        if(!condition) {
+            throw new DataPreconditionFailedException(path, message);
+        }
+        return condition;
+    }
+
 }
index e7265dedb5a5cb99eb6739247f8daa888bf7e54e..8a539ff36edc7e2f25b9b5bddea1710486b0310f 100644 (file)
@@ -7,16 +7,14 @@
  */
 package org.opendaylight.controller.md.sal.dom.store.impl;
 
-import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.NodeIdentifier;
-import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.PathArgument;
 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
+import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableContainerNodeBuilder;
 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 
 public class SchemaAwareApplyOperationRoot extends SchemaAwareApplyOperation.DataNodeContainerModificationStrategy<ContainerSchemaNode> {
-
     private final SchemaContext context;
 
     public SchemaAwareApplyOperationRoot(final SchemaContext context) {
@@ -24,11 +22,6 @@ public class SchemaAwareApplyOperationRoot extends SchemaAwareApplyOperation.Dat
         this.context = context;
     }
 
-    @Override
-    protected DataContainerNodeBuilder createBuilder(final PathArgument identifier) {
-        return ImmutableContainerNodeBuilder.create().withNodeIdentifier((NodeIdentifier) identifier);
-    }
-
     public SchemaContext getContext() {
         return context;
     }
@@ -38,4 +31,9 @@ public class SchemaAwareApplyOperationRoot extends SchemaAwareApplyOperation.Dat
         return "SchemaAwareApplyOperationRoot [context=" + context + "]";
     }
 
+    @Override
+    @SuppressWarnings("rawtypes")
+    protected DataContainerNodeBuilder createBuilder(NormalizedNode<?, ?> original) {
+        return ImmutableContainerNodeBuilder.create((ContainerNode) original);
+    }
 }
index 830d7e3dc40303859748e5d1977eeaa3f7018c3b..0f77ac504a3f5a647f9a184e88b7ecc569332c6f 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 java.util.Collections;
index d42f36fb90768757bcda5f4878f7ef985b827af4..455777b7fb9a1b315c036c6a5d9d6482473e0fa7 100644 (file)
@@ -9,6 +9,7 @@ package org.opendaylight.controller.md.sal.dom.store.impl.tree;
 
 import static com.google.common.base.Preconditions.checkState;
 
+import java.util.Collections;
 import java.util.LinkedHashMap;
 import java.util.Map;
 
@@ -46,10 +47,24 @@ public class StoreMetadataNode implements Immutable, Identifiable<PathArgument>,
         this.children = Preconditions.checkNotNull(children);
     }
 
+    public static StoreMetadataNode createEmpty(final NormalizedNode<?, ?> data) {
+        return new StoreMetadataNode(data, UnsignedLong.ZERO, UnsignedLong.ZERO,
+                Collections.<PathArgument, StoreMetadataNode>emptyMap());
+    }
+
+    public StoreMetadataNode(final NormalizedNode<?, ?> data, final UnsignedLong nodeVersion,
+            final UnsignedLong subtreeVersion) {
+        this(data, nodeVersion, subtreeVersion, Collections.<PathArgument, StoreMetadataNode>emptyMap());
+    }
+
     public static Builder builder() {
         return new Builder();
     }
 
+    public static Builder builder(StoreMetadataNode node) {
+        return new Builder(node);
+    }
+
     public UnsignedLong getNodeVersion() {
         return this.nodeVersion;
     }
@@ -118,11 +133,16 @@ public class StoreMetadataNode implements Immutable, Identifiable<PathArgument>,
         private UnsignedLong nodeVersion;
         private UnsignedLong subtreeVersion;
         private NormalizedNode<?, ?> data;
-        private Map<PathArgument, StoreMetadataNode> children = new LinkedHashMap<>();
+        private Map<PathArgument, StoreMetadataNode> children;
         private boolean dirty = false;
 
-        private Builder() {}
+        private Builder() {
+            children = new LinkedHashMap<>();
+        }
 
+        public Builder(StoreMetadataNode node) {
+            children = new LinkedHashMap<>(node.children);
+        }
 
         public UnsignedLong getVersion() {
             return nodeVersion;
@@ -153,6 +173,15 @@ public class StoreMetadataNode implements Immutable, Identifiable<PathArgument>,
             return this;
         }
 
+        public Builder remove(final PathArgument id) {
+            if (dirty) {
+                children = new LinkedHashMap<>(children);
+                dirty = false;
+            }
+            children.remove(id);
+            return this;
+        }
+
         public StoreMetadataNode build() {
             checkState(data != null, "Data node should not be null.");
             checkState(subtreeVersion.compareTo(nodeVersion) >= 0,
@@ -165,5 +194,4 @@ public class StoreMetadataNode implements Immutable, Identifiable<PathArgument>,
     public static StoreMetadataNode createRecursively(final NormalizedNode<?, ?> node, final UnsignedLong version) {
         return createRecursively(node, version, version);
     }
-
 }
index 41fc8239fbab36edee44a6ecacd7940a4722e4ce..a66a1d5b1ce3808af5e66e2eeca95684748346d0 100644 (file)
@@ -10,7 +10,7 @@ package org.opendaylight.controller.md.sal.dom.store.impl.tree;
 import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.PathArgument;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeContainerBuilder;
 
-import com.google.common.base.Optional;
+import com.google.common.base.Preconditions;
 import com.google.common.primitives.UnsignedLong;
 
 /**
@@ -28,7 +28,12 @@ public class StoreNodeCompositeBuilder {
 
     private StoreNodeCompositeBuilder(final NormalizedNodeContainerBuilder nodeBuilder) {
         this.metadata = StoreMetadataNode.builder();
-        this.data = nodeBuilder;
+        this.data = Preconditions.checkNotNull(nodeBuilder);
+    }
+
+    public StoreNodeCompositeBuilder(NormalizedNodeContainerBuilder nodeBuilder, StoreMetadataNode currentMeta) {
+        this.metadata = StoreMetadataNode.builder(currentMeta);
+        this.data = Preconditions.checkNotNull(nodeBuilder);
     }
 
     @SuppressWarnings("unchecked")
@@ -39,12 +44,9 @@ public class StoreNodeCompositeBuilder {
     }
 
     @SuppressWarnings("unchecked")
-    public StoreNodeCompositeBuilder addIfPresent(final Optional<StoreMetadataNode> potential) {
-        if (potential.isPresent()) {
-            StoreMetadataNode node = potential.get();
-            metadata.add(node);
-            data.addChild(node.getData());
-        }
+    public StoreNodeCompositeBuilder remove(PathArgument id) {
+        metadata.remove(id);
+        data.removeChild(id);
         return this;
     }
 
@@ -56,6 +58,10 @@ public class StoreNodeCompositeBuilder {
         return new StoreNodeCompositeBuilder(nodeBuilder);
     }
 
+    public static StoreNodeCompositeBuilder from(final NormalizedNodeContainerBuilder nodeBuilder, StoreMetadataNode currentMeta) {
+        return new StoreNodeCompositeBuilder(nodeBuilder, currentMeta);
+    }
+
     @SuppressWarnings("unchecked")
     public StoreNodeCompositeBuilder setIdentifier(final PathArgument identifier) {
         data.withNodeIdentifier(identifier);
@@ -71,5 +77,4 @@ public class StoreNodeCompositeBuilder {
         metadata.setSubtreeVersion(updatedSubtreeVersion);
         return this;
     }
-
 }
index 339d9cb44e2ed9515daa1eabbb8db2d913dab91a..732352dd34bbf974b6d897984d9b731c72e5e591 100644 (file)
@@ -21,7 +21,10 @@ import com.google.common.base.Preconditions;
 import com.google.common.base.Predicate;
 import com.google.common.base.Predicates;
 
-public class TreeNodeUtils {
+public final class TreeNodeUtils {
+    private TreeNodeUtils() {
+        throw new UnsupportedOperationException("Utility class should not be instantiated");
+    }
 
     /**
      * Finds a node in tree
@@ -40,7 +43,6 @@ public class TreeNodeUtils {
         return current;
     }
 
-
     public static <T extends StoreTreeNode<T>> T findNodeChecked(final T tree, final InstanceIdentifier path) {
         T current = tree;
         List<PathArgument> nested = new ArrayList<>(path.getPath().size());
index 3e7b115f11e28667114c798062bd4737cda9f333..f47e1efc3fb364d812c08721b3e1b2d78ee6a056 100644 (file)
@@ -457,7 +457,7 @@ public class SchemaAwareRpcBroker implements RpcRouter, Identifiable<String>, Ro
         try {
         listener.onRouteChange(initial);
         } catch (Exception e) {
-            LOG.error("Unhandled exception during sending initial route change event {} to {}",initial,listener);
+            LOG.error("Unhandled exception during sending initial route change event {} to {}",initial,listener, e);
         }
         return reg;
     }
index 9aa558b5acbaa5f6f2a32990ad783b55af066d0f..ac7b87a9f58ec55128eb8aed96b77220772fcfed 100644 (file)
@@ -49,12 +49,8 @@ public class DataNormalizerTest {
 
         InstanceIdentifier normalizedPath = normalizer.toNormalized(LEAF_TWO_PATH_LEGACY);
 
-        Node<?> outerListLegacy = normalizer.toLegacy(OUTER_LIST_WITH_CHOICE);
+        Node<?> outerListLegacy = DataNormalizer.toLegacy(OUTER_LIST_WITH_CHOICE);
         assertNotNull(outerListLegacy);
-
-
-
-
     }
 
 }
index 5a43c7b21885270d6b6a277ea82ad42381009f6e..c0f0a35565db16558354096d27ea75189cd60873 100644 (file)
@@ -7,6 +7,7 @@ import static org.junit.Assert.assertTrue;
 import java.util.concurrent.ExecutionException;
 
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.opendaylight.controller.sal.core.spi.data.DOMStoreReadTransaction;
 import org.opendaylight.controller.sal.core.spi.data.DOMStoreReadWriteTransaction;
@@ -119,6 +120,7 @@ public class InMemoryDataStoreTest {
     }
 
     @Test
+    @Ignore
     public void testTransactionConflict() throws InterruptedException, ExecutionException {
         DOMStoreReadWriteTransaction txOne = domStore.newReadWriteTransaction();
         DOMStoreReadWriteTransaction txTwo = domStore.newReadWriteTransaction();
index 27d320f03e656587bfabfc4b6ad95d369e55cd99..9ad95c18d9777be4f1fff9432b7c2d7eaf2e55a6 100644 (file)
 
   <dependencies>
     <dependency>
+
       <groupId>${project.groupId}</groupId>
       <artifactId>netconf-client</artifactId>
       <version>${netconf.version}</version>
     </dependency>
+    <dependency>
+      <groupId>${project.groupId}</groupId>
+      <artifactId>netconf-config-dispatcher</artifactId>
+    </dependency>
     <dependency>
       <groupId>${project.groupId}</groupId>
       <artifactId>sal-common-util</artifactId>
@@ -33,7 +38,6 @@
     <dependency>
       <groupId>org.opendaylight.controller</groupId>
       <artifactId>netconf-client</artifactId>
-      <version>${netconf.version}</version>
     </dependency>
     <dependency>
       <groupId>org.opendaylight.controller</groupId>
       <groupId>org.opendaylight.controller</groupId>
       <artifactId>netty-threadgroup-config</artifactId>
     </dependency>
+    <dependency>
+      <groupId>org.opendaylight.controller</groupId>
+      <artifactId>sal-binding-api</artifactId>
+    </dependency>
     <dependency>
       <groupId>org.opendaylight.controller</groupId>
       <artifactId>threadpool-config-api</artifactId>
     </dependency>
+    <dependency>
+      <groupId>org.opendaylight.controller.model</groupId>
+      <artifactId>model-inventory</artifactId>
+    </dependency>
     <dependency>
       <groupId>org.opendaylight.yangtools</groupId>
       <artifactId>yang-data-impl</artifactId>
index ddaf6ea6c378ae7728a00cff8297c82650b3a8d9..7bf8ee860dd7fdc0be63a55b07f316702659e38d 100644 (file)
@@ -9,33 +9,39 @@ package org.opendaylight.controller.config.yang.md.sal.connector.netconf;
 
 import static org.opendaylight.controller.config.api.JmxAttributeValidationException.checkCondition;
 import static org.opendaylight.controller.config.api.JmxAttributeValidationException.checkNotNull;
-import io.netty.channel.EventLoopGroup;
-import io.netty.util.concurrent.GlobalEventExecutor;
 
+import com.google.common.net.InetAddresses;
+import io.netty.util.HashedWheelTimer;
+import io.netty.util.concurrent.GlobalEventExecutor;
 import java.io.File;
 import java.io.InputStream;
 import java.net.InetAddress;
 import java.net.InetSocketAddress;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
-
 import org.opendaylight.controller.netconf.client.NetconfClientDispatcher;
-import org.opendaylight.controller.netconf.client.NetconfSshClientDispatcher;
-import org.opendaylight.controller.netconf.util.handler.ssh.authentication.AuthenticationHandler;
+import org.opendaylight.controller.netconf.client.NetconfClientDispatcherImpl;
+import org.opendaylight.controller.netconf.client.conf.NetconfClientConfiguration;
+import org.opendaylight.controller.netconf.client.conf.NetconfClientConfigurationBuilder;
 import org.opendaylight.controller.netconf.util.handler.ssh.authentication.LoginPassword;
+import org.opendaylight.controller.sal.binding.api.data.DataProviderService;
 import org.opendaylight.controller.sal.connect.netconf.NetconfDevice;
+import org.opendaylight.controller.sal.connect.netconf.NetconfDeviceListener;
 import org.opendaylight.protocol.framework.ReconnectStrategy;
 import org.opendaylight.protocol.framework.TimedReconnectStrategy;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.inventory.rev140108.NetconfNode;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.model.util.repo.AbstractCachingSchemaSourceProvider;
 import org.opendaylight.yangtools.yang.model.util.repo.FilesystemSchemaCachingProvider;
 import org.opendaylight.yangtools.yang.model.util.repo.SchemaSourceProvider;
 import org.opendaylight.yangtools.yang.model.util.repo.SchemaSourceProviders;
 import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.net.InetAddresses;
-
 /**
  *
  */
@@ -69,63 +75,45 @@ public final class NetconfConnectorModule extends org.opendaylight.controller.co
         checkNotNull(getBetweenAttemptsTimeoutMillis(), betweenAttemptsTimeoutMillisJmxAttribute);
         checkCondition(getBetweenAttemptsTimeoutMillis() > 0, "must be > 0", betweenAttemptsTimeoutMillisJmxAttribute);
 
+        // FIXME BUG-944 remove backwards compatibility
+        if(getClientDispatcher() == null) {
+            checkCondition(getBossThreadGroup() != null, "Client dispatcher was not set, thread groups have to be set instead", bossThreadGroupJmxAttribute);
+            checkCondition(getWorkerThreadGroup() != null, "Client dispatcher was not set, thread groups have to be set instead", workerThreadGroupJmxAttribute);
+        }
+
+        // Check username + password in case of ssh
+        if(getTcpOnly() == false) {
+            checkNotNull(getUsername(), usernameJmxAttribute);
+            checkNotNull(getPassword(), passwordJmxAttribute);
+        }
+
     }
 
     @Override
     public java.lang.AutoCloseable createInstance() {
+        ServiceReference<DataProviderService> serviceReference = bundleContext.getServiceReference(DataProviderService.class);
+
+        DataProviderService dataProviderService =
+                bundleContext.getService(serviceReference);
 
         getDomRegistryDependency();
         NetconfDevice device = new NetconfDevice(getIdentifier().getInstanceName());
-        String addressValue = getAddress();
-
-        Long connectionAttempts;
-        if (getMaxConnectionAttempts() != null && getMaxConnectionAttempts() > 0) {
-            connectionAttempts = getMaxConnectionAttempts();
-        } else {
-            logger.trace("Setting {} on {} to infinity", maxConnectionAttemptsJmxAttribute, this);
-            connectionAttempts = null;
-        }
-        long clientConnectionTimeoutMillis = getConnectionTimeoutMillis();
-        /*
-         * Uncomment after Switch to IP Address
-        if(getAddress().getIpv4Address() != null) {
-            addressValue = getAddress().getIpv4Address().getValue();
-        } else {
-            addressValue = getAddress().getIpv6Address().getValue();
-        }
-         */
-        double sleepFactor = 1.0;
-        int minSleep = 1000;
-        Long maxSleep = null;
-        Long deadline = null;
-        ReconnectStrategy strategy = new TimedReconnectStrategy(GlobalEventExecutor.INSTANCE, getBetweenAttemptsTimeoutMillis(),
-                minSleep, sleepFactor, maxSleep, connectionAttempts, deadline);
-
-        device.setReconnectStrategy(strategy);
-
-        InetAddress addr = InetAddresses.forString(addressValue);
-        InetSocketAddress socketAddress = new InetSocketAddress(addr , getPort().intValue());
 
+        device.setClientConfig(getClientConfig(device));
 
         device.setProcessingExecutor(getGlobalProcessingExecutor());
 
-        device.setSocketAddress(socketAddress);
         device.setEventExecutor(getEventExecutorDependency());
-        device.setDispatcher(createDispatcher(clientConnectionTimeoutMillis));
+        device.setDispatcher(getClientDispatcher() == null ? createDispatcher() : getClientDispatcherDependency());
         device.setSchemaSourceProvider(getGlobalNetconfSchemaProvider(bundleContext));
-
+        device.setDataProviderService(dataProviderService);
         getDomRegistryDependency().registerProvider(device, bundleContext);
         device.start();
         return device;
     }
 
     private ExecutorService getGlobalProcessingExecutor() {
-        if(GLOBAL_PROCESSING_EXECUTOR == null) {
-
-            GLOBAL_PROCESSING_EXECUTOR = Executors.newCachedThreadPool();
-
-        }
-        return GLOBAL_PROCESSING_EXECUTOR;
+        return GLOBAL_PROCESSING_EXECUTOR == null ? Executors.newCachedThreadPool() : GLOBAL_PROCESSING_EXECUTOR;
     }
 
     private synchronized AbstractCachingSchemaSourceProvider<String, InputStream> getGlobalNetconfSchemaProvider(BundleContext bundleContext) {
@@ -139,18 +127,64 @@ public final class NetconfConnectorModule extends org.opendaylight.controller.co
         return GLOBAL_NETCONF_SOURCE_PROVIDER;
     }
 
-    private NetconfClientDispatcher createDispatcher(long clientConnectionTimeoutMillis) {
-        EventLoopGroup bossGroup = getBossThreadGroupDependency();
-        EventLoopGroup workerGroup = getWorkerThreadGroupDependency();
-        if(getTcpOnly()) {
-            return new NetconfClientDispatcher( bossGroup, workerGroup, clientConnectionTimeoutMillis);
-        } else {
-            AuthenticationHandler authHandler = new LoginPassword(getUsername(),getPassword());
-            return new NetconfSshClientDispatcher(authHandler , bossGroup, workerGroup, clientConnectionTimeoutMillis);
-        }
+    // FIXME BUG-944 remove backwards compatibility
+    /**
+     * @deprecated Use getClientDispatcherDependency method instead to retrieve injected dispatcher.
+     * This one creates new instance of NetconfClientDispatcher and will be removed in near future.
+     */
+    @Deprecated
+    private NetconfClientDispatcher createDispatcher() {
+        return new NetconfClientDispatcherImpl(getBossThreadGroupDependency(), getWorkerThreadGroupDependency(), new HashedWheelTimer());
     }
 
     public void setBundleContext(BundleContext bundleContext) {
         this.bundleContext = bundleContext;
     }
+
+    public NetconfClientConfiguration getClientConfig(final NetconfDevice device) {
+        InetSocketAddress socketAddress = getSocketAddress();
+        ReconnectStrategy strategy = getReconnectStrategy();
+        long clientConnectionTimeoutMillis = getConnectionTimeoutMillis();
+
+        return NetconfClientConfigurationBuilder.create()
+        .withAddress(socketAddress)
+        .withConnectionTimeoutMillis(clientConnectionTimeoutMillis)
+        .withReconnectStrategy(strategy)
+        .withSessionListener(new NetconfDeviceListener(device))
+        .withAuthHandler(new LoginPassword(getUsername(),getPassword()))
+        .withProtocol(getTcpOnly() ?
+                NetconfClientConfiguration.NetconfClientProtocol.TCP :
+                NetconfClientConfiguration.NetconfClientProtocol.SSH)
+        .build();
+    }
+
+    private ReconnectStrategy getReconnectStrategy() {
+        Long connectionAttempts;
+        if (getMaxConnectionAttempts() != null && getMaxConnectionAttempts() > 0) {
+            connectionAttempts = getMaxConnectionAttempts();
+        } else {
+            logger.trace("Setting {} on {} to infinity", maxConnectionAttemptsJmxAttribute, this);
+            connectionAttempts = null;
+        }
+        double sleepFactor = 1.0;
+        int minSleep = 1000;
+        Long maxSleep = null;
+        Long deadline = null;
+
+        return new TimedReconnectStrategy(GlobalEventExecutor.INSTANCE, getBetweenAttemptsTimeoutMillis(),
+                minSleep, sleepFactor, maxSleep, connectionAttempts, deadline);
+    }
+
+    private InetSocketAddress getSocketAddress() {
+        /*
+         * Uncomment after Switch to IP Address
+        if(getAddress().getIpv4Address() != null) {
+            addressValue = getAddress().getIpv4Address().getValue();
+        } else {
+            addressValue = getAddress().getIpv6Address().getValue();
+        }
+         */
+        InetAddress inetAddress = InetAddresses.forString(getAddress());
+        return new InetSocketAddress(inetAddress, getPort().intValue());
+    }
 }
index 8d52950a2954539da471fcbe1f164b01f4eeb1c1..54242cf26da315643d16cb350be9d4a60f300de1 100644 (file)
@@ -21,6 +21,7 @@ import static org.opendaylight.controller.sal.connect.netconf.NetconfMapping.toF
 import static org.opendaylight.controller.sal.connect.netconf.NetconfMapping.toRpcMessage;
 import static org.opendaylight.controller.sal.connect.netconf.NetconfMapping.wrap;
 
+import com.google.common.base.Preconditions;
 import java.io.InputStream;
 import java.net.InetSocketAddress;
 import java.net.URI;
@@ -38,6 +39,8 @@ 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.client.NetconfClientDispatcher;
+import org.opendaylight.controller.netconf.client.conf.NetconfClientConfiguration;
+import org.opendaylight.controller.sal.binding.api.data.DataProviderService;
 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;
@@ -47,6 +50,8 @@ import org.opendaylight.controller.sal.core.api.data.DataModificationTransaction
 import org.opendaylight.controller.sal.core.api.mount.MountProvisionInstance;
 import org.opendaylight.controller.sal.core.api.mount.MountProvisionService;
 import org.opendaylight.protocol.framework.ReconnectStrategy;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.inventory.rev140108.NetconfNode;
 import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.RpcResult;
@@ -115,12 +120,14 @@ public class NetconfDevice implements Provider, //
 
     SchemaSourceProvider<InputStream> remoteSourceProvider;
 
-    DataBrokerService dataBroker;
+    private volatile DataBrokerService dataBroker;
 
     NetconfDeviceListener listener;
 
     private boolean rollbackSupported;
 
+    private NetconfClientConfiguration clientConfig;
+    private volatile DataProviderService dataProviderService;
 
     public NetconfDevice(String name) {
         this.name = name;
@@ -134,11 +141,12 @@ public class NetconfDevice implements Provider, //
         checkState(schemaSourceProvider != null, "Schema Source Provider must be set.");
         checkState(eventExecutor != null, "Event executor must be set.");
 
-        listener = new NetconfDeviceListener(this);
+        Preconditions.checkArgument(clientConfig.getSessionListener() instanceof NetconfDeviceListener);
+        listener = (NetconfDeviceListener) clientConfig.getSessionListener();
 
         logger.info("Starting NETCONF Client {} for address {}", name, socketAddress);
 
-        dispatcher.createClient(socketAddress, listener, reconnectStrategy);
+        dispatcher.createClient(clientConfig);
     }
 
     Optional<SchemaContext> getSchemaContext() {
@@ -213,6 +221,8 @@ public class NetconfDevice implements Provider, //
     }
 
     private void updateDeviceState(boolean up, Set<QName> capabilities) {
+        checkDataStoreState();
+
         DataModificationTransaction transaction = dataBroker.beginTransaction();
 
         CompositeNodeBuilder<ImmutableCompositeNode> it = ImmutableCompositeNode.builder();
@@ -222,7 +232,7 @@ public class NetconfDevice implements Provider, //
 
         logger.debug("Client capabilities {}", capabilities);
         for (QName capability : capabilities) {
-            it.addLeaf(NETCONF_INVENTORY_INITIAL_CAPABILITY, capability);
+            it.addLeaf(NETCONF_INVENTORY_INITIAL_CAPABILITY, capability.toString());
         }
 
         logger.debug("Update device state transaction " + transaction.getIdentifier()
@@ -289,7 +299,7 @@ public class NetconfDevice implements Provider, //
 
     @Override
     public ListenableFuture<RpcResult<CompositeNode>> invokeRpc(QName rpc, CompositeNode input) {
-        return listener.sendRequest(toRpcMessage(rpc, input, getSchemaContext()));
+        return listener.sendRequest(toRpcMessage(rpc, input, getSchemaContext()), rpc);
     }
 
     @Override
@@ -301,6 +311,22 @@ public class NetconfDevice implements Provider, //
     public void onSessionInitiated(ProviderSession session) {
         dataBroker = session.getService(DataBrokerService.class);
 
+        processingExecutor.submit(new Runnable() {
+            @Override
+            public void run() {
+                updateInitialState();
+            }
+        });
+
+        mountService = session.getService(MountProvisionService.class);
+        if (mountService != null) {
+            mountInstance = mountService.createOrGetMountPoint(path);
+        }
+    }
+
+    private void updateInitialState() {
+        checkDataStoreState();
+
         DataModificationTransaction transaction = dataBroker.beginTransaction();
         if (operationalNodeNotExisting(transaction)) {
             transaction.putOperationalData(path, getNodeWithId());
@@ -316,13 +342,13 @@ public class NetconfDevice implements Provider, //
         } catch (ExecutionException e) {
             throw new RuntimeException("Read configuration data " + path + " failed", e);
         }
-
-        mountService = session.getService(MountProvisionService.class);
-        if (mountService != null) {
-            mountInstance = mountService.createOrGetMountPoint(path);
-        }
     }
 
+    private void checkDataStoreState() {
+        // read data from Nodes/Node in order to wait with write until schema for Nodes/Node is present in datastore
+        dataProviderService.readOperationalData(org.opendaylight.yangtools.yang.binding.InstanceIdentifier.builder(
+                Nodes.class).child(org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node.class).augmentation(NetconfNode.class).build());    }
+
     CompositeNode getNodeWithId() {
         SimpleNodeTOImpl id = new SimpleNodeTOImpl(INVENTORY_ID, null, name);
         return new CompositeNodeTOImpl(INVENTORY_NODE, null, Collections.<Node<?>> singletonList(id));
@@ -464,6 +490,14 @@ public class NetconfDevice implements Provider, //
     public void setDispatcher(final NetconfClientDispatcher dispatcher) {
         this.dispatcher = dispatcher;
     }
+
+    public void setClientConfig(final NetconfClientConfiguration clientConfig) {
+        this.clientConfig = clientConfig;
+    }
+
+    public void setDataProviderService(final DataProviderService dataProviderService) {
+        this.dataProviderService = dataProviderService;
+    }
 }
 
 class NetconfDeviceSchemaContextProvider {
index 94f5e166a115e216cf839e52a044bc870c34c661..68667f0143489cf4f8f633b641224e68d5ca73e8 100644 (file)
@@ -25,6 +25,7 @@ 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.netconf.util.xml.XmlUtil;
 import org.opendaylight.controller.sal.common.util.Rpcs;
 import org.opendaylight.controller.sal.core.api.mount.MountProvisionInstance;
 import org.opendaylight.yangtools.yang.common.QName;
@@ -40,15 +41,16 @@ import com.google.common.base.Preconditions;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
 
-class NetconfDeviceListener implements NetconfClientSessionListener {
-
+public class NetconfDeviceListener implements NetconfClientSessionListener {
     private static final class Request {
         final UncancellableFuture<RpcResult<CompositeNode>> future;
         final NetconfMessage request;
+        final QName rpc;
 
-        private Request(UncancellableFuture<RpcResult<CompositeNode>> future, NetconfMessage request) {
+        private Request(UncancellableFuture<RpcResult<CompositeNode>> future, NetconfMessage request, final QName rpc) {
             this.future = future;
             this.request = request;
+            this.rpc = rpc;
         }
     }
 
@@ -163,14 +165,13 @@ class NetconfDeviceListener implements NetconfClientSessionListener {
                 return;
             }
 
-            r.future.set(Rpcs.getRpcResult(true, NetconfMapping.toNotificationNode(message, device.getSchemaContext()),
-                    Collections.<RpcError>emptyList()));
+            r.future.set(NetconfMapping.toRpcResult(message, r.rpc, device.getSchemaContext()));
         } else {
             LOG.warn("Ignoring unsolicited message", message);
         }
     }
 
-    synchronized ListenableFuture<RpcResult<CompositeNode>> sendRequest(final NetconfMessage message) {
+    synchronized ListenableFuture<RpcResult<CompositeNode>> sendRequest(final NetconfMessage message, final QName rpc) {
         if (session == null) {
             LOG.debug("Session to {} is disconnected, failing RPC request {}", device.getName(), message);
             return Futures.<RpcResult<CompositeNode>>immediateFuture(new RpcResult<CompositeNode>() {
@@ -192,7 +193,7 @@ class NetconfDeviceListener implements NetconfClientSessionListener {
             });
         }
 
-        final Request req = new Request(new UncancellableFuture<RpcResult<CompositeNode>>(true), message);
+        final Request req = new Request(new UncancellableFuture<RpcResult<CompositeNode>>(true), message, rpc);
         requests.add(req);
 
         session.sendMessage(req.request).addListener(new FutureListener<Void>() {
@@ -200,7 +201,7 @@ class NetconfDeviceListener implements NetconfClientSessionListener {
             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());
+                    LOG.debug("Failed to send request {}", XmlUtil.toString(req.request.getDocument()), future.cause());
                     req.future.setException(future.cause());
                 } else {
                     LOG.trace("Finished sending request {}", req.request);
index a6e6b3dfdf456d92711da924522d22de0aeea788..f76ec28624e158a3cfa5ad8050c13647b82e2163 100644 (file)
@@ -99,7 +99,11 @@ public class NetconfMapping {
 
         for (org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.PathArgument component : Lists
                 .reverse(identifier.getPath())) {
-            previous = toNode(component, previous);
+            if (component instanceof NodeIdentifierWithPredicates) {
+                previous = toNode((NodeIdentifierWithPredicates)component, previous);
+            } else {
+                previous = toNode(component, previous);
+            }
         }
         return filter("subtree", previous);
     }
@@ -135,7 +139,7 @@ public class NetconfMapping {
             SchemaContext schemaContext = ctx.get();
             Set<NotificationDefinition> notifications = schemaContext.getNotifications();
             Document document = message.getDocument();
-            return XmlDocumentUtils.notificationToDomNodes(document, Optional.fromNullable(notifications));
+            return XmlDocumentUtils.notificationToDomNodes(document, Optional.fromNullable(notifications), ctx.get());
         }
         return null;
     }
@@ -192,13 +196,7 @@ public class NetconfMapping {
                 rawRpc = it.toInstance();
                 // sys(xmlData)
             } else {
-                RpcDefinition rpcSchema = Iterables.find(context.get().getOperations(), new Predicate<RpcDefinition>() {
-                    @Override
-                    public boolean apply(final RpcDefinition input) {
-                        return rpc == input.getQName();
-                    }
-                });
-                rawRpc = (CompositeNode) toCompositeNode(message.getDocument());
+                rawRpc = (CompositeNode) toCompositeNode(message, context);
             }
         else {
             rawRpc = (CompositeNode) toCompositeNode(message.getDocument());
index c734e80d9aa06f76d3c4a96c277b8c71a7a48d74..31c6bd0138b41b4fc06f102dc8736f35cce0681a 100644 (file)
@@ -20,6 +20,8 @@ import org.opendaylight.yangtools.yang.model.util.repo.SchemaSourceProvider;
 
 import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 class NetconfRemoteSchemaSourceProvider implements SchemaSourceProvider<String> {
 
@@ -30,8 +32,11 @@ class NetconfRemoteSchemaSourceProvider implements SchemaSourceProvider<String>
 
     private final NetconfDevice device;
 
+    private final Logger logger;
+
     public NetconfRemoteSchemaSourceProvider(NetconfDevice device) {
         this.device = Preconditions.checkNotNull(device);
+        logger = LoggerFactory.getLogger(NetconfDevice.class + "#" + device.getName());
     }
 
     @Override
@@ -44,7 +49,7 @@ class NetconfRemoteSchemaSourceProvider implements SchemaSourceProvider<String>
             request.addLeaf("version", revision.get());
         }
 
-        device.logger.trace("Loading YANG schema source for {}:{}", moduleName, revision);
+        logger.trace("Loading YANG schema source for {}:{}", moduleName, revision);
         try {
             RpcResult<CompositeNode> schemaReply = device.invokeRpc(GET_SCHEMA_QNAME, request.toInstance()).get();
             if (schemaReply.isSuccessful()) {
@@ -54,9 +59,9 @@ class NetconfRemoteSchemaSourceProvider implements SchemaSourceProvider<String>
                     return Optional.of(schemaBody);
                 }
             }
-            device.logger.warn("YANG shcema was not successfully retrieved.");
+            logger.warn("YANG shcema was not successfully retrieved. Errors: {}", schemaReply.getErrors());
         } catch (InterruptedException | ExecutionException e) {
-            device.logger.warn("YANG shcema was not successfully retrieved.", e);
+            logger.warn("YANG shcema was not successfully retrieved.", e);
         }
         return Optional.absent();
     }
index f0fa452dc5c989138481a50ac89b120f02edb03c..d4dad11ec3b4f70e67ede2e1ddc4f690d59e9b52 100644 (file)
@@ -7,10 +7,11 @@ module odl-sal-netconf-connector-cfg {
        import threadpool {prefix th;}
        import netty {prefix netty;}
        import opendaylight-md-sal-dom {prefix dom;}
+    import odl-netconf-cfg { prefix cfg-net; revision-date 2014-04-08; }
 
     description
         "Service definition for Binding Aware MD-SAL.";
+
     revision "2013-10-28" {
         description
             "Initial revision";
@@ -26,7 +27,7 @@ module odl-sal-netconf-connector-cfg {
         leaf address {
             type string;
         }
-    
+
         leaf port {
             type uint32;
         }
@@ -36,7 +37,7 @@ module odl-sal-netconf-connector-cfg {
     augment "/config:modules/config:module/config:configuration" {
         case sal-netconf-connector {
             when "/config:modules/config:module/config:type = 'sal-netconf-connector'";
-            
+
             leaf address {
                 type string;
             }
@@ -44,7 +45,7 @@ module odl-sal-netconf-connector-cfg {
             leaf port {
                 type uint32;
             }
-            
+
             leaf tcp-only {
                 type boolean;
             }
@@ -52,10 +53,11 @@ module odl-sal-netconf-connector-cfg {
             leaf username {
                 type string;
             }
-            
+
             leaf password {
                 type string;
             }
+
             container dom-registry {
                 uses config:service-ref {
                     refine type {
@@ -65,17 +67,25 @@ module odl-sal-netconf-connector-cfg {
                 }
             }
 
+            // FIXME BUG-944 remove backwards compatibility
+            // Deprecated, replaced by client dispatcher.
+            // This dependency will be removed in near future and all configurations of netconf-connector need to be changed to use dispatcher dependency.
             container boss-thread-group {
                 uses config:service-ref {
                     refine type {
+                        mandatory false;
                         config:required-identity netty:netty-threadgroup;
                     }
                 }
             }
 
+            // FIXME BUG-944 remove backwards compatibility
+            // Deprecated, replaced by client dispatcher.
+            // This dependency will be removed in near future and all configurations of netconf-connector need to be changed to use dispatcher dependency.
             container worker-thread-group {
                 uses config:service-ref {
                     refine type {
+                        mandatory false;
                         config:required-identity netty:netty-threadgroup;
                     }
                 }
@@ -89,6 +99,16 @@ module odl-sal-netconf-connector-cfg {
                 }
             }
 
+            // Replaces thread group dependencies
+            container client-dispatcher {
+                uses config:service-ref {
+                    refine type {
+                        mandatory false;
+                        config:required-identity cfg-net:netconf-client-dispatcher;
+                    }
+                }
+            }
+
             leaf connection-timeout-millis {
                 description "Specifies timeout in milliseconds after which connection must be established.";
                 type uint32;
@@ -101,7 +121,6 @@ module odl-sal-netconf-connector-cfg {
                 default 0; // retry forever
             }
 
-
             leaf between-attempts-timeout-millis {
                 description "Timeout in milliseconds to wait between connection attempts.";
                 type uint16;
index edcef83574983718711d644f7c5a89c91d9d5035..53fbb929bb3a5c5942851a224f71c263f6ec2305 100644 (file)
@@ -8,7 +8,7 @@
 
 package org.opendaylight.controller.sal.connector.remoterpc;
 
-import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
 
 import java.util.Collection;
 import java.util.Collections;
@@ -174,7 +174,7 @@ public class RemoteRpcProvider implements
     Optional<RoutingTable<RpcRouter.RouteIdentifier, String>> routingTable =
         routingTableProvider.getRoutingTable();
 
-    checkNotNull(routingTable.isPresent(), "Routing table is null");
+    checkState(routingTable.isPresent(), "Routing table is null");
 
     return routingTable.get();
   }
index 519791a1956addb07576487edacdcb2247184ab0..21d02be7d7295b5514b4819310f74a744fcb0ae0 100644 (file)
@@ -8,11 +8,17 @@
 
 package org.opendaylight.controller.sal.connector.remoterpc.dto;
 
-import org.opendaylight.controller.sal.connector.api.RpcRouter;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
 
-import java.io.*;
+import org.opendaylight.controller.sal.connector.api.RpcRouter;
 
 public class Message implements Serializable {
+    private static final long serialVersionUID = 1L;
 
  public static enum MessageType {
     PING((byte) 0),
@@ -118,12 +124,13 @@ public class Message implements Serializable {
   }
 
   public static class Response extends Message implements RpcRouter.RpcReply {
+    private static final long serialVersionUID = 1L;
     private ResponseCode code; // response code
 
     public static enum ResponseCode {
       SUCCESS(200), BADREQUEST(400), TIMEOUT(408), GONE(410), SERVERERROR(500), SERVICEUNAVAILABLE(503);
 
-      private int code;
+      private final int code;
 
       ResponseCode(int code) {
         this.code = code;
@@ -144,7 +151,7 @@ public class Message implements Serializable {
    */
   public static class MessageBuilder{
 
-    private Message message;
+    private final Message message;
 
     public MessageBuilder(){
       message = new Message();
index 4ffcf3e099c7f49c3b811d86f24a5961d689850d..53c7cc0b8ddca4cbb9fa95a2cb23acf8745f08fc 100644 (file)
@@ -7,13 +7,14 @@
  */
 package org.opendaylight.controller.sal.connector.remoterpc.dto;
 
+import java.io.Serializable;
+
 import org.opendaylight.controller.sal.connector.api.RpcRouter;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier;
 
-import java.io.Serializable;
-
 public class RouteIdentifierImpl implements RpcRouter.RouteIdentifier<QName, QName, InstanceIdentifier>,Serializable {
+  private static final long serialVersionUID = 1L;
 
   private QName context;
   private QName type;
index a5c4d85fed3bf97f53c0254f6f5dae5a3af12ac0..1edd004d3725a5fcbe55a8e7057087cdd83a5b53 100644 (file)
@@ -7,7 +7,14 @@
  */
 package org.opendaylight.controller.sal.connector.remoterpc;
 
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.FutureTask;
+import java.util.concurrent.TimeUnit;
+
 import junit.framework.Assert;
+
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -17,9 +24,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.zeromq.ZMQ;
 
-import java.io.IOException;
-import java.util.concurrent.*;
-
 /**
  *
  */
@@ -69,7 +73,7 @@ public class ClientRequestHandlerTest {
       serverThread.execute(MessagingUtil.startReplyServer(context, serverAddress, 1));
       threadPool.execute(createEmptyMessageTaskAndHandle(handler, serverAddress));
     }
-    Thread.currentThread().sleep(5000);//wait for all messages to get processed
+    Thread.sleep(5000);//wait for all messages to get processed
     //should be connected to 5 remote server
     Assert.assertEquals(5, handler.getWorkerCount());
   }
index e19f9f5805d9074cd946aee53d48e15510d9e0ef..4d9958ee6b4720b66fe5fc2a286e754630274e20 100644 (file)
@@ -122,7 +122,7 @@ class JsonReader {
         // it could be identityref Built-In Type
         URI namespace = getNamespaceFor(value);
         if (namespace != null) {
-            return new IdentityValuesDTO(namespace.toString(), getLocalNameFor(value), null);
+            return new IdentityValuesDTO(namespace.toString(), getLocalNameFor(value), null,value);
         }
         // it is not "prefix:value" but just "value"
         return value;
index 225eb7de6a7c16c1fea465659de373e0c65ef8ab..ba3e315e72728d9e0b9f7aa2c4ee78ff892ea428 100644 (file)
@@ -42,7 +42,7 @@ public final class RestUtil {
         if (xPathParts.length < 2) { // must be at least "/pr:node"
             return null;
         }
-        IdentityValuesDTO identityValuesDTO = new IdentityValuesDTO();
+        IdentityValuesDTO identityValuesDTO = new IdentityValuesDTO(value);
         for (int i = 1; i < xPathParts.length; i++) {
             String xPathPartTrimmed = xPathParts[i].trim();
             
index d807070dbdc21ad00429410ad360d5ce87607e6f..a75f6b4a85f8277bffa57ad6034abe6bc323f2a0 100644 (file)
@@ -205,7 +205,7 @@ public class XmlReader {
         if (namespaceAndValue.length == 2) {
             String namespace = startElement.getNamespaceContext().getNamespaceURI(namespaceAndValue[0]);
             if (namespace != null && !namespace.isEmpty()) {
-                return new IdentityValuesDTO(namespace, namespaceAndValue[1], namespaceAndValue[0]);
+                return new IdentityValuesDTO(namespace, namespaceAndValue[1], namespaceAndValue[0],value);
             }
         }
         // it is not "prefix:value" but just "value"
index 4fb75141d5d8e909143c93017727d740921b8a44..14a558967d2081a18e045192712ab0988cde6efa 100644 (file)
@@ -14,13 +14,19 @@ import java.util.List;
 public final class IdentityValuesDTO {
 
     private final List<IdentityValue> elementData = new ArrayList<>();
+    private final String originValue;
 
-    public IdentityValuesDTO(String namespace, String value, String prefix) {
+    public IdentityValuesDTO(String namespace, String value, String prefix,String originValue) {
         elementData.add(new IdentityValue(namespace, value, prefix));
+        this.originValue = originValue;
+    }
+    
+    public IdentityValuesDTO(String originValue) {
+        this.originValue = originValue;
     }
     
     public IdentityValuesDTO() {
-        
+        originValue = null;
     }
 
     public void add(String namespace, String value, String prefix) {
@@ -40,6 +46,10 @@ public final class IdentityValuesDTO {
     public String toString() {
         return elementData.toString();
     }
+    
+    public String getOriginValue() {
+        return originValue;
+    }
 
     public static final class IdentityValue {
 
index d6b530039eb681cf831956b9e61a83aad106ac64..42658d79f1468b97eaead0e852b57a125ee528b9 100644 (file)
@@ -89,6 +89,9 @@ public class RestCodec {
                             input == null ? "null" : input.getClass(), String.valueOf(input));
                     return null;
                 } else if (type instanceof LeafrefTypeDefinition) {
+                    if (input instanceof IdentityValuesDTO) {
+                        return LEAFREF_DEFAULT_CODEC.deserialize(((IdentityValuesDTO)input).getOriginValue());
+                    }
                     return LEAFREF_DEFAULT_CODEC.deserialize(input);
                 } else if (type instanceof InstanceIdentifierTypeDefinition) {
                     if (input instanceof IdentityValuesDTO) {
@@ -102,6 +105,9 @@ public class RestCodec {
                     TypeDefinitionAwareCodec<Object, ? extends TypeDefinition<?>> typeAwarecodec = TypeDefinitionAwareCodec
                             .from(type);
                     if (typeAwarecodec != null) {
+                        if (input instanceof IdentityValuesDTO) {
+                            return typeAwarecodec.deserialize(((IdentityValuesDTO)input).getOriginValue());
+                        }
                         return typeAwarecodec.deserialize(String.valueOf(input));
                     } else {
                         logger.debug("Codec for type \"" + type.getQName().getLocalName()
@@ -162,7 +168,7 @@ public class RestCodec {
 
         @Override
         public IdentityValuesDTO serialize(QName data) {
-            return new IdentityValuesDTO(data.getNamespace().toString(), data.getLocalName(), data.getPrefix());
+            return new IdentityValuesDTO(data.getNamespace().toString(), data.getLocalName(), data.getPrefix(),null);
         }
 
         @Override
index fa478ac72e398ae928c619004023b8aae6cc68fe..f1901d711259f1907aeb9f94817ffbf84694fffd 100644 (file)
@@ -588,7 +588,11 @@ class RestconfImpl implements RestconfService {
         }
         if (node instanceof CompositeNodeWrapper) {
             if ((node  as CompositeNodeWrapper).changeAllowed) {
-                normalizeNode(node as CompositeNodeWrapper, schema, null, mountPoint)
+                try {
+                    normalizeNode(node as CompositeNodeWrapper, schema, null, mountPoint)
+                } catch (NumberFormatException e) {
+                    throw new ResponseException(BAD_REQUEST,e.message)
+                }
             }
             return (node as CompositeNodeWrapper).unwrap()
         }
@@ -669,7 +673,7 @@ class RestconfImpl implements RestconfService {
 
             if (schema.typeDefinition instanceof IdentityrefTypeDefinition) {
                 if (value instanceof String) {
-                    inputValue = new IdentityValuesDTO(nodeBuilder.namespace.toString, value as String, null)
+                    inputValue = new IdentityValuesDTO(nodeBuilder.namespace.toString, value as String, null,value as String);
                 } // else value is already instance of IdentityValuesDTO
             }
             
diff --git a/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/CodecsExceptionsCatchingTest.java b/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/CodecsExceptionsCatchingTest.java
new file mode 100644 (file)
index 0000000..767aaf3
--- /dev/null
@@ -0,0 +1,59 @@
+package org.opendaylight.controller.sal.restconf.impl.test;
+
+import static org.junit.Assert.assertTrue;
+
+import java.io.FileNotFoundException;
+
+import javax.ws.rs.client.Entity;
+import javax.ws.rs.core.Application;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+import org.glassfish.jersey.server.ResourceConfig;
+import org.glassfish.jersey.test.JerseyTest;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.opendaylight.controller.sal.rest.impl.JsonToCompositeNodeProvider;
+import org.opendaylight.controller.sal.rest.impl.StructuredDataToJsonProvider;
+import org.opendaylight.controller.sal.rest.impl.StructuredDataToXmlProvider;
+import org.opendaylight.controller.sal.rest.impl.XmlToCompositeNodeProvider;
+import org.opendaylight.controller.sal.restconf.impl.ControllerContext;
+import org.opendaylight.controller.sal.restconf.impl.RestconfImpl;
+import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+
+public class CodecsExceptionsCatchingTest extends JerseyTest {
+
+    private static RestconfImpl restConf;
+    private static ControllerContext controllerContext = ControllerContext.getInstance();
+
+    @BeforeClass
+    public static void init() throws FileNotFoundException {
+        restConf = RestconfImpl.getInstance();
+        controllerContext = ControllerContext.getInstance();
+        SchemaContext schemaContext = TestUtils.loadSchemaContext("/decoding-exception/yang");
+        controllerContext.setGlobalSchema(schemaContext);
+        restConf.setControllerContext(controllerContext);
+    }
+
+    @Override
+    protected Application configure() {
+        /* enable/disable Jersey logs to console */
+        // enable(TestProperties.LOG_TRAFFIC);
+        // enable(TestProperties.DUMP_ENTITY);
+        // enable(TestProperties.RECORD_LOG_LEVEL);
+        // set(TestProperties.RECORD_LOG_LEVEL, Level.ALL.intValue());
+        ResourceConfig resourceConfig = new ResourceConfig();
+        resourceConfig = resourceConfig.registerInstances(restConf, StructuredDataToXmlProvider.INSTANCE,
+                StructuredDataToJsonProvider.INSTANCE, XmlToCompositeNodeProvider.INSTANCE,
+                JsonToCompositeNodeProvider.INSTANCE);
+        return resourceConfig;
+    }
+
+    @Test
+    public void StringToNumberConversionError() {
+        Response response = target("/config/number:cont").request(MediaType.APPLICATION_XML).put(
+                Entity.entity("<cont xmlns=\"number\"><lf>3f</lf></cont>", MediaType.APPLICATION_XML));
+        String exceptionMessage = response.readEntity(String.class);
+        assertTrue(exceptionMessage.contains("Incorrect lexical representation of Integer value: 3f"));
+    }
+}
\ No newline at end of file
diff --git a/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/XmlAndJsonToCnSnLeafRefTest.java b/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/XmlAndJsonToCnSnLeafRefTest.java
new file mode 100644 (file)
index 0000000..e5a737e
--- /dev/null
@@ -0,0 +1,71 @@
+/*
+ * 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.restconf.impl.test;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.IOException;
+import java.net.URISyntaxException;
+
+import javax.ws.rs.WebApplicationException;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.opendaylight.controller.sal.rest.impl.JsonToCompositeNodeProvider;
+import org.opendaylight.controller.sal.rest.impl.XmlToCompositeNodeProvider;
+import org.opendaylight.yangtools.yang.data.api.CompositeNode;
+import org.opendaylight.yangtools.yang.data.api.Node;
+import org.opendaylight.yangtools.yang.data.api.SimpleNode;
+
+public class XmlAndJsonToCnSnLeafRefTest extends YangAndXmlAndDataSchemaLoader {
+
+    @BeforeClass
+    public static void initialize() {
+        dataLoad("/leafref/yang", 2, "leafref-module", "cont");
+    }
+
+    @Test
+    public void loadXmlToCnSn() throws WebApplicationException, IOException, URISyntaxException {
+        CompositeNode cnSn = TestUtils.readInputToCnSn("/leafref/xml/xmldata.xml", XmlToCompositeNodeProvider.INSTANCE);
+        TestUtils.normalizeCompositeNode(cnSn, modules, schemaNodePath);
+        verifyContPredicate(cnSn, "/ns:cont/ns:lf1", "/cont/lf1", "/ns:cont/ns:lf1", "../lf1");
+    }
+
+    @Test
+    public void loadJsonToCnSn() throws WebApplicationException, IOException, URISyntaxException {
+        CompositeNode cnSn = TestUtils.readInputToCnSn("/leafref/json/jsondata.json",
+                JsonToCompositeNodeProvider.INSTANCE);
+        TestUtils.normalizeCompositeNode(cnSn, modules, schemaNodePath);
+        verifyContPredicate(cnSn, "/leafref-module:cont/leafref-module:lf1", "/leafref-module:cont/leafref-module:lf1",
+                "/referenced-module:cont/referenced-module:lf1", "/leafref-module:cont/leafref-module:lf1");
+    }
+
+    private void verifyContPredicate(CompositeNode cnSn, String... values) throws URISyntaxException {
+        Object lf2Value = null;
+        Object lf3Value = null;
+        Object lf4Value = null;
+        Object lf5Value = null;
+
+        for (Node<?> node : cnSn.getValue()) {
+            if (node.getNodeType().getLocalName().equals("lf2")) {
+                lf2Value = ((SimpleNode<?>) node).getValue();
+            } else if (node.getNodeType().getLocalName().equals("lf3")) {
+                lf3Value = ((SimpleNode<?>) node).getValue();
+            } else if (node.getNodeType().getLocalName().equals("lf4")) {
+                lf4Value = ((SimpleNode<?>) node).getValue();
+            } else if (node.getNodeType().getLocalName().equals("lf5")) {
+                lf5Value = ((SimpleNode<?>) node).getValue();
+            }
+        }
+        assertEquals(values[0], lf2Value);
+        assertEquals(values[1], lf3Value);
+        assertEquals(values[2], lf4Value);
+        assertEquals(values[3], lf5Value);
+    }
+
+}
diff --git a/opendaylight/md-sal/sal-rest-connector/src/test/resources/decoding-exception/yang/number.yang b/opendaylight/md-sal/sal-rest-connector/src/test/resources/decoding-exception/yang/number.yang
new file mode 100644 (file)
index 0000000..c463882
--- /dev/null
@@ -0,0 +1,17 @@
+ module number {
+
+   namespace "number";
+   prefix "number";
+
+   revision 2014-04-24 {
+   }
+
+    
+
+    container cont {
+        leaf lf {
+            type uint8;
+        }
+        
+    }    
+ }
diff --git a/opendaylight/md-sal/sal-rest-connector/src/test/resources/leafref/json/jsondata.json b/opendaylight/md-sal/sal-rest-connector/src/test/resources/leafref/json/jsondata.json
new file mode 100644 (file)
index 0000000..cbe455b
--- /dev/null
@@ -0,0 +1,8 @@
+{
+    "leafref-module:cont" : {
+        "lf4" : "/referenced-module:cont/referenced-module:lf1",
+        "lf2" : "/leafref-module:cont/leafref-module:lf1",
+        "lf3" : "/leafref-module:cont/leafref-module:lf1",
+        "lf5" : "/leafref-module:cont/leafref-module:lf1"
+    }
+}
\ No newline at end of file
diff --git a/opendaylight/md-sal/sal-rest-connector/src/test/resources/leafref/xml/xmldata.xml b/opendaylight/md-sal/sal-rest-connector/src/test/resources/leafref/xml/xmldata.xml
new file mode 100644 (file)
index 0000000..01bf092
--- /dev/null
@@ -0,0 +1,6 @@
+<cont xmlns="leafref:module">
+    <lf4 xmlns:ns="referenced:module">/ns:cont/ns:lf1</lf4>
+    <lf2 xmlns:ns="leafref:module">/ns:cont/ns:lf1</lf2>
+    <lf3 xmlns:ns="leafref:module">/cont/lf1</lf3>
+    <lf5 xmlns:ns="leafref:module">../lf1</lf5>
+</cont>
diff --git a/opendaylight/md-sal/sal-rest-connector/src/test/resources/leafref/yang/leafref-module.yang b/opendaylight/md-sal/sal-rest-connector/src/test/resources/leafref/yang/leafref-module.yang
new file mode 100644 (file)
index 0000000..00df290
--- /dev/null
@@ -0,0 +1,44 @@
+module leafref-module {
+  namespace "leafref:module";  
+
+
+  prefix "lfrfmodule";
+
+  import referenced-module { prefix refmod; revision-date 2014-04-17;} 
+
+  
+  revision 2014-04-17 {    
+  }
+  
+
+    container cont {
+        leaf lf1 {
+            type instance-identifier;
+        }
+
+        leaf lf2 {
+            type leafref {
+                path "../lf1";
+            }
+        }
+
+        leaf lf3 {
+            type leafref {
+                path "/refmod:cont/refmod:lf1";
+            }
+        }
+
+        leaf lf4 {
+            type leafref {
+                path "/cont/lf1";
+            }
+        }
+
+        leaf lf5 {
+            type leafref {
+                path "../lf1";
+            }
+        }
+        
+    }
+}
\ No newline at end of file
diff --git a/opendaylight/md-sal/sal-rest-connector/src/test/resources/leafref/yang/referenced-module.yang b/opendaylight/md-sal/sal-rest-connector/src/test/resources/leafref/yang/referenced-module.yang
new file mode 100644 (file)
index 0000000..b6de719
--- /dev/null
@@ -0,0 +1,13 @@
+module referenced-module {
+  namespace "referenced:module";  
+
+  prefix "refmodule";
+  revision 2014-04-17 {    
+  }
+
+    container cont {
+        leaf lf1 {
+            type instance-identifier;
+        }
+    }
+}
\ No newline at end of file
diff --git a/opendaylight/md-sal/sal-rest-docgen/pom.xml b/opendaylight/md-sal/sal-rest-docgen/pom.xml
new file mode 100644 (file)
index 0000000..423d2e4
--- /dev/null
@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.opendaylight.controller</groupId>
+    <artifactId>sal-parent</artifactId>
+    <version>1.1-SNAPSHOT</version>
+  </parent>
+
+  <groupId>org.opendaylight.controller</groupId>
+  <artifactId>sal-rest-docgen</artifactId>
+  <packaging>bundle</packaging>
+
+  <properties>
+    <jaxrs-api.version>3.0.4.Final</jaxrs-api.version>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>com.fasterxml.jackson.core</groupId>
+      <artifactId>jackson-annotations</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>com.fasterxml.jackson.core</groupId>
+      <artifactId>jackson-databind</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>com.fasterxml.jackson.datatype</groupId>
+      <artifactId>jackson-datatype-json-org</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>com.google.guava</groupId>
+      <artifactId>guava</artifactId>
+    </dependency>
+
+    <!-- Jax rs -->
+    <dependency>
+      <groupId>org.jboss.resteasy</groupId>
+      <artifactId>jaxrs-api</artifactId>
+      <version>${jaxrs-api.version}</version>
+    </dependency>
+
+    <dependency>
+      <groupId>org.json</groupId>
+      <artifactId>json</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>org.opendaylight.controller</groupId>
+      <artifactId>sal-core-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.opendaylight.yangtools</groupId>
+      <artifactId>yang-common</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>org.opendaylight.yangtools</groupId>
+      <artifactId>yang-model-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.opendaylight.yangtools</groupId>
+      <artifactId>yang-model-util</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.opendaylight.yangtools</groupId>
+      <artifactId>yang-parser-api</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>org.opendaylight.yangtools</groupId>
+      <artifactId>yang-parser-impl</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>org.osgi</groupId>
+      <artifactId>org.osgi.core</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.felix</groupId>
+        <artifactId>maven-bundle-plugin</artifactId>
+        <version>2.4.0</version>
+        <extensions>true</extensions>
+        <configuration>
+
+          <instructions>
+            <Bundle-Name>MD SAL Rest Api Doc Generator</Bundle-Name>
+            <Import-Package>*,
+              com.sun.jersey.spi.container.servlet</Import-Package>
+            <Bundle-Activator>org.opendaylight.controller.sal.rest.doc.DocProvider</Bundle-Activator>
+            <Web-ContextPath>/apidoc</Web-ContextPath>
+          </instructions>
+
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/DocProvider.java b/opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/DocProvider.java
new file mode 100644 (file)
index 0000000..9c18001
--- /dev/null
@@ -0,0 +1,93 @@
+/*
+ * 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.rest.doc;
+
+import org.opendaylight.controller.sal.core.api.Broker;
+import org.opendaylight.controller.sal.core.api.Provider;
+import org.opendaylight.controller.sal.core.api.model.SchemaService;
+import org.opendaylight.controller.sal.rest.doc.impl.ApiDocGenerator;
+import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+import org.osgi.util.tracker.ServiceTracker;
+import org.osgi.util.tracker.ServiceTrackerCustomizer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Collection;
+import java.util.Collections;
+
+
+public class DocProvider implements BundleActivator,
+                                    ServiceTrackerCustomizer<Broker, Broker>,
+                                    Provider,
+                                    AutoCloseable {
+
+  private Logger _logger = LoggerFactory.getLogger(DocProvider.class);
+
+  private ServiceTracker<Broker, Broker> brokerServiceTracker;
+  private BundleContext bundleContext;
+  private Broker.ProviderSession session;
+
+  @Override
+  public void close() throws Exception {
+    stop(bundleContext);
+  }
+
+  @Override
+  public void onSessionInitiated(Broker.ProviderSession providerSession) {
+    SchemaService schemaService = providerSession.getService(SchemaService.class);
+    ApiDocGenerator.getInstance().setSchemaService(schemaService);
+
+    _logger.debug("Restconf API Explorer started");
+
+  }
+
+  @Override
+  public Collection<ProviderFunctionality> getProviderFunctionality() {
+    return Collections.emptySet();
+  }
+
+  @Override
+  public void start(BundleContext context) throws Exception {
+    bundleContext = context;
+    brokerServiceTracker = new ServiceTracker(context, Broker.class, this);
+    brokerServiceTracker.open();
+  }
+
+  @Override
+  public void stop(BundleContext context) throws Exception {
+    if (brokerServiceTracker != null)
+      brokerServiceTracker.close();
+
+    if (session != null)
+      session.close();
+  }
+
+  @Override
+  public Broker addingService(ServiceReference<Broker> reference) {
+    Broker broker = bundleContext.getService(reference);
+    session = broker.registerProvider(this, bundleContext);
+    return broker;
+  }
+
+  @Override
+  public void modifiedService(ServiceReference<Broker> reference, Broker service) {
+    if (session != null)
+      session.close();
+
+    Broker broker = bundleContext.getService(reference);
+    session = broker.registerProvider(this, bundleContext);
+  }
+
+  @Override
+  public void removedService(ServiceReference<Broker> reference, Broker service) {
+    bundleContext.ungetService(reference);
+  }
+}
diff --git a/opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/api/ApiDocService.java b/opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/api/ApiDocService.java
new file mode 100644 (file)
index 0000000..3542d6a
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+ * 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.rest.doc.api;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+/**
+ * This service generates swagger
+ * (See <a href="https://helloreverb.com/developers/swagger">https://helloreverb.com/developers/swagger</a>)
+ * compliant documentation for RESTCONF APIs. The output of this is used by embedded Swagger UI.
+ */
+@Path("/")
+public interface ApiDocService {
+
+  /**
+   * Generates index document for Swagger UI. This document lists out all modules with link to get APIs for
+   * each module. The API for each module is served by <code> getDocByModule()</code> method.
+   *
+   * @param uriInfo
+   * @return
+   */
+  @GET
+  @Produces(MediaType.APPLICATION_JSON)
+  public Response getRootDoc(@Context javax.ws.rs.core.UriInfo uriInfo);
+
+  /**
+   * Generates Swagger compliant document listing APIs for module.
+   *
+   * @param module
+   * @param revision
+   * @param uriInfo
+   * @return
+   */
+  @GET
+  @Path("/{module},{revision}")
+  @Produces(MediaType.APPLICATION_JSON)
+  public Response getDocByModule(@PathParam("module") String module,
+                                 @PathParam("revision") String revision,
+                                 @Context javax.ws.rs.core.UriInfo uriInfo);
+
+  /**
+   * Redirects to embedded swagger ui.
+   *
+   * @param uriInfo
+   * @return
+   */
+  @GET
+  @Path("/ui")
+  @Produces(MediaType.TEXT_HTML)
+  public Response getApiExplorer(@Context javax.ws.rs.core.UriInfo uriInfo);
+}
diff --git a/opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/impl/ApiDocGenerator.java b/opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/impl/ApiDocGenerator.java
new file mode 100644 (file)
index 0000000..3662090
--- /dev/null
@@ -0,0 +1,306 @@
+/*
+ * 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.rest.doc.impl;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.datatype.jsonorg.JsonOrgModule;
+import com.google.common.base.Preconditions;
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.opendaylight.controller.sal.core.api.model.SchemaService;
+import org.opendaylight.controller.sal.rest.doc.model.builder.OperationBuilder;
+import org.opendaylight.controller.sal.rest.doc.swagger.*;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.ws.rs.core.UriInfo;
+import java.io.IOException;
+import java.net.URI;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+/**
+ * This class gathers all yang defined {@link Module}s and generates Swagger compliant documentation.
+ */
+public class ApiDocGenerator {
+
+  private static Logger _logger = LoggerFactory.getLogger(ApiDocGenerator.class);
+
+  private static final ApiDocGenerator INSTANCE = new ApiDocGenerator();
+  private ObjectMapper mapper = new ObjectMapper();
+  private final ModelGenerator jsonConverter = new ModelGenerator();
+
+  private SchemaService schemaService;
+
+  private final String API_VERSION = "1.0.0";
+  private final String SWAGGER_VERSION = "1.2";
+  private final String RESTCONF_CONTEXT_ROOT = "restconf";
+  private final DateFormat SIMPLE_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd");
+
+  //For now its {@link HashMap}. It will be changed to thread-safe Map when schema change listener is implemented.
+  private final Map<String, ApiDeclaration> MODULE_DOC_CACHE = new HashMap<String, ApiDeclaration>();
+
+  private ApiDocGenerator(){
+    mapper.registerModule(new JsonOrgModule());
+    mapper.configure(SerializationFeature.INDENT_OUTPUT, true);
+  }
+
+  /**
+   * Returns singleton instance
+   * @return
+   */
+  public static ApiDocGenerator getInstance() {
+    return INSTANCE;
+  }
+
+  /**
+   *
+   * @param schemaService
+   */
+  public void setSchemaService(SchemaService schemaService) {
+    this.schemaService = schemaService;
+  }
+  /**
+   *
+   * @param uriInfo
+   * @return  list of modules converted to swagger compliant resource list.
+   */
+  public ResourceList getResourceListing(UriInfo uriInfo) {
+
+    Preconditions.checkState(schemaService != null);
+    SchemaContext schemaContext = schemaService.getGlobalContext();
+    Preconditions.checkState(schemaContext != null);
+
+    Set<Module> modules = schemaContext.getModules();
+
+    ResourceList resourceList = new ResourceList();
+    resourceList.setApiVersion(API_VERSION);
+    resourceList.setSwaggerVersion(SWAGGER_VERSION);
+
+    List<Resource> resources = new ArrayList<>(modules.size());
+    _logger.info("Modules found [{}]", modules.size());
+
+    for (Module module : modules) {
+      Resource resource = new Resource();
+      String revisionString = SIMPLE_DATE_FORMAT.format(module.getRevision());
+
+      _logger.debug("Working on [{},{}]...", module.getName(), revisionString);
+      ApiDeclaration doc = getApiDeclaration(module.getName(), revisionString, uriInfo);
+
+      if (doc != null) {
+        URI uri = uriInfo.getRequestUriBuilder().
+            path(generateCacheKey(module.getName(), revisionString)).
+            build();
+
+        resource.setPath(uri.toASCIIString());
+        resources.add(resource);
+      } else {
+        _logger.debug("Could not generate doc for {},{}", module.getName(), revisionString);
+      }
+    }
+
+    resourceList.setApis(resources);
+
+    return resourceList;
+  }
+
+  public ApiDeclaration getApiDeclaration(String module, String revision, UriInfo uriInfo) {
+
+    //Lookup cache
+    String cacheKey = generateCacheKey(module, revision);
+
+    if (MODULE_DOC_CACHE.containsKey(cacheKey)) {
+      _logger.debug("Serving from cache for {}", cacheKey);
+      return MODULE_DOC_CACHE.get(cacheKey);
+    }
+
+    Date rev = null;
+    try {
+      rev = SIMPLE_DATE_FORMAT.parse(revision);
+    } catch (ParseException e) {
+      throw new IllegalArgumentException(e);
+    }
+
+    SchemaContext schemaContext = schemaService.getGlobalContext();
+    Preconditions.checkState(schemaContext != null);
+
+    Module m = schemaContext.findModuleByName(module, rev);
+    Preconditions.checkArgument(m != null, "Could not find module by name,revision: " + module + "," + revision);
+
+    String basePath = new StringBuilder(uriInfo.getBaseUri().getScheme())
+        .append("://")
+        .append(uriInfo.getBaseUri().getHost())
+        .append(":")
+        .append(uriInfo.getBaseUri().getPort())
+        .append("/")
+        .append(RESTCONF_CONTEXT_ROOT)
+        .toString();
+
+    ApiDeclaration doc = getSwaggerDocSpec(m, basePath);
+    MODULE_DOC_CACHE.put(cacheKey, doc);
+    return doc;
+  }
+
+  public ApiDeclaration getSwaggerDocSpec(Module m, String basePath) {
+    ApiDeclaration doc = new ApiDeclaration();
+    doc.setApiVersion(API_VERSION);
+    doc.setSwaggerVersion(SWAGGER_VERSION);
+    doc.setBasePath(basePath);
+    doc.setProduces(Arrays.asList("application/json", "application/xml"));
+
+    List<Api> apis = new ArrayList<Api>();
+
+    Set<DataSchemaNode> dataSchemaNodes = m.getChildNodes();
+    _logger.debug("child nodes size [{}]", dataSchemaNodes.size());
+    for (DataSchemaNode node : dataSchemaNodes) {
+      if ((node instanceof ListSchemaNode) || (node instanceof ContainerSchemaNode)) {
+
+        _logger.debug("Is Configuration node [{}] [{}]", node.isConfiguration(), node.getQName().getLocalName());
+
+        List<Parameter> pathParams = null;
+        if (node.isConfiguration()) {
+          pathParams = new ArrayList<Parameter>();
+          String resourcePath = "/config/" + m.getName() + ":";
+          addApis(node, apis, resourcePath, pathParams, true);
+
+        }
+
+        pathParams = new ArrayList<Parameter>();
+        String resourcePath = "/operational/" + m.getName() + ":";
+        addApis(node, apis, resourcePath, pathParams, false);
+      }
+    }
+
+    Set<RpcDefinition> rpcs = m.getRpcs();
+    for (RpcDefinition rpcDefinition : rpcs) {
+      String resourcePath = "/operations/" + m.getName() + ":";
+      addRpcs(rpcDefinition, apis, resourcePath);
+
+    }
+    _logger.debug("Number of APIs found [{}]", apis.size());
+    doc.setApis(apis);
+    JSONObject models = null;
+
+    try {
+      models = jsonConverter.convertToJsonSchema(m);
+      doc.setModels(models);
+      _logger.debug(mapper.writeValueAsString(doc));
+    } catch (IOException | JSONException e) {
+      e.printStackTrace();
+    }
+
+    return doc;
+  }
+
+  private String generateCacheKey(Module m) {
+    return generateCacheKey(m.getName(), SIMPLE_DATE_FORMAT.format(m.getRevision()));
+  }
+
+  private String generateCacheKey(String module, String revision) {
+    return module + "," + revision;
+  }
+
+  private void addApis(DataSchemaNode node,
+                       List<Api> apis,
+                       String parentPath,
+                       List<Parameter> parentPathParams,
+                       boolean addConfigApi) {
+
+    Api api = new Api();
+    List<Parameter> pathParams = new ArrayList<Parameter>(parentPathParams);
+
+    String resourcePath = parentPath + createPath(node, pathParams) + "/";
+    _logger.debug("Adding path: [{}]", resourcePath);
+    api.setPath(resourcePath);
+    api.setOperations(operations(node, pathParams, addConfigApi));
+    apis.add(api);
+    if ((node instanceof ListSchemaNode) || (node instanceof ContainerSchemaNode)) {
+      DataNodeContainer schemaNode = (DataNodeContainer) node;
+      Set<DataSchemaNode> dataSchemaNodes = schemaNode.getChildNodes();
+
+      for (DataSchemaNode childNode : dataSchemaNodes) {
+        addApis(childNode, apis, resourcePath, pathParams, addConfigApi);
+      }
+    }
+
+  }
+
+  private void addRpcs(RpcDefinition rpcDefn, List<Api> apis, String parentPath) {
+    Api rpc = new Api();
+    String resourcePath = parentPath + rpcDefn.getQName().getLocalName();
+    rpc.setPath(resourcePath);
+
+    Operation operationSpec = new Operation();
+    operationSpec.setMethod("POST");
+    operationSpec.setNotes(rpcDefn.getDescription());
+    operationSpec.setNickname(rpcDefn.getQName().getLocalName());
+    rpc.setOperations(Arrays.asList(operationSpec));
+
+    apis.add(rpc);
+  }
+
+  /**
+   * @param node
+   * @param pathParams
+   * @return
+   */
+  private List<Operation> operations(DataSchemaNode node, List<Parameter> pathParams, boolean isConfig) {
+    List<Operation> operations = new ArrayList<>();
+
+    OperationBuilder.Get getBuilder = new OperationBuilder.Get(node);
+    operations.add(getBuilder.pathParams(pathParams).build());
+
+    if (isConfig) {
+      OperationBuilder.Post postBuilder = new OperationBuilder.Post(node);
+      operations.add(postBuilder.pathParams(pathParams).build());
+
+      OperationBuilder.Put putBuilder = new OperationBuilder.Put(node);
+      operations.add(putBuilder.pathParams(pathParams).build());
+
+      OperationBuilder.Delete deleteBuilder = new OperationBuilder.Delete(node);
+      operations.add(deleteBuilder.pathParams(pathParams).build());
+    }
+    return operations;
+  }
+
+  private String createPath(final DataSchemaNode schemaNode, List<Parameter> pathParams) {
+    ArrayList<LeafSchemaNode> pathListParams = new ArrayList<LeafSchemaNode>();
+    StringBuilder path = new StringBuilder();
+    QName _qName = schemaNode.getQName();
+    String localName = _qName.getLocalName();
+    path.append(localName);
+
+    if ((schemaNode instanceof ListSchemaNode)) {
+      final List<QName> listKeys = ((ListSchemaNode) schemaNode).getKeyDefinition();
+      for (final QName listKey : listKeys) {
+        {
+          DataSchemaNode _dataChildByName = ((DataNodeContainer) schemaNode).getDataChildByName(listKey);
+          pathListParams.add(((LeafSchemaNode) _dataChildByName));
+
+          String pathParamIdentifier = new StringBuilder("/{").append(listKey.getLocalName()).append("}").toString();
+          path.append(pathParamIdentifier);
+
+          Parameter pathParam = new Parameter();
+          pathParam.setName(listKey.getLocalName());
+          pathParam.setDescription(_dataChildByName.getDescription());
+          pathParam.setType("string");
+          pathParam.setParamType("path");
+
+          pathParams.add(pathParam);
+        }
+      }
+    }
+    return path.toString();
+  }
+
+}
diff --git a/opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/impl/ApiDocServiceImpl.java b/opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/impl/ApiDocServiceImpl.java
new file mode 100644 (file)
index 0000000..241c8b8
--- /dev/null
@@ -0,0 +1,72 @@
+/*
+ * 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.rest.doc.impl;
+
+import org.opendaylight.controller.sal.rest.doc.api.ApiDocService;
+import org.opendaylight.controller.sal.rest.doc.swagger.ApiDeclaration;
+import org.opendaylight.controller.sal.rest.doc.swagger.ResourceList;
+
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.UriInfo;
+
+/**
+ * This service generates swagger
+ * (See <a href="https://helloreverb.com/developers/swagger">https://helloreverb.com/developers/swagger</a>)
+ * compliant documentation for RESTCONF APIs. The output of this is used by embedded Swagger UI.
+ */
+public class ApiDocServiceImpl implements ApiDocService {
+
+  private static final ApiDocService INSTANCE = new ApiDocServiceImpl();
+
+  public static ApiDocService getInstance(){
+    return INSTANCE;
+  }
+
+  /**
+   * Generates index document for Swagger UI. This document lists out all modules with link to get APIs for
+   * each module. The API for each module is served by <code> getDocByModule()</code> method.
+   *
+   * @param uriInfo
+   * @return
+   */
+  @Override
+  public Response getRootDoc(UriInfo uriInfo) {
+
+    ApiDocGenerator generator = ApiDocGenerator.getInstance();
+    ResourceList rootDoc = generator.getResourceListing(uriInfo);
+
+    return Response.ok(rootDoc).build();
+  }
+
+  /**
+   * Generates Swagger compliant document listing APIs for module.
+   *
+   * @param module
+   * @param revision
+   * @param uriInfo
+   * @return
+   */
+  @Override
+  public Response getDocByModule(String module, String revision, UriInfo uriInfo) {
+    ApiDocGenerator generator = ApiDocGenerator.getInstance();
+
+    ApiDeclaration doc = generator.getApiDeclaration(module, revision, uriInfo);
+    return Response.ok(doc).build();
+  }
+
+  /**
+   * Redirects to embedded swagger ui.
+   *
+   * @param uriInfo
+   * @return
+   */
+  @Override
+  public Response getApiExplorer(UriInfo uriInfo) {
+    return Response.seeOther(uriInfo.getBaseUriBuilder().path("../explorer/index.html").build()).build();
+  }
+}
diff --git a/opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/impl/ModelGenerator.java b/opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/impl/ModelGenerator.java
new file mode 100644 (file)
index 0000000..597051e
--- /dev/null
@@ -0,0 +1,498 @@
+/*
+ * 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.rest.doc.impl;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.opendaylight.yangtools.yang.model.api.*;
+import org.opendaylight.yangtools.yang.model.api.type.*;
+import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition.Bit;
+import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition.EnumPair;
+import org.opendaylight.yangtools.yang.model.util.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.util.*;
+
+/**
+ * Generates JSON Schema for data defined in Yang
+ */
+public class ModelGenerator {
+
+  private static Logger _logger = LoggerFactory.getLogger(ModelGenerator.class);
+
+  private static final String BASE_64 = "base64";
+  private static final String BINARY_ENCODING_KEY = "binaryEncoding";
+  private static final String MEDIA_KEY = "media";
+  private static final String ONE_OF_KEY = "oneOf";
+  private static final String UNIQUE_ITEMS_KEY = "uniqueItems";
+  private static final String MAX_ITEMS = "maxItems";
+  private static final String MIN_ITEMS = "minItems";
+  private static final String SCHEMA_URL = "http://json-schema.org/draft-04/schema";
+  private static final String SCHEMA_KEY = "$schema";
+  private static final String MAX_LENGTH_KEY = "maxLength";
+  private static final String MIN_LENGTH_KEY = "minLength";
+  private static final String REQUIRED_KEY = "required";
+  private static final String REF_KEY = "$ref";
+  private static final String ITEMS_KEY = "items";
+  private static final String TYPE_KEY = "type";
+  private static final String PROPERTIES_KEY = "properties";
+  private static final String DESCRIPTION_KEY = "description";
+  private static final String OBJECT_TYPE = "object";
+  private static final String ARRAY_TYPE = "array";
+  private static final String ENUM = "enum";
+  private static final String INTEGER = "integer";
+  private static final String NUMBER = "number";
+  private static final String BOOLEAN = "boolean";
+  private static final String STRING = "string";
+
+  private static final Map<Class<? extends TypeDefinition<?>>, String> YANG_TYPE_TO_JSON_TYPE_MAPPING;
+
+  static {
+    Map<Class<? extends TypeDefinition<?>>, String> tempMap1 = new HashMap<Class<? extends TypeDefinition<?>>, String>(10);
+    tempMap1.put(StringType.class , STRING);
+    tempMap1.put(BooleanType.class , BOOLEAN);
+    tempMap1.put(Int8.class , INTEGER);
+    tempMap1.put(Int16.class , INTEGER);
+    tempMap1.put(Int32.class , INTEGER);
+    tempMap1.put(Int64.class , INTEGER);
+    tempMap1.put(Uint16.class , INTEGER);
+    tempMap1.put(Uint32.class , INTEGER);
+    tempMap1.put(Uint64.class , INTEGER);
+    tempMap1.put(Uint8.class , INTEGER);
+    tempMap1.put(Decimal64.class , NUMBER);
+    tempMap1.put(EnumerationType.class , ENUM);
+    //TODO: Binary type
+
+    YANG_TYPE_TO_JSON_TYPE_MAPPING = Collections.unmodifiableMap(tempMap1);
+  }
+
+  public ModelGenerator(){
+  }
+
+  public JSONObject convertToJsonSchema(Module module) throws IOException, JSONException {
+    JSONObject models = new JSONObject();
+    processContainers(module, models);
+    processRPCs(module, models);
+
+    return models;
+  }
+
+
+
+  private void processContainers(Module module, JSONObject models) throws IOException, JSONException {
+
+    String moduleName = module.getName();
+    Set<DataSchemaNode> childNodes =  module.getChildNodes();
+
+    for(DataSchemaNode childNode : childNodes){
+      JSONObject moduleJSON=null;
+      String filename = childNode.getQName().getLocalName();
+                       /*
+                        * For every container in the module
+                        */
+      if(childNode instanceof ContainerSchemaNode) {
+        moduleJSON = processContainer((ContainerSchemaNode)childNode, moduleName, true, models);
+      }
+
+      if(moduleJSON!=null) {
+        _logger.debug("Adding model for [{}]", filename);
+        moduleJSON.put("id", filename);
+        models.put(filename, moduleJSON);
+      }
+    }
+
+  }
+
+
+  /**
+   * Process the RPCs for a Module
+   * Spits out a file each of the name <rpcName>-input.json
+   * and <rpcName>-output.json for each RPC that contains
+   * input & output elements
+   *
+   * @param module
+   * @throws JSONException
+   * @throws IOException
+   */
+  private void processRPCs(Module module, JSONObject models) throws JSONException, IOException {
+
+    Set<RpcDefinition> rpcs =  module.getRpcs();
+    String moduleName = module.getName();
+    for(RpcDefinition rpc: rpcs) {
+
+      ContainerSchemaNode input = rpc.getInput();
+      if(input!=null) {
+        JSONObject inputJSON = processContainer(input, moduleName, true, models);
+        String filename = rpc.getQName().getLocalName() + "-input";
+        inputJSON.put("id", filename);
+        //writeToFile(filename, inputJSON.toString(2), moduleName);
+        models.put(filename, inputJSON);
+      }
+
+      ContainerSchemaNode output = rpc.getOutput();
+      if(output!=null) {
+        JSONObject outputJSON = processContainer(output, moduleName, true, models);
+        String filename = rpc.getQName().getLocalName() + "-output";
+        outputJSON.put("id", filename);
+        models.put(filename, outputJSON);
+      }
+    }
+  }
+
+
+  /**
+   * Processes the container node and populates the moduleJSON
+   *
+   * @param container
+   * @param moduleName
+   * @throws JSONException
+   * @throws IOException
+   */
+  private JSONObject processContainer(ContainerSchemaNode container, String moduleName, boolean addSchemaStmt, JSONObject models) throws JSONException, IOException{
+    JSONObject moduleJSON = getSchemaTemplate();
+    if(addSchemaStmt) {
+      moduleJSON = getSchemaTemplate();
+    } else {
+      moduleJSON = new JSONObject();
+    }
+    moduleJSON.put(TYPE_KEY, OBJECT_TYPE);
+
+    String containerDescription = container.getDescription();
+    moduleJSON.put(DESCRIPTION_KEY, containerDescription);
+
+    Set<DataSchemaNode> containerChildren = ((ContainerSchemaNode)container).getChildNodes();
+    JSONObject properties = processChildren(containerChildren, moduleName, models);
+    moduleJSON.put(PROPERTIES_KEY, properties);
+    return moduleJSON;
+  }
+
+  /**
+   * Processes the nodes
+   * @param nodes
+   * @param moduleName
+   * @return
+   * @throws JSONException
+   * @throws IOException
+   */
+  private JSONObject processChildren(Set<DataSchemaNode> nodes, String moduleName, JSONObject models) throws JSONException, IOException {
+
+    JSONObject properties = new JSONObject();
+
+    for(DataSchemaNode node : nodes){
+      String name = node.getQName().getLocalName();
+      JSONObject property = null;
+      if(node instanceof LeafSchemaNode) {
+        property = processLeafNode((LeafSchemaNode)node);
+      } else if (node instanceof ListSchemaNode) {
+        property = processListSchemaNode((ListSchemaNode)node, moduleName, models);
+
+      } else if (node instanceof LeafListSchemaNode) {
+        property = processLeafListNode((LeafListSchemaNode)node);
+
+      } else if (node instanceof ChoiceNode) {
+        property = processChoiceNode((ChoiceNode)node, moduleName, models);
+
+      } else if (node instanceof AnyXmlSchemaNode) {
+        property = processAnyXMLNode((AnyXmlSchemaNode)node);
+
+      } else if (node instanceof ContainerSchemaNode) {
+        property = processContainer((ContainerSchemaNode)node, moduleName, false, models);
+
+      } else {
+        throw new IllegalArgumentException("Unknown DataSchemaNode type: " + node.getClass());
+      }
+
+      property.putOpt(DESCRIPTION_KEY, node.getDescription());
+      properties.put(name, property);
+    }
+    return properties;
+  }
+
+  /**
+   *
+   * @param listNode
+   * @throws JSONException
+   */
+  private JSONObject processLeafListNode(LeafListSchemaNode listNode) throws JSONException {
+    JSONObject props = new JSONObject();
+    props.put(TYPE_KEY, ARRAY_TYPE);
+
+    JSONObject itemsVal = new JSONObject();
+    processTypeDef(listNode.getType(), itemsVal);
+    props.put(ITEMS_KEY, itemsVal);
+
+    ConstraintDefinition constraints = listNode.getConstraints();
+    processConstraints(constraints, props);
+
+    return props;
+  }
+
+  /**
+   *
+   * @param choiceNode
+   * @param moduleName
+   * @throws JSONException
+   * @throws IOException
+   */
+  private JSONObject processChoiceNode(ChoiceNode choiceNode, String moduleName, JSONObject models) throws JSONException, IOException {
+
+    Set<ChoiceCaseNode> cases = choiceNode.getCases();
+
+    JSONArray choiceProps = new JSONArray();
+    for(ChoiceCaseNode choiceCase: cases) {
+      String choiceName = choiceCase.getQName().getLocalName();
+      JSONObject choiceProp = processChildren(choiceCase.getChildNodes(), moduleName, models);
+      JSONObject choiceObj = new JSONObject();
+      choiceObj.put(choiceName, choiceProp);
+      choiceObj.put(TYPE_KEY, OBJECT_TYPE);
+      choiceProps.put(choiceObj);
+    }
+
+    JSONObject oneOfProps = new JSONObject();
+    oneOfProps.put(ONE_OF_KEY, choiceProps);
+    oneOfProps.put(TYPE_KEY, OBJECT_TYPE);
+
+    return oneOfProps;
+  }
+
+
+  /**
+   *
+   * @param constraints
+   * @param props
+   * @throws JSONException
+   */
+  private void processConstraints(ConstraintDefinition constraints, JSONObject props) throws JSONException {
+    boolean isMandatory = constraints.isMandatory();
+    props.put(REQUIRED_KEY, isMandatory);
+
+    Integer minElements = constraints.getMinElements();
+    Integer maxElements = constraints.getMaxElements();
+    if(minElements !=null) {
+      props.put(MIN_ITEMS, minElements);
+    }
+    if(maxElements !=null) {
+      props.put(MAX_ITEMS, maxElements);
+    }
+  }
+
+  /**
+   * Parses a ListSchema node.
+   *
+   * Due to a limitation of the RAML--->JAX-RS tool, sub-properties
+   * must be in a separate JSON schema file. Hence, we have to write
+   * some properties to a new file, while continuing to process the rest.
+   *
+   * @param listNode
+   * @param moduleName
+   * @return
+   * @throws JSONException
+   * @throws IOException
+   */
+  private JSONObject processListSchemaNode(ListSchemaNode listNode, String moduleName, JSONObject models) throws JSONException, IOException {
+
+    Set<DataSchemaNode> listChildren = listNode.getChildNodes();
+    String fileName = listNode.getQName().getLocalName();
+
+    JSONObject childSchemaProperties = processChildren(listChildren, moduleName, models);
+    JSONObject childSchema = getSchemaTemplate();
+    childSchema.put(TYPE_KEY, OBJECT_TYPE);
+    childSchema.put(PROPERTIES_KEY, childSchemaProperties);
+
+               /*
+                * Due to a limitation of the RAML--->JAX-RS tool, sub-properties
+                * must be in a separate JSON schema file. Hence, we have to write
+                * some properties to a new file, while continuing to process the rest.
+                */
+    //writeToFile(fileName, childSchema.toString(2), moduleName);
+    childSchema.put("id", fileName);
+    models.put(fileName, childSchema);
+
+
+    JSONObject listNodeProperties = new JSONObject();
+    listNodeProperties.put(TYPE_KEY, ARRAY_TYPE);
+
+    JSONObject items = new JSONObject();
+    items.put(REF_KEY,fileName );
+    listNodeProperties.put(ITEMS_KEY, items);
+
+    return listNodeProperties;
+
+  }
+
+  /**
+   *
+   * @param leafNode
+   * @return
+   * @throws JSONException
+   */
+  private JSONObject processLeafNode(LeafSchemaNode leafNode) throws JSONException {
+    JSONObject property = new JSONObject();
+
+    String leafDescription = leafNode.getDescription();
+    property.put(DESCRIPTION_KEY, leafDescription);
+
+    processConstraints(leafNode.getConstraints(), property);
+    processTypeDef(leafNode.getType(), property);
+
+    return property;
+  }
+
+  /**
+   *
+   * @param leafNode
+   * @return
+   * @throws JSONException
+   */
+  private JSONObject processAnyXMLNode(AnyXmlSchemaNode leafNode) throws JSONException {
+    JSONObject property = new JSONObject();
+
+    String leafDescription = leafNode.getDescription();
+    property.put(DESCRIPTION_KEY, leafDescription);
+
+    processConstraints(leafNode.getConstraints(), property);
+
+    return property;
+  }
+
+  /**
+   * @param property
+   * @throws JSONException
+   */
+  private void processTypeDef(TypeDefinition<?> leafTypeDef, JSONObject property) throws JSONException {
+
+    if(leafTypeDef instanceof ExtendedType){
+      processExtendedType(leafTypeDef, property);
+    } else if (leafTypeDef instanceof EnumerationType) {
+      processEnumType((EnumerationType)leafTypeDef, property);
+
+    } else if (leafTypeDef instanceof BitsTypeDefinition) {
+      processBitsType((BitsTypeDefinition)leafTypeDef, property);
+
+    } else if (leafTypeDef instanceof UnionTypeDefinition) {
+      processUnionType((UnionTypeDefinition)leafTypeDef, property);
+
+    } else if (leafTypeDef instanceof IdentityrefTypeDefinition) {
+      property.putOpt(TYPE_KEY, "object");
+    } else if (leafTypeDef instanceof BinaryTypeDefinition) {
+      processBinaryType((BinaryTypeDefinition)leafTypeDef, property);
+    } else {
+      //System.out.println("In else: " + leafTypeDef.getClass());
+      String jsonType = YANG_TYPE_TO_JSON_TYPE_MAPPING.get(leafTypeDef.getClass());
+      if(jsonType==null) {
+        jsonType = "object";
+      }
+      property.putOpt(TYPE_KEY, jsonType);
+    }
+  }
+
+  /**
+   *
+   * @param leafTypeDef
+   * @param property
+   * @throws JSONException
+   */
+  private void processExtendedType(TypeDefinition<?> leafTypeDef, JSONObject property) throws JSONException {
+    Object leafBaseType = leafTypeDef.getBaseType();
+    if(leafBaseType instanceof ExtendedType){
+      //recursively process an extended type until we hit a base type
+      processExtendedType((TypeDefinition<?>)leafBaseType, property);
+    } else {
+      List<LengthConstraint> lengthConstraints = ((ExtendedType) leafTypeDef).getLengthConstraints();
+      for(LengthConstraint lengthConstraint: lengthConstraints) {
+        Number min = lengthConstraint.getMin();
+        Number max = lengthConstraint.getMax();
+        property.putOpt(MIN_LENGTH_KEY, min);
+        property.putOpt(MAX_LENGTH_KEY, max);
+      }
+      String jsonType = YANG_TYPE_TO_JSON_TYPE_MAPPING.get(leafBaseType.getClass());
+      property.putOpt(TYPE_KEY,jsonType );
+    }
+
+  }
+
+  /*
+   *
+   */
+  private void processBinaryType(BinaryTypeDefinition binaryType, JSONObject property) throws JSONException {
+    property.put(TYPE_KEY, STRING);
+    JSONObject media = new JSONObject();
+    media.put(BINARY_ENCODING_KEY, BASE_64);
+    property.put(MEDIA_KEY, media);
+  }
+
+  /**
+   *
+   * @param enumLeafType
+   * @param property
+   * @throws JSONException
+   */
+  private void processEnumType(EnumerationType enumLeafType, JSONObject property) throws JSONException {
+    List<EnumPair> enumPairs = enumLeafType.getValues();
+    List<String> enumNames = new ArrayList<String>();
+    for(EnumPair enumPair: enumPairs) {
+      enumNames.add(enumPair.getName());
+    }
+    property.putOpt(ENUM, new JSONArray(enumNames));
+  }
+
+  /**
+   *
+   * @param bitsType
+   * @param property
+   * @throws JSONException
+   */
+  private void processBitsType(BitsTypeDefinition bitsType, JSONObject property) throws JSONException{
+    property.put(TYPE_KEY, ARRAY_TYPE);
+    property.put(MIN_ITEMS, 0);
+    property.put(UNIQUE_ITEMS_KEY, true);
+    JSONArray enumValues = new JSONArray();
+
+    List<Bit> bits = bitsType.getBits();
+    for(Bit bit: bits) {
+      enumValues.put(bit.getName());
+    }
+    JSONObject itemsValue = new JSONObject();
+    itemsValue.put(ENUM, enumValues);
+    property.put(ITEMS_KEY, itemsValue);
+  }
+
+
+  /**
+   *
+   * @param unionType
+   * @param property
+   * @throws JSONException
+   */
+  private void processUnionType(UnionTypeDefinition unionType, JSONObject property) throws JSONException{
+
+    List<TypeDefinition<?>> unionTypes = unionType.getTypes();
+    JSONArray unionArray = new JSONArray();
+    for(TypeDefinition<?> typeDef: unionTypes) {
+      unionArray.put(YANG_TYPE_TO_JSON_TYPE_MAPPING.get(typeDef.getClass()));
+    }
+    property.put(TYPE_KEY, unionArray);
+  }
+
+
+  /**
+   * Helper method to generate a pre-filled
+   * JSON schema object.
+   * @return
+   * @throws JSONException
+   */
+  private JSONObject getSchemaTemplate() throws JSONException {
+    JSONObject schemaJSON = new JSONObject();
+    schemaJSON.put(SCHEMA_KEY, SCHEMA_URL);
+
+    return schemaJSON;
+  }
+}
diff --git a/opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/jaxrs/ApiDocApplication.java b/opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/jaxrs/ApiDocApplication.java
new file mode 100644 (file)
index 0000000..bec34b2
--- /dev/null
@@ -0,0 +1,24 @@
+/*
+ * 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.rest.doc.jaxrs;
+
+import org.opendaylight.controller.sal.rest.doc.impl.ApiDocServiceImpl;
+
+import javax.ws.rs.core.Application;
+import java.util.HashSet;
+import java.util.Set;
+
+public class ApiDocApplication extends Application {
+  @Override
+  public Set<Object> getSingletons() {
+    Set<Object> singletons = new HashSet<>();
+    singletons.add(ApiDocServiceImpl.getInstance());
+    singletons.add(new JaxbContextResolver());
+    return singletons;
+  }
+}
diff --git a/opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/jaxrs/JaxbContextResolver.java b/opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/jaxrs/JaxbContextResolver.java
new file mode 100644 (file)
index 0000000..5508507
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+ * 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.rest.doc.jaxrs;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.datatype.jsonorg.JsonOrgModule;
+import org.opendaylight.controller.sal.rest.doc.swagger.ApiDeclaration;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.ext.ContextResolver;
+import javax.ws.rs.ext.Provider;
+
+@Provider
+@Consumes(MediaType.APPLICATION_JSON)
+@Produces(MediaType.APPLICATION_JSON)
+public class JaxbContextResolver implements ContextResolver<ObjectMapper> {
+
+  private ObjectMapper ctx;
+
+  public JaxbContextResolver(){
+    ctx = new ObjectMapper();
+    ctx.registerModule(new JsonOrgModule());
+    ctx.getSerializationConfig().withSerializationInclusion(JsonInclude.Include.ALWAYS);
+  }
+
+  @Override
+  public ObjectMapper getContext(Class<?> aClass) {
+
+    if (ApiDeclaration.class.isAssignableFrom(aClass)){
+      return ctx;
+    }
+
+    return null;//must return null so that jax-rs can continue context search
+  }
+}
diff --git a/opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/model/builder/OperationBuilder.java b/opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/model/builder/OperationBuilder.java
new file mode 100644 (file)
index 0000000..fc890d5
--- /dev/null
@@ -0,0 +1,118 @@
+/*
+ * 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.rest.doc.model.builder;
+
+import org.opendaylight.controller.sal.rest.doc.swagger.Operation;
+import org.opendaylight.controller.sal.rest.doc.swagger.Parameter;
+import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *
+ */
+public final class OperationBuilder {
+
+  /**
+   *
+   */
+  public static class Get{
+
+    protected Operation spec;
+    protected DataSchemaNode schemaNode;
+    private final String METHOD_NAME = "GET";
+
+    public Get(DataSchemaNode node){
+      this.schemaNode = node;
+      spec = new Operation();
+      spec.setMethod(METHOD_NAME);
+      spec.setNickname(METHOD_NAME + "-" + node.getQName().getLocalName());
+      spec.setType(node.getQName().getLocalName());
+      spec.setNotes(node.getDescription());
+    }
+
+    public Get pathParams(List<Parameter> params){
+      List<Parameter> pathParameters = new ArrayList<>(params);
+      spec.setParameters(pathParameters);
+      return this;
+    }
+
+    public Operation build(){
+      return spec;
+    }
+  }
+
+  /**
+   *
+   */
+  public static class Put{
+    protected Operation spec;
+    protected DataSchemaNode schemaNode;
+    private final String METHOD_NAME = "PUT";
+
+    public Put(DataSchemaNode node){
+      this.schemaNode = node;
+      spec = new Operation();
+      spec.setType(node.getQName().getLocalName());
+      spec.setNotes(node.getDescription());
+    }
+
+    public Put pathParams(List<Parameter> params){
+      List<Parameter> parameters = new ArrayList<>(params);
+      Parameter payload = new Parameter();
+      payload.setParamType("body");
+      payload.setType(schemaNode.getQName().getLocalName());
+      parameters.add(payload);
+      spec.setParameters(parameters);
+      return this;
+    }
+
+    public Operation build(){
+      spec.setMethod(METHOD_NAME);
+      spec.setNickname(METHOD_NAME + "-" + schemaNode.getQName().getLocalName());
+      return spec;
+    }
+  }
+
+  /**
+   *
+   */
+  public static final class Post extends Put{
+
+    private final String METHOD_NAME = "POST";
+
+    public Post(DataSchemaNode node){
+      super(node);
+    }
+
+    public Operation build(){
+      spec.setMethod(METHOD_NAME);
+      spec.setNickname(METHOD_NAME + "-" + schemaNode.getQName().getLocalName());
+      return spec;
+    }
+  }
+
+  /**
+   *
+   */
+  public static final class Delete extends Get {
+    private final String METHOD_NAME = "DELETE";
+
+    public Delete(DataSchemaNode node){
+      super(node);
+    }
+
+    public Operation build(){
+      spec.setMethod(METHOD_NAME);
+      spec.setNickname(METHOD_NAME + "-" + schemaNode.getQName().getLocalName());
+      spec.setType(null);
+      return spec;
+    }
+  }
+}
diff --git a/opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/swagger/Api.java b/opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/swagger/Api.java
new file mode 100644 (file)
index 0000000..a2be741
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * 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.rest.doc.swagger;
+
+import java.util.List;
+
+/**
+ * Implementation of swagger spec
+ * (see <a href="https://github.com/wordnik/swagger-spec/blob/master/versions/1.2.md#522-api-object">
+ *   https://github.com/wordnik/swagger-spec/blob/master/versions/1.2.md#522-api-object</a>)
+ */
+public class Api {
+
+  private String path;
+  private List<Operation> operations;
+
+  public String getPath() {
+    return path;
+  }
+
+  public void setPath(String path) {
+    this.path = path;
+  }
+
+  public List<Operation> getOperations() {
+    return operations;
+  }
+
+  public void setOperations(List<Operation> operations) {
+    this.operations = operations;
+  }
+}
diff --git a/opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/swagger/ApiDeclaration.java b/opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/swagger/ApiDeclaration.java
new file mode 100644 (file)
index 0000000..e89bdaf
--- /dev/null
@@ -0,0 +1,91 @@
+/*
+ * 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.rest.doc.swagger;
+
+import org.json.JSONObject;
+
+import java.util.List;
+
+/**
+ * Implementation of swagger spec
+ * (see <a href="https://github.com/wordnik/swagger-spec/blob/master/versions/1.2.md#52-api-declaration">
+ *   https://github.com/wordnik/swagger-spec/blob/master/versions/1.2.md#52-api-declaration</a>)
+ */
+public class ApiDeclaration {
+  private String apiVersion;
+  private String swaggerVersion;
+  private String basePath;
+  private String resourcePath;
+  private List<String> produces;
+  private List<Api> apis;
+  private JSONObject models;
+
+  public JSONObject getModels() {
+    return models;
+  }
+
+  public void setModels(JSONObject models) {
+    this.models = models;
+  }
+
+  public String getApiVersion() {
+    return apiVersion;
+  }
+
+  public void setApiVersion(String apiVersion) {
+    this.apiVersion = apiVersion;
+  }
+
+  public String getSwaggerVersion() {
+    return swaggerVersion;
+  }
+
+  public void setSwaggerVersion(String swaggerVersion) {
+    this.swaggerVersion = swaggerVersion;
+  }
+
+  public String getBasePath() {
+    return basePath;
+  }
+
+  public void setBasePath(String basePath) {
+    this.basePath = basePath;
+  }
+
+  public String getResourcePath() {
+    return resourcePath;
+  }
+
+  public void setResourcePath(String resourcePath) {
+    this.resourcePath = resourcePath;
+  }
+
+  public List<String> getProduces() {
+    return produces;
+  }
+
+  public void setProduces(List<String> produces) {
+    this.produces = produces;
+  }
+
+  public List<Api> getApis() {
+    return apis;
+  }
+
+  public void setApis(List<Api> apis) {
+    this.apis = apis;
+  }
+
+  public boolean hasApi(){
+    return (apis != null && !apis.isEmpty());
+  }
+
+  public boolean hasModel(){
+    return (models != null && models.length() > 0);
+  }
+}
diff --git a/opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/swagger/Operation.java b/opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/swagger/Operation.java
new file mode 100644 (file)
index 0000000..d1150fd
--- /dev/null
@@ -0,0 +1,90 @@
+/*
+ * 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.rest.doc.swagger;
+
+import java.util.List;
+
+/**
+ * Implementation of swagger spec
+ * (see <a href="https://github.com/wordnik/swagger-spec/blob/master/versions/1.2.md#523-operation-object">
+ *   https://github.com/wordnik/swagger-spec/blob/master/versions/1.2.md#523-operation-object</a>)
+ */
+public class Operation {
+  private String method;
+  private String summary;
+  private String notes;
+  private String type;
+  private String nickname;
+  private List<String> consumes;
+  private List<Parameter> parameters;
+  private List<ResponseMessage> responseMessages;
+
+  public String getMethod() {
+    return method;
+  }
+
+  public void setMethod(String method) {
+    this.method = method;
+  }
+
+  public String getSummary() {
+    return summary;
+  }
+
+  public void setSummary(String summary) {
+    this.summary = summary;
+  }
+
+  public String getNotes() {
+    return notes;
+  }
+
+  public void setNotes(String notes) {
+    this.notes = notes;
+  }
+
+  public String getType() {
+    return type;
+  }
+
+  public void setType(String type) {
+    this.type = type;
+  }
+
+  public String getNickname() {
+    return nickname;
+  }
+
+  public void setNickname(String nickname) {
+    this.nickname = nickname;
+  }
+
+  public List<String> getConsumes() {
+    return consumes;
+  }
+
+  public void setConsumes(List<String> consumes) {
+    this.consumes = consumes;
+  }
+
+  public List<Parameter> getParameters() {
+    return parameters;
+  }
+
+  public void setParameters(List<Parameter> parameters) {
+    this.parameters = parameters;
+  }
+
+  public List<ResponseMessage> getResponseMessages() {
+    return responseMessages;
+  }
+
+  public void setResponseMessages(List<ResponseMessage> responseMessages) {
+    this.responseMessages = responseMessages;
+  }
+}
diff --git a/opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/swagger/Parameter.java b/opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/swagger/Parameter.java
new file mode 100644 (file)
index 0000000..dd56b9e
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+ * 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.rest.doc.swagger;
+
+/**
+ * Implementation of swagger spec
+ * (see <a href="https://github.com/wordnik/swagger-spec/blob/master/versions/1.2.md#524-parameter-object">
+ *   https://github.com/wordnik/swagger-spec/blob/master/versions/1.2.md#524-parameter-object</a>)
+ */
+public class Parameter {
+  private String name;
+  private String description;
+  private boolean required;
+  private String type;
+  private String paramType;
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+  public String getDescription() {
+    return description;
+  }
+
+  public void setDescription(String description) {
+    this.description = description;
+  }
+
+  public boolean isRequired() {
+    return required;
+  }
+
+  public void setRequired(boolean required) {
+    this.required = required;
+  }
+
+  public String getType() {
+    return type;
+  }
+
+  public void setType(String type) {
+    this.type = type;
+  }
+
+  public String getParamType() {
+    return paramType;
+  }
+
+  public void setParamType(String paramType) {
+    this.paramType = paramType;
+  }
+}
diff --git a/opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/swagger/Resource.java b/opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/swagger/Resource.java
new file mode 100644 (file)
index 0000000..c5c3979
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * 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.rest.doc.swagger;
+
+/**
+ * Implementation of swagger spec
+ * (see <a href="https://github.com/wordnik/swagger-spec/blob/master/versions/1.2.md#512-resource-object">
+ *   https://github.com/wordnik/swagger-spec/blob/master/versions/1.2.md#512-resource-object</a>)
+ */
+public class Resource {
+  private String path;
+  private String description;
+
+  public String getPath() {
+    return path;
+  }
+
+  public void setPath(String path) {
+    this.path = path;
+  }
+
+  public String getDescription() {
+    return description;
+  }
+
+  public void setDescription(String description) {
+    this.description = description;
+  }
+}
diff --git a/opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/swagger/ResourceList.java b/opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/swagger/ResourceList.java
new file mode 100644 (file)
index 0000000..9b1a106
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * 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.rest.doc.swagger;
+
+import java.util.List;
+
+/**
+ * Implementation of swagger spec
+ * (see <a href="https://github.com/wordnik/swagger-spec/blob/master/versions/1.2.md#51-resource-listing">
+ *   https://github.com/wordnik/swagger-spec/blob/master/versions/1.2.md#51-resource-listing</a>)
+ */
+public class ResourceList {
+  private String apiVersion;
+  private String swaggerVersion;
+  private List<Resource> apis;
+
+  public String getApiVersion() {
+    return apiVersion;
+  }
+
+  public void setApiVersion(String apiVersion) {
+    this.apiVersion = apiVersion;
+  }
+
+  public String getSwaggerVersion() {
+    return swaggerVersion;
+  }
+
+  public void setSwaggerVersion(String swaggerVersion) {
+    this.swaggerVersion = swaggerVersion;
+  }
+
+  public List<Resource> getApis() {
+    return apis;
+  }
+
+  public void setApis(List<Resource> apis) {
+    this.apis = apis;
+  }
+}
diff --git a/opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/swagger/ResponseMessage.java b/opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/swagger/ResponseMessage.java
new file mode 100644 (file)
index 0000000..6c23099
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * 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.rest.doc.swagger;
+
+/**
+ * Implementation of swagger spec
+ * (see <a href="https://github.com/wordnik/swagger-spec/blob/master/versions/1.2.md#525-response-message-object">
+ *   https://github.com/wordnik/swagger-spec/blob/master/versions/1.2.md#525-response-message-object</a>)
+ */
+public class ResponseMessage {
+  private int code;
+  private String message;
+
+  public int getCode() {
+    return code;
+  }
+
+  public void setCode(int code) {
+    this.code = code;
+  }
+
+  public String getMessage() {
+    return message;
+  }
+
+  public void setMessage(String message) {
+    this.message = message;
+  }
+}
diff --git a/opendaylight/md-sal/sal-rest-docgen/src/main/resources/WEB-INF/web.xml b/opendaylight/md-sal/sal-rest-docgen/src/main/resources/WEB-INF/web.xml
new file mode 100644 (file)
index 0000000..356a395
--- /dev/null
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
+    version="3.0">
+
+    <servlet>
+        <servlet-name>JAXRSApiDoc</servlet-name>
+        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
+        <init-param>
+            <param-name>javax.ws.rs.Application</param-name>
+            <param-value>org.opendaylight.controller.sal.rest.doc.jaxrs.ApiDocApplication</param-value>
+        </init-param>
+        <load-on-startup>1</load-on-startup>
+    </servlet>
+
+    <servlet-mapping>
+        <servlet-name>JAXRSApiDoc</servlet-name>
+        <url-pattern>/apis/*</url-pattern>
+    </servlet-mapping>
+
+    <!--filter>
+        <filter-name>CorsFilter</filter-name>
+        <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
+        <init-param>
+            <param-name>cors.allowed.origins</param-name>
+            <param-value>*</param-value>
+        </init-param>
+        <init-param>
+            <param-name>cors.allowed.methods</param-name>
+            <param-value>GET,POST,HEAD,OPTIONS,PUT,DELETE</param-value>
+        </init-param>
+        <init-param>
+            <param-name>cors.allowed.headers</param-name>
+            <param-value>Content-Type,X-Requested-With,accept,authorization, 
+        origin,Origin,Access-Control-Request-Method,Access-Control-Request-Headers</param-value>
+        </init-param>
+        <init-param>
+            <param-name>cors.exposed.headers</param-name>
+            <param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value>
+        </init-param>
+        <init-param>
+            <param-name>cors.support.credentials</param-name>
+            <param-value>true</param-value>
+        </init-param>
+        <init-param>
+            <param-name>cors.preflight.maxage</param-name>
+            <param-value>10</param-value>
+        </init-param>
+    </filter>
+    <filter-mapping>
+        <filter-name>CorsFilter</filter-name>
+        <url-pattern>/*</url-pattern>
+    </filter-mapping-->
+    <security-constraint>
+      <web-resource-collection>
+        <web-resource-name>free access</web-resource-name>
+        <url-pattern>/explorer/css/*</url-pattern>
+        <url-pattern>/explorer/images/*</url-pattern>
+        <url-pattern>/explorer/lib/*</url-pattern>
+        <url-pattern>/explorer/*</url-pattern>
+      </web-resource-collection>
+    </security-constraint>
+
+</web-app>
diff --git a/opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/css/highlight.default.css b/opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/css/highlight.default.css
new file mode 100644 (file)
index 0000000..e417fc1
--- /dev/null
@@ -0,0 +1,135 @@
+/*
+
+Original style from softwaremaniacs.org (c) Ivan Sagalaev <Maniac@SoftwareManiacs.Org>
+
+*/
+
+pre code {
+  display: block; padding: 0.5em;
+  background: #F0F0F0;
+}
+
+pre code,
+pre .subst,
+pre .tag .title,
+pre .lisp .title,
+pre .clojure .built_in,
+pre .nginx .title {
+  color: black;
+}
+
+pre .string,
+pre .title,
+pre .constant,
+pre .parent,
+pre .tag .value,
+pre .rules .value,
+pre .rules .value .number,
+pre .preprocessor,
+pre .ruby .symbol,
+pre .ruby .symbol .string,
+pre .aggregate,
+pre .template_tag,
+pre .django .variable,
+pre .smalltalk .class,
+pre .addition,
+pre .flow,
+pre .stream,
+pre .bash .variable,
+pre .apache .tag,
+pre .apache .cbracket,
+pre .tex .command,
+pre .tex .special,
+pre .erlang_repl .function_or_atom,
+pre .markdown .header {
+  color: #800;
+}
+
+pre .comment,
+pre .annotation,
+pre .template_comment,
+pre .diff .header,
+pre .chunk,
+pre .markdown .blockquote {
+  color: #888;
+}
+
+pre .number,
+pre .date,
+pre .regexp,
+pre .literal,
+pre .smalltalk .symbol,
+pre .smalltalk .char,
+pre .go .constant,
+pre .change,
+pre .markdown .bullet,
+pre .markdown .link_url {
+  color: #080;
+}
+
+pre .label,
+pre .javadoc,
+pre .ruby .string,
+pre .decorator,
+pre .filter .argument,
+pre .localvars,
+pre .array,
+pre .attr_selector,
+pre .important,
+pre .pseudo,
+pre .pi,
+pre .doctype,
+pre .deletion,
+pre .envvar,
+pre .shebang,
+pre .apache .sqbracket,
+pre .nginx .built_in,
+pre .tex .formula,
+pre .erlang_repl .reserved,
+pre .prompt,
+pre .markdown .link_label,
+pre .vhdl .attribute,
+pre .clojure .attribute,
+pre .coffeescript .property {
+  color: #88F
+}
+
+pre .keyword,
+pre .id,
+pre .phpdoc,
+pre .title,
+pre .built_in,
+pre .aggregate,
+pre .css .tag,
+pre .javadoctag,
+pre .phpdoc,
+pre .yardoctag,
+pre .smalltalk .class,
+pre .winutils,
+pre .bash .variable,
+pre .apache .tag,
+pre .go .typename,
+pre .tex .command,
+pre .markdown .strong,
+pre .request,
+pre .status {
+  font-weight: bold;
+}
+
+pre .markdown .emphasis {
+  font-style: italic;
+}
+
+pre .nginx .built_in {
+  font-weight: normal;
+}
+
+pre .coffeescript .javascript,
+pre .javascript .xml,
+pre .tex .formula,
+pre .xml .javascript,
+pre .xml .vbscript,
+pre .xml .css,
+pre .xml .cdata {
+  opacity: 0.5;
+}
diff --git a/opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/css/screen.css b/opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/css/screen.css
new file mode 100644 (file)
index 0000000..1627ecd
--- /dev/null
@@ -0,0 +1,1070 @@
+/* http://meyerweb.com/eric/tools/css/reset/ v2.0 | 20110126 */
+html,
+body,
+div,
+span,
+applet,
+object,
+iframe,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+p,
+blockquote,
+pre,
+a,
+abbr,
+acronym,
+address,
+big,
+cite,
+code,
+del,
+dfn,
+em,
+img,
+ins,
+kbd,
+q,
+s,
+samp,
+small,
+strike,
+strong,
+sub,
+sup,
+tt,
+var,
+b,
+u,
+i,
+center,
+dl,
+dt,
+dd,
+ol,
+ul,
+li,
+fieldset,
+form,
+label,
+legend,
+table,
+caption,
+tbody,
+tfoot,
+thead,
+tr,
+th,
+td,
+article,
+aside,
+canvas,
+details,
+embed,
+figure,
+figcaption,
+footer,
+header,
+hgroup,
+menu,
+nav,
+output,
+ruby,
+section,
+summary,
+time,
+mark,
+audio,
+video {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-size: 100%;
+  font: inherit;
+  vertical-align: baseline;
+}
+/* HTML5 display-role reset for older browsers */
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+menu,
+nav,
+section {
+  display: block;
+}
+body {
+  line-height: 1;
+}
+ol,
+ul {
+  list-style: none;
+}
+blockquote,
+q {
+  quotes: none;
+}
+blockquote:before,
+blockquote:after,
+q:before,
+q:after {
+  content: '';
+  content: none;
+}
+table {
+  border-collapse: collapse;
+  border-spacing: 0;
+}
+.swagger-ui-wrap {
+  line-height: 1;
+  font-family: "Droid Sans", sans-serif;
+  max-width: 960px;
+  margin-left: auto;
+  margin-right: auto;
+}
+.swagger-ui-wrap b,
+.swagger-ui-wrap strong {
+  font-family: "Droid Sans", sans-serif;
+  font-weight: bold;
+}
+.swagger-ui-wrap q,
+.swagger-ui-wrap blockquote {
+  quotes: none;
+}
+.swagger-ui-wrap p {
+  line-height: 1.4em;
+  padding: 0 0 10px;
+  color: #333333;
+}
+.swagger-ui-wrap q:before,
+.swagger-ui-wrap q:after,
+.swagger-ui-wrap blockquote:before,
+.swagger-ui-wrap blockquote:after {
+  content: none;
+}
+.swagger-ui-wrap .heading_with_menu h1,
+.swagger-ui-wrap .heading_with_menu h2,
+.swagger-ui-wrap .heading_with_menu h3,
+.swagger-ui-wrap .heading_with_menu h4,
+.swagger-ui-wrap .heading_with_menu h5,
+.swagger-ui-wrap .heading_with_menu h6 {
+  display: block;
+  clear: none;
+  float: left;
+  -moz-box-sizing: border-box;
+  -webkit-box-sizing: border-box;
+  -ms-box-sizing: border-box;
+  box-sizing: border-box;
+  width: 60%;
+}
+.swagger-ui-wrap table {
+  border-collapse: collapse;
+  border-spacing: 0;
+}
+.swagger-ui-wrap table thead tr th {
+  padding: 5px;
+  font-size: 0.9em;
+  color: #666666;
+  border-bottom: 1px solid #999999;
+}
+.swagger-ui-wrap table tbody tr:last-child td {
+  border-bottom: none;
+}
+.swagger-ui-wrap table tbody tr.offset {
+  background-color: #f0f0f0;
+}
+.swagger-ui-wrap table tbody tr td {
+  padding: 6px;
+  font-size: 0.9em;
+  border-bottom: 1px solid #cccccc;
+  vertical-align: top;
+  line-height: 1.3em;
+}
+.swagger-ui-wrap ol {
+  margin: 0px 0 10px;
+  padding: 0 0 0 18px;
+  list-style-type: decimal;
+}
+.swagger-ui-wrap ol li {
+  padding: 5px 0px;
+  font-size: 0.9em;
+  color: #333333;
+}
+.swagger-ui-wrap ol,
+.swagger-ui-wrap ul {
+  list-style: none;
+}
+.swagger-ui-wrap h1 a,
+.swagger-ui-wrap h2 a,
+.swagger-ui-wrap h3 a,
+.swagger-ui-wrap h4 a,
+.swagger-ui-wrap h5 a,
+.swagger-ui-wrap h6 a {
+  text-decoration: none;
+}
+.swagger-ui-wrap h1 a:hover,
+.swagger-ui-wrap h2 a:hover,
+.swagger-ui-wrap h3 a:hover,
+.swagger-ui-wrap h4 a:hover,
+.swagger-ui-wrap h5 a:hover,
+.swagger-ui-wrap h6 a:hover {
+  text-decoration: underline;
+}
+.swagger-ui-wrap h1 span.divider,
+.swagger-ui-wrap h2 span.divider,
+.swagger-ui-wrap h3 span.divider,
+.swagger-ui-wrap h4 span.divider,
+.swagger-ui-wrap h5 span.divider,
+.swagger-ui-wrap h6 span.divider {
+  color: #aaaaaa;
+}
+.swagger-ui-wrap a {
+  color: #547f00;
+}
+.swagger-ui-wrap a img {
+  border: none;
+}
+.swagger-ui-wrap article,
+.swagger-ui-wrap aside,
+.swagger-ui-wrap details,
+.swagger-ui-wrap figcaption,
+.swagger-ui-wrap figure,
+.swagger-ui-wrap footer,
+.swagger-ui-wrap header,
+.swagger-ui-wrap hgroup,
+.swagger-ui-wrap menu,
+.swagger-ui-wrap nav,
+.swagger-ui-wrap section,
+.swagger-ui-wrap summary {
+  display: block;
+}
+.swagger-ui-wrap pre {
+  font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace;
+  background-color: #fcf6db;
+  border: 1px solid #e5e0c6;
+  padding: 10px;
+}
+.swagger-ui-wrap pre code {
+  line-height: 1.6em;
+  background: none;
+}
+.swagger-ui-wrap .content > .content-type > div > label {
+  clear: both;
+  display: block;
+  color: #0F6AB4;
+  font-size: 1.1em;
+  margin: 0;
+  padding: 15px 0 5px;
+}
+.swagger-ui-wrap .content pre {
+  font-size: 12px;
+  margin-top: 5px;
+  padding: 5px;
+}
+.swagger-ui-wrap .icon-btn {
+  cursor: pointer;
+}
+.swagger-ui-wrap .info_title {
+  padding-bottom: 10px;
+  font-weight: bold;
+  font-size: 25px;
+}
+.swagger-ui-wrap p.big,
+.swagger-ui-wrap div.big p {
+  font-size: 1em;
+  margin-bottom: 10px;
+}
+.swagger-ui-wrap form.fullwidth ol li.string input,
+.swagger-ui-wrap form.fullwidth ol li.url input,
+.swagger-ui-wrap form.fullwidth ol li.text textarea,
+.swagger-ui-wrap form.fullwidth ol li.numeric input {
+  width: 500px !important;
+}
+.swagger-ui-wrap .info_license {
+  padding-bottom: 5px;
+}
+.swagger-ui-wrap .info_tos {
+  padding-bottom: 5px;
+}
+.swagger-ui-wrap .message-fail {
+  color: #cc0000;
+}
+.swagger-ui-wrap .info_contact {
+  padding-bottom: 5px;
+}
+.swagger-ui-wrap .info_description {
+  padding-bottom: 10px;
+  font-size: 15px;
+}
+.swagger-ui-wrap .markdown ol li,
+.swagger-ui-wrap .markdown ul li {
+  padding: 3px 0px;
+  line-height: 1.4em;
+  color: #333333;
+}
+.swagger-ui-wrap form.formtastic fieldset.inputs ol li.string input,
+.swagger-ui-wrap form.formtastic fieldset.inputs ol li.url input,
+.swagger-ui-wrap form.formtastic fieldset.inputs ol li.numeric input {
+  display: block;
+  padding: 4px;
+  width: auto;
+  clear: both;
+}
+.swagger-ui-wrap form.formtastic fieldset.inputs ol li.string input.title,
+.swagger-ui-wrap form.formtastic fieldset.inputs ol li.url input.title,
+.swagger-ui-wrap form.formtastic fieldset.inputs ol li.numeric input.title {
+  font-size: 1.3em;
+}
+.swagger-ui-wrap table.fullwidth {
+  width: 100%;
+}
+.swagger-ui-wrap .model-signature {
+  font-family: "Droid Sans", sans-serif;
+  font-size: 1em;
+  line-height: 1.5em;
+}
+.swagger-ui-wrap .model-signature .signature-nav a {
+  text-decoration: none;
+  color: #AAA;
+}
+.swagger-ui-wrap .model-signature .signature-nav a:hover {
+  text-decoration: underline;
+  color: black;
+}
+.swagger-ui-wrap .model-signature .signature-nav .selected {
+  color: black;
+  text-decoration: none;
+}
+.swagger-ui-wrap .model-signature .propType {
+  color: #5555aa;
+}
+.swagger-ui-wrap .model-signature pre:hover {
+  background-color: #ffffdd;
+}
+.swagger-ui-wrap .model-signature pre {
+  font-size: .85em;
+  line-height: 1.2em;
+  overflow: auto;
+  max-height: 200px;
+  cursor: pointer;
+}
+.swagger-ui-wrap .model-signature ul.signature-nav {
+  display: block;
+  margin: 0;
+  padding: 0;
+}
+.swagger-ui-wrap .model-signature ul.signature-nav li:last-child {
+  padding-right: 0;
+  border-right: none;
+}
+.swagger-ui-wrap .model-signature ul.signature-nav li {
+  float: left;
+  margin: 0 5px 5px 0;
+  padding: 2px 5px 2px 0;
+  border-right: 1px solid #ddd;
+}
+.swagger-ui-wrap .model-signature .propOpt {
+  color: #555;
+}
+.swagger-ui-wrap .model-signature .snippet small {
+  font-size: 0.75em;
+}
+.swagger-ui-wrap .model-signature .propOptKey {
+  font-style: italic;
+}
+.swagger-ui-wrap .model-signature .description .strong {
+  font-weight: bold;
+  color: #000;
+  font-size: .9em;
+}
+.swagger-ui-wrap .model-signature .description div {
+  font-size: 0.9em;
+  line-height: 1.5em;
+  margin-left: 1em;
+}
+.swagger-ui-wrap .model-signature .description .stronger {
+  font-weight: bold;
+  color: #000;
+}
+.swagger-ui-wrap .model-signature .propName {
+  font-weight: bold;
+}
+.swagger-ui-wrap .model-signature .signature-container {
+  clear: both;
+}
+.swagger-ui-wrap .body-textarea {
+  width: 300px;
+  height: 100px;
+  border: 1px solid #aaa;
+}
+.swagger-ui-wrap .markdown p code,
+.swagger-ui-wrap .markdown li code {
+  font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace;
+  background-color: #f0f0f0;
+  color: black;
+  padding: 1px 3px;
+}
+.swagger-ui-wrap .required {
+  font-weight: bold;
+}
+.swagger-ui-wrap input.parameter {
+  width: 300px;
+  border: 1px solid #aaa;
+}
+.swagger-ui-wrap h1 {
+  color: black;
+  font-size: 1.5em;
+  line-height: 1.3em;
+  padding: 10px 0 10px 0;
+  font-family: "Droid Sans", sans-serif;
+  font-weight: bold;
+}
+.swagger-ui-wrap .heading_with_menu {
+  float: none;
+  clear: both;
+  overflow: hidden;
+  display: block;
+}
+.swagger-ui-wrap .heading_with_menu ul {
+  display: block;
+  clear: none;
+  float: right;
+  -moz-box-sizing: border-box;
+  -webkit-box-sizing: border-box;
+  -ms-box-sizing: border-box;
+  box-sizing: border-box;
+  margin-top: 10px;
+}
+.swagger-ui-wrap h2 {
+  color: black;
+  font-size: 1.3em;
+  padding: 10px 0 10px 0;
+}
+.swagger-ui-wrap h2 a {
+  color: black;
+}
+.swagger-ui-wrap h2 span.sub {
+  font-size: 0.7em;
+  color: #999999;
+  font-style: italic;
+}
+.swagger-ui-wrap h2 span.sub a {
+  color: #777777;
+}
+.swagger-ui-wrap span.weak {
+  color: #666666;
+}
+.swagger-ui-wrap .message-success {
+  color: #89BF04;
+}
+.swagger-ui-wrap caption,
+.swagger-ui-wrap th,
+.swagger-ui-wrap td {
+  text-align: left;
+  font-weight: normal;
+  vertical-align: middle;
+}
+.swagger-ui-wrap .code {
+  font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace;
+}
+.swagger-ui-wrap form.formtastic fieldset.inputs ol li.text textarea {
+  font-family: "Droid Sans", sans-serif;
+  height: 250px;
+  padding: 4px;
+  display: block;
+  clear: both;
+}
+.swagger-ui-wrap form.formtastic fieldset.inputs ol li.select select {
+  display: block;
+  clear: both;
+}
+.swagger-ui-wrap form.formtastic fieldset.inputs ol li.boolean {
+  float: none;
+  clear: both;
+  overflow: hidden;
+  display: block;
+}
+.swagger-ui-wrap form.formtastic fieldset.inputs ol li.boolean label {
+  display: block;
+  float: left;
+  clear: none;
+  margin: 0;
+  padding: 0;
+}
+.swagger-ui-wrap form.formtastic fieldset.inputs ol li.boolean input {
+  display: block;
+  float: left;
+  clear: none;
+  margin: 0 5px 0 0;
+}
+.swagger-ui-wrap form.formtastic fieldset.inputs ol li.required label {
+  color: black;
+}
+.swagger-ui-wrap form.formtastic fieldset.inputs ol li label {
+  display: block;
+  clear: both;
+  width: auto;
+  padding: 0 0 3px;
+  color: #666666;
+}
+.swagger-ui-wrap form.formtastic fieldset.inputs ol li label abbr {
+  padding-left: 3px;
+  color: #888888;
+}
+.swagger-ui-wrap form.formtastic fieldset.inputs ol li p.inline-hints {
+  margin-left: 0;
+  font-style: italic;
+  font-size: 0.9em;
+  margin: 0;
+}
+.swagger-ui-wrap form.formtastic fieldset.buttons {
+  margin: 0;
+  padding: 0;
+}
+.swagger-ui-wrap span.blank,
+.swagger-ui-wrap span.empty {
+  color: #888888;
+  font-style: italic;
+}
+.swagger-ui-wrap .markdown h3 {
+  color: #547f00;
+}
+.swagger-ui-wrap .markdown h4 {
+  color: #666666;
+}
+.swagger-ui-wrap .markdown pre {
+  font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace;
+  background-color: #fcf6db;
+  border: 1px solid #e5e0c6;
+  padding: 10px;
+  margin: 0 0 10px 0;
+}
+.swagger-ui-wrap .markdown pre code {
+  line-height: 1.6em;
+}
+.swagger-ui-wrap div.gist {
+  margin: 20px 0 25px 0 !important;
+}
+.swagger-ui-wrap ul#resources {
+  font-family: "Droid Sans", sans-serif;
+  font-size: 0.9em;
+}
+.swagger-ui-wrap ul#resources li.resource {
+  border-bottom: 1px solid #dddddd;
+}
+.swagger-ui-wrap ul#resources li.resource:hover div.heading h2 a,
+.swagger-ui-wrap ul#resources li.resource.active div.heading h2 a {
+  color: black;
+}
+.swagger-ui-wrap ul#resources li.resource:hover div.heading ul.options li a,
+.swagger-ui-wrap ul#resources li.resource.active div.heading ul.options li a {
+  color: #555555;
+}
+.swagger-ui-wrap ul#resources li.resource:last-child {
+  border-bottom: none;
+}
+.swagger-ui-wrap ul#resources li.resource div.heading {
+  border: 1px solid transparent;
+  float: none;
+  clear: both;
+  overflow: hidden;
+  display: block;
+}
+.swagger-ui-wrap ul#resources li.resource div.heading ul.options {
+  overflow: hidden;
+  padding: 0;
+  display: block;
+  clear: none;
+  float: right;
+  margin: 14px 10px 0 0;
+}
+.swagger-ui-wrap ul#resources li.resource div.heading ul.options li {
+  float: left;
+  clear: none;
+  margin: 0;
+  padding: 2px 10px;
+  border-right: 1px solid #dddddd;
+  color: #666666;
+  font-size: 0.9em;
+}
+.swagger-ui-wrap ul#resources li.resource div.heading ul.options li a {
+  color: #aaaaaa;
+  text-decoration: none;
+}
+.swagger-ui-wrap ul#resources li.resource div.heading ul.options li a:hover {
+  text-decoration: underline;
+  color: black;
+}
+.swagger-ui-wrap ul#resources li.resource div.heading ul.options li a:hover,
+.swagger-ui-wrap ul#resources li.resource div.heading ul.options li a:active,
+.swagger-ui-wrap ul#resources li.resource div.heading ul.options li a.active {
+  text-decoration: underline;
+}
+.swagger-ui-wrap ul#resources li.resource div.heading ul.options li:first-child,
+.swagger-ui-wrap ul#resources li.resource div.heading ul.options li.first {
+  padding-left: 0;
+}
+.swagger-ui-wrap ul#resources li.resource div.heading ul.options li:last-child,
+.swagger-ui-wrap ul#resources li.resource div.heading ul.options li.last {
+  padding-right: 0;
+  border-right: none;
+}
+.swagger-ui-wrap ul#resources li.resource div.heading ul.options:first-child,
+.swagger-ui-wrap ul#resources li.resource div.heading ul.options.first {
+  padding-left: 0;
+}
+.swagger-ui-wrap ul#resources li.resource div.heading h2 {
+  color: #999999;
+  padding-left: 0;
+  display: block;
+  clear: none;
+  float: left;
+  font-family: "Droid Sans", sans-serif;
+  font-weight: bold;
+}
+.swagger-ui-wrap ul#resources li.resource div.heading h2 a {
+  color: #999999;
+}
+.swagger-ui-wrap ul#resources li.resource div.heading h2 a:hover {
+  color: black;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation {
+  float: none;
+  clear: both;
+  overflow: hidden;
+  display: block;
+  margin: 0 0 10px;
+  padding: 0;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading {
+  float: none;
+  clear: both;
+  overflow: hidden;
+  display: block;
+  margin: 0;
+  padding: 0;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 {
+  display: block;
+  clear: none;
+  float: left;
+  width: auto;
+  margin: 0;
+  padding: 0;
+  line-height: 1.1em;
+  color: black;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.path {
+  padding-left: 10px;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.path a {
+  color: black;
+  text-decoration: none;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.path a:hover {
+  text-decoration: underline;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.http_method a {
+  text-transform: uppercase;
+  text-decoration: none;
+  color: white;
+  display: inline-block;
+  width: 50px;
+  font-size: 0.7em;
+  text-align: center;
+  padding: 7px 0 4px;
+  -moz-border-radius: 2px;
+  -webkit-border-radius: 2px;
+  -o-border-radius: 2px;
+  -ms-border-radius: 2px;
+  -khtml-border-radius: 2px;
+  border-radius: 2px;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span {
+  margin: 0;
+  padding: 0;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options {
+  overflow: hidden;
+  padding: 0;
+  display: block;
+  clear: none;
+  float: right;
+  margin: 6px 10px 0 0;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options li {
+  float: left;
+  clear: none;
+  margin: 0;
+  padding: 2px 10px;
+  font-size: 0.9em;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options li a {
+  text-decoration: none;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content {
+  border-top: none;
+  padding: 10px;
+  -moz-border-radius-bottomleft: 6px;
+  -webkit-border-bottom-left-radius: 6px;
+  -o-border-bottom-left-radius: 6px;
+  -ms-border-bottom-left-radius: 6px;
+  -khtml-border-bottom-left-radius: 6px;
+  border-bottom-left-radius: 6px;
+  -moz-border-radius-bottomright: 6px;
+  -webkit-border-bottom-right-radius: 6px;
+  -o-border-bottom-right-radius: 6px;
+  -ms-border-bottom-right-radius: 6px;
+  -khtml-border-bottom-right-radius: 6px;
+  border-bottom-right-radius: 6px;
+  margin: 0 0 20px;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content h4 {
+  font-size: 1.1em;
+  margin: 0;
+  padding: 15px 0 5px;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header {
+  float: none;
+  clear: both;
+  overflow: hidden;
+  display: block;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header a {
+  padding: 4px 0 0 10px;
+  display: inline-block;
+  font-size: 0.9em;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header img {
+  display: block;
+  clear: none;
+  float: right;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header input.submit {
+  display: block;
+  clear: none;
+  float: left;
+  padding: 6px 8px;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content form input[type='text'].error {
+  outline: 2px solid black;
+  outline-color: #cc0000;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.response div.block pre {
+  font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace;
+  padding: 10px;
+  font-size: 0.9em;
+  max-height: 400px;
+  overflow-y: auto;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading {
+  background-color: #f9f2e9;
+  border: 1px solid #f0e0ca;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading h3 span.http_method a {
+  background-color: #c5862b;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li {
+  border-right: 1px solid #dddddd;
+  border-right-color: #f0e0ca;
+  color: #c5862b;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li a {
+  color: #c5862b;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content {
+  background-color: #faf5ee;
+  border: 1px solid #f0e0ca;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content h4 {
+  color: #c5862b;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content div.sandbox_header a {
+  color: #dcb67f;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading {
+  background-color: #fcffcd;
+  border: 1px solid black;
+  border-color: #ffd20f;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading h3 span.http_method a {
+  text-transform: uppercase;
+  background-color: #ffd20f;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li {
+  border-right: 1px solid #dddddd;
+  border-right-color: #ffd20f;
+  color: #ffd20f;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li a {
+  color: #ffd20f;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content {
+  background-color: #fcffcd;
+  border: 1px solid black;
+  border-color: #ffd20f;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content h4 {
+  color: #ffd20f;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content div.sandbox_header a {
+  color: #6fc992;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading {
+  background-color: #f5e8e8;
+  border: 1px solid #e8c6c7;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading h3 span.http_method a {
+  text-transform: uppercase;
+  background-color: #a41e22;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li {
+  border-right: 1px solid #dddddd;
+  border-right-color: #e8c6c7;
+  color: #a41e22;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li a {
+  color: #a41e22;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content {
+  background-color: #f7eded;
+  border: 1px solid #e8c6c7;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content h4 {
+  color: #a41e22;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content div.sandbox_header a {
+  color: #c8787a;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading {
+  background-color: #e7f6ec;
+  border: 1px solid #c3e8d1;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading h3 span.http_method a {
+  background-color: #10a54a;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li {
+  border-right: 1px solid #dddddd;
+  border-right-color: #c3e8d1;
+  color: #10a54a;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li a {
+  color: #10a54a;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content {
+  background-color: #ebf7f0;
+  border: 1px solid #c3e8d1;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content h4 {
+  color: #10a54a;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content div.sandbox_header a {
+  color: #6fc992;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading {
+  background-color: #FCE9E3;
+  border: 1px solid #F5D5C3;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading h3 span.http_method a {
+  background-color: #D38042;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li {
+  border-right: 1px solid #dddddd;
+  border-right-color: #f0cecb;
+  color: #D38042;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li a {
+  color: #D38042;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content {
+  background-color: #faf0ef;
+  border: 1px solid #f0cecb;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content h4 {
+  color: #D38042;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content div.sandbox_header a {
+  color: #dcb67f;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading {
+  background-color: #e7f0f7;
+  border: 1px solid #c3d9ec;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading h3 span.http_method a {
+  background-color: #0f6ab4;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li {
+  border-right: 1px solid #dddddd;
+  border-right-color: #c3d9ec;
+  color: #0f6ab4;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li a {
+  color: #0f6ab4;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content {
+  background-color: #ebf3f9;
+  border: 1px solid #c3d9ec;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content h4 {
+  color: #0f6ab4;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content div.sandbox_header a {
+  color: #6fa5d2;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content,
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content,
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content,
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content,
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content,
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content {
+  border-top: none;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li:last-child,
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li:last-child,
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li:last-child,
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li:last-child,
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li:last-child,
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li:last-child,
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li.last,
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li.last,
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li.last,
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li.last,
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li.last,
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li.last {
+  padding-right: 0;
+  border-right: none;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li a:hover,
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li a:active,
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li a.active {
+  text-decoration: underline;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li:first-child,
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li.first {
+  padding-left: 0;
+}
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations:first-child,
+.swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations.first {
+  padding-left: 0;
+}
+.swagger-ui-wrap p#colophon {
+  margin: 0 15px 40px 15px;
+  padding: 10px 0;
+  font-size: 0.8em;
+  border-top: 1px solid #dddddd;
+  font-family: "Droid Sans", sans-serif;
+  color: #999999;
+  font-style: italic;
+}
+.swagger-ui-wrap p#colophon a {
+  text-decoration: none;
+  color: #547f00;
+}
+.swagger-ui-wrap h3 {
+  color: black;
+  font-size: 1.1em;
+  padding: 10px 0 10px 0;
+}
+.swagger-ui-wrap .markdown ol,
+.swagger-ui-wrap .markdown ul {
+  font-family: "Droid Sans", sans-serif;
+  margin: 5px 0 10px;
+  padding: 0 0 0 18px;
+  list-style-type: disc;
+}
+.swagger-ui-wrap form.form_box {
+  background-color: #ebf3f9;
+  border: 1px solid #c3d9ec;
+  padding: 10px;
+}
+.swagger-ui-wrap form.form_box label {
+  color: #0f6ab4 !important;
+}
+.swagger-ui-wrap form.form_box input[type=submit] {
+  display: block;
+  padding: 10px;
+}
+.swagger-ui-wrap form.form_box p.weak {
+  font-size: 0.8em;
+}
+.swagger-ui-wrap form.form_box p {
+  font-size: 0.9em;
+  padding: 0 0 15px;
+  color: #7e7b6d;
+}
+.swagger-ui-wrap form.form_box p a {
+  color: #646257;
+}
+.swagger-ui-wrap form.form_box p strong {
+  color: black;
+}
+#header {
+  background-color: #89bf04;
+  padding: 14px;
+}
+#header a#logo {
+  font-size: 1.5em;
+  font-weight: bold;
+  text-decoration: none;
+  background: transparent url(../images/logo_small.png) no-repeat left center;
+  padding: 20px 0 20px 40px;
+  color: white;
+}
+#header form#api_selector {
+  display: block;
+  clear: none;
+  float: right;
+}
+#header form#api_selector .input {
+  display: block;
+  clear: none;
+  float: left;
+  margin: 0 10px 0 0;
+}
+#header form#api_selector .input input#input_apiKey {
+  width: 200px;
+}
+#header form#api_selector .input input#input_baseUrl {
+  width: 400px;
+}
+#header form#api_selector .input a#explore {
+  display: block;
+  text-decoration: none;
+  font-weight: bold;
+  padding: 6px 8px;
+  font-size: 0.9em;
+  color: white;
+  background-color: #547f00;
+  -moz-border-radius: 4px;
+  -webkit-border-radius: 4px;
+  -o-border-radius: 4px;
+  -ms-border-radius: 4px;
+  -khtml-border-radius: 4px;
+  border-radius: 4px;
+}
+#header form#api_selector .input a#explore:hover {
+  background-color: #547f00;
+}
+#header form#api_selector .input input {
+  font-size: 0.9em;
+  padding: 3px;
+  margin: 0;
+}
+#content_message {
+  margin: 10px 15px;
+  font-style: italic;
+  color: #999999;
+}
+#message-bar {
+  min-height: 30px;
+  text-align: center;
+  padding-top: 10px;
+}
diff --git a/opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/images/logo_small.png b/opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/images/logo_small.png
new file mode 100644 (file)
index 0000000..5496a65
Binary files /dev/null and b/opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/images/logo_small.png differ
diff --git a/opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/images/pet_store_api.png b/opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/images/pet_store_api.png
new file mode 100644 (file)
index 0000000..f9f9cd4
Binary files /dev/null and b/opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/images/pet_store_api.png differ
diff --git a/opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/images/throbber.gif b/opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/images/throbber.gif
new file mode 100644 (file)
index 0000000..0639388
Binary files /dev/null and b/opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/images/throbber.gif differ
diff --git a/opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/images/wordnik_api.png b/opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/images/wordnik_api.png
new file mode 100644 (file)
index 0000000..dca4f14
Binary files /dev/null and b/opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/images/wordnik_api.png differ
diff --git a/opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/index.html b/opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/index.html
new file mode 100644 (file)
index 0000000..b8f6775
--- /dev/null
@@ -0,0 +1,83 @@
+<!DOCTYPE html>\r
+<html>\r
+<head>\r
+  <title>Swagger UI</title>\r
+  <link href='//fonts.googleapis.com/css?family=Droid+Sans:400,700' rel='stylesheet' type='text/css'/>\r
+  <link href='css/highlight.default.css' media='screen' rel='stylesheet' type='text/css'/>\r
+  <link href='css/screen.css' media='screen' rel='stylesheet' type='text/css'/>\r
+  <script type="text/javascript" src="lib/shred.bundle.js" /></script>  \r
+  <script src='lib/jquery-1.8.0.min.js' type='text/javascript'></script>\r
+  <script src='lib/jquery.slideto.min.js' type='text/javascript'></script>\r
+  <script src='lib/jquery.wiggle.min.js' type='text/javascript'></script>\r
+  <script src='lib/jquery.ba-bbq.min.js' type='text/javascript'></script>\r
+  <script src='lib/handlebars-1.0.0.js' type='text/javascript'></script>\r
+  <script src='lib/underscore-min.js' type='text/javascript'></script>\r
+  <script src='lib/backbone-min.js' type='text/javascript'></script>\r
+  <script src='lib/swagger.js' type='text/javascript'></script>\r
+  <script src='swagger-ui.js' type='text/javascript'></script>\r
+  <script src='lib/highlight.7.3.pack.js' type='text/javascript'></script>\r
+  <script type="text/javascript">\r
+    $(function () {\r
+      window.swaggerUi = new SwaggerUi({\r
+      url: "http://localhost:8080/apidoc/apis",\r
+      dom_id: "swagger-ui-container",\r
+      supportedSubmitMethods: ['get', 'post', 'put', 'delete'],\r
+      onComplete: function(swaggerApi, swaggerUi){\r
+        if(console) {\r
+          console.log("Loaded SwaggerUI")\r
+        }\r
+        $('pre code').each(function(i, e) {hljs.highlightBlock(e)});\r
+      },\r
+      onFailure: function(data) {\r
+        if(console) {\r
+          console.log("Unable to Load SwaggerUI");\r
+          console.log(data);\r
+        }\r
+      },\r
+      docExpansion: "none"\r
+    });\r
+\r
+    $('#input_apiKey').change(function() {\r
+      var key = $('#input_apiKey')[0].value;\r
+      console.log("key: " + key);\r
+      if(key && key.trim() != "") {\r
+        console.log("added key " + key);\r
+        window.authorizations.add("key", new ApiKeyAuthorization("api_key", key, "query"));\r
+      }\r
+    })\r
+    window.swaggerUi.load();\r
+  });\r
+\r
+  </script>\r
+</head>\r
+\r
+<body>\r
+<div id='header'>\r
+  <div class="swagger-ui-wrap">\r
+    <a id="logo" href="http://swagger.wordnik.com">swagger</a>\r
+\r
+    <form id='api_selector'>\r
+      <div class='input icon-btn'>\r
+        <img id="show-pet-store-icon" src="images/pet_store_api.png" title="Show Swagger Petstore Example Apis">\r
+      </div>\r
+      <div class='input icon-btn'>\r
+        <img id="show-wordnik-dev-icon" src="images/wordnik_api.png" title="Show Wordnik Developer Apis">\r
+      </div>\r
+      <div class='input'><input placeholder="http://example.com/api" id="input_baseUrl" name="baseUrl" type="text"/></div>\r
+      <div class='input'><input placeholder="api_key" id="input_apiKey" name="apiKey" type="text"/></div>\r
+      <div class='input'><a id="explore" href="#">Explore</a></div>\r
+    </form>\r
+  </div>\r
+</div>\r
+\r
+<div id="message-bar" class="swagger-ui-wrap">\r
+  &nbsp;\r
+</div>\r
+\r
+<div id="swagger-ui-container" class="swagger-ui-wrap">\r
+\r
+</div>\r
+\r
+</body>\r
+\r
+</html>\r
diff --git a/opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/lib/backbone-min.js b/opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/lib/backbone-min.js
new file mode 100644 (file)
index 0000000..c1c0d4f
--- /dev/null
@@ -0,0 +1,38 @@
+// Backbone.js 0.9.2
+
+// (c) 2010-2012 Jeremy Ashkenas, DocumentCloud Inc.
+// Backbone may be freely distributed under the MIT license.
+// For all details and documentation:
+// http://backbonejs.org
+(function(){var l=this,y=l.Backbone,z=Array.prototype.slice,A=Array.prototype.splice,g;g="undefined"!==typeof exports?exports:l.Backbone={};g.VERSION="0.9.2";var f=l._;!f&&"undefined"!==typeof require&&(f=require("underscore"));var i=l.jQuery||l.Zepto||l.ender;g.setDomLibrary=function(a){i=a};g.noConflict=function(){l.Backbone=y;return this};g.emulateHTTP=!1;g.emulateJSON=!1;var p=/\s+/,k=g.Events={on:function(a,b,c){var d,e,f,g,j;if(!b)return this;a=a.split(p);for(d=this._callbacks||(this._callbacks=
+{});e=a.shift();)f=(j=d[e])?j.tail:{},f.next=g={},f.context=c,f.callback=b,d[e]={tail:g,next:j?j.next:f};return this},off:function(a,b,c){var d,e,h,g,j,q;if(e=this._callbacks){if(!a&&!b&&!c)return delete this._callbacks,this;for(a=a?a.split(p):f.keys(e);d=a.shift();)if(h=e[d],delete e[d],h&&(b||c))for(g=h.tail;(h=h.next)!==g;)if(j=h.callback,q=h.context,b&&j!==b||c&&q!==c)this.on(d,j,q);return this}},trigger:function(a){var b,c,d,e,f,g;if(!(d=this._callbacks))return this;f=d.all;a=a.split(p);for(g=
+z.call(arguments,1);b=a.shift();){if(c=d[b])for(e=c.tail;(c=c.next)!==e;)c.callback.apply(c.context||this,g);if(c=f){e=c.tail;for(b=[b].concat(g);(c=c.next)!==e;)c.callback.apply(c.context||this,b)}}return this}};k.bind=k.on;k.unbind=k.off;var o=g.Model=function(a,b){var c;a||(a={});b&&b.parse&&(a=this.parse(a));if(c=n(this,"defaults"))a=f.extend({},c,a);b&&b.collection&&(this.collection=b.collection);this.attributes={};this._escapedAttributes={};this.cid=f.uniqueId("c");this.changed={};this._silent=
+{};this._pending={};this.set(a,{silent:!0});this.changed={};this._silent={};this._pending={};this._previousAttributes=f.clone(this.attributes);this.initialize.apply(this,arguments)};f.extend(o.prototype,k,{changed:null,_silent:null,_pending:null,idAttribute:"id",initialize:function(){},toJSON:function(){return f.clone(this.attributes)},get:function(a){return this.attributes[a]},escape:function(a){var b;if(b=this._escapedAttributes[a])return b;b=this.get(a);return this._escapedAttributes[a]=f.escape(null==
+b?"":""+b)},has:function(a){return null!=this.get(a)},set:function(a,b,c){var d,e;f.isObject(a)||null==a?(d=a,c=b):(d={},d[a]=b);c||(c={});if(!d)return this;d instanceof o&&(d=d.attributes);if(c.unset)for(e in d)d[e]=void 0;if(!this._validate(d,c))return!1;this.idAttribute in d&&(this.id=d[this.idAttribute]);var b=c.changes={},h=this.attributes,g=this._escapedAttributes,j=this._previousAttributes||{};for(e in d){a=d[e];if(!f.isEqual(h[e],a)||c.unset&&f.has(h,e))delete g[e],(c.silent?this._silent:
+b)[e]=!0;c.unset?delete h[e]:h[e]=a;!f.isEqual(j[e],a)||f.has(h,e)!=f.has(j,e)?(this.changed[e]=a,c.silent||(this._pending[e]=!0)):(delete this.changed[e],delete this._pending[e])}c.silent||this.change(c);return this},unset:function(a,b){(b||(b={})).unset=!0;return this.set(a,null,b)},clear:function(a){(a||(a={})).unset=!0;return this.set(f.clone(this.attributes),a)},fetch:function(a){var a=a?f.clone(a):{},b=this,c=a.success;a.success=function(d,e,f){if(!b.set(b.parse(d,f),a))return!1;c&&c(b,d)};
+a.error=g.wrapError(a.error,b,a);return(this.sync||g.sync).call(this,"read",this,a)},save:function(a,b,c){var d,e;f.isObject(a)||null==a?(d=a,c=b):(d={},d[a]=b);c=c?f.clone(c):{};if(c.wait){if(!this._validate(d,c))return!1;e=f.clone(this.attributes)}a=f.extend({},c,{silent:!0});if(d&&!this.set(d,c.wait?a:c))return!1;var h=this,i=c.success;c.success=function(a,b,e){b=h.parse(a,e);if(c.wait){delete c.wait;b=f.extend(d||{},b)}if(!h.set(b,c))return false;i?i(h,a):h.trigger("sync",h,a,c)};c.error=g.wrapError(c.error,
+h,c);b=this.isNew()?"create":"update";b=(this.sync||g.sync).call(this,b,this,c);c.wait&&this.set(e,a);return b},destroy:function(a){var a=a?f.clone(a):{},b=this,c=a.success,d=function(){b.trigger("destroy",b,b.collection,a)};if(this.isNew())return d(),!1;a.success=function(e){a.wait&&d();c?c(b,e):b.trigger("sync",b,e,a)};a.error=g.wrapError(a.error,b,a);var e=(this.sync||g.sync).call(this,"delete",this,a);a.wait||d();return e},url:function(){var a=n(this,"urlRoot")||n(this.collection,"url")||t();
+return this.isNew()?a:a+("/"==a.charAt(a.length-1)?"":"/")+encodeURIComponent(this.id)},parse:function(a){return a},clone:function(){return new this.constructor(this.attributes)},isNew:function(){return null==this.id},change:function(a){a||(a={});var b=this._changing;this._changing=!0;for(var c in this._silent)this._pending[c]=!0;var d=f.extend({},a.changes,this._silent);this._silent={};for(c in d)this.trigger("change:"+c,this,this.get(c),a);if(b)return this;for(;!f.isEmpty(this._pending);){this._pending=
+{};this.trigger("change",this,a);for(c in this.changed)!this._pending[c]&&!this._silent[c]&&delete this.changed[c];this._previousAttributes=f.clone(this.attributes)}this._changing=!1;return this},hasChanged:function(a){return!arguments.length?!f.isEmpty(this.changed):f.has(this.changed,a)},changedAttributes:function(a){if(!a)return this.hasChanged()?f.clone(this.changed):!1;var b,c=!1,d=this._previousAttributes,e;for(e in a)if(!f.isEqual(d[e],b=a[e]))(c||(c={}))[e]=b;return c},previous:function(a){return!arguments.length||
+!this._previousAttributes?null:this._previousAttributes[a]},previousAttributes:function(){return f.clone(this._previousAttributes)},isValid:function(){return!this.validate(this.attributes)},_validate:function(a,b){if(b.silent||!this.validate)return!0;var a=f.extend({},this.attributes,a),c=this.validate(a,b);if(!c)return!0;b&&b.error?b.error(this,c,b):this.trigger("error",this,c,b);return!1}});var r=g.Collection=function(a,b){b||(b={});b.model&&(this.model=b.model);b.comparator&&(this.comparator=b.comparator);
+this._reset();this.initialize.apply(this,arguments);a&&this.reset(a,{silent:!0,parse:b.parse})};f.extend(r.prototype,k,{model:o,initialize:function(){},toJSON:function(a){return this.map(function(b){return b.toJSON(a)})},add:function(a,b){var c,d,e,g,i,j={},k={},l=[];b||(b={});a=f.isArray(a)?a.slice():[a];c=0;for(d=a.length;c<d;c++){if(!(e=a[c]=this._prepareModel(a[c],b)))throw Error("Can't add an invalid model to a collection");g=e.cid;i=e.id;j[g]||this._byCid[g]||null!=i&&(k[i]||this._byId[i])?
+l.push(c):j[g]=k[i]=e}for(c=l.length;c--;)a.splice(l[c],1);c=0;for(d=a.length;c<d;c++)(e=a[c]).on("all",this._onModelEvent,this),this._byCid[e.cid]=e,null!=e.id&&(this._byId[e.id]=e);this.length+=d;A.apply(this.models,[null!=b.at?b.at:this.models.length,0].concat(a));this.comparator&&this.sort({silent:!0});if(b.silent)return this;c=0;for(d=this.models.length;c<d;c++)if(j[(e=this.models[c]).cid])b.index=c,e.trigger("add",e,this,b);return this},remove:function(a,b){var c,d,e,g;b||(b={});a=f.isArray(a)?
+a.slice():[a];c=0;for(d=a.length;c<d;c++)if(g=this.getByCid(a[c])||this.get(a[c]))delete this._byId[g.id],delete this._byCid[g.cid],e=this.indexOf(g),this.models.splice(e,1),this.length--,b.silent||(b.index=e,g.trigger("remove",g,this,b)),this._removeReference(g);return this},push:function(a,b){a=this._prepareModel(a,b);this.add(a,b);return a},pop:function(a){var b=this.at(this.length-1);this.remove(b,a);return b},unshift:function(a,b){a=this._prepareModel(a,b);this.add(a,f.extend({at:0},b));return a},
+shift:function(a){var b=this.at(0);this.remove(b,a);return b},get:function(a){return null==a?void 0:this._byId[null!=a.id?a.id:a]},getByCid:function(a){return a&&this._byCid[a.cid||a]},at:function(a){return this.models[a]},where:function(a){return f.isEmpty(a)?[]:this.filter(function(b){for(var c in a)if(a[c]!==b.get(c))return!1;return!0})},sort:function(a){a||(a={});if(!this.comparator)throw Error("Cannot sort a set without a comparator");var b=f.bind(this.comparator,this);1==this.comparator.length?
+this.models=this.sortBy(b):this.models.sort(b);a.silent||this.trigger("reset",this,a);return this},pluck:function(a){return f.map(this.models,function(b){return b.get(a)})},reset:function(a,b){a||(a=[]);b||(b={});for(var c=0,d=this.models.length;c<d;c++)this._removeReference(this.models[c]);this._reset();this.add(a,f.extend({silent:!0},b));b.silent||this.trigger("reset",this,b);return this},fetch:function(a){a=a?f.clone(a):{};void 0===a.parse&&(a.parse=!0);var b=this,c=a.success;a.success=function(d,
+e,f){b[a.add?"add":"reset"](b.parse(d,f),a);c&&c(b,d)};a.error=g.wrapError(a.error,b,a);return(this.sync||g.sync).call(this,"read",this,a)},create:function(a,b){var c=this,b=b?f.clone(b):{},a=this._prepareModel(a,b);if(!a)return!1;b.wait||c.add(a,b);var d=b.success;b.success=function(e,f){b.wait&&c.add(e,b);d?d(e,f):e.trigger("sync",a,f,b)};a.save(null,b);return a},parse:function(a){return a},chain:function(){return f(this.models).chain()},_reset:function(){this.length=0;this.models=[];this._byId=
+{};this._byCid={}},_prepareModel:function(a,b){b||(b={});a instanceof o?a.collection||(a.collection=this):(b.collection=this,a=new this.model(a,b),a._validate(a.attributes,b)||(a=!1));return a},_removeReference:function(a){this==a.collection&&delete a.collection;a.off("all",this._onModelEvent,this)},_onModelEvent:function(a,b,c,d){("add"==a||"remove"==a)&&c!=this||("destroy"==a&&this.remove(b,d),b&&a==="change:"+b.idAttribute&&(delete this._byId[b.previous(b.idAttribute)],this._byId[b.id]=b),this.trigger.apply(this,
+arguments))}});f.each("forEach,each,map,reduce,reduceRight,find,detect,filter,select,reject,every,all,some,any,include,contains,invoke,max,min,sortBy,sortedIndex,toArray,size,first,initial,rest,last,without,indexOf,shuffle,lastIndexOf,isEmpty,groupBy".split(","),function(a){r.prototype[a]=function(){return f[a].apply(f,[this.models].concat(f.toArray(arguments)))}});var u=g.Router=function(a){a||(a={});a.routes&&(this.routes=a.routes);this._bindRoutes();this.initialize.apply(this,arguments)},B=/:\w+/g,
+C=/\*\w+/g,D=/[-[\]{}()+?.,\\^$|#\s]/g;f.extend(u.prototype,k,{initialize:function(){},route:function(a,b,c){g.history||(g.history=new m);f.isRegExp(a)||(a=this._routeToRegExp(a));c||(c=this[b]);g.history.route(a,f.bind(function(d){d=this._extractParameters(a,d);c&&c.apply(this,d);this.trigger.apply(this,["route:"+b].concat(d));g.history.trigger("route",this,b,d)},this));return this},navigate:function(a,b){g.history.navigate(a,b)},_bindRoutes:function(){if(this.routes){var a=[],b;for(b in this.routes)a.unshift([b,
+this.routes[b]]);b=0;for(var c=a.length;b<c;b++)this.route(a[b][0],a[b][1],this[a[b][1]])}},_routeToRegExp:function(a){a=a.replace(D,"\\$&").replace(B,"([^/]+)").replace(C,"(.*?)");return RegExp("^"+a+"$")},_extractParameters:function(a,b){return a.exec(b).slice(1)}});var m=g.History=function(){this.handlers=[];f.bindAll(this,"checkUrl")},s=/^[#\/]/,E=/msie [\w.]+/;m.started=!1;f.extend(m.prototype,k,{interval:50,getHash:function(a){return(a=(a?a.location:window.location).href.match(/#(.*)$/))?a[1]:
+""},getFragment:function(a,b){if(null==a)if(this._hasPushState||b){var a=window.location.pathname,c=window.location.search;c&&(a+=c)}else a=this.getHash();a.indexOf(this.options.root)||(a=a.substr(this.options.root.length));return a.replace(s,"")},start:function(a){if(m.started)throw Error("Backbone.history has already been started");m.started=!0;this.options=f.extend({},{root:"/"},this.options,a);this._wantsHashChange=!1!==this.options.hashChange;this._wantsPushState=!!this.options.pushState;this._hasPushState=
+!(!this.options.pushState||!window.history||!window.history.pushState);var a=this.getFragment(),b=document.documentMode;if(b=E.exec(navigator.userAgent.toLowerCase())&&(!b||7>=b))this.iframe=i('<iframe src="javascript:0" tabindex="-1" />').hide().appendTo("body")[0].contentWindow,this.navigate(a);this._hasPushState?i(window).bind("popstate",this.checkUrl):this._wantsHashChange&&"onhashchange"in window&&!b?i(window).bind("hashchange",this.checkUrl):this._wantsHashChange&&(this._checkUrlInterval=setInterval(this.checkUrl,
+this.interval));this.fragment=a;a=window.location;b=a.pathname==this.options.root;if(this._wantsHashChange&&this._wantsPushState&&!this._hasPushState&&!b)return this.fragment=this.getFragment(null,!0),window.location.replace(this.options.root+"#"+this.fragment),!0;this._wantsPushState&&this._hasPushState&&b&&a.hash&&(this.fragment=this.getHash().replace(s,""),window.history.replaceState({},document.title,a.protocol+"//"+a.host+this.options.root+this.fragment));if(!this.options.silent)return this.loadUrl()},
+stop:function(){i(window).unbind("popstate",this.checkUrl).unbind("hashchange",this.checkUrl);clearInterval(this._checkUrlInterval);m.started=!1},route:function(a,b){this.handlers.unshift({route:a,callback:b})},checkUrl:function(){var a=this.getFragment();a==this.fragment&&this.iframe&&(a=this.getFragment(this.getHash(this.iframe)));if(a==this.fragment)return!1;this.iframe&&this.navigate(a);this.loadUrl()||this.loadUrl(this.getHash())},loadUrl:function(a){var b=this.fragment=this.getFragment(a);return f.any(this.handlers,
+function(a){if(a.route.test(b))return a.callback(b),!0})},navigate:function(a,b){if(!m.started)return!1;if(!b||!0===b)b={trigger:b};var c=(a||"").replace(s,"");this.fragment!=c&&(this._hasPushState?(0!=c.indexOf(this.options.root)&&(c=this.options.root+c),this.fragment=c,window.history[b.replace?"replaceState":"pushState"]({},document.title,c)):this._wantsHashChange?(this.fragment=c,this._updateHash(window.location,c,b.replace),this.iframe&&c!=this.getFragment(this.getHash(this.iframe))&&(b.replace||
+this.iframe.document.open().close(),this._updateHash(this.iframe.location,c,b.replace))):window.location.assign(this.options.root+a),b.trigger&&this.loadUrl(a))},_updateHash:function(a,b,c){c?a.replace(a.toString().replace(/(javascript:|#).*$/,"")+"#"+b):a.hash=b}});var v=g.View=function(a){this.cid=f.uniqueId("view");this._configure(a||{});this._ensureElement();this.initialize.apply(this,arguments);this.delegateEvents()},F=/^(\S+)\s*(.*)$/,w="model,collection,el,id,attributes,className,tagName".split(",");
+f.extend(v.prototype,k,{tagName:"div",$:function(a){return this.$el.find(a)},initialize:function(){},render:function(){return this},remove:function(){this.$el.remove();return this},make:function(a,b,c){a=document.createElement(a);b&&i(a).attr(b);c&&i(a).html(c);return a},setElement:function(a,b){this.$el&&this.undelegateEvents();this.$el=a instanceof i?a:i(a);this.el=this.$el[0];!1!==b&&this.delegateEvents();return this},delegateEvents:function(a){if(a||(a=n(this,"events"))){this.undelegateEvents();
+for(var b in a){var c=a[b];f.isFunction(c)||(c=this[a[b]]);if(!c)throw Error('Method "'+a[b]+'" does not exist');var d=b.match(F),e=d[1],d=d[2],c=f.bind(c,this),e=e+(".delegateEvents"+this.cid);""===d?this.$el.bind(e,c):this.$el.delegate(d,e,c)}}},undelegateEvents:function(){this.$el.unbind(".delegateEvents"+this.cid)},_configure:function(a){this.options&&(a=f.extend({},this.options,a));for(var b=0,c=w.length;b<c;b++){var d=w[b];a[d]&&(this[d]=a[d])}this.options=a},_ensureElement:function(){if(this.el)this.setElement(this.el,
+!1);else{var a=n(this,"attributes")||{};this.id&&(a.id=this.id);this.className&&(a["class"]=this.className);this.setElement(this.make(this.tagName,a),!1)}}});o.extend=r.extend=u.extend=v.extend=function(a,b){var c=G(this,a,b);c.extend=this.extend;return c};var H={create:"POST",update:"PUT","delete":"DELETE",read:"GET"};g.sync=function(a,b,c){var d=H[a];c||(c={});var e={type:d,dataType:"json"};c.url||(e.url=n(b,"url")||t());if(!c.data&&b&&("create"==a||"update"==a))e.contentType="application/json",
+e.data=JSON.stringify(b.toJSON());g.emulateJSON&&(e.contentType="application/x-www-form-urlencoded",e.data=e.data?{model:e.data}:{});if(g.emulateHTTP&&("PUT"===d||"DELETE"===d))g.emulateJSON&&(e.data._method=d),e.type="POST",e.beforeSend=function(a){a.setRequestHeader("X-HTTP-Method-Override",d)};"GET"!==e.type&&!g.emulateJSON&&(e.processData=!1);return i.ajax(f.extend(e,c))};g.wrapError=function(a,b,c){return function(d,e){e=d===b?e:d;a?a(b,e,c):b.trigger("error",b,e,c)}};var x=function(){},G=function(a,
+b,c){var d;d=b&&b.hasOwnProperty("constructor")?b.constructor:function(){a.apply(this,arguments)};f.extend(d,a);x.prototype=a.prototype;d.prototype=new x;b&&f.extend(d.prototype,b);c&&f.extend(d,c);d.prototype.constructor=d;d.__super__=a.prototype;return d},n=function(a,b){return!a||!a[b]?null:f.isFunction(a[b])?a[b]():a[b]},t=function(){throw Error('A "url" property or function must be specified');}}).call(this);
diff --git a/opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/lib/handlebars-1.0.0.js b/opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/lib/handlebars-1.0.0.js
new file mode 100644 (file)
index 0000000..c70f09d
--- /dev/null
@@ -0,0 +1,2278 @@
+/*
+
+Copyright (C) 2011 by Yehuda Katz
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+*/
+
+// lib/handlebars/browser-prefix.js
+var Handlebars = {};
+
+(function(Handlebars, undefined) {
+;
+// lib/handlebars/base.js
+
+Handlebars.VERSION = "1.0.0";
+Handlebars.COMPILER_REVISION = 4;
+
+Handlebars.REVISION_CHANGES = {
+  1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it
+  2: '== 1.0.0-rc.3',
+  3: '== 1.0.0-rc.4',
+  4: '>= 1.0.0'
+};
+
+Handlebars.helpers  = {};
+Handlebars.partials = {};
+
+var toString = Object.prototype.toString,
+    functionType = '[object Function]',
+    objectType = '[object Object]';
+
+Handlebars.registerHelper = function(name, fn, inverse) {
+  if (toString.call(name) === objectType) {
+    if (inverse || fn) { throw new Handlebars.Exception('Arg not supported with multiple helpers'); }
+    Handlebars.Utils.extend(this.helpers, name);
+  } else {
+    if (inverse) { fn.not = inverse; }
+    this.helpers[name] = fn;
+  }
+};
+
+Handlebars.registerPartial = function(name, str) {
+  if (toString.call(name) === objectType) {
+    Handlebars.Utils.extend(this.partials,  name);
+  } else {
+    this.partials[name] = str;
+  }
+};
+
+Handlebars.registerHelper('helperMissing', function(arg) {
+  if(arguments.length === 2) {
+    return undefined;
+  } else {
+    throw new Error("Missing helper: '" + arg + "'");
+  }
+});
+
+Handlebars.registerHelper('blockHelperMissing', function(context, options) {
+  var inverse = options.inverse || function() {}, fn = options.fn;
+
+  var type = toString.call(context);
+
+  if(type === functionType) { context = context.call(this); }
+
+  if(context === true) {
+    return fn(this);
+  } else if(context === false || context == null) {
+    return inverse(this);
+  } else if(type === "[object Array]") {
+    if(context.length > 0) {
+      return Handlebars.helpers.each(context, options);
+    } else {
+      return inverse(this);
+    }
+  } else {
+    return fn(context);
+  }
+});
+
+Handlebars.K = function() {};
+
+Handlebars.createFrame = Object.create || function(object) {
+  Handlebars.K.prototype = object;
+  var obj = new Handlebars.K();
+  Handlebars.K.prototype = null;
+  return obj;
+};
+
+Handlebars.logger = {
+  DEBUG: 0, INFO: 1, WARN: 2, ERROR: 3, level: 3,
+
+  methodMap: {0: 'debug', 1: 'info', 2: 'warn', 3: 'error'},
+
+  // can be overridden in the host environment
+  log: function(level, obj) {
+    if (Handlebars.logger.level <= level) {
+      var method = Handlebars.logger.methodMap[level];
+      if (typeof console !== 'undefined' && console[method]) {
+        console[method].call(console, obj);
+      }
+    }
+  }
+};
+
+Handlebars.log = function(level, obj) { Handlebars.logger.log(level, obj); };
+
+Handlebars.registerHelper('each', function(context, options) {
+  var fn = options.fn, inverse = options.inverse;
+  var i = 0, ret = "", data;
+
+  var type = toString.call(context);
+  if(type === functionType) { context = context.call(this); }
+
+  if (options.data) {
+    data = Handlebars.createFrame(options.data);
+  }
+
+  if(context && typeof context === 'object') {
+    if(context instanceof Array){
+      for(var j = context.length; i<j; i++) {
+        if (data) { data.index = i; }
+        ret = ret + fn(context[i], { data: data });
+      }
+    } else {
+      for(var key in context) {
+        if(context.hasOwnProperty(key)) {
+          if(data) { data.key = key; }
+          ret = ret + fn(context[key], {data: data});
+          i++;
+        }
+      }
+    }
+  }
+
+  if(i === 0){
+    ret = inverse(this);
+  }
+
+  return ret;
+});
+
+Handlebars.registerHelper('if', function(conditional, options) {
+  var type = toString.call(conditional);
+  if(type === functionType) { conditional = conditional.call(this); }
+
+  if(!conditional || Handlebars.Utils.isEmpty(conditional)) {
+    return options.inverse(this);
+  } else {
+    return options.fn(this);
+  }
+});
+
+Handlebars.registerHelper('unless', function(conditional, options) {
+  return Handlebars.helpers['if'].call(this, conditional, {fn: options.inverse, inverse: options.fn});
+});
+
+Handlebars.registerHelper('with', function(context, options) {
+  var type = toString.call(context);
+  if(type === functionType) { context = context.call(this); }
+
+  if (!Handlebars.Utils.isEmpty(context)) return options.fn(context);
+});
+
+Handlebars.registerHelper('log', function(context, options) {
+  var level = options.data && options.data.level != null ? parseInt(options.data.level, 10) : 1;
+  Handlebars.log(level, context);
+});
+;
+// lib/handlebars/compiler/parser.js
+/* Jison generated parser */
+var handlebars = (function(){
+var parser = {trace: function trace() { },
+yy: {},
+symbols_: {"error":2,"root":3,"program":4,"EOF":5,"simpleInverse":6,"statements":7,"statement":8,"openInverse":9,"closeBlock":10,"openBlock":11,"mustache":12,"partial":13,"CONTENT":14,"COMMENT":15,"OPEN_BLOCK":16,"inMustache":17,"CLOSE":18,"OPEN_INVERSE":19,"OPEN_ENDBLOCK":20,"path":21,"OPEN":22,"OPEN_UNESCAPED":23,"CLOSE_UNESCAPED":24,"OPEN_PARTIAL":25,"partialName":26,"params":27,"hash":28,"dataName":29,"param":30,"STRING":31,"INTEGER":32,"BOOLEAN":33,"hashSegments":34,"hashSegment":35,"ID":36,"EQUALS":37,"DATA":38,"pathSegments":39,"SEP":40,"$accept":0,"$end":1},
+terminals_: {2:"error",5:"EOF",14:"CONTENT",15:"COMMENT",16:"OPEN_BLOCK",18:"CLOSE",19:"OPEN_INVERSE",20:"OPEN_ENDBLOCK",22:"OPEN",23:"OPEN_UNESCAPED",24:"CLOSE_UNESCAPED",25:"OPEN_PARTIAL",31:"STRING",32:"INTEGER",33:"BOOLEAN",36:"ID",37:"EQUALS",38:"DATA",40:"SEP"},
+productions_: [0,[3,2],[4,2],[4,3],[4,2],[4,1],[4,1],[4,0],[7,1],[7,2],[8,3],[8,3],[8,1],[8,1],[8,1],[8,1],[11,3],[9,3],[10,3],[12,3],[12,3],[13,3],[13,4],[6,2],[17,3],[17,2],[17,2],[17,1],[17,1],[27,2],[27,1],[30,1],[30,1],[30,1],[30,1],[30,1],[28,1],[34,2],[34,1],[35,3],[35,3],[35,3],[35,3],[35,3],[26,1],[26,1],[26,1],[29,2],[21,1],[39,3],[39,1]],
+performAction: function anonymous(yytext,yyleng,yylineno,yy,yystate,$$,_$) {
+
+var $0 = $$.length - 1;
+switch (yystate) {
+case 1: return $$[$0-1]; 
+break;
+case 2: this.$ = new yy.ProgramNode([], $$[$0]); 
+break;
+case 3: this.$ = new yy.ProgramNode($$[$0-2], $$[$0]); 
+break;
+case 4: this.$ = new yy.ProgramNode($$[$0-1], []); 
+break;
+case 5: this.$ = new yy.ProgramNode($$[$0]); 
+break;
+case 6: this.$ = new yy.ProgramNode([], []); 
+break;
+case 7: this.$ = new yy.ProgramNode([]); 
+break;
+case 8: this.$ = [$$[$0]]; 
+break;
+case 9: $$[$0-1].push($$[$0]); this.$ = $$[$0-1]; 
+break;
+case 10: this.$ = new yy.BlockNode($$[$0-2], $$[$0-1].inverse, $$[$0-1], $$[$0]); 
+break;
+case 11: this.$ = new yy.BlockNode($$[$0-2], $$[$0-1], $$[$0-1].inverse, $$[$0]); 
+break;
+case 12: this.$ = $$[$0]; 
+break;
+case 13: this.$ = $$[$0]; 
+break;
+case 14: this.$ = new yy.ContentNode($$[$0]); 
+break;
+case 15: this.$ = new yy.CommentNode($$[$0]); 
+break;
+case 16: this.$ = new yy.MustacheNode($$[$0-1][0], $$[$0-1][1]); 
+break;
+case 17: this.$ = new yy.MustacheNode($$[$0-1][0], $$[$0-1][1]); 
+break;
+case 18: this.$ = $$[$0-1]; 
+break;
+case 19:
+    // Parsing out the '&' escape token at this level saves ~500 bytes after min due to the removal of one parser node.
+    this.$ = new yy.MustacheNode($$[$0-1][0], $$[$0-1][1], $$[$0-2][2] === '&');
+  
+break;
+case 20: this.$ = new yy.MustacheNode($$[$0-1][0], $$[$0-1][1], true); 
+break;
+case 21: this.$ = new yy.PartialNode($$[$0-1]); 
+break;
+case 22: this.$ = new yy.PartialNode($$[$0-2], $$[$0-1]); 
+break;
+case 23: 
+break;
+case 24: this.$ = [[$$[$0-2]].concat($$[$0-1]), $$[$0]]; 
+break;
+case 25: this.$ = [[$$[$0-1]].concat($$[$0]), null]; 
+break;
+case 26: this.$ = [[$$[$0-1]], $$[$0]]; 
+break;
+case 27: this.$ = [[$$[$0]], null]; 
+break;
+case 28: this.$ = [[$$[$0]], null]; 
+break;
+case 29: $$[$0-1].push($$[$0]); this.$ = $$[$0-1]; 
+break;
+case 30: this.$ = [$$[$0]]; 
+break;
+case 31: this.$ = $$[$0]; 
+break;
+case 32: this.$ = new yy.StringNode($$[$0]); 
+break;
+case 33: this.$ = new yy.IntegerNode($$[$0]); 
+break;
+case 34: this.$ = new yy.BooleanNode($$[$0]); 
+break;
+case 35: this.$ = $$[$0]; 
+break;
+case 36: this.$ = new yy.HashNode($$[$0]); 
+break;
+case 37: $$[$0-1].push($$[$0]); this.$ = $$[$0-1]; 
+break;
+case 38: this.$ = [$$[$0]]; 
+break;
+case 39: this.$ = [$$[$0-2], $$[$0]]; 
+break;
+case 40: this.$ = [$$[$0-2], new yy.StringNode($$[$0])]; 
+break;
+case 41: this.$ = [$$[$0-2], new yy.IntegerNode($$[$0])]; 
+break;
+case 42: this.$ = [$$[$0-2], new yy.BooleanNode($$[$0])]; 
+break;
+case 43: this.$ = [$$[$0-2], $$[$0]]; 
+break;
+case 44: this.$ = new yy.PartialNameNode($$[$0]); 
+break;
+case 45: this.$ = new yy.PartialNameNode(new yy.StringNode($$[$0])); 
+break;
+case 46: this.$ = new yy.PartialNameNode(new yy.IntegerNode($$[$0])); 
+break;
+case 47: this.$ = new yy.DataNode($$[$0]); 
+break;
+case 48: this.$ = new yy.IdNode($$[$0]); 
+break;
+case 49: $$[$0-2].push({part: $$[$0], separator: $$[$0-1]}); this.$ = $$[$0-2]; 
+break;
+case 50: this.$ = [{part: $$[$0]}]; 
+break;
+}
+},
+table: [{3:1,4:2,5:[2,7],6:3,7:4,8:6,9:7,11:8,12:9,13:10,14:[1,11],15:[1,12],16:[1,13],19:[1,5],22:[1,14],23:[1,15],25:[1,16]},{1:[3]},{5:[1,17]},{5:[2,6],7:18,8:6,9:7,11:8,12:9,13:10,14:[1,11],15:[1,12],16:[1,13],19:[1,19],20:[2,6],22:[1,14],23:[1,15],25:[1,16]},{5:[2,5],6:20,8:21,9:7,11:8,12:9,13:10,14:[1,11],15:[1,12],16:[1,13],19:[1,5],20:[2,5],22:[1,14],23:[1,15],25:[1,16]},{17:23,18:[1,22],21:24,29:25,36:[1,28],38:[1,27],39:26},{5:[2,8],14:[2,8],15:[2,8],16:[2,8],19:[2,8],20:[2,8],22:[2,8],23:[2,8],25:[2,8]},{4:29,6:3,7:4,8:6,9:7,11:8,12:9,13:10,14:[1,11],15:[1,12],16:[1,13],19:[1,5],20:[2,7],22:[1,14],23:[1,15],25:[1,16]},{4:30,6:3,7:4,8:6,9:7,11:8,12:9,13:10,14:[1,11],15:[1,12],16:[1,13],19:[1,5],20:[2,7],22:[1,14],23:[1,15],25:[1,16]},{5:[2,12],14:[2,12],15:[2,12],16:[2,12],19:[2,12],20:[2,12],22:[2,12],23:[2,12],25:[2,12]},{5:[2,13],14:[2,13],15:[2,13],16:[2,13],19:[2,13],20:[2,13],22:[2,13],23:[2,13],25:[2,13]},{5:[2,14],14:[2,14],15:[2,14],16:[2,14],19:[2,14],20:[2,14],22:[2,14],23:[2,14],25:[2,14]},{5:[2,15],14:[2,15],15:[2,15],16:[2,15],19:[2,15],20:[2,15],22:[2,15],23:[2,15],25:[2,15]},{17:31,21:24,29:25,36:[1,28],38:[1,27],39:26},{17:32,21:24,29:25,36:[1,28],38:[1,27],39:26},{17:33,21:24,29:25,36:[1,28],38:[1,27],39:26},{21:35,26:34,31:[1,36],32:[1,37],36:[1,28],39:26},{1:[2,1]},{5:[2,2],8:21,9:7,11:8,12:9,13:10,14:[1,11],15:[1,12],16:[1,13],19:[1,19],20:[2,2],22:[1,14],23:[1,15],25:[1,16]},{17:23,21:24,29:25,36:[1,28],38:[1,27],39:26},{5:[2,4],7:38,8:6,9:7,11:8,12:9,13:10,14:[1,11],15:[1,12],16:[1,13],19:[1,19],20:[2,4],22:[1,14],23:[1,15],25:[1,16]},{5:[2,9],14:[2,9],15:[2,9],16:[2,9],19:[2,9],20:[2,9],22:[2,9],23:[2,9],25:[2,9]},{5:[2,23],14:[2,23],15:[2,23],16:[2,23],19:[2,23],20:[2,23],22:[2,23],23:[2,23],25:[2,23]},{18:[1,39]},{18:[2,27],21:44,24:[2,27],27:40,28:41,29:48,30:42,31:[1,45],32:[1,46],33:[1,47],34:43,35:49,36:[1,50],38:[1,27],39:26},{18:[2,28],24:[2,28]},{18:[2,48],24:[2,48],31:[2,48],32:[2,48],33:[2,48],36:[2,48],38:[2,48],40:[1,51]},{21:52,36:[1,28],39:26},{18:[2,50],24:[2,50],31:[2,50],32:[2,50],33:[2,50],36:[2,50],38:[2,50],40:[2,50]},{10:53,20:[1,54]},{10:55,20:[1,54]},{18:[1,56]},{18:[1,57]},{24:[1,58]},{18:[1,59],21:60,36:[1,28],39:26},{18:[2,44],36:[2,44]},{18:[2,45],36:[2,45]},{18:[2,46],36:[2,46]},{5:[2,3],8:21,9:7,11:8,12:9,13:10,14:[1,11],15:[1,12],16:[1,13],19:[1,19],20:[2,3],22:[1,14],23:[1,15],25:[1,16]},{14:[2,17],15:[2,17],16:[2,17],19:[2,17],20:[2,17],22:[2,17],23:[2,17],25:[2,17]},{18:[2,25],21:44,24:[2,25],28:61,29:48,30:62,31:[1,45],32:[1,46],33:[1,47],34:43,35:49,36:[1,50],38:[1,27],39:26},{18:[2,26],24:[2,26]},{18:[2,30],24:[2,30],31:[2,30],32:[2,30],33:[2,30],36:[2,30],38:[2,30]},{18:[2,36],24:[2,36],35:63,36:[1,64]},{18:[2,31],24:[2,31],31:[2,31],32:[2,31],33:[2,31],36:[2,31],38:[2,31]},{18:[2,32],24:[2,32],31:[2,32],32:[2,32],33:[2,32],36:[2,32],38:[2,32]},{18:[2,33],24:[2,33],31:[2,33],32:[2,33],33:[2,33],36:[2,33],38:[2,33]},{18:[2,34],24:[2,34],31:[2,34],32:[2,34],33:[2,34],36:[2,34],38:[2,34]},{18:[2,35],24:[2,35],31:[2,35],32:[2,35],33:[2,35],36:[2,35],38:[2,35]},{18:[2,38],24:[2,38],36:[2,38]},{18:[2,50],24:[2,50],31:[2,50],32:[2,50],33:[2,50],36:[2,50],37:[1,65],38:[2,50],40:[2,50]},{36:[1,66]},{18:[2,47],24:[2,47],31:[2,47],32:[2,47],33:[2,47],36:[2,47],38:[2,47]},{5:[2,10],14:[2,10],15:[2,10],16:[2,10],19:[2,10],20:[2,10],22:[2,10],23:[2,10],25:[2,10]},{21:67,36:[1,28],39:26},{5:[2,11],14:[2,11],15:[2,11],16:[2,11],19:[2,11],20:[2,11],22:[2,11],23:[2,11],25:[2,11]},{14:[2,16],15:[2,16],16:[2,16],19:[2,16],20:[2,16],22:[2,16],23:[2,16],25:[2,16]},{5:[2,19],14:[2,19],15:[2,19],16:[2,19],19:[2,19],20:[2,19],22:[2,19],23:[2,19],25:[2,19]},{5:[2,20],14:[2,20],15:[2,20],16:[2,20],19:[2,20],20:[2,20],22:[2,20],23:[2,20],25:[2,20]},{5:[2,21],14:[2,21],15:[2,21],16:[2,21],19:[2,21],20:[2,21],22:[2,21],23:[2,21],25:[2,21]},{18:[1,68]},{18:[2,24],24:[2,24]},{18:[2,29],24:[2,29],31:[2,29],32:[2,29],33:[2,29],36:[2,29],38:[2,29]},{18:[2,37],24:[2,37],36:[2,37]},{37:[1,65]},{21:69,29:73,31:[1,70],32:[1,71],33:[1,72],36:[1,28],38:[1,27],39:26},{18:[2,49],24:[2,49],31:[2,49],32:[2,49],33:[2,49],36:[2,49],38:[2,49],40:[2,49]},{18:[1,74]},{5:[2,22],14:[2,22],15:[2,22],16:[2,22],19:[2,22],20:[2,22],22:[2,22],23:[2,22],25:[2,22]},{18:[2,39],24:[2,39],36:[2,39]},{18:[2,40],24:[2,40],36:[2,40]},{18:[2,41],24:[2,41],36:[2,41]},{18:[2,42],24:[2,42],36:[2,42]},{18:[2,43],24:[2,43],36:[2,43]},{5:[2,18],14:[2,18],15:[2,18],16:[2,18],19:[2,18],20:[2,18],22:[2,18],23:[2,18],25:[2,18]}],
+defaultActions: {17:[2,1]},
+parseError: function parseError(str, hash) {
+    throw new Error(str);
+},
+parse: function parse(input) {
+    var self = this, stack = [0], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;
+    this.lexer.setInput(input);
+    this.lexer.yy = this.yy;
+    this.yy.lexer = this.lexer;
+    this.yy.parser = this;
+    if (typeof this.lexer.yylloc == "undefined")
+        this.lexer.yylloc = {};
+    var yyloc = this.lexer.yylloc;
+    lstack.push(yyloc);
+    var ranges = this.lexer.options && this.lexer.options.ranges;
+    if (typeof this.yy.parseError === "function")
+        this.parseError = this.yy.parseError;
+    function popStack(n) {
+        stack.length = stack.length - 2 * n;
+        vstack.length = vstack.length - n;
+        lstack.length = lstack.length - n;
+    }
+    function lex() {
+        var token;
+        token = self.lexer.lex() || 1;
+        if (typeof token !== "number") {
+            token = self.symbols_[token] || token;
+        }
+        return token;
+    }
+    var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;
+    while (true) {
+        state = stack[stack.length - 1];
+        if (this.defaultActions[state]) {
+            action = this.defaultActions[state];
+        } else {
+            if (symbol === null || typeof symbol == "undefined") {
+                symbol = lex();
+            }
+            action = table[state] && table[state][symbol];
+        }
+        if (typeof action === "undefined" || !action.length || !action[0]) {
+            var errStr = "";
+            if (!recovering) {
+                expected = [];
+                for (p in table[state])
+                    if (this.terminals_[p] && p > 2) {
+                        expected.push("'" + this.terminals_[p] + "'");
+                    }
+                if (this.lexer.showPosition) {
+                    errStr = "Parse error on line " + (yylineno + 1) + ":\n" + this.lexer.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'";
+                } else {
+                    errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == 1?"end of input":"'" + (this.terminals_[symbol] || symbol) + "'");
+                }
+                this.parseError(errStr, {text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected});
+            }
+        }
+        if (action[0] instanceof Array && action.length > 1) {
+            throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol);
+        }
+        switch (action[0]) {
+        case 1:
+            stack.push(symbol);
+            vstack.push(this.lexer.yytext);
+            lstack.push(this.lexer.yylloc);
+            stack.push(action[1]);
+            symbol = null;
+            if (!preErrorSymbol) {
+                yyleng = this.lexer.yyleng;
+                yytext = this.lexer.yytext;
+                yylineno = this.lexer.yylineno;
+                yyloc = this.lexer.yylloc;
+                if (recovering > 0)
+                    recovering--;
+            } else {
+                symbol = preErrorSymbol;
+                preErrorSymbol = null;
+            }
+            break;
+        case 2:
+            len = this.productions_[action[1]][1];
+            yyval.$ = vstack[vstack.length - len];
+            yyval._$ = {first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column};
+            if (ranges) {
+                yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];
+            }
+            r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack);
+            if (typeof r !== "undefined") {
+                return r;
+            }
+            if (len) {
+                stack = stack.slice(0, -1 * len * 2);
+                vstack = vstack.slice(0, -1 * len);
+                lstack = lstack.slice(0, -1 * len);
+            }
+            stack.push(this.productions_[action[1]][0]);
+            vstack.push(yyval.$);
+            lstack.push(yyval._$);
+            newState = table[stack[stack.length - 2]][stack[stack.length - 1]];
+            stack.push(newState);
+            break;
+        case 3:
+            return true;
+        }
+    }
+    return true;
+}
+};
+/* Jison generated lexer */
+var lexer = (function(){
+var lexer = ({EOF:1,
+parseError:function parseError(str, hash) {
+        if (this.yy.parser) {
+            this.yy.parser.parseError(str, hash);
+        } else {
+            throw new Error(str);
+        }
+    },
+setInput:function (input) {
+        this._input = input;
+        this._more = this._less = this.done = false;
+        this.yylineno = this.yyleng = 0;
+        this.yytext = this.matched = this.match = '';
+        this.conditionStack = ['INITIAL'];
+        this.yylloc = {first_line:1,first_column:0,last_line:1,last_column:0};
+        if (this.options.ranges) this.yylloc.range = [0,0];
+        this.offset = 0;
+        return this;
+    },
+input:function () {
+        var ch = this._input[0];
+        this.yytext += ch;
+        this.yyleng++;
+        this.offset++;
+        this.match += ch;
+        this.matched += ch;
+        var lines = ch.match(/(?:\r\n?|\n).*/g);
+        if (lines) {
+            this.yylineno++;
+            this.yylloc.last_line++;
+        } else {
+            this.yylloc.last_column++;
+        }
+        if (this.options.ranges) this.yylloc.range[1]++;
+
+        this._input = this._input.slice(1);
+        return ch;
+    },
+unput:function (ch) {
+        var len = ch.length;
+        var lines = ch.split(/(?:\r\n?|\n)/g);
+
+        this._input = ch + this._input;
+        this.yytext = this.yytext.substr(0, this.yytext.length-len-1);
+        //this.yyleng -= len;
+        this.offset -= len;
+        var oldLines = this.match.split(/(?:\r\n?|\n)/g);
+        this.match = this.match.substr(0, this.match.length-1);
+        this.matched = this.matched.substr(0, this.matched.length-1);
+
+        if (lines.length-1) this.yylineno -= lines.length-1;
+        var r = this.yylloc.range;
+
+        this.yylloc = {first_line: this.yylloc.first_line,
+          last_line: this.yylineno+1,
+          first_column: this.yylloc.first_column,
+          last_column: lines ?
+              (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length:
+              this.yylloc.first_column - len
+          };
+
+        if (this.options.ranges) {
+            this.yylloc.range = [r[0], r[0] + this.yyleng - len];
+        }
+        return this;
+    },
+more:function () {
+        this._more = true;
+        return this;
+    },
+less:function (n) {
+        this.unput(this.match.slice(n));
+    },
+pastInput:function () {
+        var past = this.matched.substr(0, this.matched.length - this.match.length);
+        return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\n/g, "");
+    },
+upcomingInput:function () {
+        var next = this.match;
+        if (next.length < 20) {
+            next += this._input.substr(0, 20-next.length);
+        }
+        return (next.substr(0,20)+(next.length > 20 ? '...':'')).replace(/\n/g, "");
+    },
+showPosition:function () {
+        var pre = this.pastInput();
+        var c = new Array(pre.length + 1).join("-");
+        return pre + this.upcomingInput() + "\n" + c+"^";
+    },
+next:function () {
+        if (this.done) {
+            return this.EOF;
+        }
+        if (!this._input) this.done = true;
+
+        var token,
+            match,
+            tempMatch,
+            index,
+            col,
+            lines;
+        if (!this._more) {
+            this.yytext = '';
+            this.match = '';
+        }
+        var rules = this._currentRules();
+        for (var i=0;i < rules.length; i++) {
+            tempMatch = this._input.match(this.rules[rules[i]]);
+            if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {
+                match = tempMatch;
+                index = i;
+                if (!this.options.flex) break;
+            }
+        }
+        if (match) {
+            lines = match[0].match(/(?:\r\n?|\n).*/g);
+            if (lines) this.yylineno += lines.length;
+            this.yylloc = {first_line: this.yylloc.last_line,
+                           last_line: this.yylineno+1,
+                           first_column: this.yylloc.last_column,
+                           last_column: lines ? lines[lines.length-1].length-lines[lines.length-1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length};
+            this.yytext += match[0];
+            this.match += match[0];
+            this.matches = match;
+            this.yyleng = this.yytext.length;
+            if (this.options.ranges) {
+                this.yylloc.range = [this.offset, this.offset += this.yyleng];
+            }
+            this._more = false;
+            this._input = this._input.slice(match[0].length);
+            this.matched += match[0];
+            token = this.performAction.call(this, this.yy, this, rules[index],this.conditionStack[this.conditionStack.length-1]);
+            if (this.done && this._input) this.done = false;
+            if (token) return token;
+            else return;
+        }
+        if (this._input === "") {
+            return this.EOF;
+        } else {
+            return this.parseError('Lexical error on line '+(this.yylineno+1)+'. Unrecognized text.\n'+this.showPosition(),
+                    {text: "", token: null, line: this.yylineno});
+        }
+    },
+lex:function lex() {
+        var r = this.next();
+        if (typeof r !== 'undefined') {
+            return r;
+        } else {
+            return this.lex();
+        }
+    },
+begin:function begin(condition) {
+        this.conditionStack.push(condition);
+    },
+popState:function popState() {
+        return this.conditionStack.pop();
+    },
+_currentRules:function _currentRules() {
+        return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules;
+    },
+topState:function () {
+        return this.conditionStack[this.conditionStack.length-2];
+    },
+pushState:function begin(condition) {
+        this.begin(condition);
+    }});
+lexer.options = {};
+lexer.performAction = function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {
+
+var YYSTATE=YY_START
+switch($avoiding_name_collisions) {
+case 0: yy_.yytext = "\\"; return 14; 
+break;
+case 1:
+                                   if(yy_.yytext.slice(-1) !== "\\") this.begin("mu");
+                                   if(yy_.yytext.slice(-1) === "\\") yy_.yytext = yy_.yytext.substr(0,yy_.yyleng-1), this.begin("emu");
+                                   if(yy_.yytext) return 14;
+                                 
+break;
+case 2: return 14; 
+break;
+case 3:
+                                   if(yy_.yytext.slice(-1) !== "\\") this.popState();
+                                   if(yy_.yytext.slice(-1) === "\\") yy_.yytext = yy_.yytext.substr(0,yy_.yyleng-1);
+                                   return 14;
+                                 
+break;
+case 4: yy_.yytext = yy_.yytext.substr(0, yy_.yyleng-4); this.popState(); return 15; 
+break;
+case 5: return 25; 
+break;
+case 6: return 16; 
+break;
+case 7: return 20; 
+break;
+case 8: return 19; 
+break;
+case 9: return 19; 
+break;
+case 10: return 23; 
+break;
+case 11: return 22; 
+break;
+case 12: this.popState(); this.begin('com'); 
+break;
+case 13: yy_.yytext = yy_.yytext.substr(3,yy_.yyleng-5); this.popState(); return 15; 
+break;
+case 14: return 22; 
+break;
+case 15: return 37; 
+break;
+case 16: return 36; 
+break;
+case 17: return 36; 
+break;
+case 18: return 40; 
+break;
+case 19: /*ignore whitespace*/ 
+break;
+case 20: this.popState(); return 24; 
+break;
+case 21: this.popState(); return 18; 
+break;
+case 22: yy_.yytext = yy_.yytext.substr(1,yy_.yyleng-2).replace(/\\"/g,'"'); return 31; 
+break;
+case 23: yy_.yytext = yy_.yytext.substr(1,yy_.yyleng-2).replace(/\\'/g,"'"); return 31; 
+break;
+case 24: return 38; 
+break;
+case 25: return 33; 
+break;
+case 26: return 33; 
+break;
+case 27: return 32; 
+break;
+case 28: return 36; 
+break;
+case 29: yy_.yytext = yy_.yytext.substr(1, yy_.yyleng-2); return 36; 
+break;
+case 30: return 'INVALID'; 
+break;
+case 31: return 5; 
+break;
+}
+};
+lexer.rules = [/^(?:\\\\(?=(\{\{)))/,/^(?:[^\x00]*?(?=(\{\{)))/,/^(?:[^\x00]+)/,/^(?:[^\x00]{2,}?(?=(\{\{|$)))/,/^(?:[\s\S]*?--\}\})/,/^(?:\{\{>)/,/^(?:\{\{#)/,/^(?:\{\{\/)/,/^(?:\{\{\^)/,/^(?:\{\{\s*else\b)/,/^(?:\{\{\{)/,/^(?:\{\{&)/,/^(?:\{\{!--)/,/^(?:\{\{![\s\S]*?\}\})/,/^(?:\{\{)/,/^(?:=)/,/^(?:\.(?=[}\/ ]))/,/^(?:\.\.)/,/^(?:[\/.])/,/^(?:\s+)/,/^(?:\}\}\})/,/^(?:\}\})/,/^(?:"(\\["]|[^"])*")/,/^(?:'(\\[']|[^'])*')/,/^(?:@)/,/^(?:true(?=[}\s]))/,/^(?:false(?=[}\s]))/,/^(?:-?[0-9]+(?=[}\s]))/,/^(?:[^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=[=}\s\/.]))/,/^(?:\[[^\]]*\])/,/^(?:.)/,/^(?:$)/];
+lexer.conditions = {"mu":{"rules":[5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],"inclusive":false},"emu":{"rules":[3],"inclusive":false},"com":{"rules":[4],"inclusive":false},"INITIAL":{"rules":[0,1,2,31],"inclusive":true}};
+return lexer;})()
+parser.lexer = lexer;
+function Parser () { this.yy = {}; }Parser.prototype = parser;parser.Parser = Parser;
+return new Parser;
+})();;
+// lib/handlebars/compiler/base.js
+
+Handlebars.Parser = handlebars;
+
+Handlebars.parse = function(input) {
+
+  // Just return if an already-compile AST was passed in.
+  if(input.constructor === Handlebars.AST.ProgramNode) { return input; }
+
+  Handlebars.Parser.yy = Handlebars.AST;
+  return Handlebars.Parser.parse(input);
+};
+;
+// lib/handlebars/compiler/ast.js
+Handlebars.AST = {};
+
+Handlebars.AST.ProgramNode = function(statements, inverse) {
+  this.type = "program";
+  this.statements = statements;
+  if(inverse) { this.inverse = new Handlebars.AST.ProgramNode(inverse); }
+};
+
+Handlebars.AST.MustacheNode = function(rawParams, hash, unescaped) {
+  this.type = "mustache";
+  this.escaped = !unescaped;
+  this.hash = hash;
+
+  var id = this.id = rawParams[0];
+  var params = this.params = rawParams.slice(1);
+
+  // a mustache is an eligible helper if:
+  // * its id is simple (a single part, not `this` or `..`)
+  var eligibleHelper = this.eligibleHelper = id.isSimple;
+
+  // a mustache is definitely a helper if:
+  // * it is an eligible helper, and
+  // * it has at least one parameter or hash segment
+  this.isHelper = eligibleHelper && (params.length || hash);
+
+  // if a mustache is an eligible helper but not a definite
+  // helper, it is ambiguous, and will be resolved in a later
+  // pass or at runtime.
+};
+
+Handlebars.AST.PartialNode = function(partialName, context) {
+  this.type         = "partial";
+  this.partialName  = partialName;
+  this.context      = context;
+};
+
+Handlebars.AST.BlockNode = function(mustache, program, inverse, close) {
+  var verifyMatch = function(open, close) {
+    if(open.original !== close.original) {
+      throw new Handlebars.Exception(open.original + " doesn't match " + close.original);
+    }
+  };
+
+  verifyMatch(mustache.id, close);
+  this.type = "block";
+  this.mustache = mustache;
+  this.program  = program;
+  this.inverse  = inverse;
+
+  if (this.inverse && !this.program) {
+    this.isInverse = true;
+  }
+};
+
+Handlebars.AST.ContentNode = function(string) {
+  this.type = "content";
+  this.string = string;
+};
+
+Handlebars.AST.HashNode = function(pairs) {
+  this.type = "hash";
+  this.pairs = pairs;
+};
+
+Handlebars.AST.IdNode = function(parts) {
+  this.type = "ID";
+
+  var original = "",
+      dig = [],
+      depth = 0;
+
+  for(var i=0,l=parts.length; i<l; i++) {
+    var part = parts[i].part;
+    original += (parts[i].separator || '') + part;
+
+    if (part === ".." || part === "." || part === "this") {
+      if (dig.length > 0) { throw new Handlebars.Exception("Invalid path: " + original); }
+      else if (part === "..") { depth++; }
+      else { this.isScoped = true; }
+    }
+    else { dig.push(part); }
+  }
+
+  this.original = original;
+  this.parts    = dig;
+  this.string   = dig.join('.');
+  this.depth    = depth;
+
+  // an ID is simple if it only has one part, and that part is not
+  // `..` or `this`.
+  this.isSimple = parts.length === 1 && !this.isScoped && depth === 0;
+
+  this.stringModeValue = this.string;
+};
+
+Handlebars.AST.PartialNameNode = function(name) {
+  this.type = "PARTIAL_NAME";
+  this.name = name.original;
+};
+
+Handlebars.AST.DataNode = function(id) {
+  this.type = "DATA";
+  this.id = id;
+};
+
+Handlebars.AST.StringNode = function(string) {
+  this.type = "STRING";
+  this.original =
+    this.string =
+    this.stringModeValue = string;
+};
+
+Handlebars.AST.IntegerNode = function(integer) {
+  this.type = "INTEGER";
+  this.original =
+    this.integer = integer;
+  this.stringModeValue = Number(integer);
+};
+
+Handlebars.AST.BooleanNode = function(bool) {
+  this.type = "BOOLEAN";
+  this.bool = bool;
+  this.stringModeValue = bool === "true";
+};
+
+Handlebars.AST.CommentNode = function(comment) {
+  this.type = "comment";
+  this.comment = comment;
+};
+;
+// lib/handlebars/utils.js
+
+var errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'number', 'stack'];
+
+Handlebars.Exception = function(message) {
+  var tmp = Error.prototype.constructor.apply(this, arguments);
+
+  // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.
+  for (var idx = 0; idx < errorProps.length; idx++) {
+    this[errorProps[idx]] = tmp[errorProps[idx]];
+  }
+};
+Handlebars.Exception.prototype = new Error();
+
+// Build out our basic SafeString type
+Handlebars.SafeString = function(string) {
+  this.string = string;
+};
+Handlebars.SafeString.prototype.toString = function() {
+  return this.string.toString();
+};
+
+var escape = {
+  "&": "&amp;",
+  "<": "&lt;",
+  ">": "&gt;",
+  '"': "&quot;",
+  "'": "&#x27;",
+  "`": "&#x60;"
+};
+
+var badChars = /[&<>"'`]/g;
+var possible = /[&<>"'`]/;
+
+var escapeChar = function(chr) {
+  return escape[chr] || "&amp;";
+};
+
+Handlebars.Utils = {
+  extend: function(obj, value) {
+    for(var key in value) {
+      if(value.hasOwnProperty(key)) {
+        obj[key] = value[key];
+      }
+    }
+  },
+
+  escapeExpression: function(string) {
+    // don't escape SafeStrings, since they're already safe
+    if (string instanceof Handlebars.SafeString) {
+      return string.toString();
+    } else if (string == null || string === false) {
+      return "";
+    }
+
+    // Force a string conversion as this will be done by the append regardless and
+    // the regex test will do this transparently behind the scenes, causing issues if
+    // an object's to string has escaped characters in it.
+    string = string.toString();
+
+    if(!possible.test(string)) { return string; }
+    return string.replace(badChars, escapeChar);
+  },
+
+  isEmpty: function(value) {
+    if (!value && value !== 0) {
+      return true;
+    } else if(toString.call(value) === "[object Array]" && value.length === 0) {
+      return true;
+    } else {
+      return false;
+    }
+  }
+};
+;
+// lib/handlebars/compiler/compiler.js
+
+/*jshint eqnull:true*/
+var Compiler = Handlebars.Compiler = function() {};
+var JavaScriptCompiler = Handlebars.JavaScriptCompiler = function() {};
+
+// the foundHelper register will disambiguate helper lookup from finding a
+// function in a context. This is necessary for mustache compatibility, which
+// requires that context functions in blocks are evaluated by blockHelperMissing,
+// and then proceed as if the resulting value was provided to blockHelperMissing.
+
+Compiler.prototype = {
+  compiler: Compiler,
+
+  disassemble: function() {
+    var opcodes = this.opcodes, opcode, out = [], params, param;
+
+    for (var i=0, l=opcodes.length; i<l; i++) {
+      opcode = opcodes[i];
+
+      if (opcode.opcode === 'DECLARE') {
+        out.push("DECLARE " + opcode.name + "=" + opcode.value);
+      } else {
+        params = [];
+        for (var j=0; j<opcode.args.length; j++) {
+          param = opcode.args[j];
+          if (typeof param === "string") {
+            param = "\"" + param.replace("\n", "\\n") + "\"";
+          }
+          params.push(param);
+        }
+        out.push(opcode.opcode + " " + params.join(" "));
+      }
+    }
+
+    return out.join("\n");
+  },
+  equals: function(other) {
+    var len = this.opcodes.length;
+    if (other.opcodes.length !== len) {
+      return false;
+    }
+
+    for (var i = 0; i < len; i++) {
+      var opcode = this.opcodes[i],
+          otherOpcode = other.opcodes[i];
+      if (opcode.opcode !== otherOpcode.opcode || opcode.args.length !== otherOpcode.args.length) {
+        return false;
+      }
+      for (var j = 0; j < opcode.args.length; j++) {
+        if (opcode.args[j] !== otherOpcode.args[j]) {
+          return false;
+        }
+      }
+    }
+
+    len = this.children.length;
+    if (other.children.length !== len) {
+      return false;
+    }
+    for (i = 0; i < len; i++) {
+      if (!this.children[i].equals(other.children[i])) {
+        return false;
+      }
+    }
+
+    return true;
+  },
+
+  guid: 0,
+
+  compile: function(program, options) {
+    this.children = [];
+    this.depths = {list: []};
+    this.options = options;
+
+    // These changes will propagate to the other compiler components
+    var knownHelpers = this.options.knownHelpers;
+    this.options.knownHelpers = {
+      'helperMissing': true,
+      'blockHelperMissing': true,
+      'each': true,
+      'if': true,
+      'unless': true,
+      'with': true,
+      'log': true
+    };
+    if (knownHelpers) {
+      for (var name in knownHelpers) {
+        this.options.knownHelpers[name] = knownHelpers[name];
+      }
+    }
+
+    return this.program(program);
+  },
+
+  accept: function(node) {
+    return this[node.type](node);
+  },
+
+  program: function(program) {
+    var statements = program.statements, statement;
+    this.opcodes = [];
+
+    for(var i=0, l=statements.length; i<l; i++) {
+      statement = statements[i];
+      this[statement.type](statement);
+    }
+    this.isSimple = l === 1;
+
+    this.depths.list = this.depths.list.sort(function(a, b) {
+      return a - b;
+    });
+
+    return this;
+  },
+
+  compileProgram: function(program) {
+    var result = new this.compiler().compile(program, this.options);
+    var guid = this.guid++, depth;
+
+    this.usePartial = this.usePartial || result.usePartial;
+
+    this.children[guid] = result;
+
+    for(var i=0, l=result.depths.list.length; i<l; i++) {
+      depth = result.depths.list[i];
+
+      if(depth < 2) { continue; }
+      else { this.addDepth(depth - 1); }
+    }
+
+    return guid;
+  },
+
+  block: function(block) {
+    var mustache = block.mustache,
+        program = block.program,
+        inverse = block.inverse;
+
+    if (program) {
+      program = this.compileProgram(program);
+    }
+
+    if (inverse) {
+      inverse = this.compileProgram(inverse);
+    }
+
+    var type = this.classifyMustache(mustache);
+
+    if (type === "helper") {
+      this.helperMustache(mustache, program, inverse);
+    } else if (type === "simple") {
+      this.simpleMustache(mustache);
+
+      // now that the simple mustache is resolved, we need to
+      // evaluate it by executing `blockHelperMissing`
+      this.opcode('pushProgram', program);
+      this.opcode('pushProgram', inverse);
+      this.opcode('emptyHash');
+      this.opcode('blockValue');
+    } else {
+      this.ambiguousMustache(mustache, program, inverse);
+
+      // now that the simple mustache is resolved, we need to
+      // evaluate it by executing `blockHelperMissing`
+      this.opcode('pushProgram', program);
+      this.opcode('pushProgram', inverse);
+      this.opcode('emptyHash');
+      this.opcode('ambiguousBlockValue');
+    }
+
+    this.opcode('append');
+  },
+
+  hash: function(hash) {
+    var pairs = hash.pairs, pair, val;
+
+    this.opcode('pushHash');
+
+    for(var i=0, l=pairs.length; i<l; i++) {
+      pair = pairs[i];
+      val  = pair[1];
+
+      if (this.options.stringParams) {
+        if(val.depth) {
+          this.addDepth(val.depth);
+        }
+        this.opcode('getContext', val.depth || 0);
+        this.opcode('pushStringParam', val.stringModeValue, val.type);
+      } else {
+        this.accept(val);
+      }
+
+      this.opcode('assignToHash', pair[0]);
+    }
+    this.opcode('popHash');
+  },
+
+  partial: function(partial) {
+    var partialName = partial.partialName;
+    this.usePartial = true;
+
+    if(partial.context) {
+      this.ID(partial.context);
+    } else {
+      this.opcode('push', 'depth0');
+    }
+
+    this.opcode('invokePartial', partialName.name);
+    this.opcode('append');
+  },
+
+  content: function(content) {
+    this.opcode('appendContent', content.string);
+  },
+
+  mustache: function(mustache) {
+    var options = this.options;
+    var type = this.classifyMustache(mustache);
+
+    if (type === "simple") {
+      this.simpleMustache(mustache);
+    } else if (type === "helper") {
+      this.helperMustache(mustache);
+    } else {
+      this.ambiguousMustache(mustache);
+    }
+
+    if(mustache.escaped && !options.noEscape) {
+      this.opcode('appendEscaped');
+    } else {
+      this.opcode('append');
+    }
+  },
+
+  ambiguousMustache: function(mustache, program, inverse) {
+    var id = mustache.id,
+        name = id.parts[0],
+        isBlock = program != null || inverse != null;
+
+    this.opcode('getContext', id.depth);
+
+    this.opcode('pushProgram', program);
+    this.opcode('pushProgram', inverse);
+
+    this.opcode('invokeAmbiguous', name, isBlock);
+  },
+
+  simpleMustache: function(mustache) {
+    var id = mustache.id;
+
+    if (id.type === 'DATA') {
+      this.DATA(id);
+    } else if (id.parts.length) {
+      this.ID(id);
+    } else {
+      // Simplified ID for `this`
+      this.addDepth(id.depth);
+      this.opcode('getContext', id.depth);
+      this.opcode('pushContext');
+    }
+
+    this.opcode('resolvePossibleLambda');
+  },
+
+  helperMustache: function(mustache, program, inverse) {
+    var params = this.setupFullMustacheParams(mustache, program, inverse),
+        name = mustache.id.parts[0];
+
+    if (this.options.knownHelpers[name]) {
+      this.opcode('invokeKnownHelper', params.length, name);
+    } else if (this.options.knownHelpersOnly) {
+      throw new Error("You specified knownHelpersOnly, but used the unknown helper " + name);
+    } else {
+      this.opcode('invokeHelper', params.length, name);
+    }
+  },
+
+  ID: function(id) {
+    this.addDepth(id.depth);
+    this.opcode('getContext', id.depth);
+
+    var name = id.parts[0];
+    if (!name) {
+      this.opcode('pushContext');
+    } else {
+      this.opcode('lookupOnContext', id.parts[0]);
+    }
+
+    for(var i=1, l=id.parts.length; i<l; i++) {
+      this.opcode('lookup', id.parts[i]);
+    }
+  },
+
+  DATA: function(data) {
+    this.options.data = true;
+    if (data.id.isScoped || data.id.depth) {
+      throw new Handlebars.Exception('Scoped data references are not supported: ' + data.original);
+    }
+
+    this.opcode('lookupData');
+    var parts = data.id.parts;
+    for(var i=0, l=parts.length; i<l; i++) {
+      this.opcode('lookup', parts[i]);
+    }
+  },
+
+  STRING: function(string) {
+    this.opcode('pushString', string.string);
+  },
+
+  INTEGER: function(integer) {
+    this.opcode('pushLiteral', integer.integer);
+  },
+
+  BOOLEAN: function(bool) {
+    this.opcode('pushLiteral', bool.bool);
+  },
+
+  comment: function() {},
+
+  // HELPERS
+  opcode: function(name) {
+    this.opcodes.push({ opcode: name, args: [].slice.call(arguments, 1) });
+  },
+
+  declare: function(name, value) {
+    this.opcodes.push({ opcode: 'DECLARE', name: name, value: value });
+  },
+
+  addDepth: function(depth) {
+    if(isNaN(depth)) { throw new Error("EWOT"); }
+    if(depth === 0) { return; }
+
+    if(!this.depths[depth]) {
+      this.depths[depth] = true;
+      this.depths.list.push(depth);
+    }
+  },
+
+  classifyMustache: function(mustache) {
+    var isHelper   = mustache.isHelper;
+    var isEligible = mustache.eligibleHelper;
+    var options    = this.options;
+
+    // if ambiguous, we can possibly resolve the ambiguity now
+    if (isEligible && !isHelper) {
+      var name = mustache.id.parts[0];
+
+      if (options.knownHelpers[name]) {
+        isHelper = true;
+      } else if (options.knownHelpersOnly) {
+        isEligible = false;
+      }
+    }
+
+    if (isHelper) { return "helper"; }
+    else if (isEligible) { return "ambiguous"; }
+    else { return "simple"; }
+  },
+
+  pushParams: function(params) {
+    var i = params.length, param;
+
+    while(i--) {
+      param = params[i];
+
+      if(this.options.stringParams) {
+        if(param.depth) {
+          this.addDepth(param.depth);
+        }
+
+        this.opcode('getContext', param.depth || 0);
+        this.opcode('pushStringParam', param.stringModeValue, param.type);
+      } else {
+        this[param.type](param);
+      }
+    }
+  },
+
+  setupMustacheParams: function(mustache) {
+    var params = mustache.params;
+    this.pushParams(params);
+
+    if(mustache.hash) {
+      this.hash(mustache.hash);
+    } else {
+      this.opcode('emptyHash');
+    }
+
+    return params;
+  },
+
+  // this will replace setupMustacheParams when we're done
+  setupFullMustacheParams: function(mustache, program, inverse) {
+    var params = mustache.params;
+    this.pushParams(params);
+
+    this.opcode('pushProgram', program);
+    this.opcode('pushProgram', inverse);
+
+    if(mustache.hash) {
+      this.hash(mustache.hash);
+    } else {
+      this.opcode('emptyHash');
+    }
+
+    return params;
+  }
+};
+
+var Literal = function(value) {
+  this.value = value;
+};
+
+JavaScriptCompiler.prototype = {
+  // PUBLIC API: You can override these methods in a subclass to provide
+  // alternative compiled forms for name lookup and buffering semantics
+  nameLookup: function(parent, name /* , type*/) {
+    if (/^[0-9]+$/.test(name)) {
+      return parent + "[" + name + "]";
+    } else if (JavaScriptCompiler.isValidJavaScriptVariableName(name)) {
+      return parent + "." + name;
+    }
+    else {
+      return parent + "['" + name + "']";
+    }
+  },
+
+  appendToBuffer: function(string) {
+    if (this.environment.isSimple) {
+      return "return " + string + ";";
+    } else {
+      return {
+        appendToBuffer: true,
+        content: string,
+        toString: function() { return "buffer += " + string + ";"; }
+      };
+    }
+  },
+
+  initializeBuffer: function() {
+    return this.quotedString("");
+  },
+
+  namespace: "Handlebars",
+  // END PUBLIC API
+
+  compile: function(environment, options, context, asObject) {
+    this.environment = environment;
+    this.options = options || {};
+
+    Handlebars.log(Handlebars.logger.DEBUG, this.environment.disassemble() + "\n\n");
+
+    this.name = this.environment.name;
+    this.isChild = !!context;
+    this.context = context || {
+      programs: [],
+      environments: [],
+      aliases: { }
+    };
+
+    this.preamble();
+
+    this.stackSlot = 0;
+    this.stackVars = [];
+    this.registers = { list: [] };
+    this.compileStack = [];
+    this.inlineStack = [];
+
+    this.compileChildren(environment, options);
+
+    var opcodes = environment.opcodes, opcode;
+
+    this.i = 0;
+
+    for(l=opcodes.length; this.i<l; this.i++) {
+      opcode = opcodes[this.i];
+
+      if(opcode.opcode === 'DECLARE') {
+        this[opcode.name] = opcode.value;
+      } else {
+        this[opcode.opcode].apply(this, opcode.args);
+      }
+    }
+
+    return this.createFunctionContext(asObject);
+  },
+
+  nextOpcode: function() {
+    var opcodes = this.environment.opcodes;
+    return opcodes[this.i + 1];
+  },
+
+  eat: function() {
+    this.i = this.i + 1;
+  },
+
+  preamble: function() {
+    var out = [];
+
+    if (!this.isChild) {
+      var namespace = this.namespace;
+
+      var copies = "helpers = this.merge(helpers, " + namespace + ".helpers);";
+      if (this.environment.usePartial) { copies = copies + " partials = this.merge(partials, " + namespace + ".partials);"; }
+      if (this.options.data) { copies = copies + " data = data || {};"; }
+      out.push(copies);
+    } else {
+      out.push('');
+    }
+
+    if (!this.environment.isSimple) {
+      out.push(", buffer = " + this.initializeBuffer());
+    } else {
+      out.push("");
+    }
+
+    // track the last context pushed into place to allow skipping the
+    // getContext opcode when it would be a noop
+    this.lastContext = 0;
+    this.source = out;
+  },
+
+  createFunctionContext: function(asObject) {
+    var locals = this.stackVars.concat(this.registers.list);
+
+    if(locals.length > 0) {
+      this.source[1] = this.source[1] + ", " + locals.join(", ");
+    }
+
+    // Generate minimizer alias mappings
+    if (!this.isChild) {
+      for (var alias in this.context.aliases) {
+        if (this.context.aliases.hasOwnProperty(alias)) {
+          this.source[1] = this.source[1] + ', ' + alias + '=' + this.context.aliases[alias];
+        }
+      }
+    }
+
+    if (this.source[1]) {
+      this.source[1] = "var " + this.source[1].substring(2) + ";";
+    }
+
+    // Merge children
+    if (!this.isChild) {
+      this.source[1] += '\n' + this.context.programs.join('\n') + '\n';
+    }
+
+    if (!this.environment.isSimple) {
+      this.source.push("return buffer;");
+    }
+
+    var params = this.isChild ? ["depth0", "data"] : ["Handlebars", "depth0", "helpers", "partials", "data"];
+
+    for(var i=0, l=this.environment.depths.list.length; i<l; i++) {
+      params.push("depth" + this.environment.depths.list[i]);
+    }
+
+    // Perform a second pass over the output to merge content when possible
+    var source = this.mergeSource();
+
+    if (!this.isChild) {
+      var revision = Handlebars.COMPILER_REVISION,
+          versions = Handlebars.REVISION_CHANGES[revision];
+      source = "this.compilerInfo = ["+revision+",'"+versions+"'];\n"+source;
+    }
+
+    if (asObject) {
+      params.push(source);
+
+      return Function.apply(this, params);
+    } else {
+      var functionSource = 'function ' + (this.name || '') + '(' + params.join(',') + ') {\n  ' + source + '}';
+      Handlebars.log(Handlebars.logger.DEBUG, functionSource + "\n\n");
+      return functionSource;
+    }
+  },
+  mergeSource: function() {
+    // WARN: We are not handling the case where buffer is still populated as the source should
+    // not have buffer append operations as their final action.
+    var source = '',
+        buffer;
+    for (var i = 0, len = this.source.length; i < len; i++) {
+      var line = this.source[i];
+      if (line.appendToBuffer) {
+        if (buffer) {
+          buffer = buffer + '\n    + ' + line.content;
+        } else {
+          buffer = line.content;
+        }
+      } else {
+        if (buffer) {
+          source += 'buffer += ' + buffer + ';\n  ';
+          buffer = undefined;
+        }
+        source += line + '\n  ';
+      }
+    }
+    return source;
+  },
+
+  // [blockValue]
+  //
+  // On stack, before: hash, inverse, program, value
+  // On stack, after: return value of blockHelperMissing
+  //
+  // The purpose of this opcode is to take a block of the form
+  // `{{#foo}}...{{/foo}}`, resolve the value of `foo`, and
+  // replace it on the stack with the result of properly
+  // invoking blockHelperMissing.
+  blockValue: function() {
+    this.context.aliases.blockHelperMissing = 'helpers.blockHelperMissing';
+
+    var params = ["depth0"];
+    this.setupParams(0, params);
+
+    this.replaceStack(function(current) {
+      params.splice(1, 0, current);
+      return "blockHelperMissing.call(" + params.join(", ") + ")";
+    });
+  },
+
+  // [ambiguousBlockValue]
+  //
+  // On stack, before: hash, inverse, program, value
+  // Compiler value, before: lastHelper=value of last found helper, if any
+  // On stack, after, if no lastHelper: same as [blockValue]
+  // On stack, after, if lastHelper: value
+  ambiguousBlockValue: function() {
+    this.context.aliases.blockHelperMissing = 'helpers.blockHelperMissing';
+
+    var params = ["depth0"];
+    this.setupParams(0, params);
+
+    var current = this.topStack();
+    params.splice(1, 0, current);
+
+    // Use the options value generated from the invocation
+    params[params.length-1] = 'options';
+
+    this.source.push("if (!" + this.lastHelper + ") { " + current + " = blockHelperMissing.call(" + params.join(", ") + "); }");
+  },
+
+  // [appendContent]
+  //
+  // On stack, before: ...
+  // On stack, after: ...
+  //
+  // Appends the string value of `content` to the current buffer
+  appendContent: function(content) {
+    this.source.push(this.appendToBuffer(this.quotedString(content)));
+  },
+
+  // [append]
+  //
+  // On stack, before: value, ...
+  // On stack, after: ...
+  //
+  // Coerces `value` to a String and appends it to the current buffer.
+  //
+  // If `value` is truthy, or 0, it is coerced into a string and appended
+  // Otherwise, the empty string is appended
+  append: function() {
+    // Force anything that is inlined onto the stack so we don't have duplication
+    // when we examine local
+    this.flushInline();
+    var local = this.popStack();
+    this.source.push("if(" + local + " || " + local + " === 0) { " + this.appendToBuffer(local) + " }");
+    if (this.environment.isSimple) {
+      this.source.push("else { " + this.appendToBuffer("''") + " }");
+    }
+  },
+
+  // [appendEscaped]
+  //
+  // On stack, before: value, ...
+  // On stack, after: ...
+  //
+  // Escape `value` and append it to the buffer
+  appendEscaped: function() {
+    this.context.aliases.escapeExpression = 'this.escapeExpression';
+
+    this.source.push(this.appendToBuffer("escapeExpression(" + this.popStack() + ")"));
+  },
+
+  // [getContext]
+  //
+  // On stack, before: ...
+  // On stack, after: ...
+  // Compiler value, after: lastContext=depth
+  //
+  // Set the value of the `lastContext` compiler value to the depth
+  getContext: function(depth) {
+    if(this.lastContext !== depth) {
+      this.lastContext = depth;
+    }
+  },
+
+  // [lookupOnContext]
+  //
+  // On stack, before: ...
+  // On stack, after: currentContext[name], ...
+  //
+  // Looks up the value of `name` on the current context and pushes
+  // it onto the stack.
+  lookupOnContext: function(name) {
+    this.push(this.nameLookup('depth' + this.lastContext, name, 'context'));
+  },
+
+  // [pushContext]
+  //
+  // On stack, before: ...
+  // On stack, after: currentContext, ...
+  //
+  // Pushes the value of the current context onto the stack.
+  pushContext: function() {
+    this.pushStackLiteral('depth' + this.lastContext);
+  },
+
+  // [resolvePossibleLambda]
+  //
+  // On stack, before: value, ...
+  // On stack, after: resolved value, ...
+  //
+  // If the `value` is a lambda, replace it on the stack by
+  // the return value of the lambda
+  resolvePossibleLambda: function() {
+    this.context.aliases.functionType = '"function"';
+
+    this.replaceStack(function(current) {
+      return "typeof " + current + " === functionType ? " + current + ".apply(depth0) : " + current;
+    });
+  },
+
+  // [lookup]
+  //
+  // On stack, before: value, ...
+  // On stack, after: value[name], ...
+  //
+  // Replace the value on the stack with the result of looking
+  // up `name` on `value`
+  lookup: function(name) {
+    this.replaceStack(function(current) {
+      return current + " == null || " + current + " === false ? " + current + " : " + this.nameLookup(current, name, 'context');
+    });
+  },
+
+  // [lookupData]
+  //
+  // On stack, before: ...
+  // On stack, after: data[id], ...
+  //
+  // Push the result of looking up `id` on the current data
+  lookupData: function(id) {
+    this.push('data');
+  },
+
+  // [pushStringParam]
+  //
+  // On stack, before: ...
+  // On stack, after: string, currentContext, ...
+  //
+  // This opcode is designed for use in string mode, which
+  // provides the string value of a parameter along with its
+  // depth rather than resolving it immediately.
+  pushStringParam: function(string, type) {
+    this.pushStackLiteral('depth' + this.lastContext);
+
+    this.pushString(type);
+
+    if (typeof string === 'string') {
+      this.pushString(string);
+    } else {
+      this.pushStackLiteral(string);
+    }
+  },
+
+  emptyHash: function() {
+    this.pushStackLiteral('{}');
+
+    if (this.options.stringParams) {
+      this.register('hashTypes', '{}');
+      this.register('hashContexts', '{}');
+    }
+  },
+  pushHash: function() {
+    this.hash = {values: [], types: [], contexts: []};
+  },
+  popHash: function() {
+    var hash = this.hash;
+    this.hash = undefined;
+
+    if (this.options.stringParams) {
+      this.register('hashContexts', '{' + hash.contexts.join(',') + '}');
+      this.register('hashTypes', '{' + hash.types.join(',') + '}');
+    }
+    this.push('{\n    ' + hash.values.join(',\n    ') + '\n  }');
+  },
+
+  // [pushString]
+  //
+  // On stack, before: ...
+  // On stack, after: quotedString(string), ...
+  //
+  // Push a quoted version of `string` onto the stack
+  pushString: function(string) {
+    this.pushStackLiteral(this.quotedString(string));
+  },
+
+  // [push]
+  //
+  // On stack, before: ...
+  // On stack, after: expr, ...
+  //
+  // Push an expression onto the stack
+  push: function(expr) {
+    this.inlineStack.push(expr);
+    return expr;
+  },
+
+  // [pushLiteral]
+  //
+  // On stack, before: ...
+  // On stack, after: value, ...
+  //
+  // Pushes a value onto the stack. This operation prevents
+  // the compiler from creating a temporary variable to hold
+  // it.
+  pushLiteral: function(value) {
+    this.pushStackLiteral(value);
+  },
+
+  // [pushProgram]
+  //
+  // On stack, before: ...
+  // On stack, after: program(guid), ...
+  //
+  // Push a program expression onto the stack. This takes
+  // a compile-time guid and converts it into a runtime-accessible
+  // expression.
+  pushProgram: function(guid) {
+    if (guid != null) {
+      this.pushStackLiteral(this.programExpression(guid));
+    } else {
+      this.pushStackLiteral(null);
+    }
+  },
+
+  // [invokeHelper]
+  //
+  // On stack, before: hash, inverse, program, params..., ...
+  // On stack, after: result of helper invocation
+  //
+  // Pops off the helper's parameters, invokes the helper,
+  // and pushes the helper's return value onto the stack.
+  //
+  // If the helper is not found, `helperMissing` is called.
+  invokeHelper: function(paramSize, name) {
+    this.context.aliases.helperMissing = 'helpers.helperMissing';
+
+    var helper = this.lastHelper = this.setupHelper(paramSize, name, true);
+    var nonHelper = this.nameLookup('depth' + this.lastContext, name, 'context');
+
+    this.push(helper.name + ' || ' + nonHelper);
+    this.replaceStack(function(name) {
+      return name + ' ? ' + name + '.call(' +
+          helper.callParams + ") " + ": helperMissing.call(" +
+          helper.helperMissingParams + ")";
+    });
+  },
+
+  // [invokeKnownHelper]
+  //
+  // On stack, before: hash, inverse, program, params..., ...
+  // On stack, after: result of helper invocation
+  //
+  // This operation is used when the helper is known to exist,
+  // so a `helperMissing` fallback is not required.
+  invokeKnownHelper: function(paramSize, name) {
+    var helper = this.setupHelper(paramSize, name);
+    this.push(helper.name + ".call(" + helper.callParams + ")");
+  },
+
+  // [invokeAmbiguous]
+  //
+  // On stack, before: hash, inverse, program, params..., ...
+  // On stack, after: result of disambiguation
+  //
+  // This operation is used when an expression like `{{foo}}`
+  // is provided, but we don't know at compile-time whether it
+  // is a helper or a path.
+  //
+  // This operation emits more code than the other options,
+  // and can be avoided by passing the `knownHelpers` and
+  // `knownHelpersOnly` flags at compile-time.
+  invokeAmbiguous: function(name, helperCall) {
+    this.context.aliases.functionType = '"function"';
+
+    this.pushStackLiteral('{}');    // Hash value
+    var helper = this.setupHelper(0, name, helperCall);
+
+    var helperName = this.lastHelper = this.nameLookup('helpers', name, 'helper');
+
+    var nonHelper = this.nameLookup('depth' + this.lastContext, name, 'context');
+    var nextStack = this.nextStack();
+
+    this.source.push('if (' + nextStack + ' = ' + helperName + ') { ' + nextStack + ' = ' + nextStack + '.call(' + helper.callParams + '); }');
+    this.source.push('else { ' + nextStack + ' = ' + nonHelper + '; ' + nextStack + ' = typeof ' + nextStack + ' === functionType ? ' + nextStack + '.apply(depth0) : ' + nextStack + '; }');
+  },
+
+  // [invokePartial]
+  //
+  // On stack, before: context, ...
+  // On stack after: result of partial invocation
+  //
+  // This operation pops off a context, invokes a partial with that context,
+  // and pushes the result of the invocation back.
+  invokePartial: function(name) {
+    var params = [this.nameLookup('partials', name, 'partial'), "'" + name + "'", this.popStack(), "helpers", "partials"];
+
+    if (this.options.data) {
+      params.push("data");
+    }
+
+    this.context.aliases.self = "this";
+    this.push("self.invokePartial(" + params.join(", ") + ")");
+  },
+
+  // [assignToHash]
+  //
+  // On stack, before: value, hash, ...
+  // On stack, after: hash, ...
+  //
+  // Pops a value and hash off the stack, assigns `hash[key] = value`
+  // and pushes the hash back onto the stack.
+  assignToHash: function(key) {
+    var value = this.popStack(),
+        context,
+        type;
+
+    if (this.options.stringParams) {
+      type = this.popStack();
+      context = this.popStack();
+    }
+
+    var hash = this.hash;
+    if (context) {
+      hash.contexts.push("'" + key + "': " + context);
+    }
+    if (type) {
+      hash.types.push("'" + key + "': " + type);
+    }
+    hash.values.push("'" + key + "': (" + value + ")");
+  },
+
+  // HELPERS
+
+  compiler: JavaScriptCompiler,
+
+  compileChildren: function(environment, options) {
+    var children = environment.children, child, compiler;
+
+    for(var i=0, l=children.length; i<l; i++) {
+      child = children[i];
+      compiler = new this.compiler();
+
+      var index = this.matchExistingProgram(child);
+
+      if (index == null) {
+        this.context.programs.push('');     // Placeholder to prevent name conflicts for nested children
+        index = this.context.programs.length;
+        child.index = index;
+        child.name = 'program' + index;
+        this.context.programs[index] = compiler.compile(child, options, this.context);
+        this.context.environments[index] = child;
+      } else {
+        child.index = index;
+        child.name = 'program' + index;
+      }
+    }
+  },
+  matchExistingProgram: function(child) {
+    for (var i = 0, len = this.context.environments.length; i < len; i++) {
+      var environment = this.context.environments[i];
+      if (environment && environment.equals(child)) {
+        return i;
+      }
+    }
+  },
+
+  programExpression: function(guid) {
+    this.context.aliases.self = "this";
+
+    if(guid == null) {
+      return "self.noop";
+    }
+
+    var child = this.environment.children[guid],
+        depths = child.depths.list, depth;
+
+    var programParams = [child.index, child.name, "data"];
+
+    for(var i=0, l = depths.length; i<l; i++) {
+      depth = depths[i];
+
+      if(depth === 1) { programParams.push("depth0"); }
+      else { programParams.push("depth" + (depth - 1)); }
+    }
+
+    return (depths.length === 0 ? "self.program(" : "self.programWithDepth(") + programParams.join(", ") + ")";
+  },
+
+  register: function(name, val) {
+    this.useRegister(name);
+    this.source.push(name + " = " + val + ";");
+  },
+
+  useRegister: function(name) {
+    if(!this.registers[name]) {
+      this.registers[name] = true;
+      this.registers.list.push(name);
+    }
+  },
+
+  pushStackLiteral: function(item) {
+    return this.push(new Literal(item));
+  },
+
+  pushStack: function(item) {
+    this.flushInline();
+
+    var stack = this.incrStack();
+    if (item) {
+      this.source.push(stack + " = " + item + ";");
+    }
+    this.compileStack.push(stack);
+    return stack;
+  },
+
+  replaceStack: function(callback) {
+    var prefix = '',
+        inline = this.isInline(),
+        stack;
+
+    // If we are currently inline then we want to merge the inline statement into the
+    // replacement statement via ','
+    if (inline) {
+      var top = this.popStack(true);
+
+      if (top instanceof Literal) {
+        // Literals do not need to be inlined
+        stack = top.value;
+      } else {
+        // Get or create the current stack name for use by the inline
+        var name = this.stackSlot ? this.topStackName() : this.incrStack();
+
+        prefix = '(' + this.push(name) + ' = ' + top + '),';
+        stack = this.topStack();
+      }
+    } else {
+      stack = this.topStack();
+    }
+
+    var item = callback.call(this, stack);
+
+    if (inline) {
+      if (this.inlineStack.length || this.compileStack.length) {
+        this.popStack();
+      }
+      this.push('(' + prefix + item + ')');
+    } else {
+      // Prevent modification of the context depth variable. Through replaceStack
+      if (!/^stack/.test(stack)) {
+        stack = this.nextStack();
+      }
+
+      this.source.push(stack + " = (" + prefix + item + ");");
+    }
+    return stack;
+  },
+
+  nextStack: function() {
+    return this.pushStack();
+  },
+
+  incrStack: function() {
+    this.stackSlot++;
+    if(this.stackSlot > this.stackVars.length) { this.stackVars.push("stack" + this.stackSlot); }
+    return this.topStackName();
+  },
+  topStackName: function() {
+    return "stack" + this.stackSlot;
+  },
+  flushInline: function() {
+    var inlineStack = this.inlineStack;
+    if (inlineStack.length) {
+      this.inlineStack = [];
+      for (var i = 0, len = inlineStack.length; i < len; i++) {
+        var entry = inlineStack[i];
+        if (entry instanceof Literal) {
+          this.compileStack.push(entry);
+        } else {
+          this.pushStack(entry);
+        }
+      }
+    }
+  },
+  isInline: function() {
+    return this.inlineStack.length;
+  },
+
+  popStack: function(wrapped) {
+    var inline = this.isInline(),
+        item = (inline ? this.inlineStack : this.compileStack).pop();
+
+    if (!wrapped && (item instanceof Literal)) {
+      return item.value;
+    } else {
+      if (!inline) {
+        this.stackSlot--;
+      }
+      return item;
+    }
+  },
+
+  topStack: function(wrapped) {
+    var stack = (this.isInline() ? this.inlineStack : this.compileStack),
+        item = stack[stack.length - 1];
+
+    if (!wrapped && (item instanceof Literal)) {
+      return item.value;
+    } else {
+      return item;
+    }
+  },
+
+  quotedString: function(str) {
+    return '"' + str
+      .replace(/\\/g, '\\\\')
+      .replace(/"/g, '\\"')
+      .replace(/\n/g, '\\n')
+      .replace(/\r/g, '\\r')
+      .replace(/\u2028/g, '\\u2028')   // Per Ecma-262 7.3 + 7.8.4
+      .replace(/\u2029/g, '\\u2029') + '"';
+  },
+
+  setupHelper: function(paramSize, name, missingParams) {
+    var params = [];
+    this.setupParams(paramSize, params, missingParams);
+    var foundHelper = this.nameLookup('helpers', name, 'helper');
+
+    return {
+      params: params,
+      name: foundHelper,
+      callParams: ["depth0"].concat(params).join(", "),
+      helperMissingParams: missingParams && ["depth0", this.quotedString(name)].concat(params).join(", ")
+    };
+  },
+
+  // the params and contexts arguments are passed in arrays
+  // to fill in
+  setupParams: function(paramSize, params, useRegister) {
+    var options = [], contexts = [], types = [], param, inverse, program;
+
+    options.push("hash:" + this.popStack());
+
+    inverse = this.popStack();
+    program = this.popStack();
+
+    // Avoid setting fn and inverse if neither are set. This allows
+    // helpers to do a check for `if (options.fn)`
+    if (program || inverse) {
+      if (!program) {
+        this.context.aliases.self = "this";
+        program = "self.noop";
+      }
+
+      if (!inverse) {
+       this.context.aliases.self = "this";
+        inverse = "self.noop";
+      }
+
+      options.push("inverse:" + inverse);
+      options.push("fn:" + program);
+    }
+
+    for(var i=0; i<paramSize; i++) {
+      param = this.popStack();
+      params.push(param);
+
+      if(this.options.stringParams) {
+        types.push(this.popStack());
+        contexts.push(this.popStack());
+      }
+    }
+
+    if (this.options.stringParams) {
+      options.push("contexts:[" + contexts.join(",") + "]");
+      options.push("types:[" + types.join(",") + "]");
+      options.push("hashContexts:hashContexts");
+      options.push("hashTypes:hashTypes");
+    }
+
+    if(this.options.data) {
+      options.push("data:data");
+    }
+
+    options = "{" + options.join(",") + "}";
+    if (useRegister) {
+      this.register('options', options);
+      params.push('options');
+    } else {
+      params.push(options);
+    }
+    return params.join(", ");
+  }
+};
+
+var reservedWords = (
+  "break else new var" +
+  " case finally return void" +
+  " catch for switch while" +
+  " continue function this with" +
+  " default if throw" +
+  " delete in try" +
+  " do instanceof typeof" +
+  " abstract enum int short" +
+  " boolean export interface static" +
+  " byte extends long super" +
+  " char final native synchronized" +
+  " class float package throws" +
+  " const goto private transient" +
+  " debugger implements protected volatile" +
+  " double import public let yield"
+).split(" ");
+
+var compilerWords = JavaScriptCompiler.RESERVED_WORDS = {};
+
+for(var i=0, l=reservedWords.length; i<l; i++) {
+  compilerWords[reservedWords[i]] = true;
+}
+
+JavaScriptCompiler.isValidJavaScriptVariableName = function(name) {
+  if(!JavaScriptCompiler.RESERVED_WORDS[name] && /^[a-zA-Z_$][0-9a-zA-Z_$]+$/.test(name)) {
+    return true;
+  }
+  return false;
+};
+
+Handlebars.precompile = function(input, options) {
+  if (input == null || (typeof input !== 'string' && input.constructor !== Handlebars.AST.ProgramNode)) {
+    throw new Handlebars.Exception("You must pass a string or Handlebars AST to Handlebars.precompile. You passed " + input);
+  }
+
+  options = options || {};
+  if (!('data' in options)) {
+    options.data = true;
+  }
+  var ast = Handlebars.parse(input);
+  var environment = new Compiler().compile(ast, options);
+  return new JavaScriptCompiler().compile(environment, options);
+};
+
+Handlebars.compile = function(input, options) {
+  if (input == null || (typeof input !== 'string' && input.constructor !== Handlebars.AST.ProgramNode)) {
+    throw new Handlebars.Exception("You must pass a string or Handlebars AST to Handlebars.compile. You passed " + input);
+  }
+
+  options = options || {};
+  if (!('data' in options)) {
+    options.data = true;
+  }
+  var compiled;
+  function compile() {
+    var ast = Handlebars.parse(input);
+    var environment = new Compiler().compile(ast, options);
+    var templateSpec = new JavaScriptCompiler().compile(environment, options, undefined, true);
+    return Handlebars.template(templateSpec);
+  }
+
+  // Template is only compiled on first use and cached after that point.
+  return function(context, options) {
+    if (!compiled) {
+      compiled = compile();
+    }
+    return compiled.call(this, context, options);
+  };
+};
+
+;
+// lib/handlebars/runtime.js
+
+Handlebars.VM = {
+  template: function(templateSpec) {
+    // Just add water
+    var container = {
+      escapeExpression: Handlebars.Utils.escapeExpression,
+      invokePartial: Handlebars.VM.invokePartial,
+      programs: [],
+      program: function(i, fn, data) {
+        var programWrapper = this.programs[i];
+        if(data) {
+          programWrapper = Handlebars.VM.program(i, fn, data);
+        } else if (!programWrapper) {
+          programWrapper = this.programs[i] = Handlebars.VM.program(i, fn);
+        }
+        return programWrapper;
+      },
+      merge: function(param, common) {
+        var ret = param || common;
+
+        if (param && common) {
+          ret = {};
+          Handlebars.Utils.extend(ret, common);
+          Handlebars.Utils.extend(ret, param);
+        }
+        return ret;
+      },
+      programWithDepth: Handlebars.VM.programWithDepth,
+      noop: Handlebars.VM.noop,
+      compilerInfo: null
+    };
+
+    return function(context, options) {
+      options = options || {};
+      var result = templateSpec.call(container, Handlebars, context, options.helpers, options.partials, options.data);
+
+      var compilerInfo = container.compilerInfo || [],
+          compilerRevision = compilerInfo[0] || 1,
+          currentRevision = Handlebars.COMPILER_REVISION;
+
+      if (compilerRevision !== currentRevision) {
+        if (compilerRevision < currentRevision) {
+          var runtimeVersions = Handlebars.REVISION_CHANGES[currentRevision],
+              compilerVersions = Handlebars.REVISION_CHANGES[compilerRevision];
+          throw "Template was precompiled with an older version of Handlebars than the current runtime. "+
+                "Please update your precompiler to a newer version ("+runtimeVersions+") or downgrade your runtime to an older version ("+compilerVersions+").";
+        } else {
+          // Use the embedded version info since the runtime doesn't know about this revision yet
+          throw "Template was precompiled with a newer version of Handlebars than the current runtime. "+
+                "Please update your runtime to a newer version ("+compilerInfo[1]+").";
+        }
+      }
+
+      return result;
+    };
+  },
+
+  programWithDepth: function(i, fn, data /*, $depth */) {
+    var args = Array.prototype.slice.call(arguments, 3);
+
+    var program = function(context, options) {
+      options = options || {};
+
+      return fn.apply(this, [context, options.data || data].concat(args));
+    };
+    program.program = i;
+    program.depth = args.length;
+    return program;
+  },
+  program: function(i, fn, data) {
+    var program = function(context, options) {
+      options = options || {};
+
+      return fn(context, options.data || data);
+    };
+    program.program = i;
+    program.depth = 0;
+    return program;
+  },
+  noop: function() { return ""; },
+  invokePartial: function(partial, name, context, helpers, partials, data) {
+    var options = { helpers: helpers, partials: partials, data: data };
+
+    if(partial === undefined) {
+      throw new Handlebars.Exception("The partial " + name + " could not be found");
+    } else if(partial instanceof Function) {
+      return partial(context, options);
+    } else if (!Handlebars.compile) {
+      throw new Handlebars.Exception("The partial " + name + " could not be compiled when running in runtime-only mode");
+    } else {
+      partials[name] = Handlebars.compile(partial, {data: data !== undefined});
+      return partials[name](context, options);
+    }
+  }
+};
+
+Handlebars.template = Handlebars.VM.template;
+;
+// lib/handlebars/browser-suffix.js
+})(Handlebars);
+;
diff --git a/opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/lib/highlight.7.3.pack.js b/opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/lib/highlight.7.3.pack.js
new file mode 100644 (file)
index 0000000..9a95a75
--- /dev/null
@@ -0,0 +1 @@
+var hljs=new function(){function l(o){return o.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;")}function b(p){for(var o=p.firstChild;o;o=o.nextSibling){if(o.nodeName=="CODE"){return o}if(!(o.nodeType==3&&o.nodeValue.match(/\s+/))){break}}}function h(p,o){return Array.prototype.map.call(p.childNodes,function(q){if(q.nodeType==3){return o?q.nodeValue.replace(/\n/g,""):q.nodeValue}if(q.nodeName=="BR"){return"\n"}return h(q,o)}).join("")}function a(q){var p=(q.className+" "+q.parentNode.className).split(/\s+/);p=p.map(function(r){return r.replace(/^language-/,"")});for(var o=0;o<p.length;o++){if(e[p[o]]||p[o]=="no-highlight"){return p[o]}}}function c(q){var o=[];(function p(r,s){for(var t=r.firstChild;t;t=t.nextSibling){if(t.nodeType==3){s+=t.nodeValue.length}else{if(t.nodeName=="BR"){s+=1}else{if(t.nodeType==1){o.push({event:"start",offset:s,node:t});s=p(t,s);o.push({event:"stop",offset:s,node:t})}}}}return s})(q,0);return o}function j(x,v,w){var p=0;var y="";var r=[];function t(){if(x.length&&v.length){if(x[0].offset!=v[0].offset){return(x[0].offset<v[0].offset)?x:v}else{return v[0].event=="start"?x:v}}else{return x.length?x:v}}function s(A){function z(B){return" "+B.nodeName+'="'+l(B.value)+'"'}return"<"+A.nodeName+Array.prototype.map.call(A.attributes,z).join("")+">"}while(x.length||v.length){var u=t().splice(0,1)[0];y+=l(w.substr(p,u.offset-p));p=u.offset;if(u.event=="start"){y+=s(u.node);r.push(u.node)}else{if(u.event=="stop"){var o,q=r.length;do{q--;o=r[q];y+=("</"+o.nodeName.toLowerCase()+">")}while(o!=u.node);r.splice(q,1);while(q<r.length){y+=s(r[q]);q++}}}}return y+l(w.substr(p))}function f(q){function o(s,r){return RegExp(s,"m"+(q.cI?"i":"")+(r?"g":""))}function p(y,w){if(y.compiled){return}y.compiled=true;var s=[];if(y.k){var r={};function z(A,t){t.split(" ").forEach(function(B){var C=B.split("|");r[C[0]]=[A,C[1]?Number(C[1]):1];s.push(C[0])})}y.lR=o(y.l||hljs.IR,true);if(typeof y.k=="string"){z("keyword",y.k)}else{for(var x in y.k){if(!y.k.hasOwnProperty(x)){continue}z(x,y.k[x])}}y.k=r}if(w){if(y.bWK){y.b="\\b("+s.join("|")+")\\s"}y.bR=o(y.b?y.b:"\\B|\\b");if(!y.e&&!y.eW){y.e="\\B|\\b"}if(y.e){y.eR=o(y.e)}y.tE=y.e||"";if(y.eW&&w.tE){y.tE+=(y.e?"|":"")+w.tE}}if(y.i){y.iR=o(y.i)}if(y.r===undefined){y.r=1}if(!y.c){y.c=[]}for(var v=0;v<y.c.length;v++){if(y.c[v]=="self"){y.c[v]=y}p(y.c[v],y)}if(y.starts){p(y.starts,w)}var u=[];for(var v=0;v<y.c.length;v++){u.push(y.c[v].b)}if(y.tE){u.push(y.tE)}if(y.i){u.push(y.i)}y.t=u.length?o(u.join("|"),true):{exec:function(t){return null}}}p(q)}function d(D,E){function o(r,M){for(var L=0;L<M.c.length;L++){var K=M.c[L].bR.exec(r);if(K&&K.index==0){return M.c[L]}}}function s(K,r){if(K.e&&K.eR.test(r)){return K}if(K.eW){return s(K.parent,r)}}function t(r,K){return K.i&&K.iR.test(r)}function y(L,r){var K=F.cI?r[0].toLowerCase():r[0];return L.k.hasOwnProperty(K)&&L.k[K]}function G(){var K=l(w);if(!A.k){return K}var r="";var N=0;A.lR.lastIndex=0;var L=A.lR.exec(K);while(L){r+=K.substr(N,L.index-N);var M=y(A,L);if(M){v+=M[1];r+='<span class="'+M[0]+'">'+L[0]+"</span>"}else{r+=L[0]}N=A.lR.lastIndex;L=A.lR.exec(K)}return r+K.substr(N)}function z(){if(A.sL&&!e[A.sL]){return l(w)}var r=A.sL?d(A.sL,w):g(w);if(A.r>0){v+=r.keyword_count;B+=r.r}return'<span class="'+r.language+'">'+r.value+"</span>"}function J(){return A.sL!==undefined?z():G()}function I(L,r){var K=L.cN?'<span class="'+L.cN+'">':"";if(L.rB){x+=K;w=""}else{if(L.eB){x+=l(r)+K;w=""}else{x+=K;w=r}}A=Object.create(L,{parent:{value:A}});B+=L.r}function C(K,r){w+=K;if(r===undefined){x+=J();return 0}var L=o(r,A);if(L){x+=J();I(L,r);return L.rB?0:r.length}var M=s(A,r);if(M){if(!(M.rE||M.eE)){w+=r}x+=J();do{if(A.cN){x+="</span>"}A=A.parent}while(A!=M.parent);if(M.eE){x+=l(r)}w="";if(M.starts){I(M.starts,"")}return M.rE?0:r.length}if(t(r,A)){throw"Illegal"}w+=r;return r.length||1}var F=e[D];f(F);var A=F;var w="";var B=0;var v=0;var x="";try{var u,q,p=0;while(true){A.t.lastIndex=p;u=A.t.exec(E);if(!u){break}q=C(E.substr(p,u.index-p),u[0]);p=u.index+q}C(E.substr(p));return{r:B,keyword_count:v,value:x,language:D}}catch(H){if(H=="Illegal"){return{r:0,keyword_count:0,value:l(E)}}else{throw H}}}function g(s){var o={keyword_count:0,r:0,value:l(s)};var q=o;for(var p in e){if(!e.hasOwnProperty(p)){continue}var r=d(p,s);r.language=p;if(r.keyword_count+r.r>q.keyword_count+q.r){q=r}if(r.keyword_count+r.r>o.keyword_count+o.r){q=o;o=r}}if(q.language){o.second_best=q}return o}function i(q,p,o){if(p){q=q.replace(/^((<[^>]+>|\t)+)/gm,function(r,v,u,t){return v.replace(/\t/g,p)})}if(o){q=q.replace(/\n/g,"<br>")}return q}function m(r,u,p){var v=h(r,p);var t=a(r);if(t=="no-highlight"){return}var w=t?d(t,v):g(v);t=w.language;var o=c(r);if(o.length){var q=document.createElement("pre");q.innerHTML=w.value;w.value=j(o,c(q),v)}w.value=i(w.value,u,p);var s=r.className;if(!s.match("(\\s|^)(language-)?"+t+"(\\s|$)")){s=s?(s+" "+t):t}r.innerHTML=w.value;r.className=s;r.result={language:t,kw:w.keyword_count,re:w.r};if(w.second_best){r.second_best={language:w.second_best.language,kw:w.second_best.keyword_count,re:w.second_best.r}}}function n(){if(n.called){return}n.called=true;Array.prototype.map.call(document.getElementsByTagName("pre"),b).filter(Boolean).forEach(function(o){m(o,hljs.tabReplace)})}function k(){window.addEventListener("DOMContentLoaded",n,false);window.addEventListener("load",n,false)}var e={};this.LANGUAGES=e;this.highlight=d;this.highlightAuto=g;this.fixMarkup=i;this.highlightBlock=m;this.initHighlighting=n;this.initHighlightingOnLoad=k;this.IR="[a-zA-Z][a-zA-Z0-9_]*";this.UIR="[a-zA-Z_][a-zA-Z0-9_]*";this.NR="\\b\\d+(\\.\\d+)?";this.CNR="(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)";this.BNR="\\b(0b[01]+)";this.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|\\.|-|-=|/|/=|:|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~";this.BE={b:"\\\\[\\s\\S]",r:0};this.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[this.BE],r:0};this.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[this.BE],r:0};this.CLCM={cN:"comment",b:"//",e:"$"};this.CBLCLM={cN:"comment",b:"/\\*",e:"\\*/"};this.HCM={cN:"comment",b:"#",e:"$"};this.NM={cN:"number",b:this.NR,r:0};this.CNM={cN:"number",b:this.CNR,r:0};this.BNM={cN:"number",b:this.BNR,r:0};this.inherit=function(q,r){var o={};for(var p in q){o[p]=q[p]}if(r){for(var p in r){o[p]=r[p]}}return o}}();hljs.LANGUAGES.xml=function(a){var c="[A-Za-z0-9\\._:-]+";var b={eW:true,c:[{cN:"attribute",b:c,r:0},{b:'="',rB:true,e:'"',c:[{cN:"value",b:'"',eW:true}]},{b:"='",rB:true,e:"'",c:[{cN:"value",b:"'",eW:true}]},{b:"=",c:[{cN:"value",b:"[^\\s/>]+"}]}]};return{cI:true,c:[{cN:"pi",b:"<\\?",e:"\\?>",r:10},{cN:"doctype",b:"<!DOCTYPE",e:">",r:10,c:[{b:"\\[",e:"\\]"}]},{cN:"comment",b:"<!--",e:"-->",r:10},{cN:"cdata",b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{cN:"tag",b:"<style(?=\\s|>|$)",e:">",k:{title:"style"},c:[b],starts:{e:"</style>",rE:true,sL:"css"}},{cN:"tag",b:"<script(?=\\s|>|$)",e:">",k:{title:"script"},c:[b],starts:{e:"<\/script>",rE:true,sL:"javascript"}},{b:"<%",e:"%>",sL:"vbscript"},{cN:"tag",b:"</?",e:"/?>",c:[{cN:"title",b:"[^ />]+"},b]}]}}(hljs);hljs.LANGUAGES.json=function(a){var e={literal:"true false null"};var d=[a.QSM,a.CNM];var c={cN:"value",e:",",eW:true,eE:true,c:d,k:e};var b={b:"{",e:"}",c:[{cN:"attribute",b:'\\s*"',e:'"\\s*:\\s*',eB:true,eE:true,c:[a.BE],i:"\\n",starts:c}],i:"\\S"};var f={b:"\\[",e:"\\]",c:[a.inherit(c,{cN:null})],i:"\\S"};d.splice(d.length,0,b,f);return{c:d,k:e,i:"\\S"}}(hljs);
\ No newline at end of file
diff --git a/opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/lib/jquery-1.8.0.min.js b/opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/lib/jquery-1.8.0.min.js
new file mode 100644 (file)
index 0000000..f121291
--- /dev/null
@@ -0,0 +1,2 @@
+/*! jQuery v@1.8.0 jquery.com | jquery.org/license */\r
+(function(a,b){function G(a){var b=F[a]={};return p.each(a.split(s),function(a,c){b[c]=!0}),b}function J(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(I,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:+d+""===d?+d:H.test(d)?p.parseJSON(d):d}catch(f){}p.data(a,c,d)}else d=b}return d}function K(a){var b;for(b in a){if(b==="data"&&p.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function ba(){return!1}function bb(){return!0}function bh(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function bi(a,b){do a=a[b];while(a&&a.nodeType!==1);return a}function bj(a,b,c){b=b||0;if(p.isFunction(b))return p.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return p.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=p.grep(a,function(a){return a.nodeType===1});if(be.test(b))return p.filter(b,d,!c);b=p.filter(b,d)}return p.grep(a,function(a,d){return p.inArray(a,b)>=0===c})}function bk(a){var b=bl.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function bC(a,b){return a.getElementsByTagName(b)[0]||a.appendChild(a.ownerDocument.createElement(b))}function bD(a,b){if(b.nodeType!==1||!p.hasData(a))return;var c,d,e,f=p._data(a),g=p._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;d<e;d++)p.event.add(b,c,h[c][d])}g.data&&(g.data=p.extend({},g.data))}function bE(a,b){var c;if(b.nodeType!==1)return;b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase(),c==="object"?(b.parentNode&&(b.outerHTML=a.outerHTML),p.support.html5Clone&&a.innerHTML&&!p.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):c==="input"&&bv.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):c==="option"?b.selected=a.defaultSelected:c==="input"||c==="textarea"?b.defaultValue=a.defaultValue:c==="script"&&b.text!==a.text&&(b.text=a.text),b.removeAttribute(p.expando)}function bF(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bG(a){bv.test(a.type)&&(a.defaultChecked=a.checked)}function bX(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=bV.length;while(e--){b=bV[e]+c;if(b in a)return b}return d}function bY(a,b){return a=b||a,p.css(a,"display")==="none"||!p.contains(a.ownerDocument,a)}function bZ(a,b){var c,d,e=[],f=0,g=a.length;for(;f<g;f++){c=a[f];if(!c.style)continue;e[f]=p._data(c,"olddisplay"),b?(!e[f]&&c.style.display==="none"&&(c.style.display=""),c.style.display===""&&bY(c)&&(e[f]=p._data(c,"olddisplay",cb(c.nodeName)))):(d=bH(c,"display"),!e[f]&&d!=="none"&&p._data(c,"olddisplay",d))}for(f=0;f<g;f++){c=a[f];if(!c.style)continue;if(!b||c.style.display==="none"||c.style.display==="")c.style.display=b?e[f]||"":"none"}return a}function b$(a,b,c){var d=bO.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function b_(a,b,c,d){var e=c===(d?"border":"content")?4:b==="width"?1:0,f=0;for(;e<4;e+=2)c==="margin"&&(f+=p.css(a,c+bU[e],!0)),d?(c==="content"&&(f-=parseFloat(bH(a,"padding"+bU[e]))||0),c!=="margin"&&(f-=parseFloat(bH(a,"border"+bU[e]+"Width"))||0)):(f+=parseFloat(bH(a,"padding"+bU[e]))||0,c!=="padding"&&(f+=parseFloat(bH(a,"border"+bU[e]+"Width"))||0));return f}function ca(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=!0,f=p.support.boxSizing&&p.css(a,"boxSizing")==="border-box";if(d<=0){d=bH(a,b);if(d<0||d==null)d=a.style[b];if(bP.test(d))return d;e=f&&(p.support.boxSizingReliable||d===a.style[b]),d=parseFloat(d)||0}return d+b_(a,b,c||(f?"border":"content"),e)+"px"}function cb(a){if(bR[a])return bR[a];var b=p("<"+a+">").appendTo(e.body),c=b.css("display");b.remove();if(c==="none"||c===""){bI=e.body.appendChild(bI||p.extend(e.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!bJ||!bI.createElement)bJ=(bI.contentWindow||bI.contentDocument).document,bJ.write("<!doctype html><html><body>"),bJ.close();b=bJ.body.appendChild(bJ.createElement(a)),c=bH(b,"display"),e.body.removeChild(bI)}return bR[a]=c,c}function ch(a,b,c,d){var e;if(p.isArray(b))p.each(b,function(b,e){c||cd.test(a)?d(a,e):ch(a+"["+(typeof e=="object"?b:"")+"]",e,c,d)});else if(!c&&p.type(b)==="object")for(e in b)ch(a+"["+e+"]",b[e],c,d);else d(a,b)}function cy(a){return function(b,c){typeof b!="string"&&(c=b,b="*");var d,e,f,g=b.toLowerCase().split(s),h=0,i=g.length;if(p.isFunction(c))for(;h<i;h++)d=g[h],f=/^\+/.test(d),f&&(d=d.substr(1)||"*"),e=a[d]=a[d]||[],e[f?"unshift":"push"](c)}}function cz(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h,i=a[f],j=0,k=i?i.length:0,l=a===cu;for(;j<k&&(l||!h);j++)h=i[j](c,d,e),typeof h=="string"&&(!l||g[h]?h=b:(c.dataTypes.unshift(h),h=cz(a,c,d,e,h,g)));return(l||!h)&&!g["*"]&&(h=cz(a,c,d,e,"*",g)),h}function cA(a,c){var d,e,f=p.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((f[d]?a:e||(e={}))[d]=c[d]);e&&p.extend(!0,a,e)}function cB(a,c,d){var e,f,g,h,i=a.contents,j=a.dataTypes,k=a.responseFields;for(f in k)f in d&&(c[k[f]]=d[f]);while(j[0]==="*")j.shift(),e===b&&(e=a.mimeType||c.getResponseHeader("content-type"));if(e)for(f in i)if(i[f]&&i[f].test(e)){j.unshift(f);break}if(j[0]in d)g=j[0];else{for(f in d){if(!j[0]||a.converters[f+" "+j[0]]){g=f;break}h||(h=f)}g=g||h}if(g)return g!==j[0]&&j.unshift(g),d[g]}function cC(a,b){var c,d,e,f,g=a.dataTypes.slice(),h=g[0],i={},j=0;a.dataFilter&&(b=a.dataFilter(b,a.dataType));if(g[1])for(c in a.converters)i[c.toLowerCase()]=a.converters[c];for(;e=g[++j];)if(e!=="*"){if(h!=="*"&&h!==e){c=i[h+" "+e]||i["* "+e];if(!c)for(d in i){f=d.split(" ");if(f[1]===e){c=i[h+" "+f[0]]||i["* "+f[0]];if(c){c===!0?c=i[d]:i[d]!==!0&&(e=f[0],g.splice(j--,0,e));break}}}if(c!==!0)if(c&&a["throws"])b=c(b);else try{b=c(b)}catch(k){return{state:"parsererror",error:c?k:"No conversion from "+h+" to "+e}}}h=e}return{state:"success",data:b}}function cK(){try{return new a.XMLHttpRequest}catch(b){}}function cL(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function cT(){return setTimeout(function(){cM=b},0),cM=p.now()}function cU(a,b){p.each(b,function(b,c){var d=(cS[b]||[]).concat(cS["*"]),e=0,f=d.length;for(;e<f;e++)if(d[e].call(a,b,c))return})}function cV(a,b,c){var d,e=0,f=0,g=cR.length,h=p.Deferred().always(function(){delete i.elem}),i=function(){var b=cM||cT(),c=Math.max(0,j.startTime+j.duration-b),d=1-(c/j.duration||0),e=0,f=j.tweens.length;for(;e<f;e++)j.tweens[e].run(d);return h.notifyWith(a,[j,d,c]),d<1&&f?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:p.extend({},b),opts:p.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:cM||cT(),duration:c.duration,tweens:[],createTween:function(b,c,d){var e=p.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(e),e},stop:function(b){var c=0,d=b?j.tweens.length:0;for(;c<d;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;cW(k,j.opts.specialEasing);for(;e<g;e++){d=cR[e].call(j,a,k,j.opts);if(d)return d}return cU(j,k),p.isFunction(j.opts.start)&&j.opts.start.call(a,j),p.fx.timer(p.extend(i,{anim:j,queue:j.opts.queue,elem:a})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}function cW(a,b){var c,d,e,f,g;for(c in a){d=p.camelCase(c),e=b[d],f=a[c],p.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=p.cssHooks[d];if(g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}}function cX(a,b,c){var d,e,f,g,h,i,j,k,l=this,m=a.style,n={},o=[],q=a.nodeType&&bY(a);c.queue||(j=p._queueHooks(a,"fx"),j.unqueued==null&&(j.unqueued=0,k=j.empty.fire,j.empty.fire=function(){j.unqueued||k()}),j.unqueued++,l.always(function(){l.always(function(){j.unqueued--,p.queue(a,"fx").length||j.empty.fire()})})),a.nodeType===1&&("height"in b||"width"in b)&&(c.overflow=[m.overflow,m.overflowX,m.overflowY],p.css(a,"display")==="inline"&&p.css(a,"float")==="none"&&(!p.support.inlineBlockNeedsLayout||cb(a.nodeName)==="inline"?m.display="inline-block":m.zoom=1)),c.overflow&&(m.overflow="hidden",p.support.shrinkWrapBlocks||l.done(function(){m.overflow=c.overflow[0],m.overflowX=c.overflow[1],m.overflowY=c.overflow[2]}));for(d in b){f=b[d];if(cO.exec(f)){delete b[d];if(f===(q?"hide":"show"))continue;o.push(d)}}g=o.length;if(g){h=p._data(a,"fxshow")||p._data(a,"fxshow",{}),q?p(a).show():l.done(function(){p(a).hide()}),l.done(function(){var b;p.removeData(a,"fxshow",!0);for(b in n)p.style(a,b,n[b])});for(d=0;d<g;d++)e=o[d],i=l.createTween(e,q?h[e]:0),n[e]=h[e]||p.style(a,e),e in h||(h[e]=i.start,q&&(i.end=i.start,i.start=e==="width"||e==="height"?1:0))}}function cY(a,b,c,d,e){return new cY.prototype.init(a,b,c,d,e)}function cZ(a,b){var c,d={height:a},e=0;for(;e<4;e+=2-b)c=bU[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function c_(a){return p.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}var c,d,e=a.document,f=a.location,g=a.navigator,h=a.jQuery,i=a.$,j=Array.prototype.push,k=Array.prototype.slice,l=Array.prototype.indexOf,m=Object.prototype.toString,n=Object.prototype.hasOwnProperty,o=String.prototype.trim,p=function(a,b){return new p.fn.init(a,b,c)},q=/[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source,r=/\S/,s=/\s+/,t=r.test(" ")?/^[\s\xA0]+|[\s\xA0]+$/g:/^\s+|\s+$/g,u=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,y=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,z=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,A=/^-ms-/,B=/-([\da-z])/gi,C=function(a,b){return(b+"").toUpperCase()},D=function(){e.addEventListener?(e.removeEventListener("DOMContentLoaded",D,!1),p.ready()):e.readyState==="complete"&&(e.detachEvent("onreadystatechange",D),p.ready())},E={};p.fn=p.prototype={constructor:p,init:function(a,c,d){var f,g,h,i;if(!a)return this;if(a.nodeType)return this.context=this[0]=a,this.length=1,this;if(typeof a=="string"){a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3?f=[null,a,null]:f=u.exec(a);if(f&&(f[1]||!c)){if(f[1])return c=c instanceof p?c[0]:c,i=c&&c.nodeType?c.ownerDocument||c:e,a=p.parseHTML(f[1],i,!0),v.test(f[1])&&p.isPlainObject(c)&&this.attr.call(a,c,!0),p.merge(this,a);g=e.getElementById(f[2]);if(g&&g.parentNode){if(g.id!==f[2])return d.find(a);this.length=1,this[0]=g}return this.context=e,this.selector=a,this}return!c||c.jquery?(c||d).find(a):this.constructor(c).find(a)}return p.isFunction(a)?d.ready(a):(a.selector!==b&&(this.selector=a.selector,this.context=a.context),p.makeArray(a,this))},selector:"",jquery:"1.8.0",length:0,size:function(){return this.length},toArray:function(){return k.call(this)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=p.merge(this.constructor(),a);return d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")"),d},each:function(a,b){return p.each(this,a,b)},ready:function(a){return p.ready.promise().done(a),this},eq:function(a){return a=+a,a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(k.apply(this,arguments),"slice",k.call(arguments).join(","))},map:function(a){return this.pushStack(p.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:j,sort:[].sort,splice:[].splice},p.fn.init.prototype=p.fn,p.extend=p.fn.extend=function(){var a,c,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;typeof h=="boolean"&&(k=h,h=arguments[1]||{},i=2),typeof h!="object"&&!p.isFunction(h)&&(h={}),j===i&&(h=this,--i);for(;i<j;i++)if((a=arguments[i])!=null)for(c in a){d=h[c],e=a[c];if(h===e)continue;k&&e&&(p.isPlainObject(e)||(f=p.isArray(e)))?(f?(f=!1,g=d&&p.isArray(d)?d:[]):g=d&&p.isPlainObject(d)?d:{},h[c]=p.extend(k,g,e)):e!==b&&(h[c]=e)}return h},p.extend({noConflict:function(b){return a.$===p&&(a.$=i),b&&a.jQuery===p&&(a.jQuery=h),p},isReady:!1,readyWait:1,holdReady:function(a){a?p.readyWait++:p.ready(!0)},ready:function(a){if(a===!0?--p.readyWait:p.isReady)return;if(!e.body)return setTimeout(p.ready,1);p.isReady=!0;if(a!==!0&&--p.readyWait>0)return;d.resolveWith(e,[p]),p.fn.trigger&&p(e).trigger("ready").off("ready")},isFunction:function(a){return p.type(a)==="function"},isArray:Array.isArray||function(a){return p.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):E[m.call(a)]||"object"},isPlainObject:function(a){if(!a||p.type(a)!=="object"||a.nodeType||p.isWindow(a))return!1;try{if(a.constructor&&!n.call(a,"constructor")&&!n.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||n.call(a,d)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},error:function(a){throw new Error(a)},parseHTML:function(a,b,c){var d;return!a||typeof a!="string"?null:(typeof b=="boolean"&&(c=b,b=0),b=b||e,(d=v.exec(a))?[b.createElement(d[1])]:(d=p.buildFragment([a],b,c?null:[]),p.merge([],(d.cacheable?p.clone(d.fragment):d.fragment).childNodes)))},parseJSON:function(b){if(!b||typeof b!="string")return null;b=p.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(w.test(b.replace(y,"@").replace(z,"]").replace(x,"")))return(new Function("return "+b))();p.error("Invalid JSON: "+b)},parseXML:function(c){var d,e;if(!c||typeof c!="string")return null;try{a.DOMParser?(e=new DOMParser,d=e.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(f){d=b}return(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&p.error("Invalid XML: "+c),d},noop:function(){},globalEval:function(b){b&&r.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(A,"ms-").replace(B,C)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var e,f=0,g=a.length,h=g===b||p.isFunction(a);if(d){if(h){for(e in a)if(c.apply(a[e],d)===!1)break}else for(;f<g;)if(c.apply(a[f++],d)===!1)break}else if(h){for(e in a)if(c.call(a[e],e,a[e])===!1)break}else for(;f<g;)if(c.call(a[f],f,a[f++])===!1)break;return a},trim:o?function(a){return a==null?"":o.call(a)}:function(a){return a==null?"":a.toString().replace(t,"")},makeArray:function(a,b){var c,d=b||[];return a!=null&&(c=p.type(a),a.length==null||c==="string"||c==="function"||c==="regexp"||p.isWindow(a)?j.call(d,a):p.merge(d,a)),d},inArray:function(a,b,c){var d;if(b){if(l)return l.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=c.length,e=a.length,f=0;if(typeof d=="number")for(;f<d;f++)a[e++]=c[f];else while(c[f]!==b)a[e++]=c[f++];return a.length=e,a},grep:function(a,b,c){var d,e=[],f=0,g=a.length;c=!!c;for(;f<g;f++)d=!!b(a[f],f),c!==d&&e.push(a[f]);return e},map:function(a,c,d){var e,f,g=[],h=0,i=a.length,j=a instanceof p||i!==b&&typeof i=="number"&&(i>0&&a[0]&&a[i-1]||i===0||p.isArray(a));if(j)for(;h<i;h++)e=c(a[h],h,d),e!=null&&(g[g.length]=e);else for(f in a)e=c(a[f],f,d),e!=null&&(g[g.length]=e);return g.concat.apply([],g)},guid:1,proxy:function(a,c){var d,e,f;return typeof c=="string"&&(d=a[c],c=a,a=d),p.isFunction(a)?(e=k.call(arguments,2),f=function(){return a.apply(c,e.concat(k.call(arguments)))},f.guid=a.guid=a.guid||f.guid||p.guid++,f):b},access:function(a,c,d,e,f,g,h){var i,j=d==null,k=0,l=a.length;if(d&&typeof d=="object"){for(k in d)p.access(a,c,k,d[k],1,g,e);f=1}else if(e!==b){i=h===b&&p.isFunction(e),j&&(i?(i=c,c=function(a,b,c){return i.call(p(a),c)}):(c.call(a,e),c=null));if(c)for(;k<l;k++)c(a[k],d,i?e.call(a[k],k,c(a[k],d)):e,h);f=1}return f?a:j?c.call(a):l?c(a[0],d):g},now:function(){return(new Date).getTime()}}),p.ready.promise=function(b){if(!d){d=p.Deferred();if(e.readyState==="complete"||e.readyState!=="loading"&&e.addEventListener)setTimeout(p.ready,1);else if(e.addEventListener)e.addEventListener("DOMContentLoaded",D,!1),a.addEventListener("load",p.ready,!1);else{e.attachEvent("onreadystatechange",D),a.attachEvent("onload",p.ready);var c=!1;try{c=a.frameElement==null&&e.documentElement}catch(f){}c&&c.doScroll&&function g(){if(!p.isReady){try{c.doScroll("left")}catch(a){return setTimeout(g,50)}p.ready()}}()}}return d.promise(b)},p.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){E["[object "+b+"]"]=b.toLowerCase()}),c=p(e);var F={};p.Callbacks=function(a){a=typeof a=="string"?F[a]||G(a):p.extend({},a);var c,d,e,f,g,h,i=[],j=!a.once&&[],k=function(b){c=a.memory&&b,d=!0,h=f||0,f=0,g=i.length,e=!0;for(;i&&h<g;h++)if(i[h].apply(b[0],b[1])===!1&&a.stopOnFalse){c=!1;break}e=!1,i&&(j?j.length&&k(j.shift()):c?i=[]:l.disable())},l={add:function(){if(i){var b=i.length;(function d(b){p.each(b,function(b,c){p.isFunction(c)&&(!a.unique||!l.has(c))?i.push(c):c&&c.length&&d(c)})})(arguments),e?g=i.length:c&&(f=b,k(c))}return this},remove:function(){return i&&p.each(arguments,function(a,b){var c;while((c=p.inArray(b,i,c))>-1)i.splice(c,1),e&&(c<=g&&g--,c<=h&&h--)}),this},has:function(a){return p.inArray(a,i)>-1},empty:function(){return i=[],this},disable:function(){return i=j=c=b,this},disabled:function(){return!i},lock:function(){return j=b,c||l.disable(),this},locked:function(){return!j},fireWith:function(a,b){return b=b||[],b=[a,b.slice?b.slice():b],i&&(!d||j)&&(e?j.push(b):k(b)),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!d}};return l},p.extend({Deferred:function(a){var b=[["resolve","done",p.Callbacks("once memory"),"resolved"],["reject","fail",p.Callbacks("once memory"),"rejected"],["notify","progress",p.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return p.Deferred(function(c){p.each(b,function(b,d){var f=d[0],g=a[b];e[d[1]](p.isFunction(g)?function(){var a=g.apply(this,arguments);a&&p.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f+"With"](this===e?c:this,[a])}:c[f])}),a=null}).promise()},promise:function(a){return typeof a=="object"?p.extend(a,d):d}},e={};return d.pipe=d.then,p.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[a^1][2].disable,b[2][2].lock),e[f[0]]=g.fire,e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=k.call(arguments),d=c.length,e=d!==1||a&&p.isFunction(a.promise)?d:0,f=e===1?a:p.Deferred(),g=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?k.call(arguments):d,c===h?f.notifyWith(b,c):--e||f.resolveWith(b,c)}},h,i,j;if(d>1){h=new Array(d),i=new Array(d),j=new Array(d);for(;b<d;b++)c[b]&&p.isFunction(c[b].promise)?c[b].promise().done(g(b,j,c)).fail(f.reject).progress(g(b,i,h)):--e}return e||f.resolveWith(j,c),f.promise()}}),p.support=function(){var b,c,d,f,g,h,i,j,k,l,m,n=e.createElement("div");n.setAttribute("className","t"),n.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",c=n.getElementsByTagName("*"),d=n.getElementsByTagName("a")[0],d.style.cssText="top:1px;float:left;opacity:.5";if(!c||!c.length||!d)return{};f=e.createElement("select"),g=f.appendChild(e.createElement("option")),h=n.getElementsByTagName("input")[0],b={leadingWhitespace:n.firstChild.nodeType===3,tbody:!n.getElementsByTagName("tbody").length,htmlSerialize:!!n.getElementsByTagName("link").length,style:/top/.test(d.getAttribute("style")),hrefNormalized:d.getAttribute("href")==="/a",opacity:/^0.5/.test(d.style.opacity),cssFloat:!!d.style.cssFloat,checkOn:h.value==="on",optSelected:g.selected,getSetAttribute:n.className!=="t",enctype:!!e.createElement("form").enctype,html5Clone:e.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",boxModel:e.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},h.checked=!0,b.noCloneChecked=h.cloneNode(!0).checked,f.disabled=!0,b.optDisabled=!g.disabled;try{delete n.test}catch(o){b.deleteExpando=!1}!n.addEventListener&&n.attachEvent&&n.fireEvent&&(n.attachEvent("onclick",m=function(){b.noCloneEvent=!1}),n.cloneNode(!0).fireEvent("onclick"),n.detachEvent("onclick",m)),h=e.createElement("input"),h.value="t",h.setAttribute("type","radio"),b.radioValue=h.value==="t",h.setAttribute("checked","checked"),h.setAttribute("name","t"),n.appendChild(h),i=e.createDocumentFragment(),i.appendChild(n.lastChild),b.checkClone=i.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=h.checked,i.removeChild(h),i.appendChild(n);if(n.attachEvent)for(k in{submit:!0,change:!0,focusin:!0})j="on"+k,l=j in n,l||(n.setAttribute(j,"return;"),l=typeof n[j]=="function"),b[k+"Bubbles"]=l;return p(function(){var c,d,f,g,h="padding:0;margin:0;border:0;display:block;overflow:hidden;",i=e.getElementsByTagName("body")[0];if(!i)return;c=e.createElement("div"),c.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",i.insertBefore(c,i.firstChild),d=e.createElement("div"),c.appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",f=d.getElementsByTagName("td"),f[0].style.cssText="padding:0;margin:0;border:0;display:none",l=f[0].offsetHeight===0,f[0].style.display="",f[1].style.display="none",b.reliableHiddenOffsets=l&&f[0].offsetHeight===0,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",b.boxSizing=d.offsetWidth===4,b.doesNotIncludeMarginInBodyOffset=i.offsetTop!==1,a.getComputedStyle&&(b.pixelPosition=(a.getComputedStyle(d,null)||{}).top!=="1%",b.boxSizingReliable=(a.getComputedStyle(d,null)||{width:"4px"}).width==="4px",g=e.createElement("div"),g.style.cssText=d.style.cssText=h,g.style.marginRight=g.style.width="0",d.style.width="1px",d.appendChild(g),b.reliableMarginRight=!parseFloat((a.getComputedStyle(g,null)||{}).marginRight)),typeof d.style.zoom!="undefined"&&(d.innerHTML="",d.style.cssText=h+"width:1px;padding:1px;display:inline;zoom:1",b.inlineBlockNeedsLayout=d.offsetWidth===3,d.style.display="block",d.style.overflow="visible",d.innerHTML="<div></div>",d.firstChild.style.width="5px",b.shrinkWrapBlocks=d.offsetWidth!==3,c.style.zoom=1),i.removeChild(c),c=d=f=g=null}),i.removeChild(n),c=d=f=g=h=i=n=null,b}();var H=/^(?:\{.*\}|\[.*\])$/,I=/([A-Z])/g;p.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(p.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){return a=a.nodeType?p.cache[a[p.expando]]:a[p.expando],!!a&&!K(a)},data:function(a,c,d,e){if(!p.acceptData(a))return;var f,g,h=p.expando,i=typeof c=="string",j=a.nodeType,k=j?p.cache:a,l=j?a[h]:a[h]&&h;if((!l||!k[l]||!e&&!k[l].data)&&i&&d===b)return;l||(j?a[h]=l=p.deletedIds.pop()||++p.uuid:l=h),k[l]||(k[l]={},j||(k[l].toJSON=p.noop));if(typeof c=="object"||typeof c=="function")e?k[l]=p.extend(k[l],c):k[l].data=p.extend(k[l].data,c);return f=k[l],e||(f.data||(f.data={}),f=f.data),d!==b&&(f[p.camelCase(c)]=d),i?(g=f[c],g==null&&(g=f[p.camelCase(c)])):g=f,g},removeData:function(a,b,c){if(!p.acceptData(a))return;var d,e,f,g=a.nodeType,h=g?p.cache:a,i=g?a[p.expando]:p.expando;if(!h[i])return;if(b){d=c?h[i]:h[i].data;if(d){p.isArray(b)||(b in d?b=[b]:(b=p.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,f=b.length;e<f;e++)delete d[b[e]];if(!(c?K:p.isEmptyObject)(d))return}}if(!c){delete h[i].data;if(!K(h[i]))return}g?p.cleanData([a],!0):p.support.deleteExpando||h!=h.window?delete h[i]:h[i]=null},_data:function(a,b,c){return p.data(a,b,c,!0)},acceptData:function(a){var b=a.nodeName&&p.noData[a.nodeName.toLowerCase()];return!b||b!==!0&&a.getAttribute("classid")===b}}),p.fn.extend({data:function(a,c){var d,e,f,g,h,i=this[0],j=0,k=null;if(a===b){if(this.length){k=p.data(i);if(i.nodeType===1&&!p._data(i,"parsedAttrs")){f=i.attributes;for(h=f.length;j<h;j++)g=f[j].name,g.indexOf("data-")===0&&(g=p.camelCase(g.substring(5)),J(i,g,k[g]));p._data(i,"parsedAttrs",!0)}}return k}return typeof a=="object"?this.each(function(){p.data(this,a)}):(d=a.split(".",2),d[1]=d[1]?"."+d[1]:"",e=d[1]+"!",p.access(this,function(c){if(c===b)return k=this.triggerHandler("getData"+e,[d[0]]),k===b&&i&&(k=p.data(i,a),k=J(i,a,k)),k===b&&d[1]?this.data(d[0]):k;d[1]=c,this.each(function(){var b=p(this);b.triggerHandler("setData"+e,d),p.data(this,a,c),b.triggerHandler("changeData"+e,d)})},null,c,arguments.length>1,null,!1))},removeData:function(a){return this.each(function(){p.removeData(this,a)})}}),p.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=p._data(a,b),c&&(!d||p.isArray(c)?d=p._data(a,b,p.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=p.queue(a,b),d=c.shift(),e=p._queueHooks(a,b),f=function(){p.dequeue(a,b)};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),delete e.stop,d.call(a,f,e)),!c.length&&e&&e.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return p._data(a,c)||p._data(a,c,{empty:p.Callbacks("once memory").add(function(){p.removeData(a,b+"queue",!0),p.removeData(a,c,!0)})})}}),p.fn.extend({queue:function(a,c){var d=2;return typeof a!="string"&&(c=a,a="fx",d--),arguments.length<d?p.queue(this[0],a):c===b?this:this.each(function(){var b=p.queue(this,a,c);p._queueHooks(this,a),a==="fx"&&b[0]!=="inprogress"&&p.dequeue(this,a)})},dequeue:function(a){return this.each(function(){p.dequeue(this,a)})},delay:function(a,b){return a=p.fx?p.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){var d,e=1,f=p.Deferred(),g=this,h=this.length,i=function(){--e||f.resolveWith(g,[g])};typeof a!="string"&&(c=a,a=b),a=a||"fx";while(h--)(d=p._data(g[h],a+"queueHooks"))&&d.empty&&(e++,d.empty.add(i));return i(),f.promise(c)}});var L,M,N,O=/[\t\r\n]/g,P=/\r/g,Q=/^(?:button|input)$/i,R=/^(?:button|input|object|select|textarea)$/i,S=/^a(?:rea|)$/i,T=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,U=p.support.getSetAttribute;p.fn.extend({attr:function(a,b){return p.access(this,p.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){p.removeAttr(this,a)})},prop:function(a,b){return p.access(this,p.prop,a,b,arguments.length>1)},removeProp:function(a){return a=p.propFix[a]||a,this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,f,g,h;if(p.isFunction(a))return this.each(function(b){p(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(s);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{f=" "+e.className+" ";for(g=0,h=b.length;g<h;g++)~f.indexOf(" "+b[g]+" ")||(f+=b[g]+" ");e.className=p.trim(f)}}}return this},removeClass:function(a){var c,d,e,f,g,h,i;if(p.isFunction(a))return this.each(function(b){p(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(s);for(h=0,i=this.length;h<i;h++){e=this[h];if(e.nodeType===1&&e.className){d=(" "+e.className+" ").replace(O," ");for(f=0,g=c.length;f<g;f++)while(d.indexOf(" "+c[f]+" ")>-1)d=d.replace(" "+c[f]+" "," ");e.className=a?p.trim(d):""}}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";return p.isFunction(a)?this.each(function(c){p(this).toggleClass(a.call(this,c,this.className,b),b)}):this.each(function(){if(c==="string"){var e,f=0,g=p(this),h=b,i=a.split(s);while(e=i[f++])h=d?h:!g.hasClass(e),g[h?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&p._data(this,"__className__",this.className),this.className=this.className||a===!1?"":p._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(O," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,f=this[0];if(!arguments.length){if(f)return c=p.valHooks[f.type]||p.valHooks[f.nodeName.toLowerCase()],c&&"get"in c&&(d=c.get(f,"value"))!==b?d:(d=f.value,typeof d=="string"?d.replace(P,""):d==null?"":d);return}return e=p.isFunction(a),this.each(function(d){var f,g=p(this);if(this.nodeType!==1)return;e?f=a.call(this,d,g.val()):f=a,f==null?f="":typeof f=="number"?f+="":p.isArray(f)&&(f=p.map(f,function(a){return a==null?"":a+""})),c=p.valHooks[this.type]||p.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,f,"value")===b)this.value=f})}}),p.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,f=a.selectedIndex,g=[],h=a.options,i=a.type==="select-one";if(f<0)return null;c=i?f:0,d=i?f+1:h.length;for(;c<d;c++){e=h[c];if(e.selected&&(p.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!p.nodeName(e.parentNode,"optgroup"))){b=p(e).val();if(i)return b;g.push(b)}}return i&&!g.length&&h.length?p(h[f]).val():g},set:function(a,b){var c=p.makeArray(b);return p(a).find("option").each(function(){this.selected=p.inArray(p(this).val(),c)>=0}),c.length||(a.selectedIndex=-1),c}}},attrFn:{},attr:function(a,c,d,e){var f,g,h,i=a.nodeType;if(!a||i===3||i===8||i===2)return;if(e&&p.isFunction(p.fn[c]))return p(a)[c](d);if(typeof a.getAttribute=="undefined")return p.prop(a,c,d);h=i!==1||!p.isXMLDoc(a),h&&(c=c.toLowerCase(),g=p.attrHooks[c]||(T.test(c)?M:L));if(d!==b){if(d===null){p.removeAttr(a,c);return}return g&&"set"in g&&h&&(f=g.set(a,d,c))!==b?f:(a.setAttribute(c,""+d),d)}return g&&"get"in g&&h&&(f=g.get(a,c))!==null?f:(f=a.getAttribute(c),f===null?b:f)},removeAttr:function(a,b){var c,d,e,f,g=0;if(b&&a.nodeType===1){d=b.split(s);for(;g<d.length;g++)e=d[g],e&&(c=p.propFix[e]||e,f=T.test(e),f||p.attr(a,e,""),a.removeAttribute(U?e:c),f&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(Q.test(a.nodeName)&&a.parentNode)p.error("type property can't be changed");else if(!p.support.radioValue&&b==="radio"&&p.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}},value:{get:function(a,b){return L&&p.nodeName(a,"button")?L.get(a,b):b in a?a.value:null},set:function(a,b,c){if(L&&p.nodeName(a,"button"))return L.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,f,g,h=a.nodeType;if(!a||h===3||h===8||h===2)return;return g=h!==1||!p.isXMLDoc(a),g&&(c=p.propFix[c]||c,f=p.propHooks[c]),d!==b?f&&"set"in f&&(e=f.set(a,d,c))!==b?e:a[c]=d:f&&"get"in f&&(e=f.get(a,c))!==null?e:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):R.test(a.nodeName)||S.test(a.nodeName)&&a.href?0:b}}}}),M={get:function(a,c){var d,e=p.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;return b===!1?p.removeAttr(a,c):(d=p.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase())),c}},U||(N={name:!0,id:!0,coords:!0},L=p.valHooks.button={get:function(a,c){var d;return d=a.getAttributeNode(c),d&&(N[c]?d.value!=="":d.specified)?d.value:b},set:function(a,b,c){var d=a.getAttributeNode(c);return d||(d=e.createAttribute(c),a.setAttributeNode(d)),d.value=b+""}},p.each(["width","height"],function(a,b){p.attrHooks[b]=p.extend(p.attrHooks[b],{set:function(a,c){if(c==="")return a.setAttribute(b,"auto"),c}})}),p.attrHooks.contenteditable={get:L.get,set:function(a,b,c){b===""&&(b="false"),L.set(a,b,c)}}),p.support.hrefNormalized||p.each(["href","src","width","height"],function(a,c){p.attrHooks[c]=p.extend(p.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),p.support.style||(p.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),p.support.optSelected||(p.propHooks.selected=p.extend(p.propHooks.selected,{get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}})),p.support.enctype||(p.propFix.enctype="encoding"),p.support.checkOn||p.each(["radio","checkbox"],function(){p.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),p.each(["radio","checkbox"],function(){p.valHooks[this]=p.extend(p.valHooks[this],{set:function(a,b){if(p.isArray(b))return a.checked=p.inArray(p(a).val(),b)>=0}})});var V=/^(?:textarea|input|select)$/i,W=/^([^\.]*|)(?:\.(.+)|)$/,X=/(?:^|\s)hover(\.\S+|)\b/,Y=/^key/,Z=/^(?:mouse|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=function(a){return p.event.special.hover?a:a.replace(X,"mouseenter$1 mouseleave$1")};p.event={add:function(a,c,d,e,f){var g,h,i,j,k,l,m,n,o,q,r;if(a.nodeType===3||a.nodeType===8||!c||!d||!(g=p._data(a)))return;d.handler&&(o=d,d=o.handler,f=o.selector),d.guid||(d.guid=p.guid++),i=g.events,i||(g.events=i={}),h=g.handle,h||(g.handle=h=function(a){return typeof p!="undefined"&&(!a||p.event.triggered!==a.type)?p.event.dispatch.apply(h.elem,arguments):b},h.elem=a),c=p.trim(_(c)).split(" ");for(j=0;j<c.length;j++){k=W.exec(c[j])||[],l=k[1],m=(k[2]||"").split(".").sort(),r=p.event.special[l]||{},l=(f?r.delegateType:r.bindType)||l,r=p.event.special[l]||{},n=p.extend({type:l,origType:k[1],data:e,handler:d,guid:d.guid,selector:f,namespace:m.join(".")},o),q=i[l];if(!q){q=i[l]=[],q.delegateCount=0;if(!r.setup||r.setup.call(a,e,m,h)===!1)a.addEventListener?a.addEventListener(l,h,!1):a.attachEvent&&a.attachEvent("on"+l,h)}r.add&&(r.add.call(a,n),n.handler.guid||(n.handler.guid=d.guid)),f?q.splice(q.delegateCount++,0,n):q.push(n),p.event.global[l]=!0}a=null},global:{},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,q,r=p.hasData(a)&&p._data(a);if(!r||!(m=r.events))return;b=p.trim(_(b||"")).split(" ");for(f=0;f<b.length;f++){g=W.exec(b[f])||[],h=i=g[1],j=g[2];if(!h){for(h in m)p.event.remove(a,h+b[f],c,d,!0);continue}n=p.event.special[h]||{},h=(d?n.delegateType:n.bindType)||h,o=m[h]||[],k=o.length,j=j?new RegExp("(^|\\.)"+j.split(".").sort().join("\\.(?:.*\\.|)")+"(\\.|$)"):null;for(l=0;l<o.length;l++)q=o[l],(e||i===q.origType)&&(!c||c.guid===q.guid)&&(!j||j.test(q.namespace))&&(!d||d===q.selector||d==="**"&&q.selector)&&(o.splice(l--,1),q.selector&&o.delegateCount--,n.remove&&n.remove.call(a,q));o.length===0&&k!==o.length&&((!n.teardown||n.teardown.call(a,j,r.handle)===!1)&&p.removeEvent(a,h,r.handle),delete m[h])}p.isEmptyObject(m)&&(delete r.handle,p.removeData(a,"events",!0))},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,f,g){if(!f||f.nodeType!==3&&f.nodeType!==8){var h,i,j,k,l,m,n,o,q,r,s=c.type||c,t=[];if($.test(s+p.event.triggered))return;s.indexOf("!")>=0&&(s=s.slice(0,-1),i=!0),s.indexOf(".")>=0&&(t=s.split("."),s=t.shift(),t.sort());if((!f||p.event.customEvent[s])&&!p.event.global[s])return;c=typeof c=="object"?c[p.expando]?c:new p.Event(s,c):new p.Event(s),c.type=s,c.isTrigger=!0,c.exclusive=i,c.namespace=t.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+t.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,m=s.indexOf(":")<0?"on"+s:"";if(!f){h=p.cache;for(j in h)h[j].events&&h[j].events[s]&&p.event.trigger(c,d,h[j].handle.elem,!0);return}c.result=b,c.target||(c.target=f),d=d!=null?p.makeArray(d):[],d.unshift(c),n=p.event.special[s]||{};if(n.trigger&&n.trigger.apply(f,d)===!1)return;q=[[f,n.bindType||s]];if(!g&&!n.noBubble&&!p.isWindow(f)){r=n.delegateType||s,k=$.test(r+s)?f:f.parentNode;for(l=f;k;k=k.parentNode)q.push([k,r]),l=k;l===(f.ownerDocument||e)&&q.push([l.defaultView||l.parentWindow||a,r])}for(j=0;j<q.length&&!c.isPropagationStopped();j++)k=q[j][0],c.type=q[j][1],o=(p._data(k,"events")||{})[c.type]&&p._data(k,"handle"),o&&o.apply(k,d),o=m&&k[m],o&&p.acceptData(k)&&o.apply(k,d)===!1&&c.preventDefault();return c.type=s,!g&&!c.isDefaultPrevented()&&(!n._default||n._default.apply(f.ownerDocument,d)===!1)&&(s!=="click"||!p.nodeName(f,"a"))&&p.acceptData(f)&&m&&f[s]&&(s!=="focus"&&s!=="blur"||c.target.offsetWidth!==0)&&!p.isWindow(f)&&(l=f[m],l&&(f[m]=null),p.event.triggered=s,f[s](),p.event.triggered=b,l&&(f[m]=l)),c.result}return},dispatch:function(c){c=p.event.fix(c||a.event);var d,e,f,g,h,i,j,k,l,m,n,o=(p._data(this,"events")||{})[c.type]||[],q=o.delegateCount,r=[].slice.call(arguments),s=!c.exclusive&&!c.namespace,t=p.event.special[c.type]||{},u=[];r[0]=c,c.delegateTarget=this;if(t.preDispatch&&t.preDispatch.call(this,c)===!1)return;if(q&&(!c.button||c.type!=="click")){g=p(this),g.context=this;for(f=c.target;f!=this;f=f.parentNode||this)if(f.disabled!==!0||c.type!=="click"){i={},k=[],g[0]=f;for(d=0;d<q;d++)l=o[d],m=l.selector,i[m]===b&&(i[m]=g.is(m)),i[m]&&k.push(l);k.length&&u.push({elem:f,matches:k})}}o.length>q&&u.push({elem:this,matches:o.slice(q)});for(d=0;d<u.length&&!c.isPropagationStopped();d++){j=u[d],c.currentTarget=j.elem;for(e=0;e<j.matches.length&&!c.isImmediatePropagationStopped();e++){l=j.matches[e];if(s||!c.namespace&&!l.namespace||c.namespace_re&&c.namespace_re.test(l.namespace))c.data=l.data,c.handleObj=l,h=((p.event.special[l.origType]||{}).handle||l.handler).apply(j.elem,r),h!==b&&(c.result=h,h===!1&&(c.preventDefault(),c.stopPropagation()))}}return t.postDispatch&&t.postDispatch.call(this,c),c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,c){var d,f,g,h=c.button,i=c.fromElement;return a.pageX==null&&c.clientX!=null&&(d=a.target.ownerDocument||e,f=d.documentElement,g=d.body,a.pageX=c.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=c.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?c.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0),a}},fix:function(a){if(a[p.expando])return a;var b,c,d=a,f=p.event.fixHooks[a.type]||{},g=f.props?this.props.concat(f.props):this.props;a=p.Event(d);for(b=g.length;b;)c=g[--b],a[c]=d[c];return a.target||(a.target=d.srcElement||e),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,f.filter?f.filter(a,d):a},special:{ready:{setup:p.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){p.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=p.extend(new p.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?p.event.trigger(e,null,b):p.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},p.event.handle=p.event.dispatch,p.removeEvent=e.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]=="undefined"&&(a[d]=null),a.detachEvent(d,c))},p.Event=function(a,b){if(this instanceof p.Event)a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?bb:ba):this.type=a,b&&p.extend(this,b),this.timeStamp=a&&a.timeStamp||p.now(),this[p.expando]=!0;else return new p.Event(a,b)},p.Event.prototype={preventDefault:function(){this.isDefaultPrevented=bb;var a=this.originalEvent;if(!a)return;a.preventDefault?a.preventDefault():a.returnValue=!1},stopPropagation:function(){this.isPropagationStopped=bb;var a=this.originalEvent;if(!a)return;a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=bb,this.stopPropagation()},isDefaultPrevented:ba,isPropagationStopped:ba,isImmediatePropagationStopped:ba},p.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){p.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj,g=f.selector;if(!e||e!==d&&!p.contains(d,e))a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b;return c}}}),p.support.submitBubbles||(p.event.special.submit={setup:function(){if(p.nodeName(this,"form"))return!1;p.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=p.nodeName(c,"input")||p.nodeName(c,"button")?c.form:b;d&&!p._data(d,"_submit_attached")&&(p.event.add(d,"submit._submit",function(a){a._submit_bubble=!0}),p._data(d,"_submit_attached",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&p.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){if(p.nodeName(this,"form"))return!1;p.event.remove(this,"._submit")}}),p.support.changeBubbles||(p.event.special.change={setup:function(){if(V.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")p.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),p.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),p.event.simulate("change",this,a,!0)});return!1}p.event.add(this,"beforeactivate._change",function(a){var b=a.target;V.test(b.nodeName)&&!p._data(b,"_change_attached")&&(p.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&p.event.simulate("change",this.parentNode,a,!0)}),p._data(b,"_change_attached",!0))})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){return p.event.remove(this,"._change"),V.test(this.nodeName)}}),p.support.focusinBubbles||p.each({focus:"focusin",blur:"focusout"},function(a,b){var c=0,d=function(a){p.event.simulate(b,a.target,p.event.fix(a),!0)};p.event.special[b]={setup:function(){c++===0&&e.addEventListener(a,d,!0)},teardown:function(){--c===0&&e.removeEventListener(a,d,!0)}}}),p.fn.extend({on:function(a,c,d,e,f){var g,h;if(typeof a=="object"){typeof c!="string"&&(d=d||c,c=b);for(h in a)this.on(h,c,d,a[h],f);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=ba;else if(!e)return this;return f===1&&(g=e,e=function(a){return p().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=p.guid++)),this.each(function(){p.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,c,d){var e,f;if(a&&a.preventDefault&&a.handleObj)return e=a.handleObj,p(a.delegateTarget).off(e.namespace?e.origType+"."+e.namespace:e.origType,e.selector,e.handler),this;if(typeof a=="object"){for(f in a)this.off(f,c,a[f]);return this}if(c===!1||typeof c=="function")d=c,c=b;return d===!1&&(d=ba),this.each(function(){p.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){return p(this.context).on(a,this.selector,b,c),this},die:function(a,b){return p(this.context).off(a,this.selector||"**",b),this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a||"**",c)},trigger:function(a,b){return this.each(function(){p.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return p.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||p.guid++,d=0,e=function(c){var e=(p._data(this,"lastToggle"+a.guid)||0)%d;return p._data(this,"lastToggle"+a.guid,e+1),c.preventDefault(),b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),p.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){p.fn[b]=function(a,c){return c==null&&(c=a,a=null),arguments.length>0?this.on(b,null,a,c):this.trigger(b)},Y.test(b)&&(p.event.fixHooks[b]=p.event.keyHooks),Z.test(b)&&(p.event.fixHooks[b]=p.event.mouseHooks)}),function(a,b){function bd(a,b,c,d){var e=0,f=b.length;for(;e<f;e++)Z(a,b[e],c,d)}function be(a,b,c,d,e,f){var g,h=$.setFilters[b.toLowerCase()];return h||Z.error(b),(a||!(g=e))&&bd(a||"*",d,g=[],e),g.length>0?h(g,c,f):[]}function bf(a,c,d,e,f){var g,h,i,j,k,l,m,n,p=0,q=f.length,s=L.POS,t=new RegExp("^"+s.source+"(?!"+r+")","i"),u=function(){var a=1,c=arguments.length-2;for(;a<c;a++)arguments[a]===b&&(g[a]=b)};for(;p<q;p++){s.exec(""),a=f[p],j=[],i=0,k=e;while(g=s.exec(a)){n=s.lastIndex=g.index+g[0].length;if(n>i){m=a.slice(i,g.index),i=n,l=[c],B.test(m)&&(k&&(l=k),k=e);if(h=H.test(m))m=m.slice(0,-5).replace(B,"$&*");g.length>1&&g[0].replace(t,u),k=be(m,g[1],g[2],l,k,h)}}k?(j=j.concat(k),(m=a.slice(i))&&m!==")"?B.test(m)?bd(m,j,d,e):Z(m,c,d,e?e.concat(k):k):o.apply(d,j)):Z(a,c,d,e)}return q===1?d:Z.uniqueSort(d)}function bg(a,b,c){var d,e,f,g=[],i=0,j=D.exec(a),k=!j.pop()&&!j.pop(),l=k&&a.match(C)||[""],m=$.preFilter,n=$.filter,o=!c&&b!==h;for(;(e=l[i])!=null&&k;i++){g.push(d=[]),o&&(e=" "+e);while(e){k=!1;if(j=B.exec(e))e=e.slice(j[0].length),k=d.push({part:j.pop().replace(A," "),captures:j});for(f in n)(j=L[f].exec(e))&&(!m[f]||(j=m[f](j,b,c)))&&(e=e.slice(j.shift().length),k=d.push({part:f,captures:j}));if(!k)break}}return k||Z.error(a),g}function bh(a,b,e){var f=b.dir,g=m++;return a||(a=function(a){return a===e}),b.first?function(b,c){while(b=b[f])if(b.nodeType===1)return a(b,c)&&b}:function(b,e){var h,i=g+"."+d,j=i+"."+c;while(b=b[f])if(b.nodeType===1){if((h=b[q])===j)return b.sizset;if(typeof h=="string"&&h.indexOf(i)===0){if(b.sizset)return b}else{b[q]=j;if(a(b,e))return b.sizset=!0,b;b.sizset=!1}}}}function bi(a,b){return a?function(c,d){var e=b(c,d);return e&&a(e===!0?c:e,d)}:b}function bj(a,b,c){var d,e,f=0;for(;d=a[f];f++)$.relative[d.part]?e=bh(e,$.relative[d.part],b):(d.captures.push(b,c),e=bi(e,$.filter[d.part].apply(null,d.captures)));return e}function bk(a){return function(b,c){var d,e=0;for(;d=a[e];e++)if(d(b,c))return!0;return!1}}var c,d,e,f,g,h=a.document,i=h.documentElement,j="undefined",k=!1,l=!0,m=0,n=[].slice,o=[].push,q=("sizcache"+Math.random()).replace(".",""),r="[\\x20\\t\\r\\n\\f]",s="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",t=s.replace("w","w#"),u="([*^$|!~]?=)",v="\\["+r+"*("+s+")"+r+"*(?:"+u+r+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+t+")|)|)"+r+"*\\]",w=":("+s+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|((?:[^,]|\\\\,|(?:,(?=[^\\[]*\\]))|(?:,(?=[^\\(]*\\))))*))\\)|)",x=":(nth|eq|gt|lt|first|last|even|odd)(?:\\((\\d*)\\)|)(?=[^-]|$)",y=r+"*([\\x20\\t\\r\\n\\f>+~])"+r+"*",z="(?=[^\\x20\\t\\r\\n\\f])(?:\\\\.|"+v+"|"+w.replace(2,7)+"|[^\\\\(),])+",A=new RegExp("^"+r+"+|((?:^|[^\\\\])(?:\\\\.)*)"+r+"+$","g"),B=new RegExp("^"+y),C=new RegExp(z+"?(?="+r+"*,|$)","g"),D=new RegExp("^(?:(?!,)(?:(?:^|,)"+r+"*"+z+")*?|"+r+"*(.*?))(\\)|$)"),E=new RegExp(z.slice(19,-6)+"\\x20\\t\\r\\n\\f>+~])+|"+y,"g"),F=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,G=/[\x20\t\r\n\f]*[+~]/,H=/:not\($/,I=/h\d/i,J=/input|select|textarea|button/i,K=/\\(?!\\)/g,L={ID:new RegExp("^#("+s+")"),CLASS:new RegExp("^\\.("+s+")"),NAME:new RegExp("^\\[name=['\"]?("+s+")['\"]?\\]"),TAG:new RegExp("^("+s.replace("[-","[-\\*")+")"),ATTR:new RegExp("^"+v),PSEUDO:new RegExp("^"+w),CHILD:new RegExp("^:(only|nth|last|first)-child(?:\\("+r+"*(even|odd|(([+-]|)(\\d*)n|)"+r+"*(?:([+-]|)"+r+"*(\\d+)|))"+r+"*\\)|)","i"),POS:new RegExp(x,"ig"),needsContext:new RegExp("^"+r+"*[>+~]|"+x,"i")},M={},N=[],O={},P=[],Q=function(a){return a.sizzleFilter=!0,a},R=function(a){return function(b){return b.nodeName.toLowerCase()==="input"&&b.type===a}},S=function(a){return function(b){var c=b.nodeName.toLowerCase();return(c==="input"||c==="button")&&b.type===a}},T=function(a){var b=!1,c=h.createElement("div");try{b=a(c)}catch(d){}return c=null,b},U=T(function(a){a.innerHTML="<select></select>";var b=typeof a.lastChild.getAttribute("multiple");return b!=="boolean"&&b!=="string"}),V=T(function(a){a.id=q+0,a.innerHTML="<a name='"+q+"'></a><div name='"+q+"'></div>",i.insertBefore(a,i.firstChild);var b=h.getElementsByName&&h.getElementsByName(q).length===2+h.getElementsByName(q+0).length;return g=!h.getElementById(q),i.removeChild(a),b}),W=T(function(a){return a.appendChild(h.createComment("")),a.getElementsByTagName("*").length===0}),X=T(function(a){return a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!==j&&a.firstChild.getAttribute("href")==="#"}),Y=T(function(a){return a.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",!a.getElementsByClassName||a.getElementsByClassName("e").length===0?!1:(a.lastChild.className="e",a.getElementsByClassName("e").length!==1)}),Z=function(a,b,c,d){c=c||[],b=b||h;var e,f,g,i,j=b.nodeType;if(j!==1&&j!==9)return[];if(!a||typeof a!="string")return c;g=ba(b);if(!g&&!d)if(e=F.exec(a))if(i=e[1]){if(j===9){f=b.getElementById(i);if(!f||!f.parentNode)return c;if(f.id===i)return c.push(f),c}else if(b.ownerDocument&&(f=b.ownerDocument.getElementById(i))&&bb(b,f)&&f.id===i)return c.push(f),c}else{if(e[2])return o.apply(c,n.call(b.getElementsByTagName(a),0)),c;if((i=e[3])&&Y&&b.getElementsByClassName)return o.apply(c,n.call(b.getElementsByClassName(i),0)),c}return bm(a,b,c,d,g)},$=Z.selectors={cacheLength:50,match:L,order:["ID","TAG"],attrHandle:{},createPseudo:Q,find:{ID:g?function(a,b,c){if(typeof b.getElementById!==j&&!c){var d=b.getElementById(a);return d&&d.parentNode?[d]:[]}}:function(a,c,d){if(typeof c.getElementById!==j&&!d){var e=c.getElementById(a);return e?e.id===a||typeof e.getAttributeNode!==j&&e.getAttributeNode("id").value===a?[e]:b:[]}},TAG:W?function(a,b){if(typeof b.getElementsByTagName!==j)return b.getElementsByTagName(a)}:function(a,b){var c=b.getElementsByTagName(a);if(a==="*"){var d,e=[],f=0;for(;d=c[f];f++)d.nodeType===1&&e.push(d);return e}return c}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(K,""),a[3]=(a[4]||a[5]||"").replace(K,""),a[2]==="~="&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),a[1]==="nth"?(a[2]||Z.error(a[0]),a[3]=+(a[3]?a[4]+(a[5]||1):2*(a[2]==="even"||a[2]==="odd")),a[4]=+(a[6]+a[7]||a[2]==="odd")):a[2]&&Z.error(a[0]),a},PSEUDO:function(a){var b,c=a[4];return L.CHILD.test(a[0])?null:(c&&(b=D.exec(c))&&b.pop()&&(a[0]=a[0].slice(0,b[0].length-c.length-1),c=b[0].slice(0,-1)),a.splice(2,3,c||a[3]),a)}},filter:{ID:g?function(a){return a=a.replace(K,""),function(b){return b.getAttribute("id")===a}}:function(a){return a=a.replace(K,""),function(b){var c=typeof b.getAttributeNode!==j&&b.getAttributeNode("id");return c&&c.value===a}},TAG:function(a){return a==="*"?function(){return!0}:(a=a.replace(K,"").toLowerCase(),function(b){return b.nodeName&&b.nodeName.toLowerCase()===a})},CLASS:function(a){var b=M[a];return b||(b=M[a]=new RegExp("(^|"+r+")"+a+"("+r+"|$)"),N.push(a),N.length>$.cacheLength&&delete M[N.shift()]),function(a){return b.test(a.className||typeof a.getAttribute!==j&&a.getAttribute("class")||"")}},ATTR:function(a,b,c){return b?function(d){var e=Z.attr(d,a),f=e+"";if(e==null)return b==="!=";switch(b){case"=":return f===c;case"!=":return f!==c;case"^=":return c&&f.indexOf(c)===0;case"*=":return c&&f.indexOf(c)>-1;case"$=":return c&&f.substr(f.length-c.length)===c;case"~=":return(" "+f+" ").indexOf(c)>-1;case"|=":return f===c||f.substr(0,c.length+1)===c+"-"}}:function(b){return Z.attr(b,a)!=null}},CHILD:function(a,b,c,d){if(a==="nth"){var e=m++;return function(a){var b,f,g=0,h=a;if(c===1&&d===0)return!0;b=a.parentNode;if(b&&(b[q]!==e||!a.sizset)){for(h=b.firstChild;h;h=h.nextSibling)if(h.nodeType===1){h.sizset=++g;if(h===a)break}b[q]=e}return f=a.sizset-d,c===0?f===0:f%c===0&&f/c>=0}}return function(b){var c=b;switch(a){case"only":case"first":while(c=c.previousSibling)if(c.nodeType===1)return!1;if(a==="first")return!0;c=b;case"last":while(c=c.nextSibling)if(c.nodeType===1)return!1;return!0}}},PSEUDO:function(a,b,c,d){var e=$.pseudos[a]||$.pseudos[a.toLowerCase()];return e||Z.error("unsupported pseudo: "+a),e.sizzleFilter?e(b,c,d):e}},pseudos:{not:Q(function(a,b,c){var d=bl(a.replace(A,"$1"),b,c);return function(a){return!d(a)}}),enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&!!a.checked||b==="option"&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},parent:function(a){return!$.pseudos.empty(a)},empty:function(a){var b;a=a.firstChild;while(a){if(a.nodeName>"@"||(b=a.nodeType)===3||b===4)return!1;a=a.nextSibling}return!0},contains:Q(function(a){return function(b){return(b.textContent||b.innerText||bc(b)).indexOf(a)>-1}}),has:Q(function(a){return function(b){return Z(a,b).length>0}}),header:function(a){return I.test(a.nodeName)},text:function(a){var b,c;return a.nodeName.toLowerCase()==="input"&&(b=a.type)==="text"&&((c=a.getAttribute("type"))==null||c.toLowerCase()===b)},radio:R("radio"),checkbox:R("checkbox"),file:R("file"),password:R("password"),image:R("image"),submit:S("submit"),reset:S("reset"),button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&a.type==="button"||b==="button"},input:function(a){return J.test(a.nodeName)},focus:function(a){var b=a.ownerDocument;return a===b.activeElement&&(!b.hasFocus||b.hasFocus())&&(!!a.type||!!a.href)},active:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b,c){return c?a.slice(1):[a[0]]},last:function(a,b,c){var d=a.pop();return c?a:[d]},even:function(a,b,c){var d=[],e=c?1:0,f=a.length;for(;e<f;e=e+2)d.push(a[e]);return d},odd:function(a,b,c){var d=[],e=c?0:1,f=a.length;for(;e<f;e=e+2)d.push(a[e]);return d},lt:function(a,b,c){return c?a.slice(+b):a.slice(0,+b)},gt:function(a,b,c){return c?a.slice(0,+b+1):a.slice(+b+1)},eq:function(a,b,c){var d=a.splice(+b,1);return c?a:d}}};$.setFilters.nth=$.setFilters.eq,$.filters=$.pseudos,X||($.attrHandle={href:function(a){return a.getAttribute("href",2)},type:function(a){return a.getAttribute("type")}}),V&&($.order.push("NAME"),$.find.NAME=function(a,b){if(typeof b.getElementsByName!==j)return b.getElementsByName(a)}),Y&&($.order.splice(1,0,"CLASS"),$.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!==j&&!c)return b.getElementsByClassName(a)});try{n.call(i.childNodes,0)[0].nodeType}catch(_){n=function(a){var b,c=[];for(;b=this[a];a++)c.push(b);return c}}var ba=Z.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?b.nodeName!=="HTML":!1},bb=Z.contains=i.compareDocumentPosition?function(a,b){return!!(a.compareDocumentPosition(b)&16)}:i.contains?function(a,b){var c=a.nodeType===9?a.documentElement:a,d=b.parentNode;return a===d||!!(d&&d.nodeType===1&&c.contains&&c.contains(d))}:function(a,b){while(b=b.parentNode)if(b===a)return!0;return!1},bc=Z.getText=function(a){var b,c="",d=0,e=a.nodeType;if(e){if(e===1||e===9||e===11){if(typeof a.textContent=="string")return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=bc(a)}else if(e===3||e===4)return a.nodeValue}else for(;b=a[d];d++)c+=bc(b);return c};Z.attr=function(a,b){var c,d=ba(a);return d||(b=b.toLowerCase()),$.attrHandle[b]?$.attrHandle[b](a):U||d?a.getAttribute(b):(c=a.getAttributeNode(b),c?typeof a[b]=="boolean"?a[b]?b:null:c.specified?c.value:null:null)},Z.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},[0,0].sort(function(){return l=0}),i.compareDocumentPosition?e=function(a,b){return a===b?(k=!0,0):(!a.compareDocumentPosition||!b.compareDocumentPosition?a.compareDocumentPosition:a.compareDocumentPosition(b)&4)?-1:1}:(e=function(a,b){if(a===b)return k=!0,0;if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],g=[],h=a.parentNode,i=b.parentNode,j=h;if(h===i)return f(a,b);if(!h)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)g.unshift(j),j=j.parentNode;c=e.length,d=g.length;for(var l=0;l<c&&l<d;l++)if(e[l]!==g[l])return f(e[l],g[l]);return l===c?f(a,g[l],-1):f(e[l],b,1)},f=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),Z.uniqueSort=function(a){var b,c=1;if(e){k=l,a.sort(e);if(k)for(;b=a[c];c++)b===a[c-1]&&a.splice(c--,1)}return a};var bl=Z.compile=function(a,b,c){var d,e,f,g=O[a];if(g&&g.context===b)return g;e=bg(a,b,c);for(f=0;d=e[f];f++)e[f]=bj(d,b,c);return g=O[a]=bk(e),g.context=b,g.runs=g.dirruns=0,P.push(a),P.length>$.cacheLength&&delete O[P.shift()],g};Z.matches=function(a,b){return Z(a,null,null,b)},Z.matchesSelector=function(a,b){return Z(b,null,null,[a]).length>0};var bm=function(a,b,e,f,g){a=a.replace(A,"$1");var h,i,j,k,l,m,p,q,r,s=a.match(C),t=a.match(E),u=b.nodeType;if(L.POS.test(a))return bf(a,b,e,f,s);if(f)h=n.call(f,0);else if(s&&s.length===1){if(t.length>1&&u===9&&!g&&(s=L.ID.exec(t[0]))){b=$.find.ID(s[1],b,g)[0];if(!b)return e;a=a.slice(t.shift().length)}q=(s=G.exec(t[0]))&&!s.index&&b.parentNode||b,r=t.pop(),m=r.split(":not")[0];for(j=0,k=$.order.length;j<k;j++){p=$.order[j];if(s=L[p].exec(m)){h=$.find[p]((s[1]||"").replace(K,""),q,g);if(h==null)continue;m===r&&(a=a.slice(0,a.length-r.length)+m.replace(L[p],""),a||o.apply(e,n.call(h,0)));break}}}if(a){i=bl(a,b,g),d=i.dirruns++,h==null&&(h=$.find.TAG("*",G.test(a)&&b.parentNode||b));for(j=0;l=h[j];j++)c=i.runs++,i(l,b)&&e.push(l)}return e};h.querySelectorAll&&function(){var a,b=bm,c=/'|\\/g,d=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,e=[],f=[":active"],g=i.matchesSelector||i.mozMatchesSelector||i.webkitMatchesSelector||i.oMatchesSelector||i.msMatchesSelector;T(function(a){a.innerHTML="<select><option selected></option></select>",a.querySelectorAll("[selected]").length||e.push("\\["+r+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),a.querySelectorAll(":checked").length||e.push(":checked")}),T(function(a){a.innerHTML="<p test=''></p>",a.querySelectorAll("[test^='']").length&&e.push("[*^$]="+r+"*(?:\"\"|'')"),a.innerHTML="<input type='hidden'>",a.querySelectorAll(":enabled").length||e.push(":enabled",":disabled")}),e=e.length&&new RegExp(e.join("|")),bm=function(a,d,f,g,h){if(!g&&!h&&(!e||!e.test(a)))if(d.nodeType===9)try{return o.apply(f,n.call(d.querySelectorAll(a),0)),f}catch(i){}else if(d.nodeType===1&&d.nodeName.toLowerCase()!=="object"){var j=d.getAttribute("id"),k=j||q,l=G.test(a)&&d.parentNode||d;j?k=k.replace(c,"\\$&"):d.setAttribute("id",k);try{return o.apply(f,n.call(l.querySelectorAll(a.replace(C,"[id='"+k+"'] $&")),0)),f}catch(i){}finally{j||d.removeAttribute("id")}}return b(a,d,f,g,h)},g&&(T(function(b){a=g.call(b,"div");try{g.call(b,"[test!='']:sizzle"),f.push($.match.PSEUDO)}catch(c){}}),f=new RegExp(f.join("|")),Z.matchesSelector=function(b,c){c=c.replace(d,"='$1']");if(!ba(b)&&!f.test(c)&&(!e||!e.test(c)))try{var h=g.call(b,c);if(h||a||b.document&&b.document.nodeType!==11)return h}catch(i){}return Z(c,null,null,[b]).length>0})}(),Z.attr=p.attr,p.find=Z,p.expr=Z.selectors,p.expr[":"]=p.expr.pseudos,p.unique=Z.uniqueSort,p.text=Z.getText,p.isXMLDoc=Z.isXML,p.contains=Z.contains}(a);var bc=/Until$/,bd=/^(?:parents|prev(?:Until|All))/,be=/^.[^:#\[\.,]*$/,bf=p.expr.match.needsContext,bg={children:!0,contents:!0,next:!0,prev:!0};p.fn.extend({find:function(a){var b,c,d,e,f,g,h=this;if(typeof a!="string")return p(a).filter(function(){for(b=0,c=h.length;b<c;b++)if(p.contains(h[b],this))return!0});g=this.pushStack("","find",a);for(b=0,c=this.length;b<c;b++){d=g.length,p.find(a,this[b],g);if(b>0)for(e=d;e<g.length;e++)for(f=0;f<d;f++)if(g[f]===g[e]){g.splice(e--,1);break}}return g},has:function(a){var b,c=p(a,this),d=c.length;return this.filter(function(){for(b=0;b<d;b++)if(p.contains(this,c[b]))return!0})},not:function(a){return this.pushStack(bj(this,a,!1),"not",a)},filter:function(a){return this.pushStack(bj(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?bf.test(a)?p(a,this.context).index(this[0])>=0:p.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c,d=0,e=this.length,f=[],g=bf.test(a)||typeof a!="string"?p(a,b||this.context):0;for(;d<e;d++){c=this[d];while(c&&c.ownerDocument&&c!==b&&c.nodeType!==11){if(g?g.index(c)>-1:p.find.matchesSelector(c,a)){f.push(c);break}c=c.parentNode}}return f=f.length>1?p.unique(f):f,this.pushStack(f,"closest",a)},index:function(a){return a?typeof a=="string"?p.inArray(this[0],p(a)):p.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(a,b){var c=typeof a=="string"?p(a,b):p.makeArray(a&&a.nodeType?[a]:a),d=p.merge(this.get(),c);return this.pushStack(bh(c[0])||bh(d[0])?d:p.unique(d))},addBack:function(a){return this.add(a==null?this.prevObject:this.prevObject.filter(a))}}),p.fn.andSelf=p.fn.addBack,p.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return p.dir(a,"parentNode")},parentsUntil:function(a,b,c){return p.dir(a,"parentNode",c)},next:function(a){return bi(a,"nextSibling")},prev:function(a){return bi(a,"previousSibling")},nextAll:function(a){return p.dir(a,"nextSibling")},prevAll:function(a){return p.dir(a,"previousSibling")},nextUntil:function(a,b,c){return p.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return p.dir(a,"previousSibling",c)},siblings:function(a){return p.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return p.sibling(a.firstChild)},contents:function(a){return p.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:p.merge([],a.childNodes)}},function(a,b){p.fn[a]=function(c,d){var e=p.map(this,b,c);return bc.test(a)||(d=c),d&&typeof d=="string"&&(e=p.filter(d,e)),e=this.length>1&&!bg[a]?p.unique(e):e,this.length>1&&bd.test(a)&&(e=e.reverse()),this.pushStack(e,a,k.call(arguments).join(","))}}),p.extend({filter:function(a,b,c){return c&&(a=":not("+a+")"),b.length===1?p.find.matchesSelector(b[0],a)?[b[0]]:[]:p.find.matches(a,b)},dir:function(a,c,d){var e=[],f=a[c];while(f&&f.nodeType!==9&&(d===b||f.nodeType!==1||!p(f).is(d)))f.nodeType===1&&e.push(f),f=f[c];return e},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var bl="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",bm=/ jQuery\d+="(?:null|\d+)"/g,bn=/^\s+/,bo=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bp=/<([\w:]+)/,bq=/<tbody/i,br=/<|&#?\w+;/,bs=/<(?:script|style|link)/i,bt=/<(?:script|object|embed|option|style)/i,bu=new RegExp("<(?:"+bl+")[\\s/>]","i"),bv=/^(?:checkbox|radio)$/,bw=/checked\s*(?:[^=]|=\s*.checked.)/i,bx=/\/(java|ecma)script/i,by=/^\s*<!(?:\[CDATA\[|\-\-)|[\]\-]{2}>\s*$/g,bz={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bA=bk(e),bB=bA.appendChild(e.createElement("div"));bz.optgroup=bz.option,bz.tbody=bz.tfoot=bz.colgroup=bz.caption=bz.thead,bz.th=bz.td,p.support.htmlSerialize||(bz._default=[1,"X<div>","</div>"]),p.fn.extend({text:function(a){return p.access(this,function(a){return a===b?p.text(this):this.empty().append((this[0]&&this[0].ownerDocument||e).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(p.isFunction(a))return this.each(function(b){p(this).wrapAll(a.call(this,b))});if(this[0]){var b=p(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return p.isFunction(a)?this.each(function(b){p(this).wrapInner(a.call(this,b))}):this.each(function(){var b=p(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=p.isFunction(a);return this.each(function(c){p(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){p.nodeName(this,"body")||p(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(a,this.firstChild)})},before:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(a,this),"before",this.selector)}},after:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(this,a),"after",this.selector)}},remove:function(a,b){var c,d=0;for(;(c=this[d])!=null;d++)if(!a||p.filter(a,[c]).length)!b&&c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),p.cleanData([c])),c.parentNode&&c.parentNode.removeChild(c);return this},empty:function(){var a,b=0;for(;(a=this[b])!=null;b++){a.nodeType===1&&p.cleanData(a.getElementsByTagName("*"));while(a.firstChild)a.removeChild(a.firstChild)}return this},clone:function(a,b){return a=a==null?!1:a,b=b==null?a:b,this.map(function(){return p.clone(this,a,b)})},html:function(a){return p.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(bm,""):b;if(typeof a=="string"&&!bs.test(a)&&(p.support.htmlSerialize||!bu.test(a))&&(p.support.leadingWhitespace||!bn.test(a))&&!bz[(bp.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(bo,"<$1></$2>");try{for(;d<e;d++)c=this[d]||{},c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),c.innerHTML=a);c=0}catch(f){}}c&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(a){return bh(this[0])?this.length?this.pushStack(p(p.isFunction(a)?a():a),"replaceWith",a):this:p.isFunction(a)?this.each(function(b){var c=p(this),d=c.html();c.replaceWith(a.call(this,b,d))}):(typeof a!="string"&&(a=p(a).detach()),this.each(function(){var b=this.nextSibling,c=this.parentNode;p(this).remove(),b?p(b).before(a):p(c).append(a)}))},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){a=[].concat.apply([],a);var e,f,g,h,i=0,j=a[0],k=[],l=this.length;if(!p.support.checkClone&&l>1&&typeof j=="string"&&bw.test(j))return this.each(function(){p(this).domManip(a,c,d)});if(p.isFunction(j))return this.each(function(e){var f=p(this);a[0]=j.call(this,e,c?f.html():b),f.domManip(a,c,d)});if(this[0]){e=p.buildFragment(a,this,k),g=e.fragment,f=g.firstChild,g.childNodes.length===1&&(g=f);if(f){c=c&&p.nodeName(f,"tr");for(h=e.cacheable||l-1;i<l;i++)d.call(c&&p.nodeName(this[i],"table")?bC(this[i],"tbody"):this[i],i===h?g:p.clone(g,!0,!0))}g=f=null,k.length&&p.each(k,function(a,b){b.src?p.ajax?p.ajax({url:b.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):p.error("no ajax"):p.globalEval((b.text||b.textContent||b.innerHTML||"").replace(by,"")),b.parentNode&&b.parentNode.removeChild(b)})}return this}}),p.buildFragment=function(a,c,d){var f,g,h,i=a[0];return c=c||e,c=(c[0]||c).ownerDocument||c[0]||c,typeof c.createDocumentFragment=="undefined"&&(c=e),a.length===1&&typeof i=="string"&&i.length<512&&c===e&&i.charAt(0)==="<"&&!bt.test(i)&&(p.support.checkClone||!bw.test(i))&&(p.support.html5Clone||!bu.test(i))&&(g=!0,f=p.fragments[i],h=f!==b),f||(f=c.createDocumentFragment(),p.clean(a,c,f,d),g&&(p.fragments[i]=h&&f)),{fragment:f,cacheable:g}},p.fragments={},p.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){p.fn[a]=function(c){var d,e=0,f=[],g=p(c),h=g.length,i=this.length===1&&this[0].parentNode;if((i==null||i&&i.nodeType===11&&i.childNodes.length===1)&&h===1)return g[b](this[0]),this;for(;e<h;e++)d=(e>0?this.clone(!0):this).get(),p(g[e])[b](d),f=f.concat(d);return this.pushStack(f,a,g.selector)}}),p.extend({clone:function(a,b,c){var d,e,f,g;p.support.html5Clone||p.isXMLDoc(a)||!bu.test("<"+a.nodeName+">")?g=a.cloneNode(!0):(bB.innerHTML=a.outerHTML,bB.removeChild(g=bB.firstChild));if((!p.support.noCloneEvent||!p.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!p.isXMLDoc(a)){bE(a,g),d=bF(a),e=bF(g);for(f=0;d[f];++f)e[f]&&bE(d[f],e[f])}if(b){bD(a,g);if(c){d=bF(a),e=bF(g);for(f=0;d[f];++f)bD(d[f],e[f])}}return d=e=null,g},clean:function(a,b,c,d){var f,g,h,i,j,k,l,m,n,o,q,r,s=0,t=[];if(!b||typeof b.createDocumentFragment=="undefined")b=e;for(g=b===e&&bA;(h=a[s])!=null;s++){typeof h=="number"&&(h+="");if(!h)continue;if(typeof h=="string")if(!br.test(h))h=b.createTextNode(h);else{g=g||bk(b),l=l||g.appendChild(b.createElement("div")),h=h.replace(bo,"<$1></$2>"),i=(bp.exec(h)||["",""])[1].toLowerCase(),j=bz[i]||bz._default,k=j[0],l.innerHTML=j[1]+h+j[2];while(k--)l=l.lastChild;if(!p.support.tbody){m=bq.test(h),n=i==="table"&&!m?l.firstChild&&l.firstChild.childNodes:j[1]==="<table>"&&!m?l.childNodes:[];for(f=n.length-1;f>=0;--f)p.nodeName(n[f],"tbody")&&!n[f].childNodes.length&&n[f].parentNode.removeChild(n[f])}!p.support.leadingWhitespace&&bn.test(h)&&l.insertBefore(b.createTextNode(bn.exec(h)[0]),l.firstChild),h=l.childNodes,l=g.lastChild}h.nodeType?t.push(h):t=p.merge(t,h)}l&&(g.removeChild(l),h=l=g=null);if(!p.support.appendChecked)for(s=0;(h=t[s])!=null;s++)p.nodeName(h,"input")?bG(h):typeof h.getElementsByTagName!="undefined"&&p.grep(h.getElementsByTagName("input"),bG);if(c){q=function(a){if(!a.type||bx.test(a.type))return d?d.push(a.parentNode?a.parentNode.removeChild(a):a):c.appendChild(a)};for(s=0;(h=t[s])!=null;s++)if(!p.nodeName(h,"script")||!q(h))c.appendChild(h),typeof h.getElementsByTagName!="undefined"&&(r=p.grep(p.merge([],h.getElementsByTagName("script")),q),t.splice.apply(t,[s+1,0].concat(r)),s+=r.length)}return t},cleanData:function(a,b){var c,d,e,f,g=0,h=p.expando,i=p.cache,j=p.support.deleteExpando,k=p.event.special;for(;(e=a[g])!=null;g++)if(b||p.acceptData(e)){d=e[h],c=d&&i[d];if(c){if(c.events)for(f in c.events)k[f]?p.event.remove(e,f):p.removeEvent(e,f,c.handle);i[d]&&(delete i[d],j?delete e[h]:e.removeAttribute?e.removeAttribute(h):e[h]=null,p.deletedIds.push(d))}}}}),function(){var a,b;p.uaMatch=function(a){a=a.toLowerCase();var b=/(chrome)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||a.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},a=p.uaMatch(g.userAgent),b={},a.browser&&(b[a.browser]=!0,b.version=a.version),b.webkit&&(b.safari=!0),p.browser=b,p.sub=function(){function a(b,c){return new a.fn.init(b,c)}p.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function c(c,d){return d&&d instanceof p&&!(d instanceof a)&&(d=a(d)),p.fn.init.call(this,c,d,b)},a.fn.init.prototype=a.fn;var b=a(e);return a}}();var bH,bI,bJ,bK=/alpha\([^)]*\)/i,bL=/opacity=([^)]*)/,bM=/^(top|right|bottom|left)$/,bN=/^margin/,bO=new RegExp("^("+q+")(.*)$","i"),bP=new RegExp("^("+q+")(?!px)[a-z%]+$","i"),bQ=new RegExp("^([-+])=("+q+")","i"),bR={},bS={position:"absolute",visibility:"hidden",display:"block"},bT={letterSpacing:0,fontWeight:400,lineHeight:1},bU=["Top","Right","Bottom","Left"],bV=["Webkit","O","Moz","ms"],bW=p.fn.toggle;p.fn.extend({css:function(a,c){return p.access(this,function(a,c,d){return d!==b?p.style(a,c,d):p.css(a,c)},a,c,arguments.length>1)},show:function(){return bZ(this,!0)},hide:function(){return bZ(this)},toggle:function(a,b){var c=typeof a=="boolean";return p.isFunction(a)&&p.isFunction(b)?bW.apply(this,arguments):this.each(function(){(c?a:bY(this))?p(this).show():p(this).hide()})}}),p.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bH(a,"opacity");return c===""?"1":c}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":p.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!a||a.nodeType===3||a.nodeType===8||!a.style)return;var f,g,h,i=p.camelCase(c),j=a.style;c=p.cssProps[i]||(p.cssProps[i]=bX(j,i)),h=p.cssHooks[c]||p.cssHooks[i];if(d===b)return h&&"get"in h&&(f=h.get(a,!1,e))!==b?f:j[c];g=typeof d,g==="string"&&(f=bQ.exec(d))&&(d=(f[1]+1)*f[2]+parseFloat(p.css(a,c)),g="number");if(d==null||g==="number"&&isNaN(d))return;g==="number"&&!p.cssNumber[i]&&(d+="px");if(!h||!("set"in h)||(d=h.set(a,d,e))!==b)try{j[c]=d}catch(k){}},css:function(a,c,d,e){var f,g,h,i=p.camelCase(c);return c=p.cssProps[i]||(p.cssProps[i]=bX(a.style,i)),h=p.cssHooks[c]||p.cssHooks[i],h&&"get"in h&&(f=h.get(a,!0,e)),f===b&&(f=bH(a,c)),f==="normal"&&c in bT&&(f=bT[c]),d||e!==b?(g=parseFloat(f),d||p.isNumeric(g)?g||0:f):f},swap:function(a,b,c){var d,e,f={};for(e in b)f[e]=a.style[e],a.style[e]=b[e];d=c.call(a);for(e in b)a.style[e]=f[e];return d}}),a.getComputedStyle?bH=function(a,b){var c,d,e,f,g=getComputedStyle(a,null),h=a.style;return g&&(c=g[b],c===""&&!p.contains(a.ownerDocument.documentElement,a)&&(c=p.style(a,b)),bP.test(c)&&bN.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=c,c=g.width,h.width=d,h.minWidth=e,h.maxWidth=f)),c}:e.documentElement.currentStyle&&(bH=function(a,b){var c,d,e=a.currentStyle&&a.currentStyle[b],f=a.style;return e==null&&f&&f[b]&&(e=f[b]),bP.test(e)&&!bM.test(b)&&(c=f.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":e,e=f.pixelLeft+"px",f.left=c,d&&(a.runtimeStyle.left=d)),e===""?"auto":e}),p.each(["height","width"],function(a,b){p.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth!==0||bH(a,"display")!=="none"?ca(a,b,d):p.swap(a,bS,function(){return ca(a,b,d)})},set:function(a,c,d){return b$(a,c,d?b_(a,b,d,p.support.boxSizing&&p.css(a,"boxSizing")==="border-box"):0)}}}),p.support.opacity||(p.cssHooks.opacity={get:function(a,b){return bL.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=p.isNumeric(b)?"alpha(opacity="+b*100+")":"",f=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&p.trim(f.replace(bK,""))===""&&c.removeAttribute){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bK.test(f)?f.replace(bK,e):f+" "+e}}),p(function(){p.support.reliableMarginRight||(p.cssHooks.marginRight={get:function(a,b){return p.swap(a,{display:"inline-block"},function(){if(b)return bH(a,"marginRight")})}}),!p.support.pixelPosition&&p.fn.position&&p.each(["top","left"],function(a,b){p.cssHooks[b]={get:function(a,c){if(c){var d=bH(a,b);return bP.test(d)?p(a).position()[b]+"px":d}}}})}),p.expr&&p.expr.filters&&(p.expr.filters.hidden=function(a){return a.offsetWidth===0&&a.offsetHeight===0||!p.support.reliableHiddenOffsets&&(a.style&&a.style.display||bH(a,"display"))==="none"},p.expr.filters.visible=function(a){return!p.expr.filters.hidden(a)}),p.each({margin:"",padding:"",border:"Width"},function(a,b){p.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bU[d]+b]=e[d]||e[d-2]||e[0];return f}},bN.test(a)||(p.cssHooks[a+b].set=b$)});var cc=/%20/g,cd=/\[\]$/,ce=/\r?\n/g,cf=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,cg=/^(?:select|textarea)/i;p.fn.extend({serialize:function(){return p.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?p.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||cg.test(this.nodeName)||cf.test(this.type))}).map(function(a,b){var c=p(this).val();return c==null?null:p.isArray(c)?p.map(c,function(a,c){return{name:b.name,value:a.replace(ce,"\r\n")}}):{name:b.name,value:c.replace(ce,"\r\n")}}).get()}}),p.param=function(a,c){var d,e=[],f=function(a,b){b=p.isFunction(b)?b():b==null?"":b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=p.ajaxSettings&&p.ajaxSettings.traditional);if(p.isArray(a)||a.jquery&&!p.isPlainObject(a))p.each(a,function(){f(this.name,this.value)});else for(d in a)ch(d,a[d],c,f);return e.join("&").replace(cc,"+")};var ci,cj,ck=/#.*$/,cl=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,cm=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,cn=/^(?:GET|HEAD)$/,co=/^\/\//,cp=/\?/,cq=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,cr=/([?&])_=[^&]*/,cs=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,ct=p.fn.load,cu={},cv={},cw=["*/"]+["*"];try{ci=f.href}catch(cx){ci=e.createElement("a"),ci.href="",ci=ci.href}cj=cs.exec(ci.toLowerCase())||[],p.fn.load=function(a,c,d){if(typeof a!="string"&&ct)return ct.apply(this,arguments);if(!this.length)return this;var e,f,g,h=this,i=a.indexOf(" ");return i>=0&&(e=a.slice(i,a.length),a=a.slice(0,i)),p.isFunction(c)?(d=c,c=b):typeof c=="object"&&(f="POST"),p.ajax({url:a,type:f,dataType:"html",data:c,complete:function(a,b){d&&h.each(d,g||[a.responseText,b,a])}}).done(function(a){g=arguments,h.html(e?p("<div>").append(a.replace(cq,"")).find(e):a)}),this},p.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){p.fn[b]=function(a){return this.on(b,a)}}),p.each(["get","post"],function(a,c){p[c]=function(a,d,e,f){return p.isFunction(d)&&(f=f||e,e=d,d=b),p.ajax({type:c,url:a,data:d,success:e,dataType:f})}}),p.extend({getScript:function(a,c){return p.get(a,b,c,"script")},getJSON:function(a,b,c){return p.get(a,b,c,"json")},ajaxSetup:function(a,b){return b?cA(a,p.ajaxSettings):(b=a,a=p.ajaxSettings),cA(a,b),a},ajaxSettings:{url:ci,isLocal:cm.test(cj[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":cw},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":p.parseJSON,"text xml":p.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:cy(cu),ajaxTransport:cy(cv),ajax:function(a,c){function y(a,c,f,i){var k,s,t,u,w,y=c;if(v===2)return;v=2,h&&clearTimeout(h),g=b,e=i||"",x.readyState=a>0?4:0,f&&(u=cB(l,x,f));if(a>=200&&a<300||a===304)l.ifModified&&(w=x.getResponseHeader("Last-Modified"),w&&(p.lastModified[d]=w),w=x.getResponseHeader("Etag"),w&&(p.etag[d]=w)),a===304?(y="notmodified",k=!0):(k=cC(l,u),y=k.state,s=k.data,t=k.error,k=!t);else{t=y;if(!y||a)y="error",a<0&&(a=0)}x.status=a,x.statusText=""+(c||y),k?o.resolveWith(m,[s,y,x]):o.rejectWith(m,[x,y,t]),x.statusCode(r),r=b,j&&n.trigger("ajax"+(k?"Success":"Error"),[x,l,k?s:t]),q.fireWith(m,[x,y]),j&&(n.trigger("ajaxComplete",[x,l]),--p.active||p.event.trigger("ajaxStop"))}typeof a=="object"&&(c=a,a=b),c=c||{};var d,e,f,g,h,i,j,k,l=p.ajaxSetup({},c),m=l.context||l,n=m!==l&&(m.nodeType||m instanceof p)?p(m):p.event,o=p.Deferred(),q=p.Callbacks("once memory"),r=l.statusCode||{},t={},u={},v=0,w="canceled",x={readyState:0,setRequestHeader:function(a,b){if(!v){var c=a.toLowerCase();a=u[c]=u[c]||a,t[a]=b}return this},getAllResponseHeaders:function(){return v===2?e:null},getResponseHeader:function(a){var c;if(v===2){if(!f){f={};while(c=cl.exec(e))f[c[1].toLowerCase()]=c[2]}c=f[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){return v||(l.mimeType=a),this},abort:function(a){return a=a||w,g&&g.abort(a),y(0,a),this}};o.promise(x),x.success=x.done,x.error=x.fail,x.complete=q.add,x.statusCode=function(a){if(a){var b;if(v<2)for(b in a)r[b]=[r[b],a[b]];else b=a[x.status],x.always(b)}return this},l.url=((a||l.url)+"").replace(ck,"").replace(co,cj[1]+"//"),l.dataTypes=p.trim(l.dataType||"*").toLowerCase().split(s),l.crossDomain==null&&(i=cs.exec(l.url.toLowerCase()),l.crossDomain=!(!i||i[1]==cj[1]&&i[2]==cj[2]&&(i[3]||(i[1]==="http:"?80:443))==(cj[3]||(cj[1]==="http:"?80:443)))),l.data&&l.processData&&typeof l.data!="string"&&(l.data=p.param(l.data,l.traditional)),cz(cu,l,c,x);if(v===2)return x;j=l.global,l.type=l.type.toUpperCase(),l.hasContent=!cn.test(l.type),j&&p.active++===0&&p.event.trigger("ajaxStart");if(!l.hasContent){l.data&&(l.url+=(cp.test(l.url)?"&":"?")+l.data,delete l.data),d=l.url;if(l.cache===!1){var z=p.now(),A=l.url.replace(cr,"$1_="+z);l.url=A+(A===l.url?(cp.test(l.url)?"&":"?")+"_="+z:"")}}(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&x.setRequestHeader("Content-Type",l.contentType),l.ifModified&&(d=d||l.url,p.lastModified[d]&&x.setRequestHeader("If-Modified-Since",p.lastModified[d]),p.etag[d]&&x.setRequestHeader("If-None-Match",p.etag[d])),x.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+(l.dataTypes[0]!=="*"?", "+cw+"; q=0.01":""):l.accepts["*"]);for(k in l.headers)x.setRequestHeader(k,l.headers[k]);if(!l.beforeSend||l.beforeSend.call(m,x,l)!==!1&&v!==2){w="abort";for(k in{success:1,error:1,complete:1})x[k](l[k]);g=cz(cv,l,c,x);if(!g)y(-1,"No Transport");else{x.readyState=1,j&&n.trigger("ajaxSend",[x,l]),l.async&&l.timeout>0&&(h=setTimeout(function(){x.abort("timeout")},l.timeout));try{v=1,g.send(t,y)}catch(B){if(v<2)y(-1,B);else throw B}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var cD=[],cE=/\?/,cF=/(=)\?(?=&|$)|\?\?/,cG=p.now();p.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=cD.pop()||p.expando+"_"+cG++;return this[a]=!0,a}}),p.ajaxPrefilter("json jsonp",function(c,d,e){var f,g,h,i=c.data,j=c.url,k=c.jsonp!==!1,l=k&&cF.test(j),m=k&&!l&&typeof i=="string"&&!(c.contentType||"").indexOf("application/x-www-form-urlencoded")&&cF.test(i);if(c.dataTypes[0]==="jsonp"||l||m)return f=c.jsonpCallback=p.isFunction(c.jsonpCallback)?c.jsonpCallback():c.jsonpCallback,g=a[f],l?c.url=j.replace(cF,"$1"+f):m?c.data=i.replace(cF,"$1"+f):k&&(c.url+=(cE.test(j)?"&":"?")+c.jsonp+"="+f),c.converters["script json"]=function(){return h||p.error(f+" was not called"),h[0]},c.dataTypes[0]="json",a[f]=function(){h=arguments},e.always(function(){a[f]=g,c[f]&&(c.jsonpCallback=d.jsonpCallback,cD.push(f)),h&&p.isFunction(g)&&g(h[0]),h=g=b}),"script"}),p.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){return p.globalEval(a),a}}}),p.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),p.ajaxTransport("script",function(a){if(a.crossDomain){var c,d=e.head||e.getElementsByTagName("head")[0]||e.documentElement;return{send:function(f,g){c=e.createElement("script"),c.async="async",a.scriptCharset&&(c.charset=a.scriptCharset),c.src=a.url,c.onload=c.onreadystatechange=function(a,e){if(e||!c.readyState||/loaded|complete/.test(c.readyState))c.onload=c.onreadystatechange=null,d&&c.parentNode&&d.removeChild(c),c=b,e||g(200,"success")},d.insertBefore(c,d.firstChild)},abort:function(){c&&c.onload(0,1)}}}});var cH,cI=a.ActiveXObject?function(){for(var a in cH)cH[a](0,1)}:!1,cJ=0;p.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&cK()||cL()}:cK,function(a){p.extend(p.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(p.ajaxSettings.xhr()),p.support.ajax&&p.ajaxTransport(function(c){if(!c.crossDomain||p.support.cors){var d;return{send:function(e,f){var g,h,i=c.xhr();c.username?i.open(c.type,c.url,c.async,c.username,c.password):i.open(c.type,c.url,c.async);if(c.xhrFields)for(h in c.xhrFields)i[h]=c.xhrFields[h];c.mimeType&&i.overrideMimeType&&i.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(h in e)i.setRequestHeader(h,e[h])}catch(j){}i.send(c.hasContent&&c.data||null),d=function(a,e){var h,j,k,l,m;try{if(d&&(e||i.readyState===4)){d=b,g&&(i.onreadystatechange=p.noop,cI&&delete cH[g]);if(e)i.readyState!==4&&i.abort();else{h=i.status,k=i.getAllResponseHeaders(),l={},m=i.responseXML,m&&m.documentElement&&(l.xml=m);try{l.text=i.responseText}catch(a){}try{j=i.statusText}catch(n){j=""}!h&&c.isLocal&&!c.crossDomain?h=l.text?200:404:h===1223&&(h=204)}}}catch(o){e||f(-1,o)}l&&f(h,j,l,k)},c.async?i.readyState===4?setTimeout(d,0):(g=++cJ,cI&&(cH||(cH={},p(a).unload(cI)),cH[g]=d),i.onreadystatechange=d):d()},abort:function(){d&&d(0,1)}}}});var cM,cN,cO=/^(?:toggle|show|hide)$/,cP=new RegExp("^(?:([-+])=|)("+q+")([a-z%]*)$","i"),cQ=/queueHooks$/,cR=[cX],cS={"*":[function(a,b){var c,d,e,f=this.createTween(a,b),g=cP.exec(b),h=f.cur(),i=+h||0,j=1;if(g){c=+g[2],d=g[3]||(p.cssNumber[a]?"":"px");if(d!=="px"&&i){i=p.css(f.elem,a,!0)||c||1;do e=j=j||".5",i=i/j,p.style(f.elem,a,i+d),j=f.cur()/h;while(j!==1&&j!==e)}f.unit=d,f.start=i,f.end=g[1]?i+(g[1]+1)*c:c}return f}]};p.Animation=p.extend(cV,{tweener:function(a,b){p.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");var c,d=0,e=a.length;for(;d<e;d++)c=a[d],cS[c]=cS[c]||[],cS[c].unshift(b)},prefilter:function(a,b){b?cR.unshift(a):cR.push(a)}}),p.Tween=cY,cY.prototype={constructor:cY,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(p.cssNumber[c]?"":"px")},cur:function(){var a=cY.propHooks[this.prop];return a&&a.get?a.get(this):cY.propHooks._default.get(this)},run:function(a){var b,c=cY.propHooks[this.prop];return this.pos=b=p.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration),this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):cY.propHooks._default.set(this),this}},cY.prototype.init.prototype=cY.prototype,cY.propHooks={_default:{get:function(a){var b;return a.elem[a.prop]==null||!!a.elem.style&&a.elem.style[a.prop]!=null?(b=p.css(a.elem,a.prop,!1,""),!b||b==="auto"?0:b):a.elem[a.prop]},set:function(a){p.fx.step[a.prop]?p.fx.step[a.prop](a):a.elem.style&&(a.elem.style[p.cssProps[a.prop]]!=null||p.cssHooks[a.prop])?p.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},cY.propHooks.scrollTop=cY.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},p.each(["toggle","show","hide"],function(a,b){var c=p.fn[b];p.fn[b]=function(d,e,f){return d==null||typeof d=="boolean"||!a&&p.isFunction(d)&&p.isFunction(e)?c.apply(this,arguments):this.animate(cZ(b,!0),d,e,f)}}),p.fn.extend({fadeTo:function(a,b,c,d){return this.filter(bY).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=p.isEmptyObject(a),f=p.speed(b,c,d),g=function(){var b=cV(this,p.extend({},a),f);e&&b.stop(!0)};return e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,c,d){var e=function(a){var b=a.stop;delete a.stop,b(d)};return typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,c=a!=null&&a+"queueHooks",f=p.timers,g=p._data(this);if(c)g[c]&&g[c].stop&&e(g[c]);else for(c in g)g[c]&&g[c].stop&&cQ.test(c)&&e(g[c]);for(c=f.length;c--;)f[c].elem===this&&(a==null||f[c].queue===a)&&(f[c].anim.stop(d),b=!1,f.splice(c,1));(b||!d)&&p.dequeue(this,a)})}}),p.each({slideDown:cZ("show"),slideUp:cZ("hide"),slideToggle:cZ("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){p.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),p.speed=function(a,b,c){var d=a&&typeof a=="object"?p.extend({},a):{complete:c||!c&&b||p.isFunction(a)&&a,duration:a,easing:c&&b||b&&!p.isFunction(b)&&b};d.duration=p.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in p.fx.speeds?p.fx.speeds[d.duration]:p.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";return d.old=d.complete,d.complete=function(){p.isFunction(d.old)&&d.old.call(this),d.queue&&p.dequeue(this,d.queue)},d},p.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},p.timers=[],p.fx=cY.prototype.init,p.fx.tick=function(){var a,b=p.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||p.fx.stop()},p.fx.timer=function(a){a()&&p.timers.push(a)&&!cN&&(cN=setInterval(p.fx.tick,p.fx.interval))},p.fx.interval=13,p.fx.stop=function(){clearInterval(cN),cN=null},p.fx.speeds={slow:600,fast:200,_default:400},p.fx.step={},p.expr&&p.expr.filters&&(p.expr.filters.animated=function(a){return p.grep(p.timers,function(b){return a===b.elem}).length});var c$=/^(?:body|html)$/i;p.fn.offset=function(a){if(arguments.length)return a===b?this:this.each(function(b){p.offset.setOffset(this,a,b)});var c,d,e,f,g,h,i,j,k,l,m=this[0],n=m&&m.ownerDocument;if(!n)return;return(e=n.body)===m?p.offset.bodyOffset(m):(d=n.documentElement,p.contains(d,m)?(c=m.getBoundingClientRect(),f=c_(n),g=d.clientTop||e.clientTop||0,h=d.clientLeft||e.clientLeft||0,i=f.pageYOffset||d.scrollTop,j=f.pageXOffset||d.scrollLeft,k=c.top+i-g,l=c.left+j-h,{top:k,left:l}):{top:0,left:0})},p.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;return p.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(p.css(a,"marginTop"))||0,c+=parseFloat(p.css(a,"marginLeft"))||0),{top:b,left:c}},setOffset:function(a,b,c){var d=p.css(a,"position");d==="static"&&(a.style.position="relative");var e=p(a),f=e.offset(),g=p.css(a,"top"),h=p.css(a,"left"),i=(d==="absolute"||d==="fixed")&&p.inArray("auto",[g,h])>-1,j={},k={},l,m;i?(k=e.position(),l=k.top,m=k.left):(l=parseFloat(g)||0,m=parseFloat(h)||0),p.isFunction(b)&&(b=b.call(a,c,f)),b.top!=null&&(j.top=b.top-f.top+l),b.left!=null&&(j.left=b.left-f.left+m),"using"in b?b.using.call(a,j):e.css(j)}},p.fn.extend({position:function(){if(!this[0])return;var a=this[0],b=this.offsetParent(),c=this.offset(),d=c$.test(b[0].nodeName)?{top:0,left:0}:b.offset();return c.top-=parseFloat(p.css(a,"marginTop"))||0,c.left-=parseFloat(p.css(a,"marginLeft"))||0,d.top+=parseFloat(p.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(p.css(b[0],"borderLeftWidth"))||0,{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||e.body;while(a&&!c$.test(a.nodeName)&&p.css(a,"position")==="static")a=a.offsetParent;return a||e.body})}}),p.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);p.fn[a]=function(e){return p.access(this,function(a,e,f){var g=c_(a);if(f===b)return g?c in g?g[c]:g.document.documentElement[e]:a[e];g?g.scrollTo(d?p(g).scrollLeft():f,d?f:p(g).scrollTop()):a[e]=f},a,e,arguments.length,null)}}),p.each({Height:"height",Width:"width"},function(a,c){p.each({padding:"inner"+a,content:c,"":"outer"+a},function(d,e){p.fn[e]=function(e,f){var g=arguments.length&&(d||typeof e!="boolean"),h=d||(e===!0||f===!0?"margin":"border");return p.access(this,function(c,d,e){var f;return p.isWindow(c)?c.document.documentElement["client"+a]:c.nodeType===9?(f=c.documentElement,Math.max(c.body["scroll"+a],f["scroll"+a],c.body["offset"+a],f["offset"+a],f["client"+a])):e===b?p.css(c,d,e,h):p.style(c,d,e,h)},c,g?e:b,g)}})}),a.jQuery=a.$=p,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return p})})(window);
\ No newline at end of file
diff --git a/opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/lib/jquery.ba-bbq.min.js b/opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/lib/jquery.ba-bbq.min.js
new file mode 100644 (file)
index 0000000..bcbf248
--- /dev/null
@@ -0,0 +1,18 @@
+/*
+ * jQuery BBQ: Back Button & Query Library - v1.2.1 - 2/17/2010
+ * http://benalman.com/projects/jquery-bbq-plugin/
+ * 
+ * Copyright (c) 2010 "Cowboy" Ben Alman
+ * Dual licensed under the MIT and GPL licenses.
+ * http://benalman.com/about/license/
+ */
+(function($,p){var i,m=Array.prototype.slice,r=decodeURIComponent,a=$.param,c,l,v,b=$.bbq=$.bbq||{},q,u,j,e=$.event.special,d="hashchange",A="querystring",D="fragment",y="elemUrlAttr",g="location",k="href",t="src",x=/^.*\?|#.*$/g,w=/^.*\#/,h,C={};function E(F){return typeof F==="string"}function B(G){var F=m.call(arguments,1);return function(){return G.apply(this,F.concat(m.call(arguments)))}}function n(F){return F.replace(/^[^#]*#?(.*)$/,"$1")}function o(F){return F.replace(/(?:^[^?#]*\?([^#]*).*$)?.*/,"$1")}function f(H,M,F,I,G){var O,L,K,N,J;if(I!==i){K=F.match(H?/^([^#]*)\#?(.*)$/:/^([^#?]*)\??([^#]*)(#?.*)/);J=K[3]||"";if(G===2&&E(I)){L=I.replace(H?w:x,"")}else{N=l(K[2]);I=E(I)?l[H?D:A](I):I;L=G===2?I:G===1?$.extend({},I,N):$.extend({},N,I);L=a(L);if(H){L=L.replace(h,r)}}O=K[1]+(H?"#":L||!K[1]?"?":"")+L+J}else{O=M(F!==i?F:p[g][k])}return O}a[A]=B(f,0,o);a[D]=c=B(f,1,n);c.noEscape=function(G){G=G||"";var F=$.map(G.split(""),encodeURIComponent);h=new RegExp(F.join("|"),"g")};c.noEscape(",/");$.deparam=l=function(I,F){var H={},G={"true":!0,"false":!1,"null":null};$.each(I.replace(/\+/g," ").split("&"),function(L,Q){var K=Q.split("="),P=r(K[0]),J,O=H,M=0,R=P.split("]["),N=R.length-1;if(/\[/.test(R[0])&&/\]$/.test(R[N])){R[N]=R[N].replace(/\]$/,"");R=R.shift().split("[").concat(R);N=R.length-1}else{N=0}if(K.length===2){J=r(K[1]);if(F){J=J&&!isNaN(J)?+J:J==="undefined"?i:G[J]!==i?G[J]:J}if(N){for(;M<=N;M++){P=R[M]===""?O.length:R[M];O=O[P]=M<N?O[P]||(R[M+1]&&isNaN(R[M+1])?{}:[]):J}}else{if($.isArray(H[P])){H[P].push(J)}else{if(H[P]!==i){H[P]=[H[P],J]}else{H[P]=J}}}}else{if(P){H[P]=F?i:""}}});return H};function z(H,F,G){if(F===i||typeof F==="boolean"){G=F;F=a[H?D:A]()}else{F=E(F)?F.replace(H?w:x,""):F}return l(F,G)}l[A]=B(z,0);l[D]=v=B(z,1);$[y]||($[y]=function(F){return $.extend(C,F)})({a:k,base:k,iframe:t,img:t,input:t,form:"action",link:k,script:t});j=$[y];function s(I,G,H,F){if(!E(H)&&typeof H!=="object"){F=H;H=G;G=i}return this.each(function(){var L=$(this),J=G||j()[(this.nodeName||"").toLowerCase()]||"",K=J&&L.attr(J)||"";L.attr(J,a[I](K,H,F))})}$.fn[A]=B(s,A);$.fn[D]=B(s,D);b.pushState=q=function(I,F){if(E(I)&&/^#/.test(I)&&F===i){F=2}var H=I!==i,G=c(p[g][k],H?I:{},H?F:2);p[g][k]=G+(/#/.test(G)?"":"#")};b.getState=u=function(F,G){return F===i||typeof F==="boolean"?v(F):v(G)[F]};b.removeState=function(F){var G={};if(F!==i){G=u();$.each($.isArray(F)?F:arguments,function(I,H){delete G[H]})}q(G,2)};e[d]=$.extend(e[d],{add:function(F){var H;function G(J){var I=J[D]=c();J.getState=function(K,L){return K===i||typeof K==="boolean"?l(I,K):l(I,L)[K]};H.apply(this,arguments)}if($.isFunction(F)){H=F;return G}else{H=F.handler;F.handler=G}}})})(jQuery,this);
+/*
+ * jQuery hashchange event - v1.2 - 2/11/2010
+ * http://benalman.com/projects/jquery-hashchange-plugin/
+ * 
+ * Copyright (c) 2010 "Cowboy" Ben Alman
+ * Dual licensed under the MIT and GPL licenses.
+ * http://benalman.com/about/license/
+ */
+(function($,i,b){var j,k=$.event.special,c="location",d="hashchange",l="href",f=$.browser,g=document.documentMode,h=f.msie&&(g===b||g<8),e="on"+d in i&&!h;function a(m){m=m||i[c][l];return m.replace(/^[^#]*#?(.*)$/,"$1")}$[d+"Delay"]=100;k[d]=$.extend(k[d],{setup:function(){if(e){return false}$(j.start)},teardown:function(){if(e){return false}$(j.stop)}});j=(function(){var m={},r,n,o,q;function p(){o=q=function(s){return s};if(h){n=$('<iframe src="javascript:0"/>').hide().insertAfter("body")[0].contentWindow;q=function(){return a(n.document[c][l])};o=function(u,s){if(u!==s){var t=n.document;t.open().close();t[c].hash="#"+u}};o(a())}}m.start=function(){if(r){return}var t=a();o||p();(function s(){var v=a(),u=q(t);if(v!==t){o(t=v,u);$(i).trigger(d)}else{if(u!==t){i[c][l]=i[c][l].replace(/#.*/,"")+"#"+u}}r=setTimeout(s,$[d+"Delay"])})()};m.stop=function(){if(!n){r&&clearTimeout(r);r=0}};return m})()})(jQuery,this);
\ No newline at end of file
diff --git a/opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/lib/jquery.slideto.min.js b/opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/lib/jquery.slideto.min.js
new file mode 100644 (file)
index 0000000..ba32cff
--- /dev/null
@@ -0,0 +1 @@
+(function(b){b.fn.slideto=function(a){a=b.extend({slide_duration:"slow",highlight_duration:3E3,highlight:true,highlight_color:"#FFFF99"},a);return this.each(function(){obj=b(this);b("body").animate({scrollTop:obj.offset().top},a.slide_duration,function(){a.highlight&&b.ui.version&&obj.effect("highlight",{color:a.highlight_color},a.highlight_duration)})})}})(jQuery);
diff --git a/opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/lib/jquery.wiggle.min.js b/opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/lib/jquery.wiggle.min.js
new file mode 100644 (file)
index 0000000..2adb0d6
--- /dev/null
@@ -0,0 +1,8 @@
+/*
+jQuery Wiggle
+Author: WonderGroup, Jordan Thomas
+URL: http://labs.wondergroup.com/demos/mini-ui/index.html
+License: MIT (http://en.wikipedia.org/wiki/MIT_License)
+*/
+jQuery.fn.wiggle=function(o){var d={speed:50,wiggles:3,travel:5,callback:null};var o=jQuery.extend(d,o);return this.each(function(){var cache=this;var wrap=jQuery(this).wrap('<div class="wiggle-wrap"></div>').css("position","relative");var calls=0;for(i=1;i<=o.wiggles;i++){jQuery(this).animate({left:"-="+o.travel},o.speed).animate({left:"+="+o.travel*2},o.speed*2).animate({left:"-="+o.travel},o.speed,function(){calls++;if(jQuery(cache).parent().hasClass('wiggle-wrap')){jQuery(cache).parent().replaceWith(cache);}
+if(calls==o.wiggles&&jQuery.isFunction(o.callback)){o.callback();}});}});};
\ No newline at end of file
diff --git a/opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/lib/shred.bundle.js b/opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/lib/shred.bundle.js
new file mode 100644 (file)
index 0000000..74d0816
--- /dev/null
@@ -0,0 +1,2765 @@
+var require = function (file, cwd) {
+    var resolved = require.resolve(file, cwd || '/');
+    var mod = require.modules[resolved];
+    if (!mod) throw new Error(
+        'Failed to resolve module ' + file + ', tried ' + resolved
+    );
+    var res = mod._cached ? mod._cached : mod();
+    return res;
+}
+
+require.paths = [];
+require.modules = {};
+require.extensions = [".js",".coffee"];
+
+require._core = {
+    'assert': true,
+    'events': true,
+    'fs': true,
+    'path': true,
+    'vm': true
+};
+
+require.resolve = (function () {
+    return function (x, cwd) {
+        if (!cwd) cwd = '/';
+        
+        if (require._core[x]) return x;
+        var path = require.modules.path();
+        var y = cwd || '.';
+        
+        if (x.match(/^(?:\.\.?\/|\/)/)) {
+            var m = loadAsFileSync(path.resolve(y, x))
+                || loadAsDirectorySync(path.resolve(y, x));
+            if (m) return m;
+        }
+        
+        var n = loadNodeModulesSync(x, y);
+        if (n) return n;
+        
+        throw new Error("Cannot find module '" + x + "'");
+        
+        function loadAsFileSync (x) {
+            if (require.modules[x]) {
+                return x;
+            }
+            
+            for (var i = 0; i < require.extensions.length; i++) {
+                var ext = require.extensions[i];
+                if (require.modules[x + ext]) return x + ext;
+            }
+        }
+        
+        function loadAsDirectorySync (x) {
+            x = x.replace(/\/+$/, '');
+            var pkgfile = x + '/package.json';
+            if (require.modules[pkgfile]) {
+                var pkg = require.modules[pkgfile]();
+                var b = pkg.browserify;
+                if (typeof b === 'object' && b.main) {
+                    var m = loadAsFileSync(path.resolve(x, b.main));
+                    if (m) return m;
+                }
+                else if (typeof b === 'string') {
+                    var m = loadAsFileSync(path.resolve(x, b));
+                    if (m) return m;
+                }
+                else if (pkg.main) {
+                    var m = loadAsFileSync(path.resolve(x, pkg.main));
+                    if (m) return m;
+                }
+            }
+            
+            return loadAsFileSync(x + '/index');
+        }
+        
+        function loadNodeModulesSync (x, start) {
+            var dirs = nodeModulesPathsSync(start);
+            for (var i = 0; i < dirs.length; i++) {
+                var dir = dirs[i];
+                var m = loadAsFileSync(dir + '/' + x);
+                if (m) return m;
+                var n = loadAsDirectorySync(dir + '/' + x);
+                if (n) return n;
+            }
+            
+            var m = loadAsFileSync(x);
+            if (m) return m;
+        }
+        
+        function nodeModulesPathsSync (start) {
+            var parts;
+            if (start === '/') parts = [ '' ];
+            else parts = path.normalize(start).split('/');
+            
+            var dirs = [];
+            for (var i = parts.length - 1; i >= 0; i--) {
+                if (parts[i] === 'node_modules') continue;
+                var dir = parts.slice(0, i + 1).join('/') + '/node_modules';
+                dirs.push(dir);
+            }
+            
+            return dirs;
+        }
+    };
+})();
+
+require.alias = function (from, to) {
+    var path = require.modules.path();
+    var res = null;
+    try {
+        res = require.resolve(from + '/package.json', '/');
+    }
+    catch (err) {
+        res = require.resolve(from, '/');
+    }
+    var basedir = path.dirname(res);
+    
+    var keys = (Object.keys || function (obj) {
+        var res = [];
+        for (var key in obj) res.push(key)
+        return res;
+    })(require.modules);
+    
+    for (var i = 0; i < keys.length; i++) {
+        var key = keys[i];
+        if (key.slice(0, basedir.length + 1) === basedir + '/') {
+            var f = key.slice(basedir.length);
+            require.modules[to + f] = require.modules[basedir + f];
+        }
+        else if (key === basedir) {
+            require.modules[to] = require.modules[basedir];
+        }
+    }
+};
+
+require.define = function (filename, fn) {
+    var dirname = require._core[filename]
+        ? ''
+        : require.modules.path().dirname(filename)
+    ;
+    
+    var require_ = function (file) {
+        return require(file, dirname)
+    };
+    require_.resolve = function (name) {
+        return require.resolve(name, dirname);
+    };
+    require_.modules = require.modules;
+    require_.define = require.define;
+    var module_ = { exports : {} };
+    
+    require.modules[filename] = function () {
+        require.modules[filename]._cached = module_.exports;
+        fn.call(
+            module_.exports,
+            require_,
+            module_,
+            module_.exports,
+            dirname,
+            filename
+        );
+        require.modules[filename]._cached = module_.exports;
+        return module_.exports;
+    };
+};
+
+if (typeof process === 'undefined') process = {};
+
+if (!process.nextTick) process.nextTick = (function () {
+    var queue = [];
+    var canPost = typeof window !== 'undefined'
+        && window.postMessage && window.addEventListener
+    ;
+    
+    if (canPost) {
+        window.addEventListener('message', function (ev) {
+            if (ev.source === window && ev.data === 'browserify-tick') {
+                ev.stopPropagation();
+                if (queue.length > 0) {
+                    var fn = queue.shift();
+                    fn();
+                }
+            }
+        }, true);
+    }
+    
+    return function (fn) {
+        if (canPost) {
+            queue.push(fn);
+            window.postMessage('browserify-tick', '*');
+        }
+        else setTimeout(fn, 0);
+    };
+})();
+
+if (!process.title) process.title = 'browser';
+
+if (!process.binding) process.binding = function (name) {
+    if (name === 'evals') return require('vm')
+    else throw new Error('No such module')
+};
+
+if (!process.cwd) process.cwd = function () { return '.' };
+
+require.define("path", function (require, module, exports, __dirname, __filename) {
+    function filter (xs, fn) {
+    var res = [];
+    for (var i = 0; i < xs.length; i++) {
+        if (fn(xs[i], i, xs)) res.push(xs[i]);
+    }
+    return res;
+}
+
+// resolves . and .. elements in a path array with directory names there
+// must be no slashes, empty elements, or device names (c:\) in the array
+// (so also no leading and trailing slashes - it does not distinguish
+// relative and absolute paths)
+function normalizeArray(parts, allowAboveRoot) {
+  // if the path tries to go above the root, `up` ends up > 0
+  var up = 0;
+  for (var i = parts.length; i >= 0; i--) {
+    var last = parts[i];
+    if (last == '.') {
+      parts.splice(i, 1);
+    } else if (last === '..') {
+      parts.splice(i, 1);
+      up++;
+    } else if (up) {
+      parts.splice(i, 1);
+      up--;
+    }
+  }
+
+  // if the path is allowed to go above the root, restore leading ..s
+  if (allowAboveRoot) {
+    for (; up--; up) {
+      parts.unshift('..');
+    }
+  }
+
+  return parts;
+}
+
+// Regex to split a filename into [*, dir, basename, ext]
+// posix version
+var splitPathRe = /^(.+\/(?!$)|\/)?((?:.+?)?(\.[^.]*)?)$/;
+
+// path.resolve([from ...], to)
+// posix version
+exports.resolve = function() {
+var resolvedPath = '',
+    resolvedAbsolute = false;
+
+for (var i = arguments.length; i >= -1 && !resolvedAbsolute; i--) {
+  var path = (i >= 0)
+      ? arguments[i]
+      : process.cwd();
+
+  // Skip empty and invalid entries
+  if (typeof path !== 'string' || !path) {
+    continue;
+  }
+
+  resolvedPath = path + '/' + resolvedPath;
+  resolvedAbsolute = path.charAt(0) === '/';
+}
+
+// At this point the path should be resolved to a full absolute path, but
+// handle relative paths to be safe (might happen when process.cwd() fails)
+
+// Normalize the path
+resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {
+    return !!p;
+  }), !resolvedAbsolute).join('/');
+
+  return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';
+};
+
+// path.normalize(path)
+// posix version
+exports.normalize = function(path) {
+var isAbsolute = path.charAt(0) === '/',
+    trailingSlash = path.slice(-1) === '/';
+
+// Normalize the path
+path = normalizeArray(filter(path.split('/'), function(p) {
+    return !!p;
+  }), !isAbsolute).join('/');
+
+  if (!path && !isAbsolute) {
+    path = '.';
+  }
+  if (path && trailingSlash) {
+    path += '/';
+  }
+  
+  return (isAbsolute ? '/' : '') + path;
+};
+
+
+// posix version
+exports.join = function() {
+  var paths = Array.prototype.slice.call(arguments, 0);
+  return exports.normalize(filter(paths, function(p, index) {
+    return p && typeof p === 'string';
+  }).join('/'));
+};
+
+
+exports.dirname = function(path) {
+  var dir = splitPathRe.exec(path)[1] || '';
+  var isWindows = false;
+  if (!dir) {
+    // No dirname
+    return '.';
+  } else if (dir.length === 1 ||
+      (isWindows && dir.length <= 3 && dir.charAt(1) === ':')) {
+    // It is just a slash or a drive letter with a slash
+    return dir;
+  } else {
+    // It is a full dirname, strip trailing slash
+    return dir.substring(0, dir.length - 1);
+  }
+};
+
+
+exports.basename = function(path, ext) {
+  var f = splitPathRe.exec(path)[2] || '';
+  // TODO: make this comparison case-insensitive on windows?
+  if (ext && f.substr(-1 * ext.length) === ext) {
+    f = f.substr(0, f.length - ext.length);
+  }
+  return f;
+};
+
+
+exports.extname = function(path) {
+  return splitPathRe.exec(path)[3] || '';
+};
+
+});
+
+require.define("/shred.js", function (require, module, exports, __dirname, __filename) {
+    // Shred is an HTTP client library intended to simplify the use of Node's
+// built-in HTTP library. In particular, we wanted to make it easier to interact
+// with HTTP-based APIs.
+// 
+// See the [examples](./examples.html) for more details.
+
+// Ax is a nice logging library we wrote. You can use any logger, providing it
+// has `info`, `warn`, `debug`, and `error` methods that take a string.
+var Ax = require("ax")
+  , CookieJarLib = require( "cookiejar" )
+  , CookieJar = CookieJarLib.CookieJar
+;
+
+// Shred takes some options, including a logger and request defaults.
+
+var Shred = function(options) {
+  options = (options||{});
+  this.agent = options.agent;
+  this.defaults = options.defaults||{};
+  this.log = options.logger||(new Ax({ level: "info" }));
+  this._sharedCookieJar = new CookieJar();
+  this.logCurl = options.logCurl || false;
+};
+
+// Most of the real work is done in the request and reponse classes.
+Shred.Request = require("./shred/request");
+Shred.Response = require("./shred/response");
+
+// The `request` method kicks off a new request, instantiating a new `Request`
+// object and passing along whatever default options we were given.
+
+Shred.prototype = {
+  request: function(options) {
+    options.logger = this.log;
+    options.logCurl = options.logCurl || this.logCurl;
+    options.cookieJar = ( 'cookieJar' in options ) ? options.cookieJar : this._sharedCookieJar; // let them set cookieJar = null
+    options.agent = options.agent || this.agent;
+    // fill in default options
+    for (var key in this.defaults) {
+      if (this.defaults.hasOwnProperty(key) && !options[key]) {
+        options[key] = this.defaults[key]
+      }
+    }
+    return new Shred.Request(options);
+  }
+};
+
+// Define a bunch of convenience methods so that you don't have to include
+// a `method` property in your request options.
+
+"get put post delete".split(" ").forEach(function(method) {
+  Shred.prototype[method] = function(options) {
+    options.method = method;
+    return this.request(options);
+  };
+});
+
+
+module.exports = Shred;
+
+});
+
+require.define("/node_modules/ax/package.json", function (require, module, exports, __dirname, __filename) {
+    module.exports = {"main":"./lib/ax.js"}
+});
+
+require.define("/node_modules/ax/lib/ax.js", function (require, module, exports, __dirname, __filename) {
+    var inspect = require("util").inspect
+  , fs = require("fs")
+;
+
+
+// this is a quick-and-dirty logger. there are other nicer loggers out there
+// but the ones i found were also somewhat involved. this one has a Ruby
+// logger type interface
+//
+// we can easily replace this, provide the info, debug, etc. methods are the
+// same. or, we can change Haiku to use a more standard node.js interface
+
+var format = function(level,message) {
+  var debug = (level=="debug"||level=="error");
+  if (!message) { return message.toString(); }
+  if (typeof(message) == "object") {
+    if (message instanceof Error && debug) {
+      return message.stack;
+    } else {
+      return inspect(message);
+    }
+  } else {
+    return message.toString();
+  }
+};
+
+var noOp = function(message) { return this; }
+var makeLogger = function(level,fn) {
+  return function(message) { 
+    this.stream.write(this.format(level, message)+"\n");
+    return this;
+  }
+};
+
+var Logger = function(options) {
+  var logger = this;
+  var options = options||{};
+
+  // Default options
+  options.level = options.level || "info";
+  options.timestamp = options.timestamp || true;
+  options.prefix = options.prefix || "";
+  logger.options = options;
+
+  // Allows a prefix to be added to the message.
+  //
+  //    var logger = new Ax({ module: 'Haiku' })
+  //    logger.warn('this is going to be awesome!');
+  //    //=> Haiku: this is going to be awesome!
+  //
+  if (logger.options.module){
+    logger.options.prefix = logger.options.module;
+  }
+
+  // Write to stderr or a file
+  if (logger.options.file){
+    logger.stream = fs.createWriteStream(logger.options.file, {"flags": "a"});
+  } else {
+      if(process.title === "node")
+    logger.stream = process.stderr;
+      else if(process.title === "browser")
+    logger.stream = function () {
+      // Work around weird console context issue: http://code.google.com/p/chromium/issues/detail?id=48662
+      return console[logger.options.level].apply(console, arguments);
+    };
+  }
+
+  switch(logger.options.level){
+    case 'debug':
+      ['debug', 'info', 'warn'].forEach(function (level) {
+        logger[level] = Logger.writer(level);
+      });
+    case 'info':
+      ['info', 'warn'].forEach(function (level) {
+        logger[level] = Logger.writer(level);
+      });
+    case 'warn':
+      logger.warn = Logger.writer('warn');
+  }
+}
+
+// Used to define logger methods
+Logger.writer = function(level){
+  return function(message){
+    var logger = this;
+
+    if(process.title === "node")
+  logger.stream.write(logger.format(level, message) + '\n');
+    else if(process.title === "browser")
+  logger.stream(logger.format(level, message) + '\n');
+
+  };
+}
+
+
+Logger.prototype = {
+  info: function(){},
+  debug: function(){},
+  warn: function(){},
+  error: Logger.writer('error'),
+  format: function(level, message){
+    if (! message) return '';
+
+    var logger = this
+      , prefix = logger.options.prefix
+      , timestamp = logger.options.timestamp ? " " + (new Date().toISOString()) : ""
+    ;
+
+    return (prefix + timestamp + ": " + message);
+  }
+};
+
+module.exports = Logger;
+
+});
+
+require.define("util", function (require, module, exports, __dirname, __filename) {
+    // todo
+
+});
+
+require.define("fs", function (require, module, exports, __dirname, __filename) {
+    // nothing to see here... no file methods for the browser
+
+});
+
+require.define("/node_modules/cookiejar/package.json", function (require, module, exports, __dirname, __filename) {
+    module.exports = {"main":"cookiejar.js"}
+});
+
+require.define("/node_modules/cookiejar/cookiejar.js", function (require, module, exports, __dirname, __filename) {
+    exports.CookieAccessInfo=CookieAccessInfo=function CookieAccessInfo(domain,path,secure,script) {
+    if(this instanceof CookieAccessInfo) {
+      this.domain=domain||undefined;
+      this.path=path||"/";
+      this.secure=!!secure;
+      this.script=!!script;
+      return this;
+    }
+    else {
+        return new CookieAccessInfo(domain,path,secure,script)    
+    }
+}
+
+exports.Cookie=Cookie=function Cookie(cookiestr) {
+  if(cookiestr instanceof Cookie) {
+    return cookiestr;
+  }
+    else {
+        if(this instanceof Cookie) {
+          this.name = null;
+          this.value = null;
+          this.expiration_date = Infinity;
+          this.path = "/";
+          this.domain = null;
+          this.secure = false; //how to define?
+          this.noscript = false; //httponly
+          if(cookiestr) {
+            this.parse(cookiestr)
+          }
+          return this;
+        }
+        return new Cookie(cookiestr)
+    }
+}
+
+Cookie.prototype.toString = function toString() {
+  var str=[this.name+"="+this.value];
+  if(this.expiration_date !== Infinity) {
+    str.push("expires="+(new Date(this.expiration_date)).toGMTString());
+  }
+  if(this.domain) {
+    str.push("domain="+this.domain);
+  }
+  if(this.path) {
+    str.push("path="+this.path);
+  }
+  if(this.secure) {
+    str.push("secure");
+  }
+  if(this.noscript) {
+    str.push("httponly");
+  }
+  return str.join("; ");
+}
+
+Cookie.prototype.toValueString = function toValueString() {
+  return this.name+"="+this.value;
+}
+
+var cookie_str_splitter=/[:](?=\s*[a-zA-Z0-9_\-]+\s*[=])/g
+Cookie.prototype.parse = function parse(str) {
+  if(this instanceof Cookie) {
+      var parts=str.split(";")
+      , pair=parts[0].match(/([^=]+)=((?:.|\n)*)/)
+      , key=pair[1]
+      , value=pair[2];
+      this.name = key;
+      this.value = value;
+    
+      for(var i=1;i<parts.length;i++) {
+        pair=parts[i].match(/([^=]+)(?:=((?:.|\n)*))?/)
+        , key=pair[1].trim().toLowerCase()
+        , value=pair[2];
+        switch(key) {
+          case "httponly":
+            this.noscript = true;
+          break;
+          case "expires":
+            this.expiration_date = value
+              ? Number(Date.parse(value))
+              : Infinity;
+          break;
+          case "path":
+            this.path = value
+              ? value.trim()
+              : "";
+          break;
+          case "domain":
+            this.domain = value
+              ? value.trim()
+              : "";
+          break;
+          case "secure":
+            this.secure = true;
+          break
+        }
+      }
+    
+      return this;
+  }
+    return new Cookie().parse(str)
+}
+
+Cookie.prototype.matches = function matches(access_info) {
+  if(this.noscript && access_info.script
+  || this.secure && !access_info.secure
+  || !this.collidesWith(access_info)) {
+    return false
+  }
+  return true;
+}
+
+Cookie.prototype.collidesWith = function collidesWith(access_info) {
+  if((this.path && !access_info.path) || (this.domain && !access_info.domain)) {
+    return false
+  }
+  if(this.path && access_info.path.indexOf(this.path) !== 0) {
+    return false;
+  }
+  if (this.domain===access_info.domain) {
+    return true;
+  }
+  else if(this.domain && this.domain.charAt(0)===".")
+  {
+    var wildcard=access_info.domain.indexOf(this.domain.slice(1))
+    if(wildcard===-1 || wildcard!==access_info.domain.length-this.domain.length+1) {
+      return false;
+    }
+  }
+  else if(this.domain){
+    return false
+  }
+  return true;
+}
+
+exports.CookieJar=CookieJar=function CookieJar() {
+  if(this instanceof CookieJar) {
+      var cookies = {} //name: [Cookie]
+    
+      this.setCookie = function setCookie(cookie) {
+        cookie = Cookie(cookie);
+        //Delete the cookie if the set is past the current time
+        var remove = cookie.expiration_date <= Date.now();
+        if(cookie.name in cookies) {
+          var cookies_list = cookies[cookie.name];
+          for(var i=0;i<cookies_list.length;i++) {
+            var collidable_cookie = cookies_list[i];
+            if(collidable_cookie.collidesWith(cookie)) {
+              if(remove) {
+                cookies_list.splice(i,1);
+                if(cookies_list.length===0) {
+                  delete cookies[cookie.name]
+                }
+                return false;
+              }
+              else {
+                return cookies_list[i]=cookie;
+              }
+            }
+          }
+          if(remove) {
+            return false;
+          }
+          cookies_list.push(cookie);
+          return cookie;
+        }
+        else if(remove){
+          return false;
+        }
+        else {
+          return cookies[cookie.name]=[cookie];
+        }
+      }
+      //returns a cookie
+      this.getCookie = function getCookie(cookie_name,access_info) {
+        var cookies_list = cookies[cookie_name];
+        for(var i=0;i<cookies_list.length;i++) {
+          var cookie = cookies_list[i];
+          if(cookie.expiration_date <= Date.now()) {
+            if(cookies_list.length===0) {
+              delete cookies[cookie.name]
+            }
+            continue;
+          }
+          if(cookie.matches(access_info)) {
+            return cookie;
+          }
+        }
+      }
+      //returns a list of cookies
+      this.getCookies = function getCookies(access_info) {
+        var matches=[];
+        for(var cookie_name in cookies) {
+          var cookie=this.getCookie(cookie_name,access_info);
+          if (cookie) {
+            matches.push(cookie);
+          }
+        }
+        matches.toString=function toString(){return matches.join(":");}
+            matches.toValueString=function() {return matches.map(function(c){return c.toValueString();}).join(';');}
+        return matches;
+      }
+    
+      return this;
+  }
+    return new CookieJar()
+}
+
+
+//returns list of cookies that were set correctly
+CookieJar.prototype.setCookies = function setCookies(cookies) {
+  cookies=Array.isArray(cookies)
+    ?cookies
+    :cookies.split(cookie_str_splitter);
+  var successful=[]
+  for(var i=0;i<cookies.length;i++) {
+    var cookie = Cookie(cookies[i]);
+    if(this.setCookie(cookie)) {
+      successful.push(cookie);
+    }
+  }
+  return successful;
+}
+
+});
+
+require.define("/shred/request.js", function (require, module, exports, __dirname, __filename) {
+    // The request object encapsulates a request, creating a Node.js HTTP request and
+// then handling the response.
+
+var HTTP = require("http")
+  , HTTPS = require("https")
+  , parseUri = require("./parseUri")
+  , Emitter = require('events').EventEmitter
+  , sprintf = require("sprintf").sprintf
+  , Response = require("./response")
+  , HeaderMixins = require("./mixins/headers")
+  , Content = require("./content")
+;
+
+var STATUS_CODES = HTTP.STATUS_CODES || {
+    100 : 'Continue',
+    101 : 'Switching Protocols',
+    102 : 'Processing', // RFC 2518, obsoleted by RFC 4918
+    200 : 'OK',
+    201 : 'Created',
+    202 : 'Accepted',
+    203 : 'Non-Authoritative Information',
+    204 : 'No Content',
+    205 : 'Reset Content',
+    206 : 'Partial Content',
+    207 : 'Multi-Status', // RFC 4918
+    300 : 'Multiple Choices',
+    301 : 'Moved Permanently',
+    302 : 'Moved Temporarily',
+    303 : 'See Other',
+    304 : 'Not Modified',
+    305 : 'Use Proxy',
+    307 : 'Temporary Redirect',
+    400 : 'Bad Request',
+    401 : 'Unauthorized',
+    402 : 'Payment Required',
+    403 : 'Forbidden',
+    404 : 'Not Found',
+    405 : 'Method Not Allowed',
+    406 : 'Not Acceptable',
+    407 : 'Proxy Authentication Required',
+    408 : 'Request Time-out',
+    409 : 'Conflict',
+    410 : 'Gone',
+    411 : 'Length Required',
+    412 : 'Precondition Failed',
+    413 : 'Request Entity Too Large',
+    414 : 'Request-URI Too Large',
+    415 : 'Unsupported Media Type',
+    416 : 'Requested Range Not Satisfiable',
+    417 : 'Expectation Failed',
+    418 : 'I\'m a teapot', // RFC 2324
+    422 : 'Unprocessable Entity', // RFC 4918
+    423 : 'Locked', // RFC 4918
+    424 : 'Failed Dependency', // RFC 4918
+    425 : 'Unordered Collection', // RFC 4918
+    426 : 'Upgrade Required', // RFC 2817
+    500 : 'Internal Server Error',
+    501 : 'Not Implemented',
+    502 : 'Bad Gateway',
+    503 : 'Service Unavailable',
+    504 : 'Gateway Time-out',
+    505 : 'HTTP Version not supported',
+    506 : 'Variant Also Negotiates', // RFC 2295
+    507 : 'Insufficient Storage', // RFC 4918
+    509 : 'Bandwidth Limit Exceeded',
+    510 : 'Not Extended' // RFC 2774
+};
+
+// The Shred object itself constructs the `Request` object. You should rarely
+// need to do this directly.
+
+var Request = function(options) {
+  this.log = options.logger;
+  this.cookieJar = options.cookieJar;
+  this.encoding = options.encoding;
+  this.logCurl = options.logCurl;
+  processOptions(this,options||{});
+  createRequest(this);
+};
+
+// A `Request` has a number of properties, many of which help with details like
+// URL parsing or defaulting the port for the request.
+
+Object.defineProperties(Request.prototype, {
+
+// - **url**. You can set the `url` property with a valid URL string and all the
+//   URL-related properties (host, port, etc.) will be automatically set on the
+//   request object.
+
+  url: {
+    get: function() {
+      if (!this.scheme) { return null; }
+      return sprintf("%s://%s:%s%s",
+          this.scheme, this.host, this.port,
+          (this.proxy ? "/" : this.path) +
+          (this.query ? ("?" + this.query) : ""));
+    },
+    set: function(_url) {
+      _url = parseUri(_url);
+      this.scheme = _url.protocol;
+      this.host = _url.host;
+      this.port = _url.port;
+      this.path = _url.path;
+      this.query = _url.query;
+      return this;
+    },
+    enumerable: true
+  },
+
+// - **headers**. Returns a hash representing the request headers. You can't set
+//   this directly, only get it. You can add or modify headers by using the
+//   `setHeader` or `setHeaders` method. This ensures that the headers are
+//   normalized - that is, you don't accidentally send `Content-Type` and
+//   `content-type` headers. Keep in mind that if you modify the returned hash,
+//   it will *not* modify the request headers.
+
+  headers: {
+    get: function() {
+      return this.getHeaders();
+    },
+    enumerable: true
+  },
+
+// - **port**. Unless you set the `port` explicitly or include it in the URL, it
+//   will default based on the scheme.
+
+  port: {
+    get: function() {
+      if (!this._port) {
+        switch(this.scheme) {
+          case "https": return this._port = 443;
+          case "http":
+          default: return this._port = 80;
+        }
+      }
+      return this._port;
+    },
+    set: function(value) { this._port = value; return this; },
+    enumerable: true
+  },
+
+// - **method**. The request method - `get`, `put`, `post`, etc. that will be
+//   used to make the request. Defaults to `get`.
+
+  method: {
+    get: function() {
+      return this._method = (this._method||"GET");
+    },
+    set: function(value) {
+      this._method = value; return this;
+    },
+    enumerable: true
+  },
+
+// - **query**. Can be set either with a query string or a hash (object). Get
+//   will always return a properly escaped query string or null if there is no
+//   query component for the request.
+
+  query: {
+    get: function() {return this._query;},
+    set: function(value) {
+      var stringify = function (hash) {
+        var query = "";
+        for (var key in hash) {
+          query += encodeURIComponent(key) + '=' + encodeURIComponent(hash[key]) + '&';
+        }
+        // Remove the last '&'
+        query = query.slice(0, -1);
+        return query;
+      }
+
+      if (value) {
+        if (typeof value === 'object') {
+          value = stringify(value);
+        }
+        this._query = value;
+      } else {
+        this._query = "";
+      }
+      return this;
+    },
+    enumerable: true
+  },
+
+// - **parameters**. This will return the query parameters in the form of a hash
+//   (object).
+
+  parameters: {
+    get: function() { return QueryString.parse(this._query||""); },
+    enumerable: true
+  },
+
+// - **content**. (Aliased as `body`.) Set this to add a content entity to the
+//   request. Attempts to use the `content-type` header to determine what to do
+//   with the content value. Get this to get back a [`Content`
+//   object](./content.html).
+
+  body: {
+    get: function() { return this._body; },
+    set: function(value) {
+      this._body = new Content({
+        data: value,
+        type: this.getHeader("Content-Type")
+      });
+      this.setHeader("Content-Type",this.content.type);
+      this.setHeader("Content-Length",this.content.length);
+      return this;
+    },
+    enumerable: true
+  },
+
+// - **timeout**. Used to determine how long to wait for a response. Does not
+//   distinguish between connect timeouts versus request timeouts. Set either in
+//   milliseconds or with an object with temporal attributes (hours, minutes,
+//   seconds) and convert it into milliseconds. Get will always return
+//   milliseconds.
+
+  timeout: {
+    get: function() { return this._timeout; }, // in milliseconds
+    set: function(timeout) {
+      var request = this
+        , milliseconds = 0;
+      ;
+      if (!timeout) return this;
+      if (typeof timeout==="number") { milliseconds = timeout; }
+      else {
+        milliseconds = (timeout.milliseconds||0) +
+          (1000 * ((timeout.seconds||0) +
+              (60 * ((timeout.minutes||0) +
+                (60 * (timeout.hours||0))))));
+      }
+      this._timeout = milliseconds;
+      return this;
+    },
+    enumerable: true
+  }
+});
+
+// Alias `body` property to `content`. Since the [content object](./content.html)
+// has a `body` attribute, it's preferable to use `content` since you can then
+// access the raw content data using `content.body`.
+
+Object.defineProperty(Request.prototype,"content",
+    Object.getOwnPropertyDescriptor(Request.prototype, "body"));
+
+// The `Request` object can be pretty overwhelming to view using the built-in
+// Node.js inspect method. We want to make it a bit more manageable. This
+// probably goes [too far in the other
+// direction](https://github.com/spire-io/shred/issues/2).
+
+Request.prototype.inspect = function () {
+  var request = this;
+  var headers = this.format_headers();
+  var summary = ["<Shred Request> ", request.method.toUpperCase(),
+      request.url].join(" ")
+  return [ summary, "- Headers:", headers].join("\n");
+};
+
+Request.prototype.format_headers = function () {
+  var array = []
+  var headers = this._headers
+  for (var key in headers) {
+    if (headers.hasOwnProperty(key)) {
+      var value = headers[key]
+      array.push("\t" + key + ": " + value);
+    }
+  }
+  return array.join("\n");
+};
+
+// Allow chainable 'on's:  shred.get({ ... }).on( ... ).  You can pass in a
+// single function, a pair (event, function), or a hash:
+// { event: function, event: function }
+Request.prototype.on = function (eventOrHash, listener) {
+  var emitter = this.emitter;
+  // Pass in a single argument as a function then make it the default response handler
+  if (arguments.length === 1 && typeof(eventOrHash) === 'function') {
+    emitter.on('response', eventOrHash);
+  } else if (arguments.length === 1 && typeof(eventOrHash) === 'object') {
+    for (var key in eventOrHash) {
+      if (eventOrHash.hasOwnProperty(key)) {
+        emitter.on(key, eventOrHash[key]);
+      }
+    }
+  } else {
+    emitter.on(eventOrHash, listener);
+  }
+  return this;
+};
+
+// Add in the header methods. Again, these ensure we don't get the same header
+// multiple times with different case conventions.
+HeaderMixins.gettersAndSetters(Request);
+
+// `processOptions` is called from the constructor to handle all the work
+// associated with making sure we do our best to ensure we have a valid request.
+
+var processOptions = function(request,options) {
+
+  request.log.debug("Processing request options ..");
+
+  // We'll use `request.emitter` to manage the `on` event handlers.
+  request.emitter = (new Emitter);
+
+  request.agent = options.agent;
+
+  // Set up the handlers ...
+  if (options.on) {
+    for (var key in options.on) {
+      if (options.on.hasOwnProperty(key)) {
+        request.emitter.on(key, options.on[key]);
+      }
+    }
+  }
+
+  // Make sure we were give a URL or a host
+  if (!options.url && !options.host) {
+    request.emitter.emit("request_error",
+        new Error("No url or url options (host, port, etc.)"));
+    return;
+  }
+
+  // Allow for the [use of a proxy](http://www.jmarshall.com/easy/http/#proxies).
+
+  if (options.url) {
+    if (options.proxy) {
+      request.url = options.proxy;
+      request.path = options.url;
+    } else {
+      request.url = options.url;
+    }
+  }
+
+  // Set the remaining options.
+  request.query = options.query||options.parameters||request.query ;
+  request.method = options.method;
+  request.setHeader("user-agent",options.agent||"Shred");
+  request.setHeaders(options.headers);
+
+  if (request.cookieJar) {
+    var cookies = request.cookieJar.getCookies( CookieAccessInfo( request.host, request.path ) );
+    if (cookies.length) {
+      var cookieString = request.getHeader('cookie')||'';
+      for (var cookieIndex = 0; cookieIndex < cookies.length; ++cookieIndex) {
+          if ( cookieString.length && cookieString[ cookieString.length - 1 ] != ';' )
+          {
+              cookieString += ';';
+          }
+          cookieString += cookies[ cookieIndex ].name + '=' + cookies[ cookieIndex ].value + ';';
+      }
+      request.setHeader("cookie", cookieString);
+    }
+  }
+  
+  // The content entity can be set either using the `body` or `content` attributes.
+  if (options.body||options.content) {
+    request.content = options.body||options.content;
+  }
+  request.timeout = options.timeout;
+
+};
+
+// `createRequest` is also called by the constructor, after `processOptions`.
+// This actually makes the request and processes the response, so `createRequest`
+// is a bit of a misnomer.
+
+var createRequest = function(request) {
+  var timeout ;
+
+  request.log.debug("Creating request ..");
+  request.log.debug(request);
+
+  var reqParams = {
+    host: request.host,
+    port: request.port,
+    method: request.method,
+    path: request.path + (request.query ? '?'+request.query : ""),
+    headers: request.getHeaders(),
+    // Node's HTTP/S modules will ignore this, but we are using the
+    // browserify-http module in the browser for both HTTP and HTTPS, and this
+    // is how you differentiate the two.
+    scheme: request.scheme,
+    // Use a provided agent.  'Undefined' is the default, which uses a global
+    // agent.
+    agent: request.agent
+  };
+
+  if (request.logCurl) {
+    logCurl(request);
+  }
+
+  var http = request.scheme == "http" ? HTTP : HTTPS;
+
+  // Set up the real request using the selected library. The request won't be
+  // sent until we call `.end()`.
+  request._raw = http.request(reqParams, function(response) {
+    request.log.debug("Received response ..");
+
+    // We haven't timed out and we have a response, so make sure we clear the
+    // timeout so it doesn't fire while we're processing the response.
+    clearTimeout(timeout);
+
+    // Construct a Shred `Response` object from the response. This will stream
+    // the response, thus the need for the callback. We can access the response
+    // entity safely once we're in the callback.
+    response = new Response(response, request, function(response) {
+
+      // Set up some event magic. The precedence is given first to
+      // status-specific handlers, then to responses for a given event, and then
+      // finally to the more general `response` handler. In the last case, we
+      // need to first make sure we're not dealing with a a redirect.
+      var emit = function(event) {
+        var emitter = request.emitter;
+        var textStatus = STATUS_CODES[response.status] ? STATUS_CODES[response.status].toLowerCase() : null;
+        if (emitter.listeners(response.status).length > 0 || emitter.listeners(textStatus).length > 0) {
+          emitter.emit(response.status, response);
+          emitter.emit(textStatus, response);
+        } else {
+          if (emitter.listeners(event).length>0) {
+            emitter.emit(event, response);
+          } else if (!response.isRedirect) {
+            emitter.emit("response", response);
+            //console.warn("Request has no event listener for status code " + response.status);
+          }
+        }
+      };
+
+      // Next, check for a redirect. We simply repeat the request with the URL
+      // given in the `Location` header. We fire a `redirect` event.
+      if (response.isRedirect) {
+        request.log.debug("Redirecting to "
+            + response.getHeader("Location"));
+        request.url = response.getHeader("Location");
+        emit("redirect");
+        createRequest(request);
+
+      // Okay, it's not a redirect. Is it an error of some kind?
+      } else if (response.isError) {
+        emit("error");
+      } else {
+      // It looks like we're good shape. Trigger the `success` event.
+        emit("success");
+      }
+    });
+  });
+
+  // We're still setting up the request. Next, we're going to handle error cases
+  // where we have no response. We don't emit an error event because that event
+  // takes a response. We don't response handlers to have to check for a null
+  // value. However, we [should introduce a different event
+  // type](https://github.com/spire-io/shred/issues/3) for this type of error.
+  request._raw.on("error", function(error) {
+    request.emitter.emit("request_error", error);
+  });
+
+  request._raw.on("socket", function(socket) {
+    request.emitter.emit("socket", socket);
+  });
+
+  // TCP timeouts should also trigger the "response_error" event.
+  request._raw.on('socket', function () {
+    request._raw.socket.on('timeout', function () {
+      // This should trigger the "error" event on the raw request, which will
+      // trigger the "response_error" on the shred request.
+      request._raw.abort();
+    });
+  });
+
+
+  // We're almost there. Next, we need to write the request entity to the
+  // underlying request object.
+  if (request.content) {
+    request.log.debug("Streaming body: '" +
+        request.content.data.slice(0,59) + "' ... ");
+    request._raw.write(request.content.data);
+  }
+
+  // Finally, we need to set up the timeout. We do this last so that we don't
+  // start the clock ticking until the last possible moment.
+  if (request.timeout) {
+    timeout = setTimeout(function() {
+      request.log.debug("Timeout fired, aborting request ...");
+      request._raw.abort();
+      request.emitter.emit("timeout", request);
+    },request.timeout);
+  }
+
+  // The `.end()` method will cause the request to fire. Technically, it might
+  // have already sent the headers and body.
+  request.log.debug("Sending request ...");
+  request._raw.end();
+};
+
+// Logs the curl command for the request.
+var logCurl = function (req) {
+  var headers = req.getHeaders();
+  var headerString = "";
+
+  for (var key in headers) {
+    headerString += '-H "' + key + ": " + headers[key] + '" ';
+  }
+
+  var bodyString = ""
+
+  if (req.content) {
+    bodyString += "-d '" + req.content.body + "' ";
+  }
+
+  var query = req.query ? '?' + req.query : "";
+
+  console.log("curl " +
+    "-X " + req.method.toUpperCase() + " " +
+    req.scheme + "://" + req.host + ":" + req.port + req.path + query + " " +
+    headerString +
+    bodyString
+  );
+};
+
+
+module.exports = Request;
+
+});
+
+require.define("http", function (require, module, exports, __dirname, __filename) {
+    // todo
+
+});
+
+require.define("https", function (require, module, exports, __dirname, __filename) {
+    // todo
+
+});
+
+require.define("/shred/parseUri.js", function (require, module, exports, __dirname, __filename) {
+    // parseUri 1.2.2
+// (c) Steven Levithan <stevenlevithan.com>
+// MIT License
+
+function parseUri (str) {
+  var o   = parseUri.options,
+    m   = o.parser[o.strictMode ? "strict" : "loose"].exec(str),
+    uri = {},
+    i   = 14;
+
+  while (i--) uri[o.key[i]] = m[i] || "";
+
+  uri[o.q.name] = {};
+  uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {
+    if ($1) uri[o.q.name][$1] = $2;
+  });
+
+  return uri;
+};
+
+parseUri.options = {
+  strictMode: false,
+  key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],
+  q:   {
+    name:   "queryKey",
+    parser: /(?:^|&)([^&=]*)=?([^&]*)/g
+  },
+  parser: {
+    strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
+    loose:  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
+  }
+};
+
+module.exports = parseUri;
+
+});
+
+require.define("events", function (require, module, exports, __dirname, __filename) {
+    if (!process.EventEmitter) process.EventEmitter = function () {};
+
+var EventEmitter = exports.EventEmitter = process.EventEmitter;
+var isArray = typeof Array.isArray === 'function'
+    ? Array.isArray
+    : function (xs) {
+        return Object.toString.call(xs) === '[object Array]'
+    }
+;
+
+// By default EventEmitters will print a warning if more than
+// 10 listeners are added to it. This is a useful default which
+// helps finding memory leaks.
+//
+// Obviously not all Emitters should be limited to 10. This function allows
+// that to be increased. Set to zero for unlimited.
+var defaultMaxListeners = 10;
+EventEmitter.prototype.setMaxListeners = function(n) {
+  if (!this._events) this._events = {};
+  this._events.maxListeners = n;
+};
+
+
+EventEmitter.prototype.emit = function(type) {
+  // If there is no 'error' event listener then throw.
+  if (type === 'error') {
+    if (!this._events || !this._events.error ||
+        (isArray(this._events.error) && !this._events.error.length))
+    {
+      if (arguments[1] instanceof Error) {
+        throw arguments[1]; // Unhandled 'error' event
+      } else {
+        throw new Error("Uncaught, unspecified 'error' event.");
+      }
+      return false;
+    }
+  }
+
+  if (!this._events) return false;
+  var handler = this._events[type];
+  if (!handler) return false;
+
+  if (typeof handler == 'function') {
+    switch (arguments.length) {
+      // fast cases
+      case 1:
+        handler.call(this);
+        break;
+      case 2:
+        handler.call(this, arguments[1]);
+        break;
+      case 3:
+        handler.call(this, arguments[1], arguments[2]);
+        break;
+      // slower
+      default:
+        var args = Array.prototype.slice.call(arguments, 1);
+        handler.apply(this, args);
+    }
+    return true;
+
+  } else if (isArray(handler)) {
+    var args = Array.prototype.slice.call(arguments, 1);
+
+    var listeners = handler.slice();
+    for (var i = 0, l = listeners.length; i < l; i++) {
+      listeners[i].apply(this, args);
+    }
+    return true;
+
+  } else {
+    return false;
+  }
+};
+
+// EventEmitter is defined in src/node_events.cc
+// EventEmitter.prototype.emit() is also defined there.
+EventEmitter.prototype.addListener = function(type, listener) {
+  if ('function' !== typeof listener) {
+    throw new Error('addListener only takes instances of Function');
+  }
+
+  if (!this._events) this._events = {};
+
+  // To avoid recursion in the case that type == "newListeners"! Before
+  // adding it to the listeners, first emit "newListeners".
+  this.emit('newListener', type, listener);
+
+  if (!this._events[type]) {
+    // Optimize the case of one listener. Don't need the extra array object.
+    this._events[type] = listener;
+  } else if (isArray(this._events[type])) {
+
+    // Check for listener leak
+    if (!this._events[type].warned) {
+      var m;
+      if (this._events.maxListeners !== undefined) {
+        m = this._events.maxListeners;
+      } else {
+        m = defaultMaxListeners;
+      }
+
+      if (m && m > 0 && this._events[type].length > m) {
+        this._events[type].warned = true;
+        console.error('(node) warning: possible EventEmitter memory ' +
+                      'leak detected. %d listeners added. ' +
+                      'Use emitter.setMaxListeners() to increase limit.',
+                      this._events[type].length);
+        console.trace();
+      }
+    }
+
+    // If we've already got an array, just append.
+    this._events[type].push(listener);
+  } else {
+    // Adding the second element, need to change to array.
+    this._events[type] = [this._events[type], listener];
+  }
+
+  return this;
+};
+
+EventEmitter.prototype.on = EventEmitter.prototype.addListener;
+
+EventEmitter.prototype.once = function(type, listener) {
+  var self = this;
+  self.on(type, function g() {
+    self.removeListener(type, g);
+    listener.apply(this, arguments);
+  });
+
+  return this;
+};
+
+EventEmitter.prototype.removeListener = function(type, listener) {
+  if ('function' !== typeof listener) {
+    throw new Error('removeListener only takes instances of Function');
+  }
+
+  // does not use listeners(), so no side effect of creating _events[type]
+  if (!this._events || !this._events[type]) return this;
+
+  var list = this._events[type];
+
+  if (isArray(list)) {
+    var i = list.indexOf(listener);
+    if (i < 0) return this;
+    list.splice(i, 1);
+    if (list.length == 0)
+      delete this._events[type];
+  } else if (this._events[type] === listener) {
+    delete this._events[type];
+  }
+
+  return this;
+};
+
+EventEmitter.prototype.removeAllListeners = function(type) {
+  // does not use listeners(), so no side effect of creating _events[type]
+  if (type && this._events && this._events[type]) this._events[type] = null;
+  return this;
+};
+
+EventEmitter.prototype.listeners = function(type) {
+  if (!this._events) this._events = {};
+  if (!this._events[type]) this._events[type] = [];
+  if (!isArray(this._events[type])) {
+    this._events[type] = [this._events[type]];
+  }
+  return this._events[type];
+};
+
+});
+
+require.define("/node_modules/sprintf/package.json", function (require, module, exports, __dirname, __filename) {
+    module.exports = {"main":"./lib/sprintf"}
+});
+
+require.define("/node_modules/sprintf/lib/sprintf.js", function (require, module, exports, __dirname, __filename) {
+    /**
+sprintf() for JavaScript 0.7-beta1
+http://www.diveintojavascript.com/projects/javascript-sprintf
+
+Copyright (c) Alexandru Marasteanu <alexaholic [at) gmail (dot] com>
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of sprintf() for JavaScript nor the
+      names of its contributors may be used to endorse or promote products
+      derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL Alexandru Marasteanu BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+Changelog:
+2010.11.07 - 0.7-beta1-node
+  - converted it to a node.js compatible module
+
+2010.09.06 - 0.7-beta1
+  - features: vsprintf, support for named placeholders
+  - enhancements: format cache, reduced global namespace pollution
+
+2010.05.22 - 0.6:
+ - reverted to 0.4 and fixed the bug regarding the sign of the number 0
+ Note:
+ Thanks to Raphael Pigulla <raph (at] n3rd [dot) org> (http://www.n3rd.org/)
+ who warned me about a bug in 0.5, I discovered that the last update was
+ a regress. I appologize for that.
+
+2010.05.09 - 0.5:
+ - bug fix: 0 is now preceeded with a + sign
+ - bug fix: the sign was not at the right position on padded results (Kamal Abdali)
+ - switched from GPL to BSD license
+
+2007.10.21 - 0.4:
+ - unit test and patch (David Baird)
+
+2007.09.17 - 0.3:
+ - bug fix: no longer throws exception on empty paramenters (Hans Pufal)
+
+2007.09.11 - 0.2:
+ - feature: added argument swapping
+
+2007.04.03 - 0.1:
+ - initial release
+**/
+
+var sprintf = (function() {
+  function get_type(variable) {
+    return Object.prototype.toString.call(variable).slice(8, -1).toLowerCase();
+  }
+  function str_repeat(input, multiplier) {
+    for (var output = []; multiplier > 0; output[--multiplier] = input) {/* do nothing */}
+    return output.join('');
+  }
+
+  var str_format = function() {
+    if (!str_format.cache.hasOwnProperty(arguments[0])) {
+      str_format.cache[arguments[0]] = str_format.parse(arguments[0]);
+    }
+    return str_format.format.call(null, str_format.cache[arguments[0]], arguments);
+  };
+
+  str_format.format = function(parse_tree, argv) {
+    var cursor = 1, tree_length = parse_tree.length, node_type = '', arg, output = [], i, k, match, pad, pad_character, pad_length;
+    for (i = 0; i < tree_length; i++) {
+      node_type = get_type(parse_tree[i]);
+      if (node_type === 'string') {
+        output.push(parse_tree[i]);
+      }
+      else if (node_type === 'array') {
+        match = parse_tree[i]; // convenience purposes only
+        if (match[2]) { // keyword argument
+          arg = argv[cursor];
+          for (k = 0; k < match[2].length; k++) {
+            if (!arg.hasOwnProperty(match[2][k])) {
+              throw(sprintf('[sprintf] property "%s" does not exist', match[2][k]));
+            }
+            arg = arg[match[2][k]];
+          }
+        }
+        else if (match[1]) { // positional argument (explicit)
+          arg = argv[match[1]];
+        }
+        else { // positional argument (implicit)
+          arg = argv[cursor++];
+        }
+
+        if (/[^s]/.test(match[8]) && (get_type(arg) != 'number')) {
+          throw(sprintf('[sprintf] expecting number but found %s', get_type(arg)));
+        }
+        switch (match[8]) {
+          case 'b': arg = arg.toString(2); break;
+          case 'c': arg = String.fromCharCode(arg); break;
+          case 'd': arg = parseInt(arg, 10); break;
+          case 'e': arg = match[7] ? arg.toExponential(match[7]) : arg.toExponential(); break;
+          case 'f': arg = match[7] ? parseFloat(arg).toFixed(match[7]) : parseFloat(arg); break;
+          case 'o': arg = arg.toString(8); break;
+          case 's': arg = ((arg = String(arg)) && match[7] ? arg.substring(0, match[7]) : arg); break;
+          case 'u': arg = Math.abs(arg); break;
+          case 'x': arg = arg.toString(16); break;
+          case 'X': arg = arg.toString(16).toUpperCase(); break;
+        }
+        arg = (/[def]/.test(match[8]) && match[3] && arg >= 0 ? '+'+ arg : arg);
+        pad_character = match[4] ? match[4] == '0' ? '0' : match[4].charAt(1) : ' ';
+        pad_length = match[6] - String(arg).length;
+        pad = match[6] ? str_repeat(pad_character, pad_length) : '';
+        output.push(match[5] ? arg + pad : pad + arg);
+      }
+    }
+    return output.join('');
+  };
+
+  str_format.cache = {};
+
+  str_format.parse = function(fmt) {
+    var _fmt = fmt, match = [], parse_tree = [], arg_names = 0;
+    while (_fmt) {
+      if ((match = /^[^\x25]+/.exec(_fmt)) !== null) {
+        parse_tree.push(match[0]);
+      }
+      else if ((match = /^\x25{2}/.exec(_fmt)) !== null) {
+        parse_tree.push('%');
+      }
+      else if ((match = /^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(_fmt)) !== null) {
+        if (match[2]) {
+          arg_names |= 1;
+          var field_list = [], replacement_field = match[2], field_match = [];
+          if ((field_match = /^([a-z_][a-z_\d]*)/i.exec(replacement_field)) !== null) {
+            field_list.push(field_match[1]);
+            while ((replacement_field = replacement_field.substring(field_match[0].length)) !== '') {
+              if ((field_match = /^\.([a-z_][a-z_\d]*)/i.exec(replacement_field)) !== null) {
+                field_list.push(field_match[1]);
+              }
+              else if ((field_match = /^\[(\d+)\]/.exec(replacement_field)) !== null) {
+                field_list.push(field_match[1]);
+              }
+              else {
+                throw('[sprintf] huh?');
+              }
+            }
+          }
+          else {
+            throw('[sprintf] huh?');
+          }
+          match[2] = field_list;
+        }
+        else {
+          arg_names |= 2;
+        }
+        if (arg_names === 3) {
+          throw('[sprintf] mixing positional and named placeholders is not (yet) supported');
+        }
+        parse_tree.push(match);
+      }
+      else {
+        throw('[sprintf] huh?');
+      }
+      _fmt = _fmt.substring(match[0].length);
+    }
+    return parse_tree;
+  };
+
+  return str_format;
+})();
+
+var vsprintf = function(fmt, argv) {
+  argv.unshift(fmt);
+  return sprintf.apply(null, argv);
+};
+
+exports.sprintf = sprintf;
+exports.vsprintf = vsprintf;
+});
+
+require.define("/shred/response.js", function (require, module, exports, __dirname, __filename) {
+    // The `Response object` encapsulates a Node.js HTTP response.
+
+var Content = require("./content")
+  , HeaderMixins = require("./mixins/headers")
+  , CookieJarLib = require( "cookiejar" )
+  , Cookie = CookieJarLib.Cookie
+;
+
+// Browser doesn't have zlib.
+var zlib = null;
+try {
+  zlib = require('zlib');
+} catch (e) {
+  console.warn("no zlib library");
+}
+
+// Iconv doesn't work in browser
+var Iconv = null;
+try {
+  Iconv = require('iconv-lite');
+} catch (e) {
+  console.warn("no iconv library");
+}
+
+// Construct a `Response` object. You should never have to do this directly. The
+// `Request` object handles this, getting the raw response object and passing it
+// in here, along with the request. The callback allows us to stream the response
+// and then use the callback to let the request know when it's ready.
+var Response = function(raw, request, callback) { 
+  var response = this;
+  this._raw = raw;
+
+  // The `._setHeaders` method is "private"; you can't otherwise set headers on
+  // the response.
+  this._setHeaders.call(this,raw.headers);
+  
+  // store any cookies
+  if (request.cookieJar && this.getHeader('set-cookie')) {
+    var cookieStrings = this.getHeader('set-cookie');
+    var cookieObjs = []
+      , cookie;
+
+    for (var i = 0; i < cookieStrings.length; i++) {
+      var cookieString = cookieStrings[i];
+      if (!cookieString) {
+        continue;
+      }
+
+      if (!cookieString.match(/domain\=/i)) {
+        cookieString += '; domain=' + request.host;
+      }
+
+      if (!cookieString.match(/path\=/i)) {
+        cookieString += '; path=' + request.path;
+      }
+
+      try {
+        cookie = new Cookie(cookieString);
+        if (cookie) {
+          cookieObjs.push(cookie);
+        }
+      } catch (e) {
+        console.warn("Tried to set bad cookie: " + cookieString);
+      }
+    }
+
+    request.cookieJar.setCookies(cookieObjs);
+  }
+
+  this.request = request;
+  this.client = request.client;
+  this.log = this.request.log;
+
+  // Stream the response content entity and fire the callback when we're done.
+  // Store the incoming data in a array of Buffers which we concatinate into one
+  // buffer at the end.  We need to use buffers instead of strings here in order
+  // to preserve binary data.
+  var chunkBuffers = [];
+  var dataLength = 0;
+  raw.on("data", function(chunk) {
+    chunkBuffers.push(chunk);
+    dataLength += chunk.length;
+  });
+  raw.on("end", function() {
+    var body;
+    if (typeof Buffer === 'undefined') {
+      // Just concatinate into a string
+      body = chunkBuffers.join('');
+    } else {
+      // Initialize new buffer and add the chunks one-at-a-time.
+      body = new Buffer(dataLength);
+      for (var i = 0, pos = 0; i < chunkBuffers.length; i++) {
+        chunkBuffers[i].copy(body, pos);
+        pos += chunkBuffers[i].length;
+      }
+    }
+
+    var setBodyAndFinish = function (body) {
+      response._body = new Content({ 
+        body: body,
+        type: response.getHeader("Content-Type")
+      });
+      callback(response);
+    }
+
+    if (zlib && response.getHeader("Content-Encoding") === 'gzip'){
+      zlib.gunzip(body, function (err, gunzippedBody) {
+        if (Iconv && response.request.encoding){
+          body = Iconv.fromEncoding(gunzippedBody,response.request.encoding);
+        } else {
+          body = gunzippedBody.toString();
+        }
+        setBodyAndFinish(body);
+      })
+    }
+    else{
+       if (response.request.encoding){
+            body = Iconv.fromEncoding(body,response.request.encoding);
+        }        
+      setBodyAndFinish(body);
+    }
+  });
+};
+
+// The `Response` object can be pretty overwhelming to view using the built-in
+// Node.js inspect method. We want to make it a bit more manageable. This
+// probably goes [too far in the other
+// direction](https://github.com/spire-io/shred/issues/2).
+
+Response.prototype = {
+  inspect: function() {
+    var response = this;
+    var headers = this.format_headers();
+    var summary = ["<Shred Response> ", response.status].join(" ")
+    return [ summary, "- Headers:", headers].join("\n");
+  },
+  format_headers: function () {
+    var array = []
+    var headers = this._headers
+    for (var key in headers) {
+      if (headers.hasOwnProperty(key)) {
+        var value = headers[key]
+        array.push("\t" + key + ": " + value);
+      }
+    }
+    return array.join("\n");
+  }
+};
+
+// `Response` object properties, all of which are read-only:
+Object.defineProperties(Response.prototype, {
+  
+// - **status**. The HTTP status code for the response. 
+  status: {
+    get: function() { return this._raw.statusCode; },
+    enumerable: true
+  },
+
+// - **content**. The HTTP content entity, if any. Provided as a [content
+//   object](./content.html), which will attempt to convert the entity based upon
+//   the `content-type` header. The converted value is available as
+//   `content.data`. The original raw content entity is available as
+//   `content.body`.
+  body: {
+    get: function() { return this._body; }
+  },
+  content: {
+    get: function() { return this.body; },
+    enumerable: true
+  },
+
+// - **isRedirect**. Is the response a redirect? These are responses with 3xx
+//   status and a `Location` header.
+  isRedirect: {
+    get: function() {
+      return (this.status>299
+          &&this.status<400
+          &&this.getHeader("Location"));
+    },
+    enumerable: true
+  },
+
+// - **isError**. Is the response an error? These are responses with status of
+//   400 or greater.
+  isError: {
+    get: function() {
+      return (this.status === 0 || this.status > 399)
+    },
+    enumerable: true
+  }
+});
+
+// Add in the [getters for accessing the normalized headers](./headers.js).
+HeaderMixins.getters(Response);
+HeaderMixins.privateSetters(Response);
+
+// Work around Mozilla bug #608735 [https://bugzil.la/608735], which causes
+// getAllResponseHeaders() to return {} if the response is a CORS request.
+// xhr.getHeader still works correctly.
+var getHeader = Response.prototype.getHeader;
+Response.prototype.getHeader = function (name) {
+  return (getHeader.call(this,name) ||
+    (typeof this._raw.getHeader === 'function' && this._raw.getHeader(name)));
+};
+
+module.exports = Response;
+
+});
+
+require.define("/shred/content.js", function (require, module, exports, __dirname, __filename) {
+    
+// The purpose of the `Content` object is to abstract away the data conversions
+// to and from raw content entities as strings. For example, you want to be able
+// to pass in a Javascript object and have it be automatically converted into a
+// JSON string if the `content-type` is set to a JSON-based media type.
+// Conversely, you want to be able to transparently get back a Javascript object
+// in the response if the `content-type` is a JSON-based media-type.
+
+// One limitation of the current implementation is that it [assumes the `charset` is UTF-8](https://github.com/spire-io/shred/issues/5).
+
+// The `Content` constructor takes an options object, which *must* have either a
+// `body` or `data` property and *may* have a `type` property indicating the
+// media type. If there is no `type` attribute, a default will be inferred.
+var Content = function(options) {
+  this.body = options.body;
+  this.data = options.data;
+  this.type = options.type;
+};
+
+Content.prototype = {
+  // Treat `toString()` as asking for the `content.body`. That is, the raw content entity.
+  //
+  //     toString: function() { return this.body; }
+  //
+  // Commented out, but I've forgotten why. :/
+};
+
+
+// `Content` objects have the following attributes:
+Object.defineProperties(Content.prototype,{
+  
+// - **type**. Typically accessed as `content.type`, reflects the `content-type`
+//   header associated with the request or response. If not passed as an options
+//   to the constructor or set explicitly, it will infer the type the `data`
+//   attribute, if possible, and, failing that, will default to `text/plain`.
+  type: {
+    get: function() {
+      if (this._type) {
+        return this._type;
+      } else {
+        if (this._data) {
+          switch(typeof this._data) {
+            case "string": return "text/plain";
+            case "object": return "application/json";
+          }
+        }
+      }
+      return "text/plain";
+    },
+    set: function(value) {
+      this._type = value;
+      return this;
+    },
+    enumerable: true
+  },
+
+// - **data**. Typically accessed as `content.data`, reflects the content entity
+//   converted into Javascript data. This can be a string, if the `type` is, say,
+//   `text/plain`, but can also be a Javascript object. The conversion applied is
+//   based on the `processor` attribute. The `data` attribute can also be set
+//   directly, in which case the conversion will be done the other way, to infer
+//   the `body` attribute.
+  data: {
+    get: function() {
+      if (this._body) {
+        return this.processor.parser(this._body);
+      } else {
+        return this._data;
+      }
+    },
+    set: function(data) {
+      if (this._body&&data) Errors.setDataWithBody(this);
+      this._data = data;
+      return this;
+    },
+    enumerable: true
+  },
+
+// - **body**. Typically accessed as `content.body`, reflects the content entity
+//   as a UTF-8 string. It is the mirror of the `data` attribute. If you set the
+//   `data` attribute, the `body` attribute will be inferred and vice-versa. If
+//   you attempt to set both, an exception is raised.
+  body: {
+    get: function() {
+      if (this._data) {
+        return this.processor.stringify(this._data);
+      } else {
+        return this.processor.stringify(this._body);
+      }
+    },
+    set: function(body) {
+      if (this._data&&body) Errors.setBodyWithData(this);
+      this._body = body;
+      return this;
+    },
+    enumerable: true
+  },
+
+// - **processor**. The functions that will be used to convert to/from `data` and
+//   `body` attributes. You can add processors. The two that are built-in are for
+//   `text/plain`, which is basically an identity transformation and
+//   `application/json` and other JSON-based media types (including custom media
+//   types with `+json`). You can add your own processors. See below.
+  processor: {
+    get: function() {
+      var processor = Content.processors[this.type];
+      if (processor) {
+        return processor;
+      } else {
+        // Return the first processor that matches any part of the
+        // content type. ex: application/vnd.foobar.baz+json will match json.
+        var main = this.type.split(";")[0];
+        var parts = main.split(/\+|\//);
+        for (var i=0, l=parts.length; i < l; i++) {
+          processor = Content.processors[parts[i]]
+        }
+        return processor || {parser:identity,stringify:toString};
+      }
+    },
+    enumerable: true
+  },
+
+// - **length**. Typically accessed as `content.length`, returns the length in
+//   bytes of the raw content entity.
+  length: {
+    get: function() {
+      if (typeof Buffer !== 'undefined') {
+        return Buffer.byteLength(this.body);
+      }
+      return this.body.length;
+    }
+  }
+});
+
+Content.processors = {};
+
+// The `registerProcessor` function allows you to add your own processors to
+// convert content entities. Each processor consists of a Javascript object with
+// two properties:
+// - **parser**. The function used to parse a raw content entity and convert it
+//   into a Javascript data type.
+// - **stringify**. The function used to convert a Javascript data type into a
+//   raw content entity.
+Content.registerProcessor = function(types,processor) {
+  
+// You can pass an array of types that will trigger this processor, or just one.
+// We determine the array via duck-typing here.
+  if (types.forEach) {
+    types.forEach(function(type) {
+      Content.processors[type] = processor;
+    });
+  } else {
+    // If you didn't pass an array, we just use what you pass in.
+    Content.processors[types] = processor;
+  }
+};
+
+// Register the identity processor, which is used for text-based media types.
+var identity = function(x) { return x; }
+  , toString = function(x) { return x.toString(); }
+Content.registerProcessor(
+  ["text/html","text/plain","text"],
+  { parser: identity, stringify: toString });
+
+// Register the JSON processor, which is used for JSON-based media types.
+Content.registerProcessor(
+  ["application/json; charset=utf-8","application/json","json"],
+  {
+    parser: function(string) {
+      return JSON.parse(string);
+    },
+    stringify: function(data) {
+      return JSON.stringify(data); }});
+
+// Error functions are defined separately here in an attempt to make the code
+// easier to read.
+var Errors = {
+  setDataWithBody: function(object) {
+    throw new Error("Attempt to set data attribute of a content object " +
+        "when the body attributes was already set.");
+  },
+  setBodyWithData: function(object) {
+    throw new Error("Attempt to set body attribute of a content object " +
+        "when the data attributes was already set.");
+  }
+}
+module.exports = Content;
+
+});
+
+require.define("/shred/mixins/headers.js", function (require, module, exports, __dirname, __filename) {
+    // The header mixins allow you to add HTTP header support to any object. This
+// might seem pointless: why not simply use a hash? The main reason is that, per
+// the [HTTP spec](http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2),
+// headers are case-insensitive. So, for example, `content-type` is the same as
+// `CONTENT-TYPE` which is the same as `Content-Type`. Since there is no way to
+// overload the index operator in Javascript, using a hash to represent the
+// headers means it's possible to have two conflicting values for a single
+// header.
+// 
+// The solution to this is to provide explicit methods to set or get headers.
+// This also has the benefit of allowing us to introduce additional variations,
+// including snake case, which we automatically convert to what Matthew King has
+// dubbed "corset case" - the hyphen-separated names with initial caps:
+// `Content-Type`. We use corset-case just in case we're dealing with servers
+// that haven't properly implemented the spec.
+
+// Convert headers to corset-case. **Example:** `CONTENT-TYPE` will be converted
+// to `Content-Type`.
+
+var corsetCase = function(string) {
+  return string.toLowerCase()
+      //.replace("_","-")
+      .replace(/(^|-)(\w)/g, 
+          function(s) { return s.toUpperCase(); });
+};
+
+// We suspect that `initializeHeaders` was once more complicated ...
+var initializeHeaders = function(object) {
+  return {};
+};
+
+// Access the `_headers` property using lazy initialization. **Warning:** If you
+// mix this into an object that is using the `_headers` property already, you're
+// going to have trouble.
+var $H = function(object) {
+  return object._headers||(object._headers=initializeHeaders(object));
+};
+
+// Hide the implementations as private functions, separate from how we expose them.
+
+// The "real" `getHeader` function: get the header after normalizing the name.
+var getHeader = function(object,name) {
+  return $H(object)[corsetCase(name)];
+};
+
+// The "real" `getHeader` function: get one or more headers, or all of them
+// if you don't ask for any specifics. 
+var getHeaders = function(object,names) {
+  var keys = (names && names.length>0) ? names : Object.keys($H(object));
+  var hash = keys.reduce(function(hash,key) {
+    hash[key] = getHeader(object,key);
+    return hash;
+  },{});
+  // Freeze the resulting hash so you don't mistakenly think you're modifying
+  // the real headers.
+  Object.freeze(hash);
+  return hash;
+};
+
+// The "real" `setHeader` function: set a header, after normalizing the name.
+var setHeader = function(object,name,value) {
+  $H(object)[corsetCase(name)] = value;
+  return object;
+};
+
+// The "real" `setHeaders` function: set multiple headers based on a hash.
+var setHeaders = function(object,hash) {
+  for( var key in hash ) { setHeader(object,key,hash[key]); };
+  return this;
+};
+
+// Here's where we actually bind the functionality to an object. These mixins work by
+// exposing mixin functions. Each function mixes in a specific batch of features.
+module.exports = {
+  
+  // Add getters.
+  getters: function(constructor) {
+    constructor.prototype.getHeader = function(name) { return getHeader(this,name); };
+    constructor.prototype.getHeaders = function() { return getHeaders(this,arguments); };
+  },
+  // Add setters but as "private" methods.
+  privateSetters: function(constructor) {
+    constructor.prototype._setHeader = function(key,value) { return setHeader(this,key,value); };
+    constructor.prototype._setHeaders = function(hash) { return setHeaders(this,hash); };
+  },
+  // Add setters.
+  setters: function(constructor) {
+    constructor.prototype.setHeader = function(key,value) { return setHeader(this,key,value); };
+    constructor.prototype.setHeaders = function(hash) { return setHeaders(this,hash); };
+  },
+  // Add both getters and setters.
+  gettersAndSetters: function(constructor) {
+    constructor.prototype.getHeader = function(name) { return getHeader(this,name); };
+    constructor.prototype.getHeaders = function() { return getHeaders(this,arguments); };
+    constructor.prototype.setHeader = function(key,value) { return setHeader(this,key,value); };
+    constructor.prototype.setHeaders = function(hash) { return setHeaders(this,hash); };
+  },
+};
+
+});
+
+require.define("/node_modules/iconv-lite/package.json", function (require, module, exports, __dirname, __filename) {
+    module.exports = {}
+});
+
+require.define("/node_modules/iconv-lite/index.js", function (require, module, exports, __dirname, __filename) {
+    // Module exports
+var iconv = module.exports = {
+    toEncoding: function(str, encoding) {
+        return iconv.getCodec(encoding).toEncoding(str);
+    },
+    fromEncoding: function(buf, encoding) {
+        return iconv.getCodec(encoding).fromEncoding(buf);
+    },
+    
+    defaultCharUnicode: '�',
+    defaultCharSingleByte: '?',
+    
+    // Get correct codec for given encoding.
+    getCodec: function(encoding) {
+        var enc = encoding || "utf8";
+        var codecOptions = undefined;
+        while (1) {
+            if (getType(enc) === "String")
+                enc = enc.replace(/[- ]/g, "").toLowerCase();
+            var codec = iconv.encodings[enc];
+            var type = getType(codec);
+            if (type === "String") {
+                // Link to other encoding.
+                codecOptions = {originalEncoding: enc};
+                enc = codec;
+            }
+            else if (type === "Object" && codec.type != undefined) {
+                // Options for other encoding.
+                codecOptions = codec;
+                enc = codec.type;
+            } 
+            else if (type === "Function")
+                // Codec itself.
+                return codec(codecOptions);
+            else
+                throw new Error("Encoding not recognized: '" + encoding + "' (searched as: '"+enc+"')");
+        }
+    },
+    
+    // Define basic encodings
+    encodings: {
+        internal: function(options) {
+            return {
+                toEncoding: function(str) {
+                    return new Buffer(ensureString(str), options.originalEncoding);
+                },
+                fromEncoding: function(buf) {
+                    return ensureBuffer(buf).toString(options.originalEncoding);
+                }
+            };
+        },
+        utf8: "internal",
+        ucs2: "internal",
+        binary: "internal",
+        ascii: "internal",
+        base64: "internal",
+        
+        // Codepage single-byte encodings.
+        singlebyte: function(options) {
+            // Prepare chars if needed
+            if (!options.chars || (options.chars.length !== 128 && options.chars.length !== 256))
+                throw new Error("Encoding '"+options.type+"' has incorrect 'chars' (must be of len 128 or 256)");
+            
+            if (options.chars.length === 128)
+                options.chars = asciiString + options.chars;
+            
+            if (!options.charsBuf) {
+                options.charsBuf = new Buffer(options.chars, 'ucs2');
+            }
+            
+            if (!options.revCharsBuf) {
+                options.revCharsBuf = new Buffer(65536);
+                var defChar = iconv.defaultCharSingleByte.charCodeAt(0);
+                for (var i = 0; i < options.revCharsBuf.length; i++)
+                    options.revCharsBuf[i] = defChar;
+                for (var i = 0; i < options.chars.length; i++)
+                    options.revCharsBuf[options.chars.charCodeAt(i)] = i;
+            }
+            
+            return {
+                toEncoding: function(str) {
+                    str = ensureString(str);
+                    
+                    var buf = new Buffer(str.length);
+                    var revCharsBuf = options.revCharsBuf;
+                    for (var i = 0; i < str.length; i++)
+                        buf[i] = revCharsBuf[str.charCodeAt(i)];
+                    
+                    return buf;
+                },
+                fromEncoding: function(buf) {
+                    buf = ensureBuffer(buf);
+                    
+                    // Strings are immutable in JS -> we use ucs2 buffer to speed up computations.
+                    var charsBuf = options.charsBuf;
+                    var newBuf = new Buffer(buf.length*2);
+                    var idx1 = 0, idx2 = 0;
+                    for (var i = 0, _len = buf.length; i < _len; i++) {
+                        idx1 = buf[i]*2; idx2 = i*2;
+                        newBuf[idx2] = charsBuf[idx1];
+                        newBuf[idx2+1] = charsBuf[idx1+1];
+                    }
+                    return newBuf.toString('ucs2');
+                }
+            };
+        },
+
+        // Codepage double-byte encodings.
+        table: function(options) {
+            var table = options.table, key, revCharsTable = options.revCharsTable;
+            if (!table) {
+                throw new Error("Encoding '" + options.type +"' has incorect 'table' option");
+            }
+            if(!revCharsTable) {
+                revCharsTable = options.revCharsTable = {};
+                for (key in table) {
+                    revCharsTable[table[key]] = parseInt(key);
+                }
+            }
+            
+            return {
+                toEncoding: function(str) {
+                    str = ensureString(str);
+                    var strLen = str.length;
+                    var bufLen = strLen;
+                    for (var i = 0; i < strLen; i++)
+                        if (str.charCodeAt(i) >> 7)
+                            bufLen++;
+
+                    var newBuf = new Buffer(bufLen), gbkcode, unicode, 
+                        defaultChar = revCharsTable[iconv.defaultCharUnicode.charCodeAt(0)];
+
+                    for (var i = 0, j = 0; i < strLen; i++) {
+                        unicode = str.charCodeAt(i);
+                        if (unicode >> 7) {
+                            gbkcode = revCharsTable[unicode] || defaultChar;
+                            newBuf[j++] = gbkcode >> 8; //high byte;
+                            newBuf[j++] = gbkcode & 0xFF; //low byte
+                        } else {//ascii
+                            newBuf[j++] = unicode;
+                        }
+                    }
+                    return newBuf;
+                },
+                fromEncoding: function(buf) {
+                    buf = ensureBuffer(buf);
+                    var bufLen = buf.length, strLen = 0;
+                    for (var i = 0; i < bufLen; i++) {
+                        strLen++;
+                        if (buf[i] & 0x80) //the high bit is 1, so this byte is gbkcode's high byte.skip next byte
+                            i++;
+                    }
+                    var newBuf = new Buffer(strLen*2), unicode, gbkcode,
+                        defaultChar = iconv.defaultCharUnicode.charCodeAt(0);
+                    
+                    for (var i = 0, j = 0; i < bufLen; i++, j+=2) {
+                        gbkcode = buf[i];
+                        if (gbkcode & 0x80) {
+                            gbkcode = (gbkcode << 8) + buf[++i];
+                            unicode = table[gbkcode] || defaultChar;
+                        } else {
+                            unicode = gbkcode;
+                        }
+                        newBuf[j] = unicode & 0xFF; //low byte
+                        newBuf[j+1] = unicode >> 8; //high byte
+                    }
+                    return newBuf.toString('ucs2');
+                }
+            }
+        }
+    }
+};
+
+// Add aliases to convert functions
+iconv.encode = iconv.toEncoding;
+iconv.decode = iconv.fromEncoding;
+
+// Load other encodings from files in /encodings dir.
+var encodingsDir = __dirname+"/encodings/",
+    fs = require('fs');
+fs.readdirSync(encodingsDir).forEach(function(file) {
+    if(fs.statSync(encodingsDir + file).isDirectory()) return;
+    var encodings = require(encodingsDir + file)
+    for (var key in encodings)
+        iconv.encodings[key] = encodings[key]
+});
+
+// Utilities
+var asciiString = '\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f'+
+              ' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f';
+
+var ensureBuffer = function(buf) {
+    buf = buf || new Buffer(0);
+    return (buf instanceof Buffer) ? buf : new Buffer(buf.toString(), "utf8");
+}
+
+var ensureString = function(str) {
+    str = str || "";
+    return (str instanceof String) ? str : str.toString((str instanceof Buffer) ? 'utf8' : undefined);
+}
+
+var getType = function(obj) {
+    return Object.prototype.toString.call(obj).slice(8, -1);
+}
+
+
+});
+
+require.define("/node_modules/http-browserify/package.json", function (require, module, exports, __dirname, __filename) {
+    module.exports = {"main":"index.js","browserify":"browser.js"}
+});
+
+require.define("/node_modules/http-browserify/browser.js", function (require, module, exports, __dirname, __filename) {
+    var http = module.exports;
+var EventEmitter = require('events').EventEmitter;
+var Request = require('./lib/request');
+
+http.request = function (params, cb) {
+    if (!params) params = {};
+    if (!params.host) params.host = window.location.host.split(':')[0];
+    if (!params.port) params.port = window.location.port;
+    
+    var req = new Request(new xhrHttp, params);
+    if (cb) req.on('response', cb);
+    return req;
+};
+
+http.get = function (params, cb) {
+    params.method = 'GET';
+    var req = http.request(params, cb);
+    req.end();
+    return req;
+};
+
+var xhrHttp = (function () {
+    if (typeof window === 'undefined') {
+        throw new Error('no window object present');
+    }
+    else if (window.XMLHttpRequest) {
+        return window.XMLHttpRequest;
+    }
+    else if (window.ActiveXObject) {
+        var axs = [
+            'Msxml2.XMLHTTP.6.0',
+            'Msxml2.XMLHTTP.3.0',
+            'Microsoft.XMLHTTP'
+        ];
+        for (var i = 0; i < axs.length; i++) {
+            try {
+                var ax = new(window.ActiveXObject)(axs[i]);
+                return function () {
+                    if (ax) {
+                        var ax_ = ax;
+                        ax = null;
+                        return ax_;
+                    }
+                    else {
+                        return new(window.ActiveXObject)(axs[i]);
+                    }
+                };
+            }
+            catch (e) {}
+        }
+        throw new Error('ajax not supported in this browser')
+    }
+    else {
+        throw new Error('ajax not supported in this browser');
+    }
+})();
+
+http.STATUS_CODES = {
+    100 : 'Continue',
+    101 : 'Switching Protocols',
+    102 : 'Processing', // RFC 2518, obsoleted by RFC 4918
+    200 : 'OK',
+    201 : 'Created',
+    202 : 'Accepted',
+    203 : 'Non-Authoritative Information',
+    204 : 'No Content',
+    205 : 'Reset Content',
+    206 : 'Partial Content',
+    207 : 'Multi-Status', // RFC 4918
+    300 : 'Multiple Choices',
+    301 : 'Moved Permanently',
+    302 : 'Moved Temporarily',
+    303 : 'See Other',
+    304 : 'Not Modified',
+    305 : 'Use Proxy',
+    307 : 'Temporary Redirect',
+    400 : 'Bad Request',
+    401 : 'Unauthorized',
+    402 : 'Payment Required',
+    403 : 'Forbidden',
+    404 : 'Not Found',
+    405 : 'Method Not Allowed',
+    406 : 'Not Acceptable',
+    407 : 'Proxy Authentication Required',
+    408 : 'Request Time-out',
+    409 : 'Conflict',
+    410 : 'Gone',
+    411 : 'Length Required',
+    412 : 'Precondition Failed',
+    413 : 'Request Entity Too Large',
+    414 : 'Request-URI Too Large',
+    415 : 'Unsupported Media Type',
+    416 : 'Requested Range Not Satisfiable',
+    417 : 'Expectation Failed',
+    418 : 'I\'m a teapot', // RFC 2324
+    422 : 'Unprocessable Entity', // RFC 4918
+    423 : 'Locked', // RFC 4918
+    424 : 'Failed Dependency', // RFC 4918
+    425 : 'Unordered Collection', // RFC 4918
+    426 : 'Upgrade Required', // RFC 2817
+    500 : 'Internal Server Error',
+    501 : 'Not Implemented',
+    502 : 'Bad Gateway',
+    503 : 'Service Unavailable',
+    504 : 'Gateway Time-out',
+    505 : 'HTTP Version not supported',
+    506 : 'Variant Also Negotiates', // RFC 2295
+    507 : 'Insufficient Storage', // RFC 4918
+    509 : 'Bandwidth Limit Exceeded',
+    510 : 'Not Extended' // RFC 2774
+};
+
+});
+
+require.define("/node_modules/http-browserify/lib/request.js", function (require, module, exports, __dirname, __filename) {
+    var EventEmitter = require('events').EventEmitter;
+var Response = require('./response');
+var isSafeHeader = require('./isSafeHeader');
+
+var Request = module.exports = function (xhr, params) {
+    var self = this;
+    self.xhr = xhr;
+    self.body = '';
+    
+    var uri = params.host + ':' + params.port + (params.path || '/');
+    
+    xhr.open(
+        params.method || 'GET',
+        (params.scheme || 'http') + '://' + uri,
+        true
+    );
+    
+    if (params.headers) {
+        Object.keys(params.headers).forEach(function (key) {
+            if (!isSafeHeader(key)) return;
+            var value = params.headers[key];
+            if (Array.isArray(value)) {
+                value.forEach(function (v) {
+                    xhr.setRequestHeader(key, v);
+                });
+            }
+            else xhr.setRequestHeader(key, value)
+        });
+    }
+    
+    var res = new Response(xhr);
+    res.on('ready', function () {
+        self.emit('response', res);
+    });
+    
+    xhr.onreadystatechange = function () {
+        res.handle(xhr);
+    };
+};
+
+Request.prototype = new EventEmitter;
+
+Request.prototype.setHeader = function (key, value) {
+    if ((Array.isArray && Array.isArray(value))
+    || value instanceof Array) {
+        for (var i = 0; i < value.length; i++) {
+            this.xhr.setRequestHeader(key, value[i]);
+        }
+    }
+    else {
+        this.xhr.setRequestHeader(key, value);
+    }
+};
+
+Request.prototype.write = function (s) {
+    this.body += s;
+};
+
+Request.prototype.end = function (s) {
+    if (s !== undefined) this.write(s);
+    this.xhr.send(this.body);
+};
+
+});
+
+require.define("/node_modules/http-browserify/lib/response.js", function (require, module, exports, __dirname, __filename) {
+    var EventEmitter = require('events').EventEmitter;
+var isSafeHeader = require('./isSafeHeader');
+
+var Response = module.exports = function (xhr) {
+    this.xhr = xhr;
+    this.offset = 0;
+};
+
+Response.prototype = new EventEmitter;
+
+var capable = {
+    streaming : true,
+    status2 : true
+};
+
+function parseHeaders (xhr) {
+    var lines = xhr.getAllResponseHeaders().split(/\r?\n/);
+    var headers = {};
+    for (var i = 0; i < lines.length; i++) {
+        var line = lines[i];
+        if (line === '') continue;
+        
+        var m = line.match(/^([^:]+):\s*(.*)/);
+        if (m) {
+            var key = m[1].toLowerCase(), value = m[2];
+            
+            if (headers[key] !== undefined) {
+                if ((Array.isArray && Array.isArray(headers[key]))
+                || headers[key] instanceof Array) {
+                    headers[key].push(value);
+                }
+                else {
+                    headers[key] = [ headers[key], value ];
+                }
+            }
+            else {
+                headers[key] = value;
+            }
+        }
+        else {
+            headers[line] = true;
+        }
+    }
+    return headers;
+}
+
+Response.prototype.getHeader = function (key) {
+    var header = this.headers ? this.headers[key.toLowerCase()] : null;
+    if (header) return header;
+
+    // Work around Mozilla bug #608735 [https://bugzil.la/608735], which causes
+    // getAllResponseHeaders() to return {} if the response is a CORS request.
+    // xhr.getHeader still works correctly.
+    if (isSafeHeader(key)) {
+      return this.xhr.getResponseHeader(key);
+    }
+    return null;
+};
+
+Response.prototype.handle = function () {
+    var xhr = this.xhr;
+    if (xhr.readyState === 2 && capable.status2) {
+        try {
+            this.statusCode = xhr.status;
+            this.headers = parseHeaders(xhr);
+        }
+        catch (err) {
+            capable.status2 = false;
+        }
+        
+        if (capable.status2) {
+            this.emit('ready');
+        }
+    }
+    else if (capable.streaming && xhr.readyState === 3) {
+        try {
+            if (!this.statusCode) {
+                this.statusCode = xhr.status;
+                this.headers = parseHeaders(xhr);
+                this.emit('ready');
+            }
+        }
+        catch (err) {}
+        
+        try {
+            this.write();
+        }
+        catch (err) {
+            capable.streaming = false;
+        }
+    }
+    else if (xhr.readyState === 4) {
+        if (!this.statusCode) {
+            this.statusCode = xhr.status;
+            this.emit('ready');
+        }
+        this.write();
+        
+        if (xhr.error) {
+            this.emit('error', xhr.responseText);
+        }
+        else this.emit('end');
+    }
+};
+
+Response.prototype.write = function () {
+    var xhr = this.xhr;
+    if (xhr.responseText.length > this.offset) {
+        this.emit('data', xhr.responseText.slice(this.offset));
+        this.offset = xhr.responseText.length;
+    }
+};
+
+});
+
+require.define("/node_modules/http-browserify/lib/isSafeHeader.js", function (require, module, exports, __dirname, __filename) {
+    // Taken from http://dxr.mozilla.org/mozilla/mozilla-central/content/base/src/nsXMLHttpRequest.cpp.html
+var unsafeHeaders = [
+    "accept-charset",
+    "accept-encoding",
+    "access-control-request-headers",
+    "access-control-request-method",
+    "connection",
+    "content-length",
+    "cookie",
+    "cookie2",
+    "content-transfer-encoding",
+    "date",
+    "expect",
+    "host",
+    "keep-alive",
+    "origin",
+    "referer",
+    "set-cookie",
+    "te",
+    "trailer",
+    "transfer-encoding",
+    "upgrade",
+    "user-agent",
+    "via"
+];
+
+module.exports = function (headerName) {
+    if (!headerName) return false;
+    return (unsafeHeaders.indexOf(headerName.toLowerCase()) === -1)
+};
+
+});
+
+require.alias("http-browserify", "/node_modules/http");
+
+require.alias("http-browserify", "/node_modules/https");
\ No newline at end of file
diff --git a/opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/lib/shred/content.js b/opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/lib/shred/content.js
new file mode 100644 (file)
index 0000000..b8051fe
--- /dev/null
@@ -0,0 +1,193 @@
+
+// The purpose of the `Content` object is to abstract away the data conversions
+// to and from raw content entities as strings. For example, you want to be able
+// to pass in a Javascript object and have it be automatically converted into a
+// JSON string if the `content-type` is set to a JSON-based media type.
+// Conversely, you want to be able to transparently get back a Javascript object
+// in the response if the `content-type` is a JSON-based media-type.
+
+// One limitation of the current implementation is that it [assumes the `charset` is UTF-8](https://github.com/spire-io/shred/issues/5).
+
+// The `Content` constructor takes an options object, which *must* have either a
+// `body` or `data` property and *may* have a `type` property indicating the
+// media type. If there is no `type` attribute, a default will be inferred.
+var Content = function(options) {
+  this.body = options.body;
+  this.data = options.data;
+  this.type = options.type;
+};
+
+Content.prototype = {
+  // Treat `toString()` as asking for the `content.body`. That is, the raw content entity.
+  //
+  //     toString: function() { return this.body; }
+  //
+  // Commented out, but I've forgotten why. :/
+};
+
+
+// `Content` objects have the following attributes:
+Object.defineProperties(Content.prototype,{
+  
+// - **type**. Typically accessed as `content.type`, reflects the `content-type`
+//   header associated with the request or response. If not passed as an options
+//   to the constructor or set explicitly, it will infer the type the `data`
+//   attribute, if possible, and, failing that, will default to `text/plain`.
+  type: {
+    get: function() {
+      if (this._type) {
+        return this._type;
+      } else {
+        if (this._data) {
+          switch(typeof this._data) {
+            case "string": return "text/plain";
+            case "object": return "application/json";
+          }
+        }
+      }
+      return "text/plain";
+    },
+    set: function(value) {
+      this._type = value;
+      return this;
+    },
+    enumerable: true
+  },
+
+// - **data**. Typically accessed as `content.data`, reflects the content entity
+//   converted into Javascript data. This can be a string, if the `type` is, say,
+//   `text/plain`, but can also be a Javascript object. The conversion applied is
+//   based on the `processor` attribute. The `data` attribute can also be set
+//   directly, in which case the conversion will be done the other way, to infer
+//   the `body` attribute.
+  data: {
+    get: function() {
+      if (this._body) {
+        return this.processor.parser(this._body);
+      } else {
+        return this._data;
+      }
+    },
+    set: function(data) {
+      if (this._body&&data) Errors.setDataWithBody(this);
+      this._data = data;
+      return this;
+    },
+    enumerable: true
+  },
+
+// - **body**. Typically accessed as `content.body`, reflects the content entity
+//   as a UTF-8 string. It is the mirror of the `data` attribute. If you set the
+//   `data` attribute, the `body` attribute will be inferred and vice-versa. If
+//   you attempt to set both, an exception is raised.
+  body: {
+    get: function() {
+      if (this._data) {
+        return this.processor.stringify(this._data);
+      } else {
+        return this._body.toString();
+      }
+    },
+    set: function(body) {
+      if (this._data&&body) Errors.setBodyWithData(this);
+      this._body = body;
+      return this;
+    },
+    enumerable: true
+  },
+
+// - **processor**. The functions that will be used to convert to/from `data` and
+//   `body` attributes. You can add processors. The two that are built-in are for
+//   `text/plain`, which is basically an identity transformation and
+//   `application/json` and other JSON-based media types (including custom media
+//   types with `+json`). You can add your own processors. See below.
+  processor: {
+    get: function() {
+      var processor = Content.processors[this.type];
+      if (processor) {
+        return processor;
+      } else {
+        // Return the first processor that matches any part of the
+        // content type. ex: application/vnd.foobar.baz+json will match json.
+        var main = this.type.split(";")[0];
+        var parts = main.split(/\+|\//);
+        for (var i=0, l=parts.length; i < l; i++) {
+          processor = Content.processors[parts[i]]
+        }
+        return processor || {parser:identity,stringify:toString};
+      }
+    },
+    enumerable: true
+  },
+
+// - **length**. Typically accessed as `content.length`, returns the length in
+//   bytes of the raw content entity.
+  length: {
+    get: function() {
+      if (typeof Buffer !== 'undefined') {
+        return Buffer.byteLength(this.body);
+      }
+      return this.body.length;
+    }
+  }
+});
+
+Content.processors = {};
+
+// The `registerProcessor` function allows you to add your own processors to
+// convert content entities. Each processor consists of a Javascript object with
+// two properties:
+// - **parser**. The function used to parse a raw content entity and convert it
+//   into a Javascript data type.
+// - **stringify**. The function used to convert a Javascript data type into a
+//   raw content entity.
+Content.registerProcessor = function(types,processor) {
+  
+// You can pass an array of types that will trigger this processor, or just one.
+// We determine the array via duck-typing here.
+  if (types.forEach) {
+    types.forEach(function(type) {
+      Content.processors[type] = processor;
+    });
+  } else {
+    // If you didn't pass an array, we just use what you pass in.
+    Content.processors[types] = processor;
+  }
+};
+
+// Register the identity processor, which is used for text-based media types.
+var identity = function(x) { return x; }
+  , toString = function(x) { return x.toString(); }
+Content.registerProcessor(
+  ["text/html","text/plain","text"],
+  { parser: identity, stringify: toString });
+
+// Register the JSON processor, which is used for JSON-based media types.
+Content.registerProcessor(
+  ["application/json; charset=utf-8","application/json","json"],
+  {
+    parser: function(string) {
+      return JSON.parse(string);
+    },
+    stringify: function(data) {
+      return JSON.stringify(data); }});
+
+var qs = require('querystring');
+// Register the post processor, which is used for JSON-based media types.
+Content.registerProcessor(
+  ["application/x-www-form-urlencoded"],
+  { parser : qs.parse, stringify : qs.stringify });
+
+// Error functions are defined separately here in an attempt to make the code
+// easier to read.
+var Errors = {
+  setDataWithBody: function(object) {
+    throw new Error("Attempt to set data attribute of a content object " +
+        "when the body attributes was already set.");
+  },
+  setBodyWithData: function(object) {
+    throw new Error("Attempt to set body attribute of a content object " +
+        "when the data attributes was already set.");
+  }
+}
+module.exports = Content;
\ No newline at end of file
diff --git a/opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/lib/swagger.js b/opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/lib/swagger.js
new file mode 100644 (file)
index 0000000..e45e62f
--- /dev/null
@@ -0,0 +1,1244 @@
+// Generated by CoffeeScript 1.6.3
+(function() {
+  var ApiKeyAuthorization, PasswordAuthorization, SwaggerApi, SwaggerAuthorizations, SwaggerHttp, SwaggerModel, SwaggerModelProperty, SwaggerOperation, SwaggerRequest, SwaggerResource,
+    __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
+
+  SwaggerApi = (function() {
+    SwaggerApi.prototype.url = "http://api.wordnik.com/v4/resources.json";
+
+    SwaggerApi.prototype.debug = false;
+
+    SwaggerApi.prototype.basePath = null;
+
+    SwaggerApi.prototype.authorizations = null;
+
+    SwaggerApi.prototype.authorizationScheme = null;
+
+    SwaggerApi.prototype.info = null;
+
+    function SwaggerApi(url, options) {
+      if (options == null) {
+        options = {};
+      }
+      if (url) {
+        if (url.url) {
+          options = url;
+        } else {
+          this.url = url;
+        }
+      } else {
+        options = url;
+      }
+      if (options.url != null) {
+        this.url = options.url;
+      }
+      if (options.success != null) {
+        this.success = options.success;
+      }
+      this.failure = options.failure != null ? options.failure : function() {};
+      this.progress = options.progress != null ? options.progress : function() {};
+      if (options.success != null) {
+        this.build();
+      }
+    }
+
+    SwaggerApi.prototype.build = function() {
+      var e, obj,
+        _this = this;
+      this.progress('fetching resource list: ' + this.url);
+      obj = {
+        url: this.url,
+        method: "get",
+        headers: {},
+        on: {
+          error: function(response) {
+            if (_this.url.substring(0, 4) !== 'http') {
+              return _this.fail('Please specify the protocol for ' + _this.url);
+            } else if (response.status === 0) {
+              return _this.fail('Can\'t read from server.  It may not have the appropriate access-control-origin settings.');
+            } else if (response.status === 404) {
+              return _this.fail('Can\'t read swagger JSON from ' + _this.url);
+            } else {
+              return _this.fail(response.status + ' : ' + response.statusText + ' ' + _this.url);
+            }
+          },
+          response: function(rawResponse) {
+            var response;
+            response = JSON.parse(rawResponse.content.data);
+            _this.swaggerVersion = response.swaggerVersion;
+            if (_this.swaggerVersion === "1.2") {
+              return _this.buildFromSpec(response);
+            } else {
+              return _this.buildFrom1_1Spec(response);
+            }
+          }
+        }
+      };
+      e = {};
+      if (typeof window !== 'undefined') {
+        e = window;
+      } else {
+        e = exports;
+      }
+      e.authorizations.apply(obj);
+      new SwaggerHttp().execute(obj);
+      return this;
+    };
+
+    SwaggerApi.prototype.buildFromSpec = function(response) {
+      var api, isApi, newName, operation, res, resource, _i, _j, _k, _len, _len1, _len2, _ref, _ref1, _ref2;
+      if (response.apiVersion != null) {
+        this.apiVersion = response.apiVersion;
+      }
+      this.apis = {};
+      this.apisArray = [];
+      this.produces = response.produces;
+      this.authSchemes = response.authorizations;
+      if (response.info != null) {
+        this.info = response.info;
+      }
+      isApi = false;
+      _ref = response.apis;
+      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+        api = _ref[_i];
+        if (api.operations) {
+          _ref1 = api.operations;
+          for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
+            operation = _ref1[_j];
+            isApi = true;
+          }
+        }
+      }
+      if (response.basePath) {
+        this.basePath = response.basePath;
+      } else if (this.url.indexOf('?') > 0) {
+        this.basePath = this.url.substring(0, this.url.lastIndexOf('?'));
+      } else {
+        this.basePath = this.url;
+      }
+      if (isApi) {
+        newName = response.resourcePath.replace(/\//g, '');
+        this.resourcePath = response.resourcePath;
+        res = new SwaggerResource(response, this);
+        this.apis[newName] = res;
+        this.apisArray.push(res);
+      } else {
+        _ref2 = response.apis;
+        for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) {
+          resource = _ref2[_k];
+          res = new SwaggerResource(resource, this);
+          this.apis[res.name] = res;
+          this.apisArray.push(res);
+        }
+      }
+      if (this.success) {
+        this.success();
+      }
+      return this;
+    };
+
+    SwaggerApi.prototype.buildFrom1_1Spec = function(response) {
+      var api, isApi, newName, operation, res, resource, _i, _j, _k, _len, _len1, _len2, _ref, _ref1, _ref2;
+      console.log("This API is using a deprecated version of Swagger!  Please see http://github.com/wordnik/swagger-core/wiki for more info");
+      if (response.apiVersion != null) {
+        this.apiVersion = response.apiVersion;
+      }
+      this.apis = {};
+      this.apisArray = [];
+      this.produces = response.produces;
+      if (response.info != null) {
+        this.info = response.info;
+      }
+      isApi = false;
+      _ref = response.apis;
+      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+        api = _ref[_i];
+        if (api.operations) {
+          _ref1 = api.operations;
+          for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
+            operation = _ref1[_j];
+            isApi = true;
+          }
+        }
+      }
+      if (response.basePath) {
+        this.basePath = response.basePath;
+      } else if (this.url.indexOf('?') > 0) {
+        this.basePath = this.url.substring(0, this.url.lastIndexOf('?'));
+      } else {
+        this.basePath = this.url;
+      }
+      if (isApi) {
+        newName = response.resourcePath.replace(/\//g, '');
+        this.resourcePath = response.resourcePath;
+        res = new SwaggerResource(response, this);
+        this.apis[newName] = res;
+        this.apisArray.push(res);
+      } else {
+        _ref2 = response.apis;
+        for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) {
+          resource = _ref2[_k];
+          res = new SwaggerResource(resource, this);
+          this.apis[res.name] = res;
+          this.apisArray.push(res);
+        }
+      }
+      if (this.success) {
+        this.success();
+      }
+      return this;
+    };
+
+    SwaggerApi.prototype.selfReflect = function() {
+      var resource, resource_name, _ref;
+      if (this.apis == null) {
+        return false;
+      }
+      _ref = this.apis;
+      for (resource_name in _ref) {
+        resource = _ref[resource_name];
+        if (resource.ready == null) {
+          return false;
+        }
+      }
+      this.setConsolidatedModels();
+      this.ready = true;
+      if (this.success != null) {
+        return this.success();
+      }
+    };
+
+    SwaggerApi.prototype.fail = function(message) {
+      this.failure(message);
+      throw message;
+    };
+
+    SwaggerApi.prototype.setConsolidatedModels = function() {
+      var model, modelName, resource, resource_name, _i, _len, _ref, _ref1, _results;
+      this.modelsArray = [];
+      this.models = {};
+      _ref = this.apis;
+      for (resource_name in _ref) {
+        resource = _ref[resource_name];
+        for (modelName in resource.models) {
+          if (this.models[modelName] == null) {
+            this.models[modelName] = resource.models[modelName];
+            this.modelsArray.push(resource.models[modelName]);
+          }
+        }
+      }
+      _ref1 = this.modelsArray;
+      _results = [];
+      for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
+        model = _ref1[_i];
+        _results.push(model.setReferencedModels(this.models));
+      }
+      return _results;
+    };
+
+    SwaggerApi.prototype.help = function() {
+      var operation, operation_name, parameter, resource, resource_name, _i, _len, _ref, _ref1, _ref2;
+      _ref = this.apis;
+      for (resource_name in _ref) {
+        resource = _ref[resource_name];
+        console.log(resource_name);
+        _ref1 = resource.operations;
+        for (operation_name in _ref1) {
+          operation = _ref1[operation_name];
+          console.log("  " + operation.nickname);
+          _ref2 = operation.parameters;
+          for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
+            parameter = _ref2[_i];
+            console.log("    " + parameter.name + (parameter.required ? ' (required)' : '') + " - " + parameter.description);
+          }
+        }
+      }
+      return this;
+    };
+
+    return SwaggerApi;
+
+  })();
+
+  SwaggerResource = (function() {
+    SwaggerResource.prototype.api = null;
+
+    SwaggerResource.prototype.produces = null;
+
+    SwaggerResource.prototype.consumes = null;
+
+    function SwaggerResource(resourceObj, api) {
+      var consumes, e, obj, parts, produces,
+        _this = this;
+      this.api = api;
+      this.api = this.api;
+      produces = [];
+      consumes = [];
+      this.path = this.api.resourcePath != null ? this.api.resourcePath : resourceObj.path;
+      this.description = resourceObj.description;
+      parts = this.path.split("/");
+      this.name = parts[parts.length - 1].replace('.{format}', '');
+      this.basePath = this.api.basePath;
+      this.operations = {};
+      this.operationsArray = [];
+      this.modelsArray = [];
+      this.models = {};
+      if ((resourceObj.apis != null) && (this.api.resourcePath != null)) {
+        this.addApiDeclaration(resourceObj);
+      } else {
+        if (this.path == null) {
+          this.api.fail("SwaggerResources must have a path.");
+        }
+        if (this.path.substring(0, 4) === 'http') {
+          this.url = this.path.replace('{format}', 'json');
+        } else {
+          this.url = this.api.basePath + this.path.replace('{format}', 'json');
+        }
+        this.api.progress('fetching resource ' + this.name + ': ' + this.url);
+        obj = {
+          url: this.url,
+          method: "get",
+          headers: {},
+          on: {
+            error: function(response) {
+              return _this.api.fail("Unable to read api '" + _this.name + "' from path " + _this.url + " (server returned " + response.statusText + ")");
+            },
+            response: function(rawResponse) {
+              var response;
+              response = JSON.parse(rawResponse.content.data);
+              return _this.addApiDeclaration(response);
+            }
+          }
+        };
+        e = {};
+        if (typeof window !== 'undefined') {
+          e = window;
+        } else {
+          e = exports;
+        }
+        e.authorizations.apply(obj);
+        new SwaggerHttp().execute(obj);
+      }
+    }
+
+    SwaggerResource.prototype.addApiDeclaration = function(response) {
+      var endpoint, _i, _len, _ref;
+      if (response.produces != null) {
+        this.produces = response.produces;
+      }
+      if (response.consumes != null) {
+        this.consumes = response.consumes;
+      }
+      if ((response.basePath != null) && response.basePath.replace(/\s/g, '').length > 0) {
+        this.basePath = response.basePath;
+      }
+      this.addModels(response.models);
+      if (response.apis) {
+        _ref = response.apis;
+        for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+          endpoint = _ref[_i];
+          this.addOperations(endpoint.path, endpoint.operations, response.consumes, response.produces);
+        }
+      }
+      this.api[this.name] = this;
+      this.ready = true;
+      return this.api.selfReflect();
+    };
+
+    SwaggerResource.prototype.addModels = function(models) {
+      var model, modelName, swaggerModel, _i, _len, _ref, _results;
+      if (models != null) {
+        for (modelName in models) {
+          if (this.models[modelName] == null) {
+            swaggerModel = new SwaggerModel(modelName, models[modelName]);
+            this.modelsArray.push(swaggerModel);
+            this.models[modelName] = swaggerModel;
+          }
+        }
+        _ref = this.modelsArray;
+        _results = [];
+        for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+          model = _ref[_i];
+          _results.push(model.setReferencedModels(this.models));
+        }
+        return _results;
+      }
+    };
+
+    SwaggerResource.prototype.addOperations = function(resource_path, ops, consumes, produces) {
+      var method, o, op, r, ref, responseMessages, type, _i, _j, _len, _len1, _results;
+      if (ops) {
+        _results = [];
+        for (_i = 0, _len = ops.length; _i < _len; _i++) {
+          o = ops[_i];
+          consumes = this.consumes;
+          produces = this.produces;
+          if (o.consumes != null) {
+            consumes = o.consumes;
+          } else {
+            consumes = this.consumes;
+          }
+          if (o.produces != null) {
+            produces = o.produces;
+          } else {
+            produces = this.produces;
+          }
+          type = o.type || o.responseClass;
+          if (type === "array") {
+            ref = null;
+            if (o.items) {
+              ref = o.items["type"] || o.items["$ref"];
+            }
+            type = "array[" + ref + "]";
+          }
+          responseMessages = o.responseMessages;
+          method = o.method;
+          if (o.httpMethod) {
+            method = o.httpMethod;
+          }
+          if (o.supportedContentTypes) {
+            consumes = o.supportedContentTypes;
+          }
+          if (o.errorResponses) {
+            responseMessages = o.errorResponses;
+            for (_j = 0, _len1 = responseMessages.length; _j < _len1; _j++) {
+              r = responseMessages[_j];
+              r.message = r.reason;
+              r.reason = null;
+            }
+          }
+          o.nickname = this.sanitize(o.nickname);
+          op = new SwaggerOperation(o.nickname, resource_path, method, o.parameters, o.summary, o.notes, type, responseMessages, this, consumes, produces);
+          this.operations[op.nickname] = op;
+          _results.push(this.operationsArray.push(op));
+        }
+        return _results;
+      }
+    };
+
+    SwaggerResource.prototype.sanitize = function(nickname) {
+      var op;
+      op = nickname.replace(/[\s!@#$%^&*()_+=\[{\]};:<>|./?,\\'""-]/g, '_');
+      op = op.replace(/((_){2,})/g, '_');
+      op = op.replace(/^(_)*/g, '');
+      op = op.replace(/([_])*$/g, '');
+      return op;
+    };
+
+    SwaggerResource.prototype.help = function() {
+      var msg, operation, operation_name, parameter, _i, _len, _ref, _ref1, _results;
+      _ref = this.operations;
+      _results = [];
+      for (operation_name in _ref) {
+        operation = _ref[operation_name];
+        msg = "  " + operation.nickname;
+        _ref1 = operation.parameters;
+        for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
+          parameter = _ref1[_i];
+          msg.concat("    " + parameter.name + (parameter.required ? ' (required)' : '') + " - " + parameter.description);
+        }
+        _results.push(msg);
+      }
+      return _results;
+    };
+
+    return SwaggerResource;
+
+  })();
+
+  SwaggerModel = (function() {
+    function SwaggerModel(modelName, obj) {
+      var prop, propertyName, value;
+      this.name = obj.id != null ? obj.id : modelName;
+      this.properties = [];
+      for (propertyName in obj.properties) {
+        if (obj.required != null) {
+          for (value in obj.required) {
+            if (propertyName === obj.required[value]) {
+              obj.properties[propertyName].required = true;
+            }
+          }
+        }
+        prop = new SwaggerModelProperty(propertyName, obj.properties[propertyName]);
+        this.properties.push(prop);
+      }
+    }
+
+    SwaggerModel.prototype.setReferencedModels = function(allModels) {
+      var prop, type, _i, _len, _ref, _results;
+      _ref = this.properties;
+      _results = [];
+      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+        prop = _ref[_i];
+        type = prop.type || prop.dataType;
+        if (allModels[type] != null) {
+          _results.push(prop.refModel = allModels[type]);
+        } else if ((prop.refDataType != null) && (allModels[prop.refDataType] != null)) {
+          _results.push(prop.refModel = allModels[prop.refDataType]);
+        } else {
+          _results.push(void 0);
+        }
+      }
+      return _results;
+    };
+
+    SwaggerModel.prototype.getMockSignature = function(modelsToIgnore) {
+      var classClose, classOpen, prop, propertiesStr, returnVal, strong, strongClose, stronger, _i, _j, _len, _len1, _ref, _ref1;
+      propertiesStr = [];
+      _ref = this.properties;
+      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+        prop = _ref[_i];
+        propertiesStr.push(prop.toString());
+      }
+      strong = '<span class="strong">';
+      stronger = '<span class="stronger">';
+      strongClose = '</span>';
+      classOpen = strong + this.name + ' {' + strongClose;
+      classClose = strong + '}' + strongClose;
+      returnVal = classOpen + '<div>' + propertiesStr.join(',</div><div>') + '</div>' + classClose;
+      if (!modelsToIgnore) {
+        modelsToIgnore = [];
+      }
+      modelsToIgnore.push(this);
+      _ref1 = this.properties;
+      for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
+        prop = _ref1[_j];
+        if ((prop.refModel != null) && (modelsToIgnore.indexOf(prop.refModel)) === -1) {
+          returnVal = returnVal + ('<br>' + prop.refModel.getMockSignature(modelsToIgnore));
+        }
+      }
+      return returnVal;
+    };
+
+    SwaggerModel.prototype.createJSONSample = function(modelsToIgnore) {
+      var prop, result, _i, _len, _ref;
+      result = {};
+      modelsToIgnore = modelsToIgnore || [];
+      modelsToIgnore.push(this.name);
+      _ref = this.properties;
+      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+        prop = _ref[_i];
+        result[prop.name] = prop.getSampleValue(modelsToIgnore);
+      }
+      modelsToIgnore.pop(this.name);
+      return result;
+    };
+
+    return SwaggerModel;
+
+  })();
+
+  SwaggerModelProperty = (function() {
+    function SwaggerModelProperty(name, obj) {
+      this.name = name;
+      this.dataType = obj.type || obj.dataType || obj["$ref"];
+      this.isCollection = this.dataType && (this.dataType.toLowerCase() === 'array' || this.dataType.toLowerCase() === 'list' || this.dataType.toLowerCase() === 'set');
+      this.descr = obj.description;
+      this.required = obj.required;
+      if (obj.items != null) {
+        if (obj.items.type != null) {
+          this.refDataType = obj.items.type;
+        }
+        if (obj.items.$ref != null) {
+          this.refDataType = obj.items.$ref;
+        }
+      }
+      this.dataTypeWithRef = this.refDataType != null ? this.dataType + '[' + this.refDataType + ']' : this.dataType;
+      if (obj.allowableValues != null) {
+        this.valueType = obj.allowableValues.valueType;
+        this.values = obj.allowableValues.values;
+        if (this.values != null) {
+          this.valuesString = "'" + this.values.join("' or '") + "'";
+        }
+      }
+      if (obj["enum"] != null) {
+        this.valueType = "string";
+        this.values = obj["enum"];
+        if (this.values != null) {
+          this.valueString = "'" + this.values.join("' or '") + "'";
+        }
+      }
+    }
+
+    SwaggerModelProperty.prototype.getSampleValue = function(modelsToIgnore) {
+      var result;
+      if ((this.refModel != null) && (modelsToIgnore.indexOf(this.refModel.name) === -1)) {
+        result = this.refModel.createJSONSample(modelsToIgnore);
+      } else {
+        if (this.isCollection) {
+          result = this.refDataType;
+        } else {
+          result = this.dataType;
+        }
+      }
+      if (this.isCollection) {
+        return [result];
+      } else {
+        return result;
+      }
+    };
+
+    SwaggerModelProperty.prototype.toString = function() {
+      var req, str;
+      req = this.required ? 'propReq' : 'propOpt';
+      str = '<span class="propName ' + req + '">' + this.name + '</span> (<span class="propType">' + this.dataTypeWithRef + '</span>';
+      if (!this.required) {
+        str += ', <span class="propOptKey">optional</span>';
+      }
+      str += ')';
+      if (this.values != null) {
+        str += " = <span class='propVals'>['" + this.values.join("' or '") + "']</span>";
+      }
+      if (this.descr != null) {
+        str += ': <span class="propDesc">' + this.descr + '</span>';
+      }
+      return str;
+    };
+
+    return SwaggerModelProperty;
+
+  })();
+
+  SwaggerOperation = (function() {
+    function SwaggerOperation(nickname, path, method, parameters, summary, notes, type, responseMessages, resource, consumes, produces) {
+      var parameter, v, _i, _j, _k, _len, _len1, _len2, _ref, _ref1, _ref2, _ref3,
+        _this = this;
+      this.nickname = nickname;
+      this.path = path;
+      this.method = method;
+      this.parameters = parameters != null ? parameters : [];
+      this.summary = summary;
+      this.notes = notes;
+      this.type = type;
+      this.responseMessages = responseMessages;
+      this.resource = resource;
+      this.consumes = consumes;
+      this.produces = produces;
+      this["do"] = __bind(this["do"], this);
+      if (this.nickname == null) {
+        this.resource.api.fail("SwaggerOperations must have a nickname.");
+      }
+      if (this.path == null) {
+        this.resource.api.fail("SwaggerOperation " + nickname + " is missing path.");
+      }
+      if (this.method == null) {
+        this.resource.api.fail("SwaggerOperation " + nickname + " is missing method.");
+      }
+      this.path = this.path.replace('{format}', 'json');
+      this.method = this.method.toLowerCase();
+      this.isGetMethod = this.method === "get";
+      this.resourceName = this.resource.name;
+      if (((_ref = this.type) != null ? _ref.toLowerCase() : void 0) === 'void') {
+        this.type = void 0;
+      }
+      if (this.type != null) {
+        this.responseClassSignature = this.getSignature(this.type, this.resource.models);
+        this.responseSampleJSON = this.getSampleJSON(this.type, this.resource.models);
+      }
+      this.responseMessages = this.responseMessages || [];
+      _ref1 = this.parameters;
+      for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
+        parameter = _ref1[_i];
+        parameter.name = parameter.name || parameter.type || parameter.dataType;
+        type = parameter.type || parameter.dataType;
+        if (type.toLowerCase() === 'boolean') {
+          parameter.allowableValues = {};
+          parameter.allowableValues.values = ["true", "false"];
+        }
+        parameter.signature = this.getSignature(type, this.resource.models);
+        parameter.sampleJSON = this.getSampleJSON(type, this.resource.models);
+        if (parameter["enum"] != null) {
+          parameter.isList = true;
+          parameter.allowableValues = {};
+          parameter.allowableValues.descriptiveValues = [];
+          _ref2 = parameter["enum"];
+          for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {
+            v = _ref2[_j];
+            if ((parameter.defaultValue != null) && parameter.defaultValue === v) {
+              parameter.allowableValues.descriptiveValues.push({
+                value: v,
+                isDefault: true
+              });
+            } else {
+              parameter.allowableValues.descriptiveValues.push({
+                value: v,
+                isDefault: false
+              });
+            }
+          }
+        }
+        if (parameter.allowableValues != null) {
+          if (parameter.allowableValues.valueType === "RANGE") {
+            parameter.isRange = true;
+          } else {
+            parameter.isList = true;
+          }
+          if (parameter.allowableValues.values != null) {
+            parameter.allowableValues.descriptiveValues = [];
+            _ref3 = parameter.allowableValues.values;
+            for (_k = 0, _len2 = _ref3.length; _k < _len2; _k++) {
+              v = _ref3[_k];
+              if ((parameter.defaultValue != null) && parameter.defaultValue === v) {
+                parameter.allowableValues.descriptiveValues.push({
+                  value: v,
+                  isDefault: true
+                });
+              } else {
+                parameter.allowableValues.descriptiveValues.push({
+                  value: v,
+                  isDefault: false
+                });
+              }
+            }
+          }
+        }
+      }
+      this.resource[this.nickname] = function(args, callback, error) {
+        return _this["do"](args, callback, error);
+      };
+      this.resource[this.nickname].help = function() {
+        return _this.help();
+      };
+    }
+
+    SwaggerOperation.prototype.isListType = function(type) {
+      if (type.indexOf('[') >= 0) {
+        return type.substring(type.indexOf('[') + 1, type.indexOf(']'));
+      } else {
+        return void 0;
+      }
+    };
+
+    SwaggerOperation.prototype.getSignature = function(type, models) {
+      var isPrimitive, listType;
+      listType = this.isListType(type);
+      isPrimitive = ((listType != null) && models[listType]) || (models[type] != null) ? false : true;
+      if (isPrimitive) {
+        return type;
+      } else {
+        if (listType != null) {
+          return models[listType].getMockSignature();
+        } else {
+          return models[type].getMockSignature();
+        }
+      }
+    };
+
+    SwaggerOperation.prototype.getSampleJSON = function(type, models) {
+      var isPrimitive, listType, val;
+      listType = this.isListType(type);
+      isPrimitive = ((listType != null) && models[listType]) || (models[type] != null) ? false : true;
+      val = isPrimitive ? void 0 : (listType != null ? models[listType].createJSONSample() : models[type].createJSONSample());
+      if (val) {
+        val = listType ? [val] : val;
+        return JSON.stringify(val, null, 2);
+      }
+    };
+
+    SwaggerOperation.prototype["do"] = function(args, opts, callback, error) {
+      var key, param, params, possibleParams, req, requestContentType, responseContentType, value, _i, _len, _ref;
+      if (args == null) {
+        args = {};
+      }
+      if (opts == null) {
+        opts = {};
+      }
+      requestContentType = null;
+      responseContentType = null;
+      if ((typeof args) === "function") {
+        error = opts;
+        callback = args;
+        args = {};
+      }
+      if ((typeof opts) === "function") {
+        error = callback;
+        callback = opts;
+      }
+      if (error == null) {
+        error = function(xhr, textStatus, error) {
+          return console.log(xhr, textStatus, error);
+        };
+      }
+      if (callback == null) {
+        callback = function(data) {
+          var content;
+          content = null;
+          if (data.content != null) {
+            content = data.content.data;
+          } else {
+            content = "no data";
+          }
+          return console.log("default callback: " + content);
+        };
+      }
+      params = {};
+      params.headers = [];
+      if (args.headers != null) {
+        params.headers = args.headers;
+        delete args.headers;
+      }
+      _ref = this.parameters;
+      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+        param = _ref[_i];
+        if (param.paramType === "header") {
+          if (args[param.name]) {
+            params.headers[param.name] = args[param.name];
+          }
+        }
+      }
+      if (args.body != null) {
+        params.body = args.body;
+        delete args.body;
+      }
+      possibleParams = (function() {
+        var _j, _len1, _ref1, _results;
+        _ref1 = this.parameters;
+        _results = [];
+        for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
+          param = _ref1[_j];
+          if (param.paramType === "form" || param.paramType.toLowerCase() === "file") {
+            _results.push(param);
+          }
+        }
+        return _results;
+      }).call(this);
+      if (possibleParams) {
+        for (key in possibleParams) {
+          value = possibleParams[key];
+          if (args[value.name]) {
+            params[value.name] = args[value.name];
+          }
+        }
+      }
+      req = new SwaggerRequest(this.method, this.urlify(args), params, opts, callback, error, this);
+      if (opts.mock != null) {
+        return req;
+      } else {
+        return true;
+      }
+    };
+
+    SwaggerOperation.prototype.pathJson = function() {
+      return this.path.replace("{format}", "json");
+    };
+
+    SwaggerOperation.prototype.pathXml = function() {
+      return this.path.replace("{format}", "xml");
+    };
+
+    SwaggerOperation.prototype.urlify = function(args) {
+      var param, queryParams, reg, url, _i, _j, _len, _len1, _ref, _ref1;
+      url = this.resource.basePath + this.pathJson();
+      _ref = this.parameters;
+      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+        param = _ref[_i];
+        if (param.paramType === 'path') {
+          if (args[param.name]) {
+            reg = new RegExp('\{' + param.name + '[^\}]*\}', 'gi');
+            url = url.replace(reg, encodeURIComponent(args[param.name]));
+            delete args[param.name];
+          } else {
+            throw "" + param.name + " is a required path param.";
+          }
+        }
+      }
+      queryParams = "";
+      _ref1 = this.parameters;
+      for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
+        param = _ref1[_j];
+        if (param.paramType === 'query') {
+          if (args[param.name]) {
+            if (queryParams !== "") {
+              queryParams += "&";
+            }
+            queryParams += encodeURIComponent(param.name) + '=' + encodeURIComponent(args[param.name]);
+          }
+        }
+      }
+      if ((queryParams != null) && queryParams.length > 0) {
+        url += "?" + queryParams;
+      }
+      return url;
+    };
+
+    SwaggerOperation.prototype.supportHeaderParams = function() {
+      return this.resource.api.supportHeaderParams;
+    };
+
+    SwaggerOperation.prototype.supportedSubmitMethods = function() {
+      return this.resource.api.supportedSubmitMethods;
+    };
+
+    SwaggerOperation.prototype.getQueryParams = function(args) {
+      return this.getMatchingParams(['query'], args);
+    };
+
+    SwaggerOperation.prototype.getHeaderParams = function(args) {
+      return this.getMatchingParams(['header'], args);
+    };
+
+    SwaggerOperation.prototype.getMatchingParams = function(paramTypes, args) {
+      var matchingParams, name, param, value, _i, _len, _ref, _ref1;
+      matchingParams = {};
+      _ref = this.parameters;
+      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+        param = _ref[_i];
+        if (args && args[param.name]) {
+          matchingParams[param.name] = args[param.name];
+        }
+      }
+      _ref1 = this.resource.api.headers;
+      for (name in _ref1) {
+        value = _ref1[name];
+        matchingParams[name] = value;
+      }
+      return matchingParams;
+    };
+
+    SwaggerOperation.prototype.help = function() {
+      var msg, parameter, _i, _len, _ref;
+      msg = "";
+      _ref = this.parameters;
+      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+        parameter = _ref[_i];
+        if (msg !== "") {
+          msg += "\n";
+        }
+        msg += "* " + parameter.name + (parameter.required ? ' (required)' : '') + " - " + parameter.description;
+      }
+      return msg;
+    };
+
+    return SwaggerOperation;
+
+  })();
+
+  SwaggerRequest = (function() {
+    function SwaggerRequest(type, url, params, opts, successCallback, errorCallback, operation, execution) {
+      var body, e, fields, headers, key, myHeaders, name, obj, param, parent, possibleParams, requestContentType, responseContentType, urlEncoded, value, values,
+        _this = this;
+      this.type = type;
+      this.url = url;
+      this.params = params;
+      this.opts = opts;
+      this.successCallback = successCallback;
+      this.errorCallback = errorCallback;
+      this.operation = operation;
+      this.execution = execution;
+      if (this.type == null) {
+        throw "SwaggerRequest type is required (get/post/put/delete).";
+      }
+      if (this.url == null) {
+        throw "SwaggerRequest url is required.";
+      }
+      if (this.successCallback == null) {
+        throw "SwaggerRequest successCallback is required.";
+      }
+      if (this.errorCallback == null) {
+        throw "SwaggerRequest error callback is required.";
+      }
+      if (this.operation == null) {
+        throw "SwaggerRequest operation is required.";
+      }
+      this.type = this.type.toUpperCase();
+      headers = params.headers;
+      myHeaders = {};
+      body = params.body;
+      parent = params["parent"];
+      requestContentType = "application/json";
+      if (body && (this.type === "POST" || this.type === "PUT" || this.type === "PATCH")) {
+        if (this.opts.requestContentType) {
+          requestContentType = this.opts.requestContentType;
+        }
+      } else {
+        if (((function() {
+          var _i, _len, _ref, _results;
+          _ref = this.operation.parameters;
+          _results = [];
+          for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+            param = _ref[_i];
+            if (param.paramType === "form") {
+              _results.push(param);
+            }
+          }
+          return _results;
+        }).call(this)).length > 0) {
+          type = param.type || param.dataType;
+          if (((function() {
+            var _i, _len, _ref, _results;
+            _ref = this.operation.parameters;
+            _results = [];
+            for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+              param = _ref[_i];
+              if (type.toLowerCase() === "file") {
+                _results.push(param);
+              }
+            }
+            return _results;
+          }).call(this)).length > 0) {
+            requestContentType = "multipart/form-data";
+          } else {
+            requestContentType = "application/x-www-form-urlencoded";
+          }
+        } else if (this.type !== "DELETE") {
+          requestContentType = null;
+        }
+      }
+      if (requestContentType && this.operation.consumes) {
+        if (this.operation.consumes.indexOf(requestContentType) === -1) {
+          console.log("server doesn't consume " + requestContentType + ", try " + JSON.stringify(this.operation.consumes));
+          if (this.requestContentType === null) {
+            requestContentType = this.operation.consumes[0];
+          }
+        }
+      }
+      responseContentType = null;
+      if (this.type === "POST" || this.type === "GET" || this.type === "PATCH") {
+        if (this.opts.responseContentType) {
+          responseContentType = this.opts.responseContentType;
+        } else {
+          responseContentType = "application/json";
+        }
+      } else {
+        responseContentType = null;
+      }
+      if (responseContentType && this.operation.produces) {
+        if (this.operation.produces.indexOf(responseContentType) === -1) {
+          console.log("server can't produce " + responseContentType);
+        }
+      }
+      if (requestContentType && requestContentType.indexOf("application/x-www-form-urlencoded") === 0) {
+        fields = {};
+        possibleParams = (function() {
+          var _i, _len, _ref, _results;
+          _ref = this.operation.parameters;
+          _results = [];
+          for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+            param = _ref[_i];
+            if (param.paramType === "form") {
+              _results.push(param);
+            }
+          }
+          return _results;
+        }).call(this);
+        values = {};
+        for (key in possibleParams) {
+          value = possibleParams[key];
+          if (this.params[value.name]) {
+            values[value.name] = this.params[value.name];
+          }
+        }
+        urlEncoded = "";
+        for (key in values) {
+          value = values[key];
+          if (urlEncoded !== "") {
+            urlEncoded += "&";
+          }
+          urlEncoded += encodeURIComponent(key) + '=' + encodeURIComponent(value);
+        }
+        body = urlEncoded;
+      }
+      for (name in headers) {
+        myHeaders[name] = headers[name];
+      }
+      if (requestContentType) {
+        myHeaders["Content-Type"] = requestContentType;
+      }
+      if (responseContentType) {
+        myHeaders["Accept"] = responseContentType;
+      }
+      if (!((headers != null) && (headers.mock != null))) {
+        obj = {
+          url: this.url,
+          method: this.type,
+          headers: myHeaders,
+          body: body,
+          on: {
+            error: function(response) {
+              return _this.errorCallback(response, _this.opts.parent);
+            },
+            redirect: function(response) {
+              return _this.successCallback(response, _this.opts.parent);
+            },
+            307: function(response) {
+              return _this.successCallback(response, _this.opts.parent);
+            },
+            response: function(response) {
+              return _this.successCallback(response, _this.opts.parent);
+            }
+          }
+        };
+        e = {};
+        if (typeof window !== 'undefined') {
+          e = window;
+        } else {
+          e = exports;
+        }
+        e.authorizations.apply(obj);
+        if (opts.mock == null) {
+          new SwaggerHttp().execute(obj);
+        } else {
+          console.log(obj);
+          return obj;
+        }
+      }
+    }
+
+    SwaggerRequest.prototype.asCurl = function() {
+      var header_args, k, v;
+      header_args = (function() {
+        var _ref, _results;
+        _ref = this.headers;
+        _results = [];
+        for (k in _ref) {
+          v = _ref[k];
+          _results.push("--header \"" + k + ": " + v + "\"");
+        }
+        return _results;
+      }).call(this);
+      return "curl " + (header_args.join(" ")) + " " + this.url;
+    };
+
+    return SwaggerRequest;
+
+  })();
+
+  SwaggerHttp = (function() {
+    SwaggerHttp.prototype.Shred = null;
+
+    SwaggerHttp.prototype.shred = null;
+
+    SwaggerHttp.prototype.content = null;
+
+    function SwaggerHttp() {
+      var identity, toString,
+        _this = this;
+      if (typeof window !== 'undefined') {
+        this.Shred = require("./shred");
+      } else {
+        this.Shred = require("shred");
+      }
+      this.shred = new this.Shred();
+      identity = function(x) {
+        return x;
+      };
+      toString = function(x) {
+        return x.toString();
+      };
+      if (typeof window !== 'undefined') {
+        this.content = require("./shred/content");
+        this.content.registerProcessor(["application/json; charset=utf-8", "application/json", "json"], {
+          parser: identity,
+          stringify: toString
+        });
+      } else {
+        this.Shred.registerProcessor(["application/json; charset=utf-8", "application/json", "json"], {
+          parser: identity,
+          stringify: toString
+        });
+      }
+    }
+
+    SwaggerHttp.prototype.execute = function(obj) {
+      return this.shred.request(obj);
+    };
+
+    return SwaggerHttp;
+
+  })();
+
+  SwaggerAuthorizations = (function() {
+    SwaggerAuthorizations.prototype.authz = null;
+
+    function SwaggerAuthorizations() {
+      this.authz = {};
+    }
+
+    SwaggerAuthorizations.prototype.add = function(name, auth) {
+      this.authz[name] = auth;
+      return auth;
+    };
+
+    SwaggerAuthorizations.prototype.apply = function(obj) {
+      var key, value, _ref, _results;
+      _ref = this.authz;
+      _results = [];
+      for (key in _ref) {
+        value = _ref[key];
+        _results.push(value.apply(obj));
+      }
+      return _results;
+    };
+
+    return SwaggerAuthorizations;
+
+  })();
+
+  ApiKeyAuthorization = (function() {
+    ApiKeyAuthorization.prototype.type = null;
+
+    ApiKeyAuthorization.prototype.name = null;
+
+    ApiKeyAuthorization.prototype.value = null;
+
+    function ApiKeyAuthorization(name, value, type) {
+      this.name = name;
+      this.value = value;
+      this.type = type;
+    }
+
+    ApiKeyAuthorization.prototype.apply = function(obj) {
+      if (this.type === "query") {
+        if (obj.url.indexOf('?') > 0) {
+          obj.url = obj.url + "&" + this.name + "=" + this.value;
+        } else {
+          obj.url = obj.url + "?" + this.name + "=" + this.value;
+        }
+        return true;
+      } else if (this.type === "header") {
+        return obj.headers[this.name] = this.value;
+      }
+    };
+
+    return ApiKeyAuthorization;
+
+  })();
+
+  PasswordAuthorization = (function() {
+    PasswordAuthorization.prototype.name = null;
+
+    PasswordAuthorization.prototype.username = null;
+
+    PasswordAuthorization.prototype.password = null;
+
+    function PasswordAuthorization(name, username, password) {
+      this.name = name;
+      this.username = username;
+      this.password = password;
+    }
+
+    PasswordAuthorization.prototype.apply = function(obj) {
+      return obj.headers["Authorization"] = "Basic " + btoa(this.username + ":" + this.password);
+    };
+
+    return PasswordAuthorization;
+
+  })();
+
+  this.SwaggerApi = SwaggerApi;
+
+  this.SwaggerResource = SwaggerResource;
+
+  this.SwaggerOperation = SwaggerOperation;
+
+  this.SwaggerRequest = SwaggerRequest;
+
+  this.SwaggerModelProperty = SwaggerModelProperty;
+
+  this.ApiKeyAuthorization = ApiKeyAuthorization;
+
+  this.PasswordAuthorization = PasswordAuthorization;
+
+  this.authorizations = new SwaggerAuthorizations();
+
+}).call(this);
diff --git a/opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/lib/underscore-min.js b/opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/lib/underscore-min.js
new file mode 100644 (file)
index 0000000..5a0cb3b
--- /dev/null
@@ -0,0 +1,32 @@
+// Underscore.js 1.3.3
+// (c) 2009-2012 Jeremy Ashkenas, DocumentCloud Inc.
+// Underscore is freely distributable under the MIT license.
+// Portions of Underscore are inspired or borrowed from Prototype,
+// Oliver Steele's Functional, and John Resig's Micro-Templating.
+// For all details and documentation:
+// http://documentcloud.github.com/underscore
+(function(){function r(a,c,d){if(a===c)return 0!==a||1/a==1/c;if(null==a||null==c)return a===c;a._chain&&(a=a._wrapped);c._chain&&(c=c._wrapped);if(a.isEqual&&b.isFunction(a.isEqual))return a.isEqual(c);if(c.isEqual&&b.isFunction(c.isEqual))return c.isEqual(a);var e=l.call(a);if(e!=l.call(c))return!1;switch(e){case "[object String]":return a==""+c;case "[object Number]":return a!=+a?c!=+c:0==a?1/a==1/c:a==+c;case "[object Date]":case "[object Boolean]":return+a==+c;case "[object RegExp]":return a.source==
+c.source&&a.global==c.global&&a.multiline==c.multiline&&a.ignoreCase==c.ignoreCase}if("object"!=typeof a||"object"!=typeof c)return!1;for(var f=d.length;f--;)if(d[f]==a)return!0;d.push(a);var f=0,g=!0;if("[object Array]"==e){if(f=a.length,g=f==c.length)for(;f--&&(g=f in a==f in c&&r(a[f],c[f],d)););}else{if("constructor"in a!="constructor"in c||a.constructor!=c.constructor)return!1;for(var h in a)if(b.has(a,h)&&(f++,!(g=b.has(c,h)&&r(a[h],c[h],d))))break;if(g){for(h in c)if(b.has(c,h)&&!f--)break;
+g=!f}}d.pop();return g}var s=this,I=s._,o={},k=Array.prototype,p=Object.prototype,i=k.slice,J=k.unshift,l=p.toString,K=p.hasOwnProperty,y=k.forEach,z=k.map,A=k.reduce,B=k.reduceRight,C=k.filter,D=k.every,E=k.some,q=k.indexOf,F=k.lastIndexOf,p=Array.isArray,L=Object.keys,t=Function.prototype.bind,b=function(a){return new m(a)};"undefined"!==typeof exports?("undefined"!==typeof module&&module.exports&&(exports=module.exports=b),exports._=b):s._=b;b.VERSION="1.3.3";var j=b.each=b.forEach=function(a,
+c,d){if(a!=null)if(y&&a.forEach===y)a.forEach(c,d);else if(a.length===+a.length)for(var e=0,f=a.length;e<f;e++){if(e in a&&c.call(d,a[e],e,a)===o)break}else for(e in a)if(b.has(a,e)&&c.call(d,a[e],e,a)===o)break};b.map=b.collect=function(a,c,b){var e=[];if(a==null)return e;if(z&&a.map===z)return a.map(c,b);j(a,function(a,g,h){e[e.length]=c.call(b,a,g,h)});if(a.length===+a.length)e.length=a.length;return e};b.reduce=b.foldl=b.inject=function(a,c,d,e){var f=arguments.length>2;a==null&&(a=[]);if(A&&
+a.reduce===A){e&&(c=b.bind(c,e));return f?a.reduce(c,d):a.reduce(c)}j(a,function(a,b,i){if(f)d=c.call(e,d,a,b,i);else{d=a;f=true}});if(!f)throw new TypeError("Reduce of empty array with no initial value");return d};b.reduceRight=b.foldr=function(a,c,d,e){var f=arguments.length>2;a==null&&(a=[]);if(B&&a.reduceRight===B){e&&(c=b.bind(c,e));return f?a.reduceRight(c,d):a.reduceRight(c)}var g=b.toArray(a).reverse();e&&!f&&(c=b.bind(c,e));return f?b.reduce(g,c,d,e):b.reduce(g,c)};b.find=b.detect=function(a,
+c,b){var e;G(a,function(a,g,h){if(c.call(b,a,g,h)){e=a;return true}});return e};b.filter=b.select=function(a,c,b){var e=[];if(a==null)return e;if(C&&a.filter===C)return a.filter(c,b);j(a,function(a,g,h){c.call(b,a,g,h)&&(e[e.length]=a)});return e};b.reject=function(a,c,b){var e=[];if(a==null)return e;j(a,function(a,g,h){c.call(b,a,g,h)||(e[e.length]=a)});return e};b.every=b.all=function(a,c,b){var e=true;if(a==null)return e;if(D&&a.every===D)return a.every(c,b);j(a,function(a,g,h){if(!(e=e&&c.call(b,
+a,g,h)))return o});return!!e};var G=b.some=b.any=function(a,c,d){c||(c=b.identity);var e=false;if(a==null)return e;if(E&&a.some===E)return a.some(c,d);j(a,function(a,b,h){if(e||(e=c.call(d,a,b,h)))return o});return!!e};b.include=b.contains=function(a,c){var b=false;if(a==null)return b;if(q&&a.indexOf===q)return a.indexOf(c)!=-1;return b=G(a,function(a){return a===c})};b.invoke=function(a,c){var d=i.call(arguments,2);return b.map(a,function(a){return(b.isFunction(c)?c||a:a[c]).apply(a,d)})};b.pluck=
+function(a,c){return b.map(a,function(a){return a[c]})};b.max=function(a,c,d){if(!c&&b.isArray(a)&&a[0]===+a[0])return Math.max.apply(Math,a);if(!c&&b.isEmpty(a))return-Infinity;var e={computed:-Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b>=e.computed&&(e={value:a,computed:b})});return e.value};b.min=function(a,c,d){if(!c&&b.isArray(a)&&a[0]===+a[0])return Math.min.apply(Math,a);if(!c&&b.isEmpty(a))return Infinity;var e={computed:Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b<e.computed&&
+(e={value:a,computed:b})});return e.value};b.shuffle=function(a){var b=[],d;j(a,function(a,f){d=Math.floor(Math.random()*(f+1));b[f]=b[d];b[d]=a});return b};b.sortBy=function(a,c,d){var e=b.isFunction(c)?c:function(a){return a[c]};return b.pluck(b.map(a,function(a,b,c){return{value:a,criteria:e.call(d,a,b,c)}}).sort(function(a,b){var c=a.criteria,d=b.criteria;return c===void 0?1:d===void 0?-1:c<d?-1:c>d?1:0}),"value")};b.groupBy=function(a,c){var d={},e=b.isFunction(c)?c:function(a){return a[c]};
+j(a,function(a,b){var c=e(a,b);(d[c]||(d[c]=[])).push(a)});return d};b.sortedIndex=function(a,c,d){d||(d=b.identity);for(var e=0,f=a.length;e<f;){var g=e+f>>1;d(a[g])<d(c)?e=g+1:f=g}return e};b.toArray=function(a){return!a?[]:b.isArray(a)||b.isArguments(a)?i.call(a):a.toArray&&b.isFunction(a.toArray)?a.toArray():b.values(a)};b.size=function(a){return b.isArray(a)?a.length:b.keys(a).length};b.first=b.head=b.take=function(a,b,d){return b!=null&&!d?i.call(a,0,b):a[0]};b.initial=function(a,b,d){return i.call(a,
+0,a.length-(b==null||d?1:b))};b.last=function(a,b,d){return b!=null&&!d?i.call(a,Math.max(a.length-b,0)):a[a.length-1]};b.rest=b.tail=function(a,b,d){return i.call(a,b==null||d?1:b)};b.compact=function(a){return b.filter(a,function(a){return!!a})};b.flatten=function(a,c){return b.reduce(a,function(a,e){if(b.isArray(e))return a.concat(c?e:b.flatten(e));a[a.length]=e;return a},[])};b.without=function(a){return b.difference(a,i.call(arguments,1))};b.uniq=b.unique=function(a,c,d){var d=d?b.map(a,d):a,
+e=[];a.length<3&&(c=true);b.reduce(d,function(d,g,h){if(c?b.last(d)!==g||!d.length:!b.include(d,g)){d.push(g);e.push(a[h])}return d},[]);return e};b.union=function(){return b.uniq(b.flatten(arguments,true))};b.intersection=b.intersect=function(a){var c=i.call(arguments,1);return b.filter(b.uniq(a),function(a){return b.every(c,function(c){return b.indexOf(c,a)>=0})})};b.difference=function(a){var c=b.flatten(i.call(arguments,1),true);return b.filter(a,function(a){return!b.include(c,a)})};b.zip=function(){for(var a=
+i.call(arguments),c=b.max(b.pluck(a,"length")),d=Array(c),e=0;e<c;e++)d[e]=b.pluck(a,""+e);return d};b.indexOf=function(a,c,d){if(a==null)return-1;var e;if(d){d=b.sortedIndex(a,c);return a[d]===c?d:-1}if(q&&a.indexOf===q)return a.indexOf(c);d=0;for(e=a.length;d<e;d++)if(d in a&&a[d]===c)return d;return-1};b.lastIndexOf=function(a,b){if(a==null)return-1;if(F&&a.lastIndexOf===F)return a.lastIndexOf(b);for(var d=a.length;d--;)if(d in a&&a[d]===b)return d;return-1};b.range=function(a,b,d){if(arguments.length<=
+1){b=a||0;a=0}for(var d=arguments[2]||1,e=Math.max(Math.ceil((b-a)/d),0),f=0,g=Array(e);f<e;){g[f++]=a;a=a+d}return g};var H=function(){};b.bind=function(a,c){var d,e;if(a.bind===t&&t)return t.apply(a,i.call(arguments,1));if(!b.isFunction(a))throw new TypeError;e=i.call(arguments,2);return d=function(){if(!(this instanceof d))return a.apply(c,e.concat(i.call(arguments)));H.prototype=a.prototype;var b=new H,g=a.apply(b,e.concat(i.call(arguments)));return Object(g)===g?g:b}};b.bindAll=function(a){var c=
+i.call(arguments,1);c.length==0&&(c=b.functions(a));j(c,function(c){a[c]=b.bind(a[c],a)});return a};b.memoize=function(a,c){var d={};c||(c=b.identity);return function(){var e=c.apply(this,arguments);return b.has(d,e)?d[e]:d[e]=a.apply(this,arguments)}};b.delay=function(a,b){var d=i.call(arguments,2);return setTimeout(function(){return a.apply(null,d)},b)};b.defer=function(a){return b.delay.apply(b,[a,1].concat(i.call(arguments,1)))};b.throttle=function(a,c){var d,e,f,g,h,i,j=b.debounce(function(){h=
+g=false},c);return function(){d=this;e=arguments;f||(f=setTimeout(function(){f=null;h&&a.apply(d,e);j()},c));g?h=true:i=a.apply(d,e);j();g=true;return i}};b.debounce=function(a,b,d){var e;return function(){var f=this,g=arguments;d&&!e&&a.apply(f,g);clearTimeout(e);e=setTimeout(function(){e=null;d||a.apply(f,g)},b)}};b.once=function(a){var b=false,d;return function(){if(b)return d;b=true;return d=a.apply(this,arguments)}};b.wrap=function(a,b){return function(){var d=[a].concat(i.call(arguments,0));
+return b.apply(this,d)}};b.compose=function(){var a=arguments;return function(){for(var b=arguments,d=a.length-1;d>=0;d--)b=[a[d].apply(this,b)];return b[0]}};b.after=function(a,b){return a<=0?b():function(){if(--a<1)return b.apply(this,arguments)}};b.keys=L||function(a){if(a!==Object(a))throw new TypeError("Invalid object");var c=[],d;for(d in a)b.has(a,d)&&(c[c.length]=d);return c};b.values=function(a){return b.map(a,b.identity)};b.functions=b.methods=function(a){var c=[],d;for(d in a)b.isFunction(a[d])&&
+c.push(d);return c.sort()};b.extend=function(a){j(i.call(arguments,1),function(b){for(var d in b)a[d]=b[d]});return a};b.pick=function(a){var c={};j(b.flatten(i.call(arguments,1)),function(b){b in a&&(c[b]=a[b])});return c};b.defaults=function(a){j(i.call(arguments,1),function(b){for(var d in b)a[d]==null&&(a[d]=b[d])});return a};b.clone=function(a){return!b.isObject(a)?a:b.isArray(a)?a.slice():b.extend({},a)};b.tap=function(a,b){b(a);return a};b.isEqual=function(a,b){return r(a,b,[])};b.isEmpty=
+function(a){if(a==null)return true;if(b.isArray(a)||b.isString(a))return a.length===0;for(var c in a)if(b.has(a,c))return false;return true};b.isElement=function(a){return!!(a&&a.nodeType==1)};b.isArray=p||function(a){return l.call(a)=="[object Array]"};b.isObject=function(a){return a===Object(a)};b.isArguments=function(a){return l.call(a)=="[object Arguments]"};b.isArguments(arguments)||(b.isArguments=function(a){return!(!a||!b.has(a,"callee"))});b.isFunction=function(a){return l.call(a)=="[object Function]"};
+b.isString=function(a){return l.call(a)=="[object String]"};b.isNumber=function(a){return l.call(a)=="[object Number]"};b.isFinite=function(a){return b.isNumber(a)&&isFinite(a)};b.isNaN=function(a){return a!==a};b.isBoolean=function(a){return a===true||a===false||l.call(a)=="[object Boolean]"};b.isDate=function(a){return l.call(a)=="[object Date]"};b.isRegExp=function(a){return l.call(a)=="[object RegExp]"};b.isNull=function(a){return a===null};b.isUndefined=function(a){return a===void 0};b.has=function(a,
+b){return K.call(a,b)};b.noConflict=function(){s._=I;return this};b.identity=function(a){return a};b.times=function(a,b,d){for(var e=0;e<a;e++)b.call(d,e)};b.escape=function(a){return(""+a).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;").replace(/\//g,"&#x2F;")};b.result=function(a,c){if(a==null)return null;var d=a[c];return b.isFunction(d)?d.call(a):d};b.mixin=function(a){j(b.functions(a),function(c){M(c,b[c]=a[c])})};var N=0;b.uniqueId=
+function(a){var b=N++;return a?a+b:b};b.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var u=/.^/,n={"\\":"\\","'":"'",r:"\r",n:"\n",t:"\t",u2028:"\u2028",u2029:"\u2029"},v;for(v in n)n[n[v]]=v;var O=/\\|'|\r|\n|\t|\u2028|\u2029/g,P=/\\(\\|'|r|n|t|u2028|u2029)/g,w=function(a){return a.replace(P,function(a,b){return n[b]})};b.template=function(a,c,d){d=b.defaults(d||{},b.templateSettings);a="__p+='"+a.replace(O,function(a){return"\\"+n[a]}).replace(d.escape||
+u,function(a,b){return"'+\n_.escape("+w(b)+")+\n'"}).replace(d.interpolate||u,function(a,b){return"'+\n("+w(b)+")+\n'"}).replace(d.evaluate||u,function(a,b){return"';\n"+w(b)+"\n;__p+='"})+"';\n";d.variable||(a="with(obj||{}){\n"+a+"}\n");var a="var __p='';var print=function(){__p+=Array.prototype.join.call(arguments, '')};\n"+a+"return __p;\n",e=new Function(d.variable||"obj","_",a);if(c)return e(c,b);c=function(a){return e.call(this,a,b)};c.source="function("+(d.variable||"obj")+"){\n"+a+"}";return c};
+b.chain=function(a){return b(a).chain()};var m=function(a){this._wrapped=a};b.prototype=m.prototype;var x=function(a,c){return c?b(a).chain():a},M=function(a,c){m.prototype[a]=function(){var a=i.call(arguments);J.call(a,this._wrapped);return x(c.apply(b,a),this._chain)}};b.mixin(b);j("pop,push,reverse,shift,sort,splice,unshift".split(","),function(a){var b=k[a];m.prototype[a]=function(){var d=this._wrapped;b.apply(d,arguments);var e=d.length;(a=="shift"||a=="splice")&&e===0&&delete d[0];return x(d,
+this._chain)}});j(["concat","join","slice"],function(a){var b=k[a];m.prototype[a]=function(){return x(b.apply(this._wrapped,arguments),this._chain)}});m.prototype.chain=function(){this._chain=true;return this};m.prototype.value=function(){return this._wrapped}}).call(this);
diff --git a/opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/swagger-ui.js b/opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/swagger-ui.js
new file mode 100644 (file)
index 0000000..56f284a
--- /dev/null
@@ -0,0 +1,2117 @@
+$(function() {\r
+\r
+       // Helper function for vertically aligning DOM elements\r
+       // http://www.seodenver.com/simple-vertical-align-plugin-for-jquery/\r
+       $.fn.vAlign = function() {\r
+               return this.each(function(i){\r
+               var ah = $(this).height();\r
+               var ph = $(this).parent().height();\r
+               var mh = (ph - ah) / 2;\r
+               $(this).css('margin-top', mh);\r
+               });\r
+       };\r
+\r
+       $.fn.stretchFormtasticInputWidthToParent = function() {\r
+               return this.each(function(i){\r
+               var p_width = $(this).closest("form").innerWidth();\r
+               var p_padding = parseInt($(this).closest("form").css('padding-left') ,10) + parseInt($(this).closest("form").css('padding-right'), 10);\r
+               var this_padding = parseInt($(this).css('padding-left'), 10) + parseInt($(this).css('padding-right'), 10);\r
+               $(this).css('width', p_width - p_padding - this_padding);\r
+               });\r
+       };\r
+\r
+       $('form.formtastic li.string input, form.formtastic textarea').stretchFormtasticInputWidthToParent();\r
+\r
+       // Vertically center these paragraphs\r
+       // Parent may need a min-height for this to work..\r
+       $('ul.downplayed li div.content p').vAlign();\r
+\r
+       // When a sandbox form is submitted..\r
+       $("form.sandbox").submit(function(){\r
+\r
+               var error_free = true;\r
+\r
+               // Cycle through the forms required inputs\r
+               $(this).find("input.required").each(function() {\r
+\r
+                       // Remove any existing error styles from the input\r
+                       $(this).removeClass('error');\r
+\r
+                       // Tack the error style on if the input is empty..\r
+                       if ($(this).val() == '') {\r
+                               $(this).addClass('error');\r
+                               $(this).wiggle();\r
+                               error_free = false;\r
+                       }\r
+\r
+               });\r
+\r
+               return error_free;\r
+       });\r
+\r
+});\r
+\r
+function clippyCopiedCallback(a) {\r
+  $('#api_key_copied').fadeIn().delay(1000).fadeOut();\r
+\r
+  // var b = $("#clippy_tooltip_" + a);\r
+  // b.length != 0 && (b.attr("title", "copied!").trigger("tipsy.reload"), setTimeout(function() {\r
+  //   b.attr("title", "copy to clipboard")\r
+  // },\r
+  // 500))\r
+}\r
+\r
+// Logging function that accounts for browsers that don't have window.console\r
+function log() {\r
+  if (window.console) console.log.apply(console,arguments);\r
+}\r
+// Handle browsers that do console incorrectly (IE9 and below, see http://stackoverflow.com/a/5539378/7913)\r
+if (Function.prototype.bind && console && typeof console.log == "object") {\r
+    [\r
+      "log","info","warn","error","assert","dir","clear","profile","profileEnd"\r
+    ].forEach(function (method) {\r
+        console[method] = this.bind(console[method], console);\r
+    }, Function.prototype.call);\r
+}\r
+\r
+var Docs = {\r
+\r
+       shebang: function() {\r
+\r
+               // If shebang has an operation nickname in it..\r
+               // e.g. /docs/#!/words/get_search\r
+               var fragments = $.param.fragment().split('/');\r
+               fragments.shift(); // get rid of the bang\r
+\r
+               switch (fragments.length) {\r
+                       case 1:\r
+                               // Expand all operations for the resource and scroll to it\r
+//                             log('shebang resource:' + fragments[0]);\r
+                               var dom_id = 'resource_' + fragments[0];\r
+\r
+                               Docs.expandEndpointListForResource(fragments[0]);\r
+                               $("#"+dom_id).slideto({highlight: false});\r
+                               break;\r
+                       case 2:\r
+                               // Refer to the endpoint DOM element, e.g. #words_get_search\r
+//                             log('shebang endpoint: ' + fragments.join('_'));\r
+\r
+                // Expand Resource\r
+                Docs.expandEndpointListForResource(fragments[0]);\r
+                $("#"+dom_id).slideto({highlight: false});\r
+\r
+                // Expand operation\r
+                               var li_dom_id = fragments.join('_');\r
+                               var li_content_dom_id = li_dom_id + "_content";\r
+\r
+//                log("li_dom_id " + li_dom_id);\r
+//                log("li_content_dom_id " + li_content_dom_id);\r
+\r
+                               Docs.expandOperation($('#'+li_content_dom_id));\r
+                               $('#'+li_dom_id).slideto({highlight: false});\r
+                               break;\r
+               }\r
+\r
+       },\r
+\r
+       toggleEndpointListForResource: function(resource) {\r
+               var elem = $('li#resource_' + Docs.escapeResourceName(resource) + ' ul.endpoints');\r
+               if (elem.is(':visible')) {\r
+                       Docs.collapseEndpointListForResource(resource);\r
+               } else {\r
+                       Docs.expandEndpointListForResource(resource);\r
+               }\r
+       },\r
+\r
+       // Expand resource\r
+       expandEndpointListForResource: function(resource) {\r
+               var resource = Docs.escapeResourceName(resource);\r
+               if (resource == '') {\r
+                       $('.resource ul.endpoints').slideDown();\r
+                       return;\r
+               }\r
+               \r
+               $('li#resource_' + resource).addClass('active');\r
+\r
+               var elem = $('li#resource_' + resource + ' ul.endpoints');\r
+               elem.slideDown();\r
+       },\r
+\r
+       // Collapse resource and mark as explicitly closed\r
+       collapseEndpointListForResource: function(resource) {\r
+               var resource = Docs.escapeResourceName(resource);\r
+               $('li#resource_' + resource).removeClass('active');\r
+\r
+               var elem = $('li#resource_' + resource + ' ul.endpoints');\r
+               elem.slideUp();\r
+       },\r
+\r
+       expandOperationsForResource: function(resource) {\r
+               // Make sure the resource container is open..\r
+               Docs.expandEndpointListForResource(resource);\r
+               \r
+               if (resource == '') {\r
+                       $('.resource ul.endpoints li.operation div.content').slideDown();\r
+                       return;\r
+               }\r
+\r
+               $('li#resource_' + Docs.escapeResourceName(resource) + ' li.operation div.content').each(function() {\r
+                       Docs.expandOperation($(this));\r
+               });\r
+       },\r
+\r
+       collapseOperationsForResource: function(resource) {\r
+               // Make sure the resource container is open..\r
+               Docs.expandEndpointListForResource(resource);\r
+\r
+               $('li#resource_' + Docs.escapeResourceName(resource) + ' li.operation div.content').each(function() {\r
+                       Docs.collapseOperation($(this));\r
+               });\r
+       },\r
+\r
+       escapeResourceName: function(resource) {\r
+               return resource.replace(/[!"#$%&'()*+,.\/:;<=>?@\[\\\]\^`{|}~]/g, "\\$&");\r
+       },\r
+\r
+       expandOperation: function(elem) {\r
+               elem.slideDown();\r
+       },\r
+\r
+       collapseOperation: function(elem) {\r
+               elem.slideUp();\r
+       }\r
+\r
+};\r
+(function() {
+  var template = Handlebars.template, templates = Handlebars.templates = Handlebars.templates || {};
+templates['content_type'] = template(function (Handlebars,depth0,helpers,partials,data) {
+  this.compilerInfo = [4,'>= 1.0.0'];
+helpers = this.merge(helpers, Handlebars.helpers); data = data || {};
+  var buffer = "", stack1, functionType="function", self=this;
+
+function program1(depth0,data) {
+  
+  var buffer = "", stack1;
+  buffer += "\n  ";
+  stack1 = helpers.each.call(depth0, depth0.produces, {hash:{},inverse:self.noop,fn:self.program(2, program2, data),data:data});
+  if(stack1 || stack1 === 0) { buffer += stack1; }
+  buffer += "\n";
+  return buffer;
+  }
+function program2(depth0,data) {
+  
+  var buffer = "", stack1;
+  buffer += "\n        <option value=\"";
+  stack1 = (typeof depth0 === functionType ? depth0.apply(depth0) : depth0);
+  if(stack1 || stack1 === 0) { buffer += stack1; }
+  buffer += "\">";
+  stack1 = (typeof depth0 === functionType ? depth0.apply(depth0) : depth0);
+  if(stack1 || stack1 === 0) { buffer += stack1; }
+  buffer += "</option>\n       ";
+  return buffer;
+  }
+
+function program4(depth0,data) {
+  
+  
+  return "\n  <option value=\"application/json\">application/json</option>\n";
+  }
+
+  buffer += "<label for=\"contentType\"></label>\n<select name=\"contentType\">\n";
+  stack1 = helpers['if'].call(depth0, depth0.produces, {hash:{},inverse:self.program(4, program4, data),fn:self.program(1, program1, data),data:data});
+  if(stack1 || stack1 === 0) { buffer += stack1; }
+  buffer += "\n</select>\n";
+  return buffer;
+  });
+})();
+
+(function() {
+  var template = Handlebars.template, templates = Handlebars.templates = Handlebars.templates || {};
+templates['main'] = template(function (Handlebars,depth0,helpers,partials,data) {
+  this.compilerInfo = [4,'>= 1.0.0'];
+helpers = this.merge(helpers, Handlebars.helpers); data = data || {};
+  var buffer = "", stack1, functionType="function", escapeExpression=this.escapeExpression, self=this;
+
+function program1(depth0,data) {
+  
+  var buffer = "", stack1, stack2;
+  buffer += "\n    <div class=\"info_title\">"
+    + escapeExpression(((stack1 = ((stack1 = depth0.info),stack1 == null || stack1 === false ? stack1 : stack1.title)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))
+    + "</div>\n    <div class=\"info_description\">";
+  stack2 = ((stack1 = ((stack1 = depth0.info),stack1 == null || stack1 === false ? stack1 : stack1.description)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1);
+  if(stack2 || stack2 === 0) { buffer += stack2; }
+  buffer += "</div>\n    ";
+  stack2 = helpers['if'].call(depth0, ((stack1 = depth0.info),stack1 == null || stack1 === false ? stack1 : stack1.termsOfServiceUrl), {hash:{},inverse:self.noop,fn:self.program(2, program2, data),data:data});
+  if(stack2 || stack2 === 0) { buffer += stack2; }
+  buffer += "\n    ";
+  stack2 = helpers['if'].call(depth0, ((stack1 = depth0.info),stack1 == null || stack1 === false ? stack1 : stack1.contact), {hash:{},inverse:self.noop,fn:self.program(4, program4, data),data:data});
+  if(stack2 || stack2 === 0) { buffer += stack2; }
+  buffer += "\n    ";
+  stack2 = helpers['if'].call(depth0, ((stack1 = depth0.info),stack1 == null || stack1 === false ? stack1 : stack1.license), {hash:{},inverse:self.noop,fn:self.program(6, program6, data),data:data});
+  if(stack2 || stack2 === 0) { buffer += stack2; }
+  buffer += "\n  ";
+  return buffer;
+  }
+function program2(depth0,data) {
+  
+  var buffer = "", stack1;
+  buffer += "<div class=\"info_tos\"><a href=\""
+    + escapeExpression(((stack1 = ((stack1 = depth0.info),stack1 == null || stack1 === false ? stack1 : stack1.termsOfServiceUrl)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))
+    + "\">Terms of service</a></div>";
+  return buffer;
+  }
+
+function program4(depth0,data) {
+  
+  var buffer = "", stack1;
+  buffer += "<div class='info_contact'><a href=\"mailto:"
+    + escapeExpression(((stack1 = ((stack1 = depth0.info),stack1 == null || stack1 === false ? stack1 : stack1.contact)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))
+    + "\">Contact the developer</a></div>";
+  return buffer;
+  }
+
+function program6(depth0,data) {
+  
+  var buffer = "", stack1;
+  buffer += "<div class='info_license'><a href='"
+    + escapeExpression(((stack1 = ((stack1 = depth0.info),stack1 == null || stack1 === false ? stack1 : stack1.licenseUrl)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))
+    + "'>"
+    + escapeExpression(((stack1 = ((stack1 = depth0.info),stack1 == null || stack1 === false ? stack1 : stack1.license)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))
+    + "</a></div>";
+  return buffer;
+  }
+
+function program8(depth0,data) {
+  
+  var buffer = "", stack1;
+  buffer += "\n        , <span style=\"font-variant: small-caps\">api version</span>: ";
+  if (stack1 = helpers.apiVersion) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.apiVersion; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "\n        ";
+  return buffer;
+  }
+
+  buffer += "<div class='info' id='api_info'>\n  ";
+  stack1 = helpers['if'].call(depth0, depth0.info, {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});
+  if(stack1 || stack1 === 0) { buffer += stack1; }
+  buffer += "\n</div>\n<div class='container' id='resources_container'>\n    <ul id='resources'>\n    </ul>\n\n    <div class=\"footer\">\n        <br>\n        <br>\n        <h4 style=\"color: #999\">[ <span style=\"font-variant: small-caps\">base url</span>: ";
+  if (stack1 = helpers.basePath) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.basePath; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "\n        ";
+  stack1 = helpers['if'].call(depth0, depth0.apiVersion, {hash:{},inverse:self.noop,fn:self.program(8, program8, data),data:data});
+  if(stack1 || stack1 === 0) { buffer += stack1; }
+  buffer += "]</h4>\n    </div>\n</div>\n";
+  return buffer;
+  });
+})();
+
+(function() {
+  var template = Handlebars.template, templates = Handlebars.templates = Handlebars.templates || {};
+templates['operation'] = template(function (Handlebars,depth0,helpers,partials,data) {
+  this.compilerInfo = [4,'>= 1.0.0'];
+helpers = this.merge(helpers, Handlebars.helpers); data = data || {};
+  var buffer = "", stack1, functionType="function", escapeExpression=this.escapeExpression, self=this;
+
+function program1(depth0,data) {
+  
+  var buffer = "", stack1;
+  buffer += "\n        <h4>Implementation Notes</h4>\n        <p>";
+  if (stack1 = helpers.notes) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.notes; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  if(stack1 || stack1 === 0) { buffer += stack1; }
+  buffer += "</p>\n        ";
+  return buffer;
+  }
+
+function program3(depth0,data) {
+  
+  
+  return "\n          <h4>Response Class</h4>\n          <p><span class=\"model-signature\" /></p>\n          <br/>\n          <div class=\"response-content-type\" />\n        ";
+  }
+
+function program5(depth0,data) {
+  
+  
+  return "\n          <h4>Parameters</h4>\n          <table class='fullwidth'>\n          <thead>\n            <tr>\n            <th style=\"width: 100px; max-width: 100px\">Parameter</th>\n            <th style=\"width: 310px; max-width: 310px\">Value</th>\n            <th style=\"width: 200px; max-width: 200px\">Description</th>\n            <th style=\"width: 100px; max-width: 100px\">Parameter Type</th>\n            <th style=\"width: 220px; max-width: 230px\">Data Type</th>\n            </tr>\n          </thead>\n          <tbody class=\"operation-params\">\n\n          </tbody>\n          </table>\n          ";
+  }
+
+function program7(depth0,data) {
+  
+  
+  return "\n          <div style='margin:0;padding:0;display:inline'></div>\n          <h4>Error Status Codes</h4>\n          <table class='fullwidth'>\n            <thead>\n            <tr>\n              <th>HTTP Status Code</th>\n              <th>Reason</th>\n            </tr>\n            </thead>\n            <tbody class=\"operation-status\">\n            \n            </tbody>\n          </table>\n          ";
+  }
+
+function program9(depth0,data) {
+  
+  
+  return "\n          ";
+  }
+
+function program11(depth0,data) {
+  
+  
+  return "\n          <div class='sandbox_header'>\n            <input class='submit' name='commit' type='button' value='Try it out!' />\n            <a href='#' class='response_hider' style='display:none'>Hide Response</a>\n            <img alt='Throbber' class='response_throbber' src='images/throbber.gif' style='display:none' />\n          </div>\n          ";
+  }
+
+  buffer += "\n  <ul class='operations' >\n    <li class='";
+  if (stack1 = helpers.method) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.method; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + " operation' id='";
+  if (stack1 = helpers.resourceName) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.resourceName; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "_";
+  if (stack1 = helpers.nickname) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.nickname; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "_";
+  if (stack1 = helpers.method) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.method; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "_";
+  if (stack1 = helpers.number) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.number; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "'>\n      <div class='heading'>\n        <h3>\n          <span class='http_method'>\n          <a href='#!/";
+  if (stack1 = helpers.resourceName) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.resourceName; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "/";
+  if (stack1 = helpers.nickname) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.nickname; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "_";
+  if (stack1 = helpers.method) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.method; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "_";
+  if (stack1 = helpers.number) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.number; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "' class=\"toggleOperation\">";
+  if (stack1 = helpers.method) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.method; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "</a>\n          </span>\n          <span class='path'>\n          <a href='#!/";
+  if (stack1 = helpers.resourceName) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.resourceName; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "/";
+  if (stack1 = helpers.nickname) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.nickname; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "_";
+  if (stack1 = helpers.method) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.method; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "_";
+  if (stack1 = helpers.number) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.number; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "' class=\"toggleOperation\">";
+  if (stack1 = helpers.path) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.path; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "</a>\n          </span>\n        </h3>\n        <ul class='options'>\n          <li>\n          <a href='#!/";
+  if (stack1 = helpers.resourceName) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.resourceName; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "/";
+  if (stack1 = helpers.nickname) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.nickname; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "_";
+  if (stack1 = helpers.method) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.method; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "_";
+  if (stack1 = helpers.number) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.number; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "' class=\"toggleOperation\">";
+  if (stack1 = helpers.summary) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.summary; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  if(stack1 || stack1 === 0) { buffer += stack1; }
+  buffer += "</a>\n          </li>\n        </ul>\n      </div>\n      <div class='content' id='";
+  if (stack1 = helpers.resourceName) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.resourceName; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "_";
+  if (stack1 = helpers.nickname) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.nickname; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "_";
+  if (stack1 = helpers.method) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.method; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "_";
+  if (stack1 = helpers.number) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.number; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "_content' style='display:none'>\n        ";
+  stack1 = helpers['if'].call(depth0, depth0.notes, {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});
+  if(stack1 || stack1 === 0) { buffer += stack1; }
+  buffer += "\n        ";
+  stack1 = helpers['if'].call(depth0, depth0.type, {hash:{},inverse:self.noop,fn:self.program(3, program3, data),data:data});
+  if(stack1 || stack1 === 0) { buffer += stack1; }
+  buffer += "\n        <form accept-charset='UTF-8' class='sandbox'>\n          <div style='margin:0;padding:0;display:inline'></div>\n          ";
+  stack1 = helpers['if'].call(depth0, depth0.parameters, {hash:{},inverse:self.noop,fn:self.program(5, program5, data),data:data});
+  if(stack1 || stack1 === 0) { buffer += stack1; }
+  buffer += "\n          ";
+  stack1 = helpers['if'].call(depth0, depth0.responseMessages, {hash:{},inverse:self.noop,fn:self.program(7, program7, data),data:data});
+  if(stack1 || stack1 === 0) { buffer += stack1; }
+  buffer += "\n          ";
+  stack1 = helpers['if'].call(depth0, depth0.isReadOnly, {hash:{},inverse:self.program(11, program11, data),fn:self.program(9, program9, data),data:data});
+  if(stack1 || stack1 === 0) { buffer += stack1; }
+  buffer += "\n        </form>\n        <div class='response' style='display:none'>\n          <h4>Request URL</h4>\n          <div class='block request_url'></div>\n          <h4>Response Body</h4>\n          <div class='block response_body'></div>\n          <h4>Response Code</h4>\n          <div class='block response_code'></div>\n          <h4>Response Headers</h4>\n          <div class='block response_headers'></div>\n        </div>\n      </div>\n    </li>\n  </ul>\n";
+  return buffer;
+  });
+})();
+
+(function() {
+  var template = Handlebars.template, templates = Handlebars.templates = Handlebars.templates || {};
+templates['param'] = template(function (Handlebars,depth0,helpers,partials,data) {
+  this.compilerInfo = [4,'>= 1.0.0'];
+helpers = this.merge(helpers, Handlebars.helpers); data = data || {};
+  var buffer = "", stack1, functionType="function", escapeExpression=this.escapeExpression, self=this;
+
+function program1(depth0,data) {
+  
+  var buffer = "", stack1;
+  buffer += "\n                ";
+  stack1 = helpers['if'].call(depth0, depth0.isFile, {hash:{},inverse:self.program(4, program4, data),fn:self.program(2, program2, data),data:data});
+  if(stack1 || stack1 === 0) { buffer += stack1; }
+  buffer += "\n        ";
+  return buffer;
+  }
+function program2(depth0,data) {
+  
+  var buffer = "", stack1;
+  buffer += "\n                        <input type=\"file\" name='";
+  if (stack1 = helpers.name) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.name; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "'/>\n                   <div class=\"parameter-content-type\" />\n              ";
+  return buffer;
+  }
+
+function program4(depth0,data) {
+  
+  var buffer = "", stack1;
+  buffer += "\n                        ";
+  stack1 = helpers['if'].call(depth0, depth0.defaultValue, {hash:{},inverse:self.program(7, program7, data),fn:self.program(5, program5, data),data:data});
+  if(stack1 || stack1 === 0) { buffer += stack1; }
+  buffer += "\n                ";
+  return buffer;
+  }
+function program5(depth0,data) {
+  
+  var buffer = "", stack1;
+  buffer += "\n                                <textarea class='body-textarea' name='";
+  if (stack1 = helpers.name) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.name; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "'>";
+  if (stack1 = helpers.defaultValue) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.defaultValue; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "</textarea>\n                   ";
+  return buffer;
+  }
+
+function program7(depth0,data) {
+  
+  var buffer = "", stack1;
+  buffer += "\n                                <textarea class='body-textarea' name='";
+  if (stack1 = helpers.name) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.name; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "'></textarea>\n                         <br />\n                                <div class=\"parameter-content-type\" />\n                      ";
+  return buffer;
+  }
+
+function program9(depth0,data) {
+  
+  var buffer = "", stack1;
+  buffer += "\n                ";
+  stack1 = helpers['if'].call(depth0, depth0.defaultValue, {hash:{},inverse:self.program(12, program12, data),fn:self.program(10, program10, data),data:data});
+  if(stack1 || stack1 === 0) { buffer += stack1; }
+  buffer += "\n        ";
+  return buffer;
+  }
+function program10(depth0,data) {
+  
+  var buffer = "", stack1;
+  buffer += "\n                        <input class='parameter' minlength='0' name='";
+  if (stack1 = helpers.name) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.name; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "' placeholder='' type='text' value='";
+  if (stack1 = helpers.defaultValue) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.defaultValue; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "'/>\n           ";
+  return buffer;
+  }
+
+function program12(depth0,data) {
+  
+  var buffer = "", stack1;
+  buffer += "\n                        <input class='parameter' minlength='0' name='";
+  if (stack1 = helpers.name) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.name; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "' placeholder='' type='text' value=''/>\n               ";
+  return buffer;
+  }
+
+  buffer += "<td class='code'>";
+  if (stack1 = helpers.name) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.name; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "</td>\n<td>\n\n ";
+  stack1 = helpers['if'].call(depth0, depth0.isBody, {hash:{},inverse:self.program(9, program9, data),fn:self.program(1, program1, data),data:data});
+  if(stack1 || stack1 === 0) { buffer += stack1; }
+  buffer += "\n\n</td>\n<td>";
+  if (stack1 = helpers.description) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.description; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  if(stack1 || stack1 === 0) { buffer += stack1; }
+  buffer += "</td>\n<td>";
+  if (stack1 = helpers.paramType) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.paramType; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  if(stack1 || stack1 === 0) { buffer += stack1; }
+  buffer += "</td>\n<td>\n     <span class=\"model-signature\"></span>\n</td>\n";
+  return buffer;
+  });
+})();
+
+(function() {
+  var template = Handlebars.template, templates = Handlebars.templates = Handlebars.templates || {};
+templates['param_list'] = template(function (Handlebars,depth0,helpers,partials,data) {
+  this.compilerInfo = [4,'>= 1.0.0'];
+helpers = this.merge(helpers, Handlebars.helpers); data = data || {};
+  var buffer = "", stack1, stack2, self=this, functionType="function", escapeExpression=this.escapeExpression;
+
+function program1(depth0,data) {
+  
+  
+  return " multiple='multiple'";
+  }
+
+function program3(depth0,data) {
+  
+  
+  return "\n    ";
+  }
+
+function program5(depth0,data) {
+  
+  var buffer = "", stack1;
+  buffer += "\n      ";
+  stack1 = helpers['if'].call(depth0, depth0.defaultValue, {hash:{},inverse:self.program(8, program8, data),fn:self.program(6, program6, data),data:data});
+  if(stack1 || stack1 === 0) { buffer += stack1; }
+  buffer += "\n    ";
+  return buffer;
+  }
+function program6(depth0,data) {
+  
+  
+  return "\n      ";
+  }
+
+function program8(depth0,data) {
+  
+  var buffer = "", stack1;
+  buffer += "\n        ";
+  stack1 = helpers['if'].call(depth0, depth0.allowMultiple, {hash:{},inverse:self.program(11, program11, data),fn:self.program(9, program9, data),data:data});
+  if(stack1 || stack1 === 0) { buffer += stack1; }
+  buffer += "\n      ";
+  return buffer;
+  }
+function program9(depth0,data) {
+  
+  
+  return "\n         ";
+  }
+
+function program11(depth0,data) {
+  
+  
+  return "\n          <option selected=\"\" value=''></option>\n         ";
+  }
+
+function program13(depth0,data) {
+  
+  var buffer = "", stack1;
+  buffer += "\n      ";
+  stack1 = helpers['if'].call(depth0, depth0.isDefault, {hash:{},inverse:self.program(16, program16, data),fn:self.program(14, program14, data),data:data});
+  if(stack1 || stack1 === 0) { buffer += stack1; }
+  buffer += "\n    ";
+  return buffer;
+  }
+function program14(depth0,data) {
+  
+  var buffer = "", stack1;
+  buffer += "\n        <option selected=\"\" value='";
+  if (stack1 = helpers.value) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.value; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "'>";
+  if (stack1 = helpers.value) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.value; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + " (default)</option>\n      ";
+  return buffer;
+  }
+
+function program16(depth0,data) {
+  
+  var buffer = "", stack1;
+  buffer += "\n        <option value='";
+  if (stack1 = helpers.value) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.value; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "'>";
+  if (stack1 = helpers.value) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.value; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "</option>\n      ";
+  return buffer;
+  }
+
+  buffer += "<td class='code'>";
+  if (stack1 = helpers.name) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.name; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "</td>\n<td>\n  <select ";
+  stack1 = helpers['if'].call(depth0, depth0.allowMultiple, {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});
+  if(stack1 || stack1 === 0) { buffer += stack1; }
+  buffer += " class='parameter' name='";
+  if (stack1 = helpers.name) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.name; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "'>\n    ";
+  stack1 = helpers['if'].call(depth0, depth0.required, {hash:{},inverse:self.program(5, program5, data),fn:self.program(3, program3, data),data:data});
+  if(stack1 || stack1 === 0) { buffer += stack1; }
+  buffer += "\n    ";
+  stack2 = helpers.each.call(depth0, ((stack1 = depth0.allowableValues),stack1 == null || stack1 === false ? stack1 : stack1.descriptiveValues), {hash:{},inverse:self.noop,fn:self.program(13, program13, data),data:data});
+  if(stack2 || stack2 === 0) { buffer += stack2; }
+  buffer += "\n  </select>\n</td>\n<td>";
+  if (stack2 = helpers.description) { stack2 = stack2.call(depth0, {hash:{},data:data}); }
+  else { stack2 = depth0.description; stack2 = typeof stack2 === functionType ? stack2.apply(depth0) : stack2; }
+  if(stack2 || stack2 === 0) { buffer += stack2; }
+  buffer += "</td>\n<td>";
+  if (stack2 = helpers.paramType) { stack2 = stack2.call(depth0, {hash:{},data:data}); }
+  else { stack2 = depth0.paramType; stack2 = typeof stack2 === functionType ? stack2.apply(depth0) : stack2; }
+  if(stack2 || stack2 === 0) { buffer += stack2; }
+  buffer += "</td>\n<td><span class=\"model-signature\"></span></td>";
+  return buffer;
+  });
+})();
+
+(function() {
+  var template = Handlebars.template, templates = Handlebars.templates = Handlebars.templates || {};
+templates['param_readonly'] = template(function (Handlebars,depth0,helpers,partials,data) {
+  this.compilerInfo = [4,'>= 1.0.0'];
+helpers = this.merge(helpers, Handlebars.helpers); data = data || {};
+  var buffer = "", stack1, functionType="function", escapeExpression=this.escapeExpression, self=this;
+
+function program1(depth0,data) {
+  
+  var buffer = "", stack1;
+  buffer += "\n        <textarea class='body-textarea' readonly='readonly' name='";
+  if (stack1 = helpers.name) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.name; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "'>";
+  if (stack1 = helpers.defaultValue) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.defaultValue; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "</textarea>\n    ";
+  return buffer;
+  }
+
+function program3(depth0,data) {
+  
+  var buffer = "", stack1;
+  buffer += "\n        ";
+  stack1 = helpers['if'].call(depth0, depth0.defaultValue, {hash:{},inverse:self.program(6, program6, data),fn:self.program(4, program4, data),data:data});
+  if(stack1 || stack1 === 0) { buffer += stack1; }
+  buffer += "\n    ";
+  return buffer;
+  }
+function program4(depth0,data) {
+  
+  var buffer = "", stack1;
+  buffer += "\n            ";
+  if (stack1 = helpers.defaultValue) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.defaultValue; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "\n        ";
+  return buffer;
+  }
+
+function program6(depth0,data) {
+  
+  
+  return "\n            (empty)\n        ";
+  }
+
+  buffer += "<td class='code'>";
+  if (stack1 = helpers.name) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.name; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "</td>\n<td>\n    ";
+  stack1 = helpers['if'].call(depth0, depth0.isBody, {hash:{},inverse:self.program(3, program3, data),fn:self.program(1, program1, data),data:data});
+  if(stack1 || stack1 === 0) { buffer += stack1; }
+  buffer += "\n</td>\n<td>";
+  if (stack1 = helpers.description) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.description; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  if(stack1 || stack1 === 0) { buffer += stack1; }
+  buffer += "</td>\n<td>";
+  if (stack1 = helpers.paramType) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.paramType; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  if(stack1 || stack1 === 0) { buffer += stack1; }
+  buffer += "</td>\n<td><span class=\"model-signature\"></span></td>\n";
+  return buffer;
+  });
+})();
+
+(function() {
+  var template = Handlebars.template, templates = Handlebars.templates = Handlebars.templates || {};
+templates['param_readonly_required'] = template(function (Handlebars,depth0,helpers,partials,data) {
+  this.compilerInfo = [4,'>= 1.0.0'];
+helpers = this.merge(helpers, Handlebars.helpers); data = data || {};
+  var buffer = "", stack1, functionType="function", escapeExpression=this.escapeExpression, self=this;
+
+function program1(depth0,data) {
+  
+  var buffer = "", stack1;
+  buffer += "\n        <textarea class='body-textarea'  readonly='readonly' placeholder='(required)' name='";
+  if (stack1 = helpers.name) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.name; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "'>";
+  if (stack1 = helpers.defaultValue) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.defaultValue; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "</textarea>\n    ";
+  return buffer;
+  }
+
+function program3(depth0,data) {
+  
+  var buffer = "", stack1;
+  buffer += "\n        ";
+  stack1 = helpers['if'].call(depth0, depth0.defaultValue, {hash:{},inverse:self.program(6, program6, data),fn:self.program(4, program4, data),data:data});
+  if(stack1 || stack1 === 0) { buffer += stack1; }
+  buffer += "\n    ";
+  return buffer;
+  }
+function program4(depth0,data) {
+  
+  var buffer = "", stack1;
+  buffer += "\n            ";
+  if (stack1 = helpers.defaultValue) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.defaultValue; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "\n        ";
+  return buffer;
+  }
+
+function program6(depth0,data) {
+  
+  
+  return "\n            (empty)\n        ";
+  }
+
+  buffer += "<td class='code required'>";
+  if (stack1 = helpers.name) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.name; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "</td>\n<td>\n    ";
+  stack1 = helpers['if'].call(depth0, depth0.isBody, {hash:{},inverse:self.program(3, program3, data),fn:self.program(1, program1, data),data:data});
+  if(stack1 || stack1 === 0) { buffer += stack1; }
+  buffer += "\n</td>\n<td>";
+  if (stack1 = helpers.description) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.description; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  if(stack1 || stack1 === 0) { buffer += stack1; }
+  buffer += "</td>\n<td>";
+  if (stack1 = helpers.paramType) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.paramType; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  if(stack1 || stack1 === 0) { buffer += stack1; }
+  buffer += "</td>\n<td><span class=\"model-signature\"></span></td>\n";
+  return buffer;
+  });
+})();
+
+(function() {
+  var template = Handlebars.template, templates = Handlebars.templates = Handlebars.templates || {};
+templates['param_required'] = template(function (Handlebars,depth0,helpers,partials,data) {
+  this.compilerInfo = [4,'>= 1.0.0'];
+helpers = this.merge(helpers, Handlebars.helpers); data = data || {};
+  var buffer = "", stack1, functionType="function", escapeExpression=this.escapeExpression, self=this;
+
+function program1(depth0,data) {
+  
+  var buffer = "", stack1;
+  buffer += "\n                ";
+  stack1 = helpers['if'].call(depth0, depth0.isFile, {hash:{},inverse:self.program(4, program4, data),fn:self.program(2, program2, data),data:data});
+  if(stack1 || stack1 === 0) { buffer += stack1; }
+  buffer += "\n        ";
+  return buffer;
+  }
+function program2(depth0,data) {
+  
+  var buffer = "", stack1;
+  buffer += "\n                        <input type=\"file\" name='";
+  if (stack1 = helpers.name) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.name; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "'/>\n           ";
+  return buffer;
+  }
+
+function program4(depth0,data) {
+  
+  var buffer = "", stack1;
+  buffer += "\n                        ";
+  stack1 = helpers['if'].call(depth0, depth0.defaultValue, {hash:{},inverse:self.program(7, program7, data),fn:self.program(5, program5, data),data:data});
+  if(stack1 || stack1 === 0) { buffer += stack1; }
+  buffer += "\n                ";
+  return buffer;
+  }
+function program5(depth0,data) {
+  
+  var buffer = "", stack1;
+  buffer += "\n                                <textarea class='body-textarea' placeholder='(required)' name='";
+  if (stack1 = helpers.name) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.name; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "'>";
+  if (stack1 = helpers.defaultValue) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.defaultValue; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "</textarea>\n                   ";
+  return buffer;
+  }
+
+function program7(depth0,data) {
+  
+  var buffer = "", stack1;
+  buffer += "\n                                <textarea class='body-textarea' placeholder='(required)' name='";
+  if (stack1 = helpers.name) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.name; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "'></textarea>\n                         <br />\n                                <div class=\"parameter-content-type\" />\n                      ";
+  return buffer;
+  }
+
+function program9(depth0,data) {
+  
+  var buffer = "", stack1;
+  buffer += "\n                ";
+  stack1 = helpers['if'].call(depth0, depth0.isFile, {hash:{},inverse:self.program(12, program12, data),fn:self.program(10, program10, data),data:data});
+  if(stack1 || stack1 === 0) { buffer += stack1; }
+  buffer += "\n        ";
+  return buffer;
+  }
+function program10(depth0,data) {
+  
+  var buffer = "", stack1;
+  buffer += "\n                        <input class='parameter' class='required' type='file' name='";
+  if (stack1 = helpers.name) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.name; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "'/>\n           ";
+  return buffer;
+  }
+
+function program12(depth0,data) {
+  
+  var buffer = "", stack1;
+  buffer += "\n                        ";
+  stack1 = helpers['if'].call(depth0, depth0.defaultValue, {hash:{},inverse:self.program(15, program15, data),fn:self.program(13, program13, data),data:data});
+  if(stack1 || stack1 === 0) { buffer += stack1; }
+  buffer += "\n                ";
+  return buffer;
+  }
+function program13(depth0,data) {
+  
+  var buffer = "", stack1;
+  buffer += "\n                                <input class='parameter required' minlength='1' name='";
+  if (stack1 = helpers.name) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.name; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "' placeholder='(required)' type='text' value='";
+  if (stack1 = helpers.defaultValue) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.defaultValue; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "'/>\n                   ";
+  return buffer;
+  }
+
+function program15(depth0,data) {
+  
+  var buffer = "", stack1;
+  buffer += "\n                                <input class='parameter required' minlength='1' name='";
+  if (stack1 = helpers.name) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.name; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "' placeholder='(required)' type='text' value=''/>\n                     ";
+  return buffer;
+  }
+
+  buffer += "<td class='code required'>";
+  if (stack1 = helpers.name) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.name; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "</td>\n<td>\n   ";
+  stack1 = helpers['if'].call(depth0, depth0.isBody, {hash:{},inverse:self.program(9, program9, data),fn:self.program(1, program1, data),data:data});
+  if(stack1 || stack1 === 0) { buffer += stack1; }
+  buffer += "\n</td>\n<td>\n   <strong>";
+  if (stack1 = helpers.description) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.description; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  if(stack1 || stack1 === 0) { buffer += stack1; }
+  buffer += "</strong>\n</td>\n<td>";
+  if (stack1 = helpers.paramType) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.paramType; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  if(stack1 || stack1 === 0) { buffer += stack1; }
+  buffer += "</td>\n<td><span class=\"model-signature\"></span></td>\n";
+  return buffer;
+  });
+})();
+
+(function() {
+  var template = Handlebars.template, templates = Handlebars.templates = Handlebars.templates || {};
+templates['parameter_content_type'] = template(function (Handlebars,depth0,helpers,partials,data) {
+  this.compilerInfo = [4,'>= 1.0.0'];
+helpers = this.merge(helpers, Handlebars.helpers); data = data || {};
+  var buffer = "", stack1, functionType="function", self=this;
+
+function program1(depth0,data) {
+  
+  var buffer = "", stack1;
+  buffer += "\n  ";
+  stack1 = helpers.each.call(depth0, depth0.consumes, {hash:{},inverse:self.noop,fn:self.program(2, program2, data),data:data});
+  if(stack1 || stack1 === 0) { buffer += stack1; }
+  buffer += "\n";
+  return buffer;
+  }
+function program2(depth0,data) {
+  
+  var buffer = "", stack1;
+  buffer += "\n  <option value=\"";
+  stack1 = (typeof depth0 === functionType ? depth0.apply(depth0) : depth0);
+  if(stack1 || stack1 === 0) { buffer += stack1; }
+  buffer += "\">";
+  stack1 = (typeof depth0 === functionType ? depth0.apply(depth0) : depth0);
+  if(stack1 || stack1 === 0) { buffer += stack1; }
+  buffer += "</option>\n  ";
+  return buffer;
+  }
+
+function program4(depth0,data) {
+  
+  
+  return "\n  <option value=\"application/json\">application/json</option>\n";
+  }
+
+  buffer += "<label for=\"parameterContentType\"></label>\n<select name=\"parameterContentType\">\n";
+  stack1 = helpers['if'].call(depth0, depth0.consumes, {hash:{},inverse:self.program(4, program4, data),fn:self.program(1, program1, data),data:data});
+  if(stack1 || stack1 === 0) { buffer += stack1; }
+  buffer += "\n</select>\n";
+  return buffer;
+  });
+})();
+
+(function() {
+  var template = Handlebars.template, templates = Handlebars.templates = Handlebars.templates || {};
+templates['resource'] = template(function (Handlebars,depth0,helpers,partials,data) {
+  this.compilerInfo = [4,'>= 1.0.0'];
+helpers = this.merge(helpers, Handlebars.helpers); data = data || {};
+  var buffer = "", stack1, options, functionType="function", escapeExpression=this.escapeExpression, self=this, blockHelperMissing=helpers.blockHelperMissing;
+
+function program1(depth0,data) {
+  
+  
+  return " : ";
+  }
+
+  buffer += "<div class='heading'>\n  <h2>\n    <a href='#!/";
+  if (stack1 = helpers.name) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.name; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "' onclick=\"Docs.toggleEndpointListForResource('";
+  if (stack1 = helpers.name) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.name; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "');\">";
+  if (stack1 = helpers.name) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.name; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "</a> ";
+  options = {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data};
+  if (stack1 = helpers.description) { stack1 = stack1.call(depth0, options); }
+  else { stack1 = depth0.description; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  if (!helpers.description) { stack1 = blockHelperMissing.call(depth0, stack1, options); }
+  if(stack1 || stack1 === 0) { buffer += stack1; }
+  if (stack1 = helpers.description) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.description; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  if(stack1 || stack1 === 0) { buffer += stack1; }
+  buffer += "\n  </h2>\n  <ul class='options'>\n    <li>\n      <a href='#!/";
+  if (stack1 = helpers.name) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.name; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "' id='endpointListTogger_";
+  if (stack1 = helpers.name) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.name; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "'\n         onclick=\"Docs.toggleEndpointListForResource('";
+  if (stack1 = helpers.name) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.name; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "');\">Show/Hide</a>\n    </li>\n    <li>\n      <a href='#' onclick=\"Docs.collapseOperationsForResource('";
+  if (stack1 = helpers.name) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.name; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "'); return false;\">\n        List Operations\n      </a>\n    </li>\n    <li>\n      <a href='#' onclick=\"Docs.expandOperationsForResource('";
+  if (stack1 = helpers.name) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.name; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "'); return false;\">\n        Expand Operations\n      </a>\n    </li>\n    <li>\n      <a href='";
+  if (stack1 = helpers.url) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.url; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "'>Raw</a>\n    </li>\n  </ul>\n</div>\n<ul class='endpoints' id='";
+  if (stack1 = helpers.name) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.name; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "_endpoint_list' style='display:none'>\n\n</ul>\n";
+  return buffer;
+  });
+})();
+
+(function() {
+  var template = Handlebars.template, templates = Handlebars.templates = Handlebars.templates || {};
+templates['response_content_type'] = template(function (Handlebars,depth0,helpers,partials,data) {
+  this.compilerInfo = [4,'>= 1.0.0'];
+helpers = this.merge(helpers, Handlebars.helpers); data = data || {};
+  var buffer = "", stack1, functionType="function", self=this;
+
+function program1(depth0,data) {
+  
+  var buffer = "", stack1;
+  buffer += "\n  ";
+  stack1 = helpers.each.call(depth0, depth0.produces, {hash:{},inverse:self.noop,fn:self.program(2, program2, data),data:data});
+  if(stack1 || stack1 === 0) { buffer += stack1; }
+  buffer += "\n";
+  return buffer;
+  }
+function program2(depth0,data) {
+  
+  var buffer = "", stack1;
+  buffer += "\n  <option value=\"";
+  stack1 = (typeof depth0 === functionType ? depth0.apply(depth0) : depth0);
+  if(stack1 || stack1 === 0) { buffer += stack1; }
+  buffer += "\">";
+  stack1 = (typeof depth0 === functionType ? depth0.apply(depth0) : depth0);
+  if(stack1 || stack1 === 0) { buffer += stack1; }
+  buffer += "</option>\n  ";
+  return buffer;
+  }
+
+function program4(depth0,data) {
+  
+  
+  return "\n  <option value=\"application/json\">application/json</option>\n";
+  }
+
+  buffer += "<label for=\"responseContentType\"></label>\n<select name=\"responseContentType\">\n";
+  stack1 = helpers['if'].call(depth0, depth0.produces, {hash:{},inverse:self.program(4, program4, data),fn:self.program(1, program1, data),data:data});
+  if(stack1 || stack1 === 0) { buffer += stack1; }
+  buffer += "\n</select>\n";
+  return buffer;
+  });
+})();
+
+(function() {
+  var template = Handlebars.template, templates = Handlebars.templates = Handlebars.templates || {};
+templates['signature'] = template(function (Handlebars,depth0,helpers,partials,data) {
+  this.compilerInfo = [4,'>= 1.0.0'];
+helpers = this.merge(helpers, Handlebars.helpers); data = data || {};
+  var buffer = "", stack1, functionType="function", escapeExpression=this.escapeExpression;
+
+
+  buffer += "<div>\n<ul class=\"signature-nav\">\n    <li><a class=\"description-link\" href=\"#\">Model</a></li>\n    <li><a class=\"snippet-link\" href=\"#\">Model Schema</a></li>\n</ul>\n<div>\n\n<div class=\"signature-container\">\n    <div class=\"description\">\n        ";
+  if (stack1 = helpers.signature) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.signature; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  if(stack1 || stack1 === 0) { buffer += stack1; }
+  buffer += "\n    </div>\n\n    <div class=\"snippet\">\n        <pre><code>";
+  if (stack1 = helpers.sampleJSON) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.sampleJSON; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "</code></pre>\n        <small class=\"notice\"></small>\n    </div>\n</div>\n\n";
+  return buffer;
+  });
+})();
+
+(function() {
+  var template = Handlebars.template, templates = Handlebars.templates = Handlebars.templates || {};
+templates['status_code'] = template(function (Handlebars,depth0,helpers,partials,data) {
+  this.compilerInfo = [4,'>= 1.0.0'];
+helpers = this.merge(helpers, Handlebars.helpers); data = data || {};
+  var buffer = "", stack1, functionType="function", escapeExpression=this.escapeExpression;
+
+
+  buffer += "<td width='15%' class='code'>";
+  if (stack1 = helpers.code) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.code; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  buffer += escapeExpression(stack1)
+    + "</td>\n<td>";
+  if (stack1 = helpers.message) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
+  else { stack1 = depth0.message; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
+  if(stack1 || stack1 === 0) { buffer += stack1; }
+  buffer += "</td>\n";
+  return buffer;
+  });
+})();
+
+
+
+// Generated by CoffeeScript 1.6.3
+(function() {
+  var ContentTypeView, HeaderView, MainView, OperationView, ParameterContentTypeView, ParameterView, ResourceView, ResponseContentTypeView, SignatureView, StatusCodeView, SwaggerUi, _ref, _ref1, _ref10, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8, _ref9,
+    __hasProp = {}.hasOwnProperty,
+    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
+
+  SwaggerUi = (function(_super) {
+    __extends(SwaggerUi, _super);
+
+    function SwaggerUi() {
+      _ref = SwaggerUi.__super__.constructor.apply(this, arguments);
+      return _ref;
+    }
+
+    SwaggerUi.prototype.dom_id = "swagger_ui";
+
+    SwaggerUi.prototype.options = null;
+
+    SwaggerUi.prototype.api = null;
+
+    SwaggerUi.prototype.headerView = null;
+
+    SwaggerUi.prototype.mainView = null;
+
+    SwaggerUi.prototype.initialize = function(options) {
+      var _this = this;
+      if (options == null) {
+        options = {};
+      }
+      if (options.dom_id != null) {
+        this.dom_id = options.dom_id;
+        delete options.dom_id;
+      }
+      if ($('#' + this.dom_id) == null) {
+        $('body').append('<div id="' + this.dom_id + '"></div>');
+      }
+      this.options = options;
+      this.options.success = function() {
+        return _this.render();
+      };
+      this.options.progress = function(d) {
+        return _this.showMessage(d);
+      };
+      this.options.failure = function(d) {
+        return _this.onLoadFailure(d);
+      };
+      this.headerView = new HeaderView({
+        el: $('#header')
+      });
+      return this.headerView.on('update-swagger-ui', function(data) {
+        return _this.updateSwaggerUi(data);
+      });
+    };
+
+    SwaggerUi.prototype.updateSwaggerUi = function(data) {
+      this.options.url = data.url;
+      return this.load();
+    };
+
+    SwaggerUi.prototype.load = function() {
+      var url, _ref1;
+      if ((_ref1 = this.mainView) != null) {
+        _ref1.clear();
+      }
+      url = this.options.url;
+      if (url.indexOf("http") !== 0) {
+        url = this.buildUrl(window.location.href.toString(), url);
+      }
+      this.options.url = url;
+      this.headerView.update(url);
+      this.api = new SwaggerApi(this.options);
+      this.api.build();
+      return this.api;
+    };
+
+    SwaggerUi.prototype.render = function() {
+      var _this = this;
+      this.showMessage('Finished Loading Resource Information. Rendering Swagger UI...');
+      this.mainView = new MainView({
+        model: this.api,
+        el: $('#' + this.dom_id)
+      }).render();
+      this.showMessage();
+      switch (this.options.docExpansion) {
+        case "full":
+          Docs.expandOperationsForResource('');
+          break;
+        case "list":
+          Docs.collapseOperationsForResource('');
+      }
+      if (this.options.onComplete) {
+        this.options.onComplete(this.api, this);
+      }
+      return setTimeout(function() {
+        return Docs.shebang();
+      }, 400);
+    };
+
+    SwaggerUi.prototype.buildUrl = function(base, url) {
+      var parts;
+      console.log("base is " + base);
+      parts = base.split("/");
+      base = parts[0] + "//" + parts[2];
+      if (url.indexOf("/") === 0) {
+        return base + url;
+      } else {
+        return base + "/" + url;
+      }
+    };
+
+    SwaggerUi.prototype.showMessage = function(data) {
+      if (data == null) {
+        data = '';
+      }
+      $('#message-bar').removeClass('message-fail');
+      $('#message-bar').addClass('message-success');
+      return $('#message-bar').html(data);
+    };
+
+    SwaggerUi.prototype.onLoadFailure = function(data) {
+      var val;
+      if (data == null) {
+        data = '';
+      }
+      $('#message-bar').removeClass('message-success');
+      $('#message-bar').addClass('message-fail');
+      val = $('#message-bar').html(data);
+      if (this.options.onFailure != null) {
+        this.options.onFailure(data);
+      }
+      return val;
+    };
+
+    return SwaggerUi;
+
+  })(Backbone.Router);
+
+  window.SwaggerUi = SwaggerUi;
+
+  HeaderView = (function(_super) {
+    __extends(HeaderView, _super);
+
+    function HeaderView() {
+      _ref1 = HeaderView.__super__.constructor.apply(this, arguments);
+      return _ref1;
+    }
+
+    HeaderView.prototype.events = {
+      'click #show-pet-store-icon': 'showPetStore',
+      'click #show-wordnik-dev-icon': 'showWordnikDev',
+      'click #explore': 'showCustom',
+      'keyup #input_baseUrl': 'showCustomOnKeyup',
+      'keyup #input_apiKey': 'showCustomOnKeyup'
+    };
+
+    HeaderView.prototype.initialize = function() {};
+
+    HeaderView.prototype.showPetStore = function(e) {
+      return this.trigger('update-swagger-ui', {
+        url: "http://petstore.swagger.wordnik.com/api/api-docs"
+      });
+    };
+
+    HeaderView.prototype.showWordnikDev = function(e) {
+      return this.trigger('update-swagger-ui', {
+        url: "http://api.wordnik.com/v4/resources.json"
+      });
+    };
+
+    HeaderView.prototype.showCustomOnKeyup = function(e) {
+      if (e.keyCode === 13) {
+        return this.showCustom();
+      }
+    };
+
+    HeaderView.prototype.showCustom = function(e) {
+      if (e != null) {
+        e.preventDefault();
+      }
+      return this.trigger('update-swagger-ui', {
+        url: $('#input_baseUrl').val(),
+        apiKey: $('#input_apiKey').val()
+      });
+    };
+
+    HeaderView.prototype.update = function(url, apiKey, trigger) {
+      if (trigger == null) {
+        trigger = false;
+      }
+      $('#input_baseUrl').val(url);
+      if (trigger) {
+        return this.trigger('update-swagger-ui', {
+          url: url
+        });
+      }
+    };
+
+    return HeaderView;
+
+  })(Backbone.View);
+
+  MainView = (function(_super) {
+    __extends(MainView, _super);
+
+    function MainView() {
+      _ref2 = MainView.__super__.constructor.apply(this, arguments);
+      return _ref2;
+    }
+
+    MainView.prototype.initialize = function() {};
+
+    MainView.prototype.render = function() {
+      var resource, _i, _len, _ref3;
+      $(this.el).html(Handlebars.templates.main(this.model));
+      _ref3 = this.model.apisArray;
+      for (_i = 0, _len = _ref3.length; _i < _len; _i++) {
+        resource = _ref3[_i];
+        this.addResource(resource);
+      }
+      return this;
+    };
+
+    MainView.prototype.addResource = function(resource) {
+      var resourceView;
+      resourceView = new ResourceView({
+        model: resource,
+        tagName: 'li',
+        id: 'resource_' + resource.name,
+        className: 'resource'
+      });
+      return $('#resources').append(resourceView.render().el);
+    };
+
+    MainView.prototype.clear = function() {
+      return $(this.el).html('');
+    };
+
+    return MainView;
+
+  })(Backbone.View);
+
+  ResourceView = (function(_super) {
+    __extends(ResourceView, _super);
+
+    function ResourceView() {
+      _ref3 = ResourceView.__super__.constructor.apply(this, arguments);
+      return _ref3;
+    }
+
+    ResourceView.prototype.initialize = function() {};
+
+    ResourceView.prototype.render = function() {
+      var operation, _i, _len, _ref4;
+      console.log(this.model.description);
+      $(this.el).html(Handlebars.templates.resource(this.model));
+      this.number = 0;
+      _ref4 = this.model.operationsArray;
+      for (_i = 0, _len = _ref4.length; _i < _len; _i++) {
+        operation = _ref4[_i];
+        this.addOperation(operation);
+      }
+      return this;
+    };
+
+    ResourceView.prototype.addOperation = function(operation) {
+      var operationView;
+      operation.number = this.number;
+      operationView = new OperationView({
+        model: operation,
+        tagName: 'li',
+        className: 'endpoint'
+      });
+      $('.endpoints', $(this.el)).append(operationView.render().el);
+      return this.number++;
+    };
+
+    return ResourceView;
+
+  })(Backbone.View);
+
+  OperationView = (function(_super) {
+    __extends(OperationView, _super);
+
+    function OperationView() {
+      _ref4 = OperationView.__super__.constructor.apply(this, arguments);
+      return _ref4;
+    }
+
+    OperationView.prototype.invocationUrl = null;
+
+    OperationView.prototype.events = {
+      'submit .sandbox': 'submitOperation',
+      'click .submit': 'submitOperation',
+      'click .response_hider': 'hideResponse',
+      'click .toggleOperation': 'toggleOperationContent'
+    };
+
+    OperationView.prototype.initialize = function() {};
+
+    OperationView.prototype.render = function() {
+      var contentTypeModel, isMethodSubmissionSupported, param, responseContentTypeView, responseSignatureView, signatureModel, statusCode, type, _i, _j, _k, _len, _len1, _len2, _ref5, _ref6, _ref7;
+      isMethodSubmissionSupported = true;
+      if (!isMethodSubmissionSupported) {
+        this.model.isReadOnly = true;
+      }
+      $(this.el).html(Handlebars.templates.operation(this.model));
+      if (this.model.responseClassSignature && this.model.responseClassSignature !== 'string') {
+        signatureModel = {
+          sampleJSON: this.model.responseSampleJSON,
+          isParam: false,
+          signature: this.model.responseClassSignature
+        };
+        responseSignatureView = new SignatureView({
+          model: signatureModel,
+          tagName: 'div'
+        });
+        $('.model-signature', $(this.el)).append(responseSignatureView.render().el);
+      } else {
+        $('.model-signature', $(this.el)).html(this.model.type);
+      }
+      contentTypeModel = {
+        isParam: false
+      };
+      contentTypeModel.consumes = this.model.consumes;
+      contentTypeModel.produces = this.model.produces;
+      _ref5 = this.model.parameters;
+      for (_i = 0, _len = _ref5.length; _i < _len; _i++) {
+        param = _ref5[_i];
+        type = param.type || param.dataType;
+        if (type.toLowerCase() === 'file') {
+          if (!contentTypeModel.consumes) {
+            console.log("set content type ");
+            contentTypeModel.consumes = 'multipart/form-data';
+          }
+        }
+      }
+      responseContentTypeView = new ResponseContentTypeView({
+        model: contentTypeModel
+      });
+      $('.response-content-type', $(this.el)).append(responseContentTypeView.render().el);
+      _ref6 = this.model.parameters;
+      for (_j = 0, _len1 = _ref6.length; _j < _len1; _j++) {
+        param = _ref6[_j];
+        this.addParameter(param, contentTypeModel.consumes);
+      }
+      _ref7 = this.model.responseMessages;
+      for (_k = 0, _len2 = _ref7.length; _k < _len2; _k++) {
+        statusCode = _ref7[_k];
+        this.addStatusCode(statusCode);
+      }
+      return this;
+    };
+
+    OperationView.prototype.addParameter = function(param, consumes) {
+      var paramView;
+      param.consumes = consumes;
+      paramView = new ParameterView({
+        model: param,
+        tagName: 'tr',
+        readOnly: this.model.isReadOnly
+      });
+      return $('.operation-params', $(this.el)).append(paramView.render().el);
+    };
+
+    OperationView.prototype.addStatusCode = function(statusCode) {
+      var statusCodeView;
+      statusCodeView = new StatusCodeView({
+        model: statusCode,
+        tagName: 'tr'
+      });
+      return $('.operation-status', $(this.el)).append(statusCodeView.render().el);
+    };
+
+    OperationView.prototype.submitOperation = function(e) {
+      var error_free, form, isFileUpload, map, o, opts, val, _i, _j, _k, _len, _len1, _len2, _ref5, _ref6, _ref7;
+      if (e != null) {
+        e.preventDefault();
+      }
+      form = $('.sandbox', $(this.el));
+      error_free = true;
+      form.find("input.required").each(function() {
+        var _this = this;
+        $(this).removeClass("error");
+        if (jQuery.trim($(this).val()) === "") {
+          $(this).addClass("error");
+          $(this).wiggle({
+            callback: function() {
+              return $(_this).focus();
+            }
+          });
+          return error_free = false;
+        }
+      });
+      if (error_free) {
+        map = {};
+        opts = {
+          parent: this
+        };
+        isFileUpload = false;
+        _ref5 = form.find("input");
+        for (_i = 0, _len = _ref5.length; _i < _len; _i++) {
+          o = _ref5[_i];
+          if ((o.value != null) && jQuery.trim(o.value).length > 0) {
+            map[o.name] = o.value;
+          }
+          if (o.type === "file") {
+            isFileUpload = true;
+          }
+        }
+        _ref6 = form.find("textarea");
+        for (_j = 0, _len1 = _ref6.length; _j < _len1; _j++) {
+          o = _ref6[_j];
+          if ((o.value != null) && jQuery.trim(o.value).length > 0) {
+            map["body"] = o.value;
+          }
+        }
+        _ref7 = form.find("select");
+        for (_k = 0, _len2 = _ref7.length; _k < _len2; _k++) {
+          o = _ref7[_k];
+          val = this.getSelectedValue(o);
+          if ((val != null) && jQuery.trim(val).length > 0) {
+            map[o.name] = val;
+          }
+        }
+        opts.responseContentType = $("div select[name=responseContentType]", $(this.el)).val();
+        opts.requestContentType = $("div select[name=parameterContentType]", $(this.el)).val();
+        $(".response_throbber", $(this.el)).show();
+        if (isFileUpload) {
+          return this.handleFileUpload(map, form);
+        } else {
+          return this.model["do"](map, opts, this.showCompleteStatus, this.showErrorStatus, this);
+        }
+      }
+    };
+
+    OperationView.prototype.success = function(response, parent) {
+      return parent.showCompleteStatus(response);
+    };
+
+    OperationView.prototype.handleFileUpload = function(map, form) {
+      var bodyParam, headerParams, o, obj, param, _i, _j, _k, _len, _len1, _len2, _ref5, _ref6, _ref7,
+        _this = this;
+      console.log("it's a file upload");
+      _ref5 = form.serializeArray();
+      for (_i = 0, _len = _ref5.length; _i < _len; _i++) {
+        o = _ref5[_i];
+        if ((o.value != null) && jQuery.trim(o.value).length > 0) {
+          map[o.name] = o.value;
+        }
+      }
+      bodyParam = new FormData();
+      _ref6 = this.model.parameters;
+      for (_j = 0, _len1 = _ref6.length; _j < _len1; _j++) {
+        param = _ref6[_j];
+        if (param.paramType === 'form') {
+          bodyParam.append(param.name, map[param.name]);
+        }
+      }
+      headerParams = {};
+      _ref7 = this.model.parameters;
+      for (_k = 0, _len2 = _ref7.length; _k < _len2; _k++) {
+        param = _ref7[_k];
+        if (param.paramType === 'header') {
+          headerParams[param.name] = map[param.name];
+        }
+      }
+      console.log(headerParams);
+      $.each($('input[type~="file"]'), function(i, el) {
+        return bodyParam.append($(el).attr('name'), el.files[0]);
+      });
+      console.log(bodyParam);
+      this.invocationUrl = this.model.supportHeaderParams() ? (headerParams = this.model.getHeaderParams(map), this.model.urlify(map, false)) : this.model.urlify(map, true);
+      $(".request_url", $(this.el)).html("<pre>" + this.invocationUrl + "</pre>");
+      obj = {
+        type: this.model.method,
+        url: this.invocationUrl,
+        headers: headerParams,
+        data: bodyParam,
+        dataType: 'json',
+        contentType: false,
+        processData: false,
+        error: function(data, textStatus, error) {
+          return _this.showErrorStatus(_this.wrap(data), _this);
+        },
+        success: function(data) {
+          return _this.showResponse(data, _this);
+        },
+        complete: function(data) {
+          return _this.showCompleteStatus(_this.wrap(data), _this);
+        }
+      };
+      if (window.authorizations) {
+        window.authorizations.apply(obj);
+      }
+      jQuery.ajax(obj);
+      return false;
+    };
+
+    OperationView.prototype.wrap = function(data) {
+      var o,
+        _this = this;
+      o = {};
+      o.content = {};
+      o.content.data = data.responseText;
+      o.getHeaders = function() {
+        return {
+          "Content-Type": data.getResponseHeader("Content-Type")
+        };
+      };
+      o.request = {};
+      o.request.url = this.invocationUrl;
+      o.status = data.status;
+      return o;
+    };
+
+    OperationView.prototype.getSelectedValue = function(select) {
+      var opt, options, _i, _len, _ref5;
+      if (!select.multiple) {
+        return select.value;
+      } else {
+        options = [];
+        _ref5 = select.options;
+        for (_i = 0, _len = _ref5.length; _i < _len; _i++) {
+          opt = _ref5[_i];
+          if (opt.selected) {
+            options.push(opt.value);
+          }
+        }
+        if (options.length > 0) {
+          return options.join(",");
+        } else {
+          return null;
+        }
+      }
+    };
+
+    OperationView.prototype.hideResponse = function(e) {
+      if (e != null) {
+        e.preventDefault();
+      }
+      $(".response", $(this.el)).slideUp();
+      return $(".response_hider", $(this.el)).fadeOut();
+    };
+
+    OperationView.prototype.showResponse = function(response) {
+      var prettyJson;
+      prettyJson = JSON.stringify(response, null, "\t").replace(/\n/g, "<br>");
+      return $(".response_body", $(this.el)).html(escape(prettyJson));
+    };
+
+    OperationView.prototype.showErrorStatus = function(data, parent) {
+      return parent.showStatus(data);
+    };
+
+    OperationView.prototype.showCompleteStatus = function(data, parent) {
+      return parent.showStatus(data);
+    };
+
+    OperationView.prototype.formatXml = function(xml) {
+      var contexp, formatted, indent, lastType, lines, ln, pad, reg, transitions, wsexp, _fn, _i, _len;
+      reg = /(>)(<)(\/*)/g;
+      wsexp = /[ ]*(.*)[ ]+\n/g;
+      contexp = /(<.+>)(.+\n)/g;
+      xml = xml.replace(reg, '$1\n$2$3').replace(wsexp, '$1\n').replace(contexp, '$1\n$2');
+      pad = 0;
+      formatted = '';
+      lines = xml.split('\n');
+      indent = 0;
+      lastType = 'other';
+      transitions = {
+        'single->single': 0,
+        'single->closing': -1,
+        'single->opening': 0,
+        'single->other': 0,
+        'closing->single': 0,
+        'closing->closing': -1,
+        'closing->opening': 0,
+        'closing->other': 0,
+        'opening->single': 1,
+        'opening->closing': 0,
+        'opening->opening': 1,
+        'opening->other': 1,
+        'other->single': 0,
+        'other->closing': -1,
+        'other->opening': 0,
+        'other->other': 0
+      };
+      _fn = function(ln) {
+        var fromTo, j, key, padding, type, types, value;
+        types = {
+          single: Boolean(ln.match(/<.+\/>/)),
+          closing: Boolean(ln.match(/<\/.+>/)),
+          opening: Boolean(ln.match(/<[^!?].*>/))
+        };
+        type = ((function() {
+          var _results;
+          _results = [];
+          for (key in types) {
+            value = types[key];
+            if (value) {
+              _results.push(key);
+            }
+          }
+          return _results;
+        })())[0];
+        type = type === void 0 ? 'other' : type;
+        fromTo = lastType + '->' + type;
+        lastType = type;
+        padding = '';
+        indent += transitions[fromTo];
+        padding = ((function() {
+          var _j, _ref5, _results;
+          _results = [];
+          for (j = _j = 0, _ref5 = indent; 0 <= _ref5 ? _j < _ref5 : _j > _ref5; j = 0 <= _ref5 ? ++_j : --_j) {
+            _results.push('  ');
+          }
+          return _results;
+        })()).join('');
+        if (fromTo === 'opening->closing') {
+          return formatted = formatted.substr(0, formatted.length - 1) + ln + '\n';
+        } else {
+          return formatted += padding + ln + '\n';
+        }
+      };
+      for (_i = 0, _len = lines.length; _i < _len; _i++) {
+        ln = lines[_i];
+        _fn(ln);
+      }
+      return formatted;
+    };
+
+    OperationView.prototype.showStatus = function(data) {
+      var code, content, contentType, headers, pre, response_body;
+      content = data.content.data;
+      headers = data.getHeaders();
+      contentType = headers["Content-Type"];
+      if (content === void 0) {
+        code = $('<code />').text("no content");
+        pre = $('<pre class="json" />').append(code);
+      } else if (contentType.indexOf("application/json") === 0 || contentType.indexOf("application/hal+json") === 0) {
+        code = $('<code />').text(JSON.stringify(JSON.parse(content), null, 2));
+        pre = $('<pre class="json" />').append(code);
+      } else if (contentType.indexOf("application/xml") === 0) {
+        code = $('<code />').text(this.formatXml(content));
+        pre = $('<pre class="xml" />').append(code);
+      } else if (contentType.indexOf("text/html") === 0) {
+        code = $('<code />').html(content);
+        pre = $('<pre class="xml" />').append(code);
+      } else if (contentType.indexOf("image/") === 0) {
+        pre = $('<img>').attr('src', data.request.url);
+      } else {
+        code = $('<code />').text(content);
+        pre = $('<pre class="json" />').append(code);
+      }
+      response_body = pre;
+      $(".request_url", $(this.el)).html("<pre>" + data.request.url + "</pre>");
+      $(".response_code", $(this.el)).html("<pre>" + data.status + "</pre>");
+      $(".response_body", $(this.el)).html(response_body);
+      $(".response_headers", $(this.el)).html("<pre>" + JSON.stringify(data.getHeaders(), null, "  ").replace(/\n/g, "<br>") + "</pre>");
+      $(".response", $(this.el)).slideDown();
+      $(".response_hider", $(this.el)).show();
+      $(".response_throbber", $(this.el)).hide();
+      return hljs.highlightBlock($('.response_body', $(this.el))[0]);
+    };
+
+    OperationView.prototype.toggleOperationContent = function() {
+      var elem;
+      elem = $('#' + Docs.escapeResourceName(this.model.resourceName) + "_" + this.model.nickname + "_" + this.model.method + "_" + this.model.number + "_content");
+      if (elem.is(':visible')) {
+        return Docs.collapseOperation(elem);
+      } else {
+        return Docs.expandOperation(elem);
+      }
+    };
+
+    return OperationView;
+
+  })(Backbone.View);
+
+  StatusCodeView = (function(_super) {
+    __extends(StatusCodeView, _super);
+
+    function StatusCodeView() {
+      _ref5 = StatusCodeView.__super__.constructor.apply(this, arguments);
+      return _ref5;
+    }
+
+    StatusCodeView.prototype.initialize = function() {};
+
+    StatusCodeView.prototype.render = function() {
+      var template;
+      template = this.template();
+      $(this.el).html(template(this.model));
+      return this;
+    };
+
+    StatusCodeView.prototype.template = function() {
+      return Handlebars.templates.status_code;
+    };
+
+    return StatusCodeView;
+
+  })(Backbone.View);
+
+  ParameterView = (function(_super) {
+    __extends(ParameterView, _super);
+
+    function ParameterView() {
+      _ref6 = ParameterView.__super__.constructor.apply(this, arguments);
+      return _ref6;
+    }
+
+    ParameterView.prototype.initialize = function() {};
+
+    ParameterView.prototype.render = function() {
+      var contentTypeModel, isParam, parameterContentTypeView, responseContentTypeView, signatureModel, signatureView, template, type;
+      type = this.model.type || this.model.dataType;
+      if (this.model.paramType === 'body') {
+        this.model.isBody = true;
+      }
+      if (type.toLowerCase() === 'file') {
+        this.model.isFile = true;
+      }
+      template = this.template();
+      $(this.el).html(template(this.model));
+      signatureModel = {
+        sampleJSON: this.model.sampleJSON,
+        isParam: true,
+        signature: this.model.signature
+      };
+      if (this.model.sampleJSON) {
+        signatureView = new SignatureView({
+          model: signatureModel,
+          tagName: 'div'
+        });
+        $('.model-signature', $(this.el)).append(signatureView.render().el);
+      } else {
+        $('.model-signature', $(this.el)).html(this.model.signature);
+      }
+      isParam = false;
+      if (this.model.isBody) {
+        isParam = true;
+      }
+      contentTypeModel = {
+        isParam: isParam
+      };
+      contentTypeModel.consumes = this.model.consumes;
+      if (isParam) {
+        parameterContentTypeView = new ParameterContentTypeView({
+          model: contentTypeModel
+        });
+        $('.parameter-content-type', $(this.el)).append(parameterContentTypeView.render().el);
+      } else {
+        responseContentTypeView = new ResponseContentTypeView({
+          model: contentTypeModel
+        });
+        $('.response-content-type', $(this.el)).append(responseContentTypeView.render().el);
+      }
+      return this;
+    };
+
+    ParameterView.prototype.template = function() {
+      if (this.model.isList) {
+        return Handlebars.templates.param_list;
+      } else {
+        if (this.options.readOnly) {
+          if (this.model.required) {
+            return Handlebars.templates.param_readonly_required;
+          } else {
+            return Handlebars.templates.param_readonly;
+          }
+        } else {
+          if (this.model.required) {
+            return Handlebars.templates.param_required;
+          } else {
+            return Handlebars.templates.param;
+          }
+        }
+      }
+    };
+
+    return ParameterView;
+
+  })(Backbone.View);
+
+  SignatureView = (function(_super) {
+    __extends(SignatureView, _super);
+
+    function SignatureView() {
+      _ref7 = SignatureView.__super__.constructor.apply(this, arguments);
+      return _ref7;
+    }
+
+    SignatureView.prototype.events = {
+      'click a.description-link': 'switchToDescription',
+      'click a.snippet-link': 'switchToSnippet',
+      'mousedown .snippet': 'snippetToTextArea'
+    };
+
+    SignatureView.prototype.initialize = function() {};
+
+    SignatureView.prototype.render = function() {
+      var template;
+      template = this.template();
+      $(this.el).html(template(this.model));
+      this.switchToDescription();
+      this.isParam = this.model.isParam;
+      if (this.isParam) {
+        $('.notice', $(this.el)).text('Click to set as parameter value');
+      }
+      return this;
+    };
+
+    SignatureView.prototype.template = function() {
+      return Handlebars.templates.signature;
+    };
+
+    SignatureView.prototype.switchToDescription = function(e) {
+      if (e != null) {
+        e.preventDefault();
+      }
+      $(".snippet", $(this.el)).hide();
+      $(".description", $(this.el)).show();
+      $('.description-link', $(this.el)).addClass('selected');
+      return $('.snippet-link', $(this.el)).removeClass('selected');
+    };
+
+    SignatureView.prototype.switchToSnippet = function(e) {
+      if (e != null) {
+        e.preventDefault();
+      }
+      $(".description", $(this.el)).hide();
+      $(".snippet", $(this.el)).show();
+      $('.snippet-link', $(this.el)).addClass('selected');
+      return $('.description-link', $(this.el)).removeClass('selected');
+    };
+
+    SignatureView.prototype.snippetToTextArea = function(e) {
+      var textArea;
+      if (this.isParam) {
+        if (e != null) {
+          e.preventDefault();
+        }
+        textArea = $('textarea', $(this.el.parentNode.parentNode.parentNode));
+        if ($.trim(textArea.val()) === '') {
+          return textArea.val(this.model.sampleJSON);
+        }
+      }
+    };
+
+    return SignatureView;
+
+  })(Backbone.View);
+
+  ContentTypeView = (function(_super) {
+    __extends(ContentTypeView, _super);
+
+    function ContentTypeView() {
+      _ref8 = ContentTypeView.__super__.constructor.apply(this, arguments);
+      return _ref8;
+    }
+
+    ContentTypeView.prototype.initialize = function() {};
+
+    ContentTypeView.prototype.render = function() {
+      var template;
+      template = this.template();
+      $(this.el).html(template(this.model));
+      $('label[for=contentType]', $(this.el)).text('Response Content Type');
+      return this;
+    };
+
+    ContentTypeView.prototype.template = function() {
+      return Handlebars.templates.content_type;
+    };
+
+    return ContentTypeView;
+
+  })(Backbone.View);
+
+  ResponseContentTypeView = (function(_super) {
+    __extends(ResponseContentTypeView, _super);
+
+    function ResponseContentTypeView() {
+      _ref9 = ResponseContentTypeView.__super__.constructor.apply(this, arguments);
+      return _ref9;
+    }
+
+    ResponseContentTypeView.prototype.initialize = function() {};
+
+    ResponseContentTypeView.prototype.render = function() {
+      var template;
+      template = this.template();
+      $(this.el).html(template(this.model));
+      $('label[for=responseContentType]', $(this.el)).text('Response Content Type');
+      return this;
+    };
+
+    ResponseContentTypeView.prototype.template = function() {
+      return Handlebars.templates.response_content_type;
+    };
+
+    return ResponseContentTypeView;
+
+  })(Backbone.View);
+
+  ParameterContentTypeView = (function(_super) {
+    __extends(ParameterContentTypeView, _super);
+
+    function ParameterContentTypeView() {
+      _ref10 = ParameterContentTypeView.__super__.constructor.apply(this, arguments);
+      return _ref10;
+    }
+
+    ParameterContentTypeView.prototype.initialize = function() {};
+
+    ParameterContentTypeView.prototype.render = function() {
+      var template;
+      template = this.template();
+      $(this.el).html(template(this.model));
+      $('label[for=parameterContentType]', $(this.el)).text('Parameter content type:');
+      return this;
+    };
+
+    ParameterContentTypeView.prototype.template = function() {
+      return Handlebars.templates.parameter_content_type;
+    };
+
+    return ParameterContentTypeView;
+
+  })(Backbone.View);
+
+}).call(this);
diff --git a/opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/swagger-ui.min.js b/opendaylight/md-sal/sal-rest-docgen/src/main/resources/explorer/swagger-ui.min.js
new file mode 100644 (file)
index 0000000..be2c105
--- /dev/null
@@ -0,0 +1 @@
+$(function(){$.fn.vAlign=function(){return this.each(function(c){var a=$(this).height();var d=$(this).parent().height();var b=(d-a)/2;$(this).css("margin-top",b)})};$.fn.stretchFormtasticInputWidthToParent=function(){return this.each(function(b){var d=$(this).closest("form").innerWidth();var c=parseInt($(this).closest("form").css("padding-left"),10)+parseInt($(this).closest("form").css("padding-right"),10);var a=parseInt($(this).css("padding-left"),10)+parseInt($(this).css("padding-right"),10);$(this).css("width",d-c-a)})};$("form.formtastic li.string input, form.formtastic textarea").stretchFormtasticInputWidthToParent();$("ul.downplayed li div.content p").vAlign();$("form.sandbox").submit(function(){var a=true;$(this).find("input.required").each(function(){$(this).removeClass("error");if($(this).val()==""){$(this).addClass("error");$(this).wiggle();a=false}});return a})});function clippyCopiedCallback(b){$("#api_key_copied").fadeIn().delay(1000).fadeOut()}function log(){if(window.console){console.log.apply(console,arguments)}}if(Function.prototype.bind&&console&&typeof console.log=="object"){["log","info","warn","error","assert","dir","clear","profile","profileEnd"].forEach(function(a){console[a]=this.bind(console[a],console)},Function.prototype.call)}var Docs={shebang:function(){var b=$.param.fragment().split("/");b.shift();switch(b.length){case 1:var d="resource_"+b[0];Docs.expandEndpointListForResource(b[0]);$("#"+d).slideto({highlight:false});break;case 2:Docs.expandEndpointListForResource(b[0]);$("#"+d).slideto({highlight:false});var c=b.join("_");var a=c+"_content";Docs.expandOperation($("#"+a));$("#"+c).slideto({highlight:false});break}},toggleEndpointListForResource:function(b){var a=$("li#resource_"+Docs.escapeResourceName(b)+" ul.endpoints");if(a.is(":visible")){Docs.collapseEndpointListForResource(b)}else{Docs.expandEndpointListForResource(b)}},expandEndpointListForResource:function(b){var b=Docs.escapeResourceName(b);if(b==""){$(".resource ul.endpoints").slideDown();return}$("li#resource_"+b).addClass("active");var a=$("li#resource_"+b+" ul.endpoints");a.slideDown()},collapseEndpointListForResource:function(b){var b=Docs.escapeResourceName(b);$("li#resource_"+b).removeClass("active");var a=$("li#resource_"+b+" ul.endpoints");a.slideUp()},expandOperationsForResource:function(a){Docs.expandEndpointListForResource(a);if(a==""){$(".resource ul.endpoints li.operation div.content").slideDown();return}$("li#resource_"+Docs.escapeResourceName(a)+" li.operation div.content").each(function(){Docs.expandOperation($(this))})},collapseOperationsForResource:function(a){Docs.expandEndpointListForResource(a);$("li#resource_"+Docs.escapeResourceName(a)+" li.operation div.content").each(function(){Docs.collapseOperation($(this))})},escapeResourceName:function(a){return a.replace(/[!"#$%&'()*+,.\/:;<=>?@\[\\\]\^`{|}~]/g,"\\$&")},expandOperation:function(a){a.slideDown()},collapseOperation:function(a){a.slideUp()}};(function(){var b=Handlebars.template,a=Handlebars.templates=Handlebars.templates||{};a.content_type=b(function(g,l,f,k,j){this.compilerInfo=[4,">= 1.0.0"];f=this.merge(f,g.helpers);j=j||{};var i="",c,h="function",m=this;function e(r,q){var o="",p;o+="\n  ";p=f.each.call(r,r.produces,{hash:{},inverse:m.noop,fn:m.program(2,d,q),data:q});if(p||p===0){o+=p}o+="\n";return o}function d(r,q){var o="",p;o+='\n      <option value="';p=(typeof r===h?r.apply(r):r);if(p||p===0){o+=p}o+='">';p=(typeof r===h?r.apply(r):r);if(p||p===0){o+=p}o+="</option>\n        ";return o}function n(p,o){return'\n  <option value="application/json">application/json</option>\n'}i+='<label for="contentType"></label>\n<select name="contentType">\n';c=f["if"].call(l,l.produces,{hash:{},inverse:m.program(4,n,j),fn:m.program(1,e,j),data:j});if(c||c===0){i+=c}i+="\n</select>\n";return i})})();(function(){var b=Handlebars.template,a=Handlebars.templates=Handlebars.templates||{};a.main=b(function(g,m,f,l,k){this.compilerInfo=[4,">= 1.0.0"];f=this.merge(f,g.helpers);k=k||{};var i="",c,h="function",j=this.escapeExpression,p=this;function e(v,u){var r="",t,s;r+='\n    <div class="info_title">'+j(((t=((t=v.info),t==null||t===false?t:t.title)),typeof t===h?t.apply(v):t))+'</div>\n    <div class="info_description">';s=((t=((t=v.info),t==null||t===false?t:t.description)),typeof t===h?t.apply(v):t);if(s||s===0){r+=s}r+="</div>\n    ";s=f["if"].call(v,((t=v.info),t==null||t===false?t:t.termsOfServiceUrl),{hash:{},inverse:p.noop,fn:p.program(2,d,u),data:u});if(s||s===0){r+=s}r+="\n    ";s=f["if"].call(v,((t=v.info),t==null||t===false?t:t.contact),{hash:{},inverse:p.noop,fn:p.program(4,q,u),data:u});if(s||s===0){r+=s}r+="\n    ";s=f["if"].call(v,((t=v.info),t==null||t===false?t:t.license),{hash:{},inverse:p.noop,fn:p.program(6,o,u),data:u});if(s||s===0){r+=s}r+="\n  ";return r}function d(u,t){var r="",s;r+='<div class="info_tos"><a href="'+j(((s=((s=u.info),s==null||s===false?s:s.termsOfServiceUrl)),typeof s===h?s.apply(u):s))+'">Terms of service</a></div>';return r}function q(u,t){var r="",s;r+="<div class='info_contact'><a href=\"mailto:"+j(((s=((s=u.info),s==null||s===false?s:s.contact)),typeof s===h?s.apply(u):s))+'">Contact the developer</a></div>';return r}function o(u,t){var r="",s;r+="<div class='info_license'><a href='"+j(((s=((s=u.info),s==null||s===false?s:s.licenseUrl)),typeof s===h?s.apply(u):s))+"'>"+j(((s=((s=u.info),s==null||s===false?s:s.license)),typeof s===h?s.apply(u):s))+"</a></div>";return r}function n(u,t){var r="",s;r+='\n        , <span style="font-variant: small-caps">api version</span>: ';if(s=f.apiVersion){s=s.call(u,{hash:{},data:t})}else{s=u.apiVersion;s=typeof s===h?s.apply(u):s}r+=j(s)+"\n        ";return r}i+="<div class='info' id='api_info'>\n  ";c=f["if"].call(m,m.info,{hash:{},inverse:p.noop,fn:p.program(1,e,k),data:k});if(c||c===0){i+=c}i+="\n</div>\n<div class='container' id='resources_container'>\n    <ul id='resources'>\n    </ul>\n\n    <div class=\"footer\">\n        <br>\n        <br>\n        <h4 style=\"color: #999\">[ <span style=\"font-variant: small-caps\">base url</span>: ";if(c=f.basePath){c=c.call(m,{hash:{},data:k})}else{c=m.basePath;c=typeof c===h?c.apply(m):c}i+=j(c)+"\n        ";c=f["if"].call(m,m.apiVersion,{hash:{},inverse:p.noop,fn:p.program(8,n,k),data:k});if(c||c===0){i+=c}i+="]</h4>\n    </div>\n</div>\n";return i})})();(function(){var b=Handlebars.template,a=Handlebars.templates=Handlebars.templates||{};a.operation=b(function(h,n,g,m,l){this.compilerInfo=[4,">= 1.0.0"];g=this.merge(g,h.helpers);l=l||{};var j="",d,i="function",k=this.escapeExpression,r=this;function f(v,u){var s="",t;s+="\n        <h4>Implementation Notes</h4>\n        <p>";if(t=g.notes){t=t.call(v,{hash:{},data:u})}else{t=v.notes;t=typeof t===i?t.apply(v):t}if(t||t===0){s+=t}s+="</p>\n        ";return s}function c(t,s){return'\n          <h4>Response Class</h4>\n          <p><span class="model-signature" /></p>\n          <br/>\n          <div class="response-content-type" />\n        '}function q(t,s){return'\n          <h4>Parameters</h4>\n          <table class=\'fullwidth\'>\n          <thead>\n            <tr>\n            <th style="width: 100px; max-width: 100px">Parameter</th>\n            <th style="width: 310px; max-width: 310px">Value</th>\n            <th style="width: 200px; max-width: 200px">Description</th>\n            <th style="width: 100px; max-width: 100px">Parameter Type</th>\n            <th style="width: 220px; max-width: 230px">Data Type</th>\n            </tr>\n          </thead>\n          <tbody class="operation-params">\n\n          </tbody>\n          </table>\n          '}function p(t,s){return"\n          <div style='margin:0;padding:0;display:inline'></div>\n          <h4>Error Status Codes</h4>\n          <table class='fullwidth'>\n            <thead>\n            <tr>\n              <th>HTTP Status Code</th>\n              <th>Reason</th>\n            </tr>\n            </thead>\n            <tbody class=\"operation-status\">\n            \n            </tbody>\n          </table>\n          "}function o(t,s){return"\n          "}function e(t,s){return"\n          <div class='sandbox_header'>\n            <input class='submit' name='commit' type='button' value='Try it out!' />\n            <a href='#' class='response_hider' style='display:none'>Hide Response</a>\n            <img alt='Throbber' class='response_throbber' src='images/throbber.gif' style='display:none' />\n          </div>\n          "}j+="\n  <ul class='operations' >\n    <li class='";if(d=g.method){d=d.call(n,{hash:{},data:l})}else{d=n.method;d=typeof d===i?d.apply(n):d}j+=k(d)+" operation' id='";if(d=g.resourceName){d=d.call(n,{hash:{},data:l})}else{d=n.resourceName;d=typeof d===i?d.apply(n):d}j+=k(d)+"_";if(d=g.nickname){d=d.call(n,{hash:{},data:l})}else{d=n.nickname;d=typeof d===i?d.apply(n):d}j+=k(d)+"_";if(d=g.method){d=d.call(n,{hash:{},data:l})}else{d=n.method;d=typeof d===i?d.apply(n):d}j+=k(d)+"_";if(d=g.number){d=d.call(n,{hash:{},data:l})}else{d=n.number;d=typeof d===i?d.apply(n):d}j+=k(d)+"'>\n      <div class='heading'>\n        <h3>\n          <span class='http_method'>\n          <a href='#!/";if(d=g.resourceName){d=d.call(n,{hash:{},data:l})}else{d=n.resourceName;d=typeof d===i?d.apply(n):d}j+=k(d)+"/";if(d=g.nickname){d=d.call(n,{hash:{},data:l})}else{d=n.nickname;d=typeof d===i?d.apply(n):d}j+=k(d)+"_";if(d=g.method){d=d.call(n,{hash:{},data:l})}else{d=n.method;d=typeof d===i?d.apply(n):d}j+=k(d)+"_";if(d=g.number){d=d.call(n,{hash:{},data:l})}else{d=n.number;d=typeof d===i?d.apply(n):d}j+=k(d)+'\' class="toggleOperation">';if(d=g.method){d=d.call(n,{hash:{},data:l})}else{d=n.method;d=typeof d===i?d.apply(n):d}j+=k(d)+"</a>\n          </span>\n          <span class='path'>\n          <a href='#!/";if(d=g.resourceName){d=d.call(n,{hash:{},data:l})}else{d=n.resourceName;d=typeof d===i?d.apply(n):d}j+=k(d)+"/";if(d=g.nickname){d=d.call(n,{hash:{},data:l})}else{d=n.nickname;d=typeof d===i?d.apply(n):d}j+=k(d)+"_";if(d=g.method){d=d.call(n,{hash:{},data:l})}else{d=n.method;d=typeof d===i?d.apply(n):d}j+=k(d)+"_";if(d=g.number){d=d.call(n,{hash:{},data:l})}else{d=n.number;d=typeof d===i?d.apply(n):d}j+=k(d)+'\' class="toggleOperation">';if(d=g.path){d=d.call(n,{hash:{},data:l})}else{d=n.path;d=typeof d===i?d.apply(n):d}j+=k(d)+"</a>\n          </span>\n        </h3>\n        <ul class='options'>\n          <li>\n          <a href='#!/";if(d=g.resourceName){d=d.call(n,{hash:{},data:l})}else{d=n.resourceName;d=typeof d===i?d.apply(n):d}j+=k(d)+"/";if(d=g.nickname){d=d.call(n,{hash:{},data:l})}else{d=n.nickname;d=typeof d===i?d.apply(n):d}j+=k(d)+"_";if(d=g.method){d=d.call(n,{hash:{},data:l})}else{d=n.method;d=typeof d===i?d.apply(n):d}j+=k(d)+"_";if(d=g.number){d=d.call(n,{hash:{},data:l})}else{d=n.number;d=typeof d===i?d.apply(n):d}j+=k(d)+'\' class="toggleOperation">';if(d=g.summary){d=d.call(n,{hash:{},data:l})}else{d=n.summary;d=typeof d===i?d.apply(n):d}if(d||d===0){j+=d}j+="</a>\n          </li>\n        </ul>\n      </div>\n      <div class='content' id='";if(d=g.resourceName){d=d.call(n,{hash:{},data:l})}else{d=n.resourceName;d=typeof d===i?d.apply(n):d}j+=k(d)+"_";if(d=g.nickname){d=d.call(n,{hash:{},data:l})}else{d=n.nickname;d=typeof d===i?d.apply(n):d}j+=k(d)+"_";if(d=g.method){d=d.call(n,{hash:{},data:l})}else{d=n.method;d=typeof d===i?d.apply(n):d}j+=k(d)+"_";if(d=g.number){d=d.call(n,{hash:{},data:l})}else{d=n.number;d=typeof d===i?d.apply(n):d}j+=k(d)+"_content' style='display:none'>\n        ";d=g["if"].call(n,n.notes,{hash:{},inverse:r.noop,fn:r.program(1,f,l),data:l});if(d||d===0){j+=d}j+="\n        ";d=g["if"].call(n,n.type,{hash:{},inverse:r.noop,fn:r.program(3,c,l),data:l});if(d||d===0){j+=d}j+="\n        <form accept-charset='UTF-8' class='sandbox'>\n          <div style='margin:0;padding:0;display:inline'></div>\n          ";d=g["if"].call(n,n.parameters,{hash:{},inverse:r.noop,fn:r.program(5,q,l),data:l});if(d||d===0){j+=d}j+="\n          ";d=g["if"].call(n,n.responseMessages,{hash:{},inverse:r.noop,fn:r.program(7,p,l),data:l});if(d||d===0){j+=d}j+="\n          ";d=g["if"].call(n,n.isReadOnly,{hash:{},inverse:r.program(11,e,l),fn:r.program(9,o,l),data:l});if(d||d===0){j+=d}j+="\n        </form>\n        <div class='response' style='display:none'>\n          <h4>Request URL</h4>\n          <div class='block request_url'></div>\n          <h4>Response Body</h4>\n          <div class='block response_body'></div>\n          <h4>Response Code</h4>\n          <div class='block response_code'></div>\n          <h4>Response Headers</h4>\n          <div class='block response_headers'></div>\n        </div>\n      </div>\n    </li>\n  </ul>\n";return j})})();(function(){var b=Handlebars.template,a=Handlebars.templates=Handlebars.templates||{};a.param=b(function(f,q,o,j,s){this.compilerInfo=[4,">= 1.0.0"];o=this.merge(o,f.helpers);s=s||{};var p="",g,d="function",c=this.escapeExpression,n=this;function m(x,w){var u="",v;u+="\n         ";v=o["if"].call(x,x.isFile,{hash:{},inverse:n.program(4,k,w),fn:n.program(2,l,w),data:w});if(v||v===0){u+=v}u+="\n     ";return u}function l(x,w){var u="",v;u+='\n                    <input type="file" name=\'';if(v=o.name){v=v.call(x,{hash:{},data:w})}else{v=x.name;v=typeof v===d?v.apply(x):v}u+=c(v)+'\'/>\n                 <div class="parameter-content-type" />\n                ';return u}function k(x,w){var u="",v;u+="\n                    ";v=o["if"].call(x,x.defaultValue,{hash:{},inverse:n.program(7,h,w),fn:n.program(5,i,w),data:w});if(v||v===0){u+=v}u+="\n               ";return u}function i(x,w){var u="",v;u+="\n                            <textarea class='body-textarea' name='";if(v=o.name){v=v.call(x,{hash:{},data:w})}else{v=x.name;v=typeof v===d?v.apply(x):v}u+=c(v)+"'>";if(v=o.defaultValue){v=v.call(x,{hash:{},data:w})}else{v=x.defaultValue;v=typeof v===d?v.apply(x):v}u+=c(v)+"</textarea>\n                     ";return u}function h(x,w){var u="",v;u+="\n                            <textarea class='body-textarea' name='";if(v=o.name){v=v.call(x,{hash:{},data:w})}else{v=x.name;v=typeof v===d?v.apply(x):v}u+=c(v)+'\'></textarea>\n                           <br />\n                                <div class="parameter-content-type" />\n                        ';return u}function e(x,w){var u="",v;u+="\n            ";v=o["if"].call(x,x.defaultValue,{hash:{},inverse:n.program(12,r,w),fn:n.program(10,t,w),data:w});if(v||v===0){u+=v}u+="\n     ";return u}function t(x,w){var u="",v;u+="\n                    <input class='parameter' minlength='0' name='";if(v=o.name){v=v.call(x,{hash:{},data:w})}else{v=x.name;v=typeof v===d?v.apply(x):v}u+=c(v)+"' placeholder='' type='text' value='";if(v=o.defaultValue){v=v.call(x,{hash:{},data:w})}else{v=x.defaultValue;v=typeof v===d?v.apply(x):v}u+=c(v)+"'/>\n            ";return u}function r(x,w){var u="",v;u+="\n                    <input class='parameter' minlength='0' name='";if(v=o.name){v=v.call(x,{hash:{},data:w})}else{v=x.name;v=typeof v===d?v.apply(x):v}u+=c(v)+"' placeholder='' type='text' value=''/>\n           ";return u}p+="<td class='code'>";if(g=o.name){g=g.call(q,{hash:{},data:s})}else{g=q.name;g=typeof g===d?g.apply(q):g}p+=c(g)+"</td>\n<td>\n\n  ";g=o["if"].call(q,q.isBody,{hash:{},inverse:n.program(9,e,s),fn:n.program(1,m,s),data:s});if(g||g===0){p+=g}p+="\n\n</td>\n<td>";if(g=o.description){g=g.call(q,{hash:{},data:s})}else{g=q.description;g=typeof g===d?g.apply(q):g}if(g||g===0){p+=g}p+="</td>\n<td>";if(g=o.paramType){g=g.call(q,{hash:{},data:s})}else{g=q.paramType;g=typeof g===d?g.apply(q):g}if(g||g===0){p+=g}p+='</td>\n<td>\n        <span class="model-signature"></span>\n</td>\n';return p})})();(function(){var b=Handlebars.template,a=Handlebars.templates=Handlebars.templates||{};a.param_list=b(function(g,r,p,l,w){this.compilerInfo=[4,">= 1.0.0"];p=this.merge(p,g.helpers);w=w||{};var q="",i,e,o=this,d="function",c=this.escapeExpression;function n(y,x){return" multiple='multiple'"}function m(y,x){return"\n    "}function k(A,z){var x="",y;x+="\n      ";y=p["if"].call(A,A.defaultValue,{hash:{},inverse:o.program(8,h,z),fn:o.program(6,j,z),data:z});if(y||y===0){x+=y}x+="\n    ";return x}function j(y,x){return"\n      "}function h(A,z){var x="",y;x+="\n        ";y=p["if"].call(A,A.allowMultiple,{hash:{},inverse:o.program(11,v,z),fn:o.program(9,f,z),data:z});if(y||y===0){x+=y}x+="\n      ";return x}function f(y,x){return"\n         "}function v(y,x){return"\n          <option selected=\"\" value=''></option>\n         "}function u(A,z){var x="",y;x+="\n      ";y=p["if"].call(A,A.isDefault,{hash:{},inverse:o.program(16,s,z),fn:o.program(14,t,z),data:z});if(y||y===0){x+=y}x+="\n    ";return x}function t(A,z){var x="",y;x+='\n        <option selected="" value=\'';if(y=p.value){y=y.call(A,{hash:{},data:z})}else{y=A.value;y=typeof y===d?y.apply(A):y}x+=c(y)+"'>";if(y=p.value){y=y.call(A,{hash:{},data:z})}else{y=A.value;y=typeof y===d?y.apply(A):y}x+=c(y)+" (default)</option>\n      ";return x}function s(A,z){var x="",y;x+="\n        <option value='";if(y=p.value){y=y.call(A,{hash:{},data:z})}else{y=A.value;y=typeof y===d?y.apply(A):y}x+=c(y)+"'>";if(y=p.value){y=y.call(A,{hash:{},data:z})}else{y=A.value;y=typeof y===d?y.apply(A):y}x+=c(y)+"</option>\n      ";return x}q+="<td class='code'>";if(i=p.name){i=i.call(r,{hash:{},data:w})}else{i=r.name;i=typeof i===d?i.apply(r):i}q+=c(i)+"</td>\n<td>\n  <select ";i=p["if"].call(r,r.allowMultiple,{hash:{},inverse:o.noop,fn:o.program(1,n,w),data:w});if(i||i===0){q+=i}q+=" class='parameter' name='";if(i=p.name){i=i.call(r,{hash:{},data:w})}else{i=r.name;i=typeof i===d?i.apply(r):i}q+=c(i)+"'>\n    ";i=p["if"].call(r,r.required,{hash:{},inverse:o.program(5,k,w),fn:o.program(3,m,w),data:w});if(i||i===0){q+=i}q+="\n    ";e=p.each.call(r,((i=r.allowableValues),i==null||i===false?i:i.descriptiveValues),{hash:{},inverse:o.noop,fn:o.program(13,u,w),data:w});if(e||e===0){q+=e}q+="\n  </select>\n</td>\n<td>";if(e=p.description){e=e.call(r,{hash:{},data:w})}else{e=r.description;e=typeof e===d?e.apply(r):e}if(e||e===0){q+=e}q+="</td>\n<td>";if(e=p.paramType){e=e.call(r,{hash:{},data:w})}else{e=r.paramType;e=typeof e===d?e.apply(r):e}if(e||e===0){q+=e}q+='</td>\n<td><span class="model-signature"></span></td>';return q})})();(function(){var b=Handlebars.template,a=Handlebars.templates=Handlebars.templates||{};a.param_readonly=b(function(g,m,f,l,k){this.compilerInfo=[4,">= 1.0.0"];f=this.merge(f,g.helpers);k=k||{};var i="",d,h="function",j=this.escapeExpression,o=this;function e(t,s){var q="",r;q+="\n        <textarea class='body-textarea' readonly='readonly' name='";if(r=f.name){r=r.call(t,{hash:{},data:s})}else{r=t.name;r=typeof r===h?r.apply(t):r}q+=j(r)+"'>";if(r=f.defaultValue){r=r.call(t,{hash:{},data:s})}else{r=t.defaultValue;r=typeof r===h?r.apply(t):r}q+=j(r)+"</textarea>\n    ";return q}function c(t,s){var q="",r;q+="\n        ";r=f["if"].call(t,t.defaultValue,{hash:{},inverse:o.program(6,n,s),fn:o.program(4,p,s),data:s});if(r||r===0){q+=r}q+="\n    ";return q}function p(t,s){var q="",r;q+="\n            ";if(r=f.defaultValue){r=r.call(t,{hash:{},data:s})}else{r=t.defaultValue;r=typeof r===h?r.apply(t):r}q+=j(r)+"\n        ";return q}function n(r,q){return"\n            (empty)\n        "}i+="<td class='code'>";if(d=f.name){d=d.call(m,{hash:{},data:k})}else{d=m.name;d=typeof d===h?d.apply(m):d}i+=j(d)+"</td>\n<td>\n    ";d=f["if"].call(m,m.isBody,{hash:{},inverse:o.program(3,c,k),fn:o.program(1,e,k),data:k});if(d||d===0){i+=d}i+="\n</td>\n<td>";if(d=f.description){d=d.call(m,{hash:{},data:k})}else{d=m.description;d=typeof d===h?d.apply(m):d}if(d||d===0){i+=d}i+="</td>\n<td>";if(d=f.paramType){d=d.call(m,{hash:{},data:k})}else{d=m.paramType;d=typeof d===h?d.apply(m):d}if(d||d===0){i+=d}i+='</td>\n<td><span class="model-signature"></span></td>\n';return i})})();(function(){var b=Handlebars.template,a=Handlebars.templates=Handlebars.templates||{};a.param_readonly_required=b(function(g,m,f,l,k){this.compilerInfo=[4,">= 1.0.0"];f=this.merge(f,g.helpers);k=k||{};var i="",d,h="function",j=this.escapeExpression,o=this;function e(t,s){var q="",r;q+="\n        <textarea class='body-textarea'  readonly='readonly' placeholder='(required)' name='";if(r=f.name){r=r.call(t,{hash:{},data:s})}else{r=t.name;r=typeof r===h?r.apply(t):r}q+=j(r)+"'>";if(r=f.defaultValue){r=r.call(t,{hash:{},data:s})}else{r=t.defaultValue;r=typeof r===h?r.apply(t):r}q+=j(r)+"</textarea>\n    ";return q}function c(t,s){var q="",r;q+="\n        ";r=f["if"].call(t,t.defaultValue,{hash:{},inverse:o.program(6,n,s),fn:o.program(4,p,s),data:s});if(r||r===0){q+=r}q+="\n    ";return q}function p(t,s){var q="",r;q+="\n            ";if(r=f.defaultValue){r=r.call(t,{hash:{},data:s})}else{r=t.defaultValue;r=typeof r===h?r.apply(t):r}q+=j(r)+"\n        ";return q}function n(r,q){return"\n            (empty)\n        "}i+="<td class='code required'>";if(d=f.name){d=d.call(m,{hash:{},data:k})}else{d=m.name;d=typeof d===h?d.apply(m):d}i+=j(d)+"</td>\n<td>\n    ";d=f["if"].call(m,m.isBody,{hash:{},inverse:o.program(3,c,k),fn:o.program(1,e,k),data:k});if(d||d===0){i+=d}i+="\n</td>\n<td>";if(d=f.description){d=d.call(m,{hash:{},data:k})}else{d=m.description;d=typeof d===h?d.apply(m):d}if(d||d===0){i+=d}i+="</td>\n<td>";if(d=f.paramType){d=d.call(m,{hash:{},data:k})}else{d=m.paramType;d=typeof d===h?d.apply(m):d}if(d||d===0){i+=d}i+='</td>\n<td><span class="model-signature"></span></td>\n';return i})})();(function(){var b=Handlebars.template,a=Handlebars.templates=Handlebars.templates||{};a.param_required=b(function(f,q,o,j,u){this.compilerInfo=[4,">= 1.0.0"];o=this.merge(o,f.helpers);u=u||{};var p="",g,d="function",c=this.escapeExpression,n=this;function m(z,y){var w="",x;w+="\n              ";x=o["if"].call(z,z.isFile,{hash:{},inverse:n.program(4,k,y),fn:n.program(2,l,y),data:y});if(x||x===0){w+=x}w+="\n     ";return w}function l(z,y){var w="",x;w+='\n                    <input type="file" name=\'';if(x=o.name){x=x.call(z,{hash:{},data:y})}else{x=z.name;x=typeof x===d?x.apply(z):x}w+=c(x)+"'/>\n          ";return w}function k(z,y){var w="",x;w+="\n                    ";x=o["if"].call(z,z.defaultValue,{hash:{},inverse:n.program(7,h,y),fn:n.program(5,i,y),data:y});if(x||x===0){w+=x}w+="\n               ";return w}function i(z,y){var w="",x;w+="\n                            <textarea class='body-textarea' placeholder='(required)' name='";if(x=o.name){x=x.call(z,{hash:{},data:y})}else{x=z.name;x=typeof x===d?x.apply(z):x}w+=c(x)+"'>";if(x=o.defaultValue){x=x.call(z,{hash:{},data:y})}else{x=z.defaultValue;x=typeof x===d?x.apply(z):x}w+=c(x)+"</textarea>\n                    ";return w}function h(z,y){var w="",x;w+="\n                            <textarea class='body-textarea' placeholder='(required)' name='";if(x=o.name){x=x.call(z,{hash:{},data:y})}else{x=z.name;x=typeof x===d?x.apply(z):x}w+=c(x)+'\'></textarea>\n                          <br />\n                                <div class="parameter-content-type" />\n                        ';return w}function e(z,y){var w="",x;w+="\n            ";x=o["if"].call(z,z.isFile,{hash:{},inverse:n.program(12,t,y),fn:n.program(10,v,y),data:y});if(x||x===0){w+=x}w+="\n   ";return w}function v(z,y){var w="",x;w+="\n                    <input class='parameter' class='required' type='file' name='";if(x=o.name){x=x.call(z,{hash:{},data:y})}else{x=z.name;x=typeof x===d?x.apply(z):x}w+=c(x)+"'/>\n                ";return w}function t(z,y){var w="",x;w+="\n                    ";x=o["if"].call(z,z.defaultValue,{hash:{},inverse:n.program(15,r,y),fn:n.program(13,s,y),data:y});if(x||x===0){w+=x}w+="\n             ";return w}function s(z,y){var w="",x;w+="\n                            <input class='parameter required' minlength='1' name='";if(x=o.name){x=x.call(z,{hash:{},data:y})}else{x=z.name;x=typeof x===d?x.apply(z):x}w+=c(x)+"' placeholder='(required)' type='text' value='";if(x=o.defaultValue){x=x.call(z,{hash:{},data:y})}else{x=z.defaultValue;x=typeof x===d?x.apply(z):x}w+=c(x)+"'/>\n                 ";return w}function r(z,y){var w="",x;w+="\n                            <input class='parameter required' minlength='1' name='";if(x=o.name){x=x.call(z,{hash:{},data:y})}else{x=z.name;x=typeof x===d?x.apply(z):x}w+=c(x)+"' placeholder='(required)' type='text' value=''/>\n                        ";return w}p+="<td class='code required'>";if(g=o.name){g=g.call(q,{hash:{},data:u})}else{g=q.name;g=typeof g===d?g.apply(q):g}p+=c(g)+"</td>\n<td>\n   ";g=o["if"].call(q,q.isBody,{hash:{},inverse:n.program(9,e,u),fn:n.program(1,m,u),data:u});if(g||g===0){p+=g}p+="\n</td>\n<td>\n        <strong>";if(g=o.description){g=g.call(q,{hash:{},data:u})}else{g=q.description;g=typeof g===d?g.apply(q):g}if(g||g===0){p+=g}p+="</strong>\n</td>\n<td>";if(g=o.paramType){g=g.call(q,{hash:{},data:u})}else{g=q.paramType;g=typeof g===d?g.apply(q):g}if(g||g===0){p+=g}p+='</td>\n<td><span class="model-signature"></span></td>\n';return p})})();(function(){var b=Handlebars.template,a=Handlebars.templates=Handlebars.templates||{};a.parameter_content_type=b(function(g,l,f,k,j){this.compilerInfo=[4,">= 1.0.0"];f=this.merge(f,g.helpers);j=j||{};var i="",c,h="function",m=this;function e(r,q){var o="",p;o+="\n  ";p=f.each.call(r,r.consumes,{hash:{},inverse:m.noop,fn:m.program(2,d,q),data:q});if(p||p===0){o+=p}o+="\n";return o}function d(r,q){var o="",p;o+='\n  <option value="';p=(typeof r===h?r.apply(r):r);if(p||p===0){o+=p}o+='">';p=(typeof r===h?r.apply(r):r);if(p||p===0){o+=p}o+="</option>\n  ";return o}function n(p,o){return'\n  <option value="application/json">application/json</option>\n'}i+='<label for="parameterContentType"></label>\n<select name="parameterContentType">\n';c=f["if"].call(l,l.consumes,{hash:{},inverse:m.program(4,n,j),fn:m.program(1,e,j),data:j});if(c||c===0){i+=c}i+="\n</select>\n";return i})})();(function(){var b=Handlebars.template,a=Handlebars.templates=Handlebars.templates||{};a.resource=b(function(f,l,e,k,j){this.compilerInfo=[4,">= 1.0.0"];e=this.merge(e,f.helpers);j=j||{};var h="",c,o,g="function",i=this.escapeExpression,n=this,m=e.blockHelperMissing;function d(q,p){return" : "}h+="<div class='heading'>\n  <h2>\n    <a href='#!/";if(c=e.name){c=c.call(l,{hash:{},data:j})}else{c=l.name;c=typeof c===g?c.apply(l):c}h+=i(c)+"' onclick=\"Docs.toggleEndpointListForResource('";if(c=e.name){c=c.call(l,{hash:{},data:j})}else{c=l.name;c=typeof c===g?c.apply(l):c}h+=i(c)+"');\">";if(c=e.name){c=c.call(l,{hash:{},data:j})}else{c=l.name;c=typeof c===g?c.apply(l):c}h+=i(c)+"</a> ";o={hash:{},inverse:n.noop,fn:n.program(1,d,j),data:j};if(c=e.description){c=c.call(l,o)}else{c=l.description;c=typeof c===g?c.apply(l):c}if(!e.description){c=m.call(l,c,o)}if(c||c===0){h+=c}if(c=e.description){c=c.call(l,{hash:{},data:j})}else{c=l.description;c=typeof c===g?c.apply(l):c}if(c||c===0){h+=c}h+="\n  </h2>\n  <ul class='options'>\n    <li>\n      <a href='#!/";if(c=e.name){c=c.call(l,{hash:{},data:j})}else{c=l.name;c=typeof c===g?c.apply(l):c}h+=i(c)+"' id='endpointListTogger_";if(c=e.name){c=c.call(l,{hash:{},data:j})}else{c=l.name;c=typeof c===g?c.apply(l):c}h+=i(c)+"'\n         onclick=\"Docs.toggleEndpointListForResource('";if(c=e.name){c=c.call(l,{hash:{},data:j})}else{c=l.name;c=typeof c===g?c.apply(l):c}h+=i(c)+"');\">Show/Hide</a>\n    </li>\n    <li>\n      <a href='#' onclick=\"Docs.collapseOperationsForResource('";if(c=e.name){c=c.call(l,{hash:{},data:j})}else{c=l.name;c=typeof c===g?c.apply(l):c}h+=i(c)+"'); return false;\">\n        List Operations\n      </a>\n    </li>\n    <li>\n      <a href='#' onclick=\"Docs.expandOperationsForResource('";if(c=e.name){c=c.call(l,{hash:{},data:j})}else{c=l.name;c=typeof c===g?c.apply(l):c}h+=i(c)+"'); return false;\">\n        Expand Operations\n      </a>\n    </li>\n    <li>\n      <a href='";if(c=e.url){c=c.call(l,{hash:{},data:j})}else{c=l.url;c=typeof c===g?c.apply(l):c}h+=i(c)+"'>Raw</a>\n    </li>\n  </ul>\n</div>\n<ul class='endpoints' id='";if(c=e.name){c=c.call(l,{hash:{},data:j})}else{c=l.name;c=typeof c===g?c.apply(l):c}h+=i(c)+"_endpoint_list' style='display:none'>\n\n</ul>\n";return h})})();(function(){var b=Handlebars.template,a=Handlebars.templates=Handlebars.templates||{};a.response_content_type=b(function(g,l,f,k,j){this.compilerInfo=[4,">= 1.0.0"];f=this.merge(f,g.helpers);j=j||{};var i="",c,h="function",m=this;function e(r,q){var o="",p;o+="\n  ";p=f.each.call(r,r.produces,{hash:{},inverse:m.noop,fn:m.program(2,d,q),data:q});if(p||p===0){o+=p}o+="\n";return o}function d(r,q){var o="",p;o+='\n  <option value="';p=(typeof r===h?r.apply(r):r);if(p||p===0){o+=p}o+='">';p=(typeof r===h?r.apply(r):r);if(p||p===0){o+=p}o+="</option>\n  ";return o}function n(p,o){return'\n  <option value="application/json">application/json</option>\n'}i+='<label for="responseContentType"></label>\n<select name="responseContentType">\n';c=f["if"].call(l,l.produces,{hash:{},inverse:m.program(4,n,j),fn:m.program(1,e,j),data:j});if(c||c===0){i+=c}i+="\n</select>\n";return i})})();(function(){var b=Handlebars.template,a=Handlebars.templates=Handlebars.templates||{};a.signature=b(function(e,k,d,j,i){this.compilerInfo=[4,">= 1.0.0"];d=this.merge(d,e.helpers);i=i||{};var g="",c,f="function",h=this.escapeExpression;g+='<div>\n<ul class="signature-nav">\n    <li><a class="description-link" href="#">Model</a></li>\n    <li><a class="snippet-link" href="#">Model Schema</a></li>\n</ul>\n<div>\n\n<div class="signature-container">\n    <div class="description">\n        ';if(c=d.signature){c=c.call(k,{hash:{},data:i})}else{c=k.signature;c=typeof c===f?c.apply(k):c}if(c||c===0){g+=c}g+='\n    </div>\n\n    <div class="snippet">\n        <pre><code>';if(c=d.sampleJSON){c=c.call(k,{hash:{},data:i})}else{c=k.sampleJSON;c=typeof c===f?c.apply(k):c}g+=h(c)+'</code></pre>\n        <small class="notice"></small>\n    </div>\n</div>\n\n';return g})})();(function(){var b=Handlebars.template,a=Handlebars.templates=Handlebars.templates||{};a.status_code=b(function(e,k,d,j,i){this.compilerInfo=[4,">= 1.0.0"];d=this.merge(d,e.helpers);i=i||{};var g="",c,f="function",h=this.escapeExpression;g+="<td width='15%' class='code'>";if(c=d.code){c=c.call(k,{hash:{},data:i})}else{c=k.code;c=typeof c===f?c.apply(k):c}g+=h(c)+"</td>\n<td>";if(c=d.message){c=c.call(k,{hash:{},data:i})}else{c=k.message;c=typeof c===f?c.apply(k):c}if(c||c===0){g+=c}g+="</td>\n";return g})})();(function(){var j,r,u,o,l,k,n,m,i,p,s,q,h,c,g,f,e,d,b,a,x,w,t={}.hasOwnProperty,v=function(B,z){for(var y in z){if(t.call(z,y)){B[y]=z[y]}}function A(){this.constructor=B}A.prototype=z.prototype;B.prototype=new A();B.__super__=z.prototype;return B};s=(function(z){v(y,z);function y(){q=y.__super__.constructor.apply(this,arguments);return q}y.prototype.dom_id="swagger_ui";y.prototype.options=null;y.prototype.api=null;y.prototype.headerView=null;y.prototype.mainView=null;y.prototype.initialize=function(A){var B=this;if(A==null){A={}}if(A.dom_id!=null){this.dom_id=A.dom_id;delete A.dom_id}if($("#"+this.dom_id)==null){$("body").append('<div id="'+this.dom_id+'"></div>')}this.options=A;this.options.success=function(){return B.render()};this.options.progress=function(C){return B.showMessage(C)};this.options.failure=function(C){return B.onLoadFailure(C)};this.headerView=new r({el:$("#header")});return this.headerView.on("update-swagger-ui",function(C){return B.updateSwaggerUi(C)})};y.prototype.updateSwaggerUi=function(A){this.options.url=A.url;return this.load()};y.prototype.load=function(){var B,A;if((A=this.mainView)!=null){A.clear()}B=this.options.url;if(B.indexOf("http")!==0){B=this.buildUrl(window.location.href.toString(),B)}this.options.url=B;this.headerView.update(B);this.api=new SwaggerApi(this.options);this.api.build();return this.api};y.prototype.render=function(){var A=this;this.showMessage("Finished Loading Resource Information. Rendering Swagger UI...");this.mainView=new u({model:this.api,el:$("#"+this.dom_id)}).render();this.showMessage();switch(this.options.docExpansion){case"full":Docs.expandOperationsForResource("");break;case"list":Docs.collapseOperationsForResource("")}if(this.options.onComplete){this.options.onComplete(this.api,this)}return setTimeout(function(){return Docs.shebang()},400)};y.prototype.buildUrl=function(B,A){var C;console.log("base is "+B);C=B.split("/");B=C[0]+"//"+C[2];if(A.indexOf("/")===0){return B+A}else{return B+"/"+A}};y.prototype.showMessage=function(A){if(A==null){A=""}$("#message-bar").removeClass("message-fail");$("#message-bar").addClass("message-success");return $("#message-bar").html(A)};y.prototype.onLoadFailure=function(A){var B;if(A==null){A=""}$("#message-bar").removeClass("message-success");$("#message-bar").addClass("message-fail");B=$("#message-bar").html(A);if(this.options.onFailure!=null){this.options.onFailure(A)}return B};return y})(Backbone.Router);window.SwaggerUi=s;r=(function(z){v(y,z);function y(){h=y.__super__.constructor.apply(this,arguments);return h}y.prototype.events={"click #show-pet-store-icon":"showPetStore","click #show-wordnik-dev-icon":"showWordnikDev","click #explore":"showCustom","keyup #input_baseUrl":"showCustomOnKeyup","keyup #input_apiKey":"showCustomOnKeyup"};y.prototype.initialize=function(){};y.prototype.showPetStore=function(A){return this.trigger("update-swagger-ui",{url:"http://petstore.swagger.wordnik.com/api/api-docs"})};y.prototype.showWordnikDev=function(A){return this.trigger("update-swagger-ui",{url:"http://api.wordnik.com/v4/resources.json"})};y.prototype.showCustomOnKeyup=function(A){if(A.keyCode===13){return this.showCustom()}};y.prototype.showCustom=function(A){if(A!=null){A.preventDefault()}return this.trigger("update-swagger-ui",{url:$("#input_baseUrl").val(),apiKey:$("#input_apiKey").val()})};y.prototype.update=function(B,C,A){if(A==null){A=false}$("#input_baseUrl").val(B);if(A){return this.trigger("update-swagger-ui",{url:B})}};return y})(Backbone.View);u=(function(y){v(z,y);function z(){g=z.__super__.constructor.apply(this,arguments);return g}z.prototype.initialize=function(){};z.prototype.render=function(){var C,B,A,D;$(this.el).html(Handlebars.templates.main(this.model));D=this.model.apisArray;for(B=0,A=D.length;B<A;B++){C=D[B];this.addResource(C)}return this};z.prototype.addResource=function(B){var A;A=new n({model:B,tagName:"li",id:"resource_"+B.name,className:"resource"});return $("#resources").append(A.render().el)};z.prototype.clear=function(){return $(this.el).html("")};return z})(Backbone.View);n=(function(z){v(y,z);function y(){f=y.__super__.constructor.apply(this,arguments);return f}y.prototype.initialize=function(){};y.prototype.render=function(){var B,C,A,D;console.log(this.model.description);$(this.el).html(Handlebars.templates.resource(this.model));this.number=0;D=this.model.operationsArray;for(C=0,A=D.length;C<A;C++){B=D[C];this.addOperation(B)}return this};y.prototype.addOperation=function(A){var B;A.number=this.number;B=new o({model:A,tagName:"li",className:"endpoint"});$(".endpoints",$(this.el)).append(B.render().el);return this.number++};return y})(Backbone.View);o=(function(z){v(y,z);function y(){e=y.__super__.constructor.apply(this,arguments);return e}y.prototype.invocationUrl=null;y.prototype.events={"submit .sandbox":"submitOperation","click .submit":"submitOperation","click .response_hider":"hideResponse","click .toggleOperation":"toggleOperationContent"};y.prototype.initialize=function(){};y.prototype.render=function(){var A,P,G,M,K,Q,L,N,J,I,H,O,E,C,F,D,B;P=true;if(!P){this.model.isReadOnly=true}$(this.el).html(Handlebars.templates.operation(this.model));if(this.model.responseClassSignature&&this.model.responseClassSignature!=="string"){Q={sampleJSON:this.model.responseSampleJSON,isParam:false,signature:this.model.responseClassSignature};K=new i({model:Q,tagName:"div"});$(".model-signature",$(this.el)).append(K.render().el)}else{$(".model-signature",$(this.el)).html(this.model.type)}A={isParam:false};A.consumes=this.model.consumes;A.produces=this.model.produces;F=this.model.parameters;for(J=0,O=F.length;J<O;J++){G=F[J];N=G.type||G.dataType;if(N.toLowerCase()==="file"){if(!A.consumes){console.log("set content type ");A.consumes="multipart/form-data"}}}M=new m({model:A});$(".response-content-type",$(this.el)).append(M.render().el);D=this.model.parameters;for(I=0,E=D.length;I<E;I++){G=D[I];this.addParameter(G,A.consumes)}B=this.model.responseMessages;for(H=0,C=B.length;H<C;H++){L=B[H];this.addStatusCode(L)}return this};y.prototype.addParameter=function(C,A){var B;C.consumes=A;B=new k({model:C,tagName:"tr",readOnly:this.model.isReadOnly});return $(".operation-params",$(this.el)).append(B.render().el)};y.prototype.addStatusCode=function(B){var A;A=new p({model:B,tagName:"tr"});return $(".operation-status",$(this.el)).append(A.render().el)};y.prototype.submitOperation=function(O){var Q,G,N,D,I,A,J,M,L,K,P,F,C,H,E,B;if(O!=null){O.preventDefault()}G=$(".sandbox",$(this.el));Q=true;G.find("input.required").each(function(){var R=this;$(this).removeClass("error");if(jQuery.trim($(this).val())===""){$(this).addClass("error");$(this).wiggle({callback:function(){return $(R).focus()}});return Q=false}});if(Q){D={};A={parent:this};N=false;H=G.find("input");for(M=0,P=H.length;M<P;M++){I=H[M];if((I.value!=null)&&jQuery.trim(I.value).length>0){D[I.name]=I.value}if(I.type==="file"){N=true}}E=G.find("textarea");for(L=0,F=E.length;L<F;L++){I=E[L];if((I.value!=null)&&jQuery.trim(I.value).length>0){D.body=I.value}}B=G.find("select");for(K=0,C=B.length;K<C;K++){I=B[K];J=this.getSelectedValue(I);if((J!=null)&&jQuery.trim(J).length>0){D[I.name]=J}}A.responseContentType=$("div select[name=responseContentType]",$(this.el)).val();A.requestContentType=$("div select[name=parameterContentType]",$(this.el)).val();$(".response_throbber",$(this.el)).show();if(N){return this.handleFileUpload(D,G)}else{return this.model["do"](D,A,this.showCompleteStatus,this.showErrorStatus,this)}}};y.prototype.success=function(A,B){return B.showCompleteStatus(A)};y.prototype.handleFileUpload=function(C,F){var Q,P,H,M,I,L,K,J,O,E,B,G,D,A,N=this;console.log("it's a file upload");G=F.serializeArray();for(L=0,O=G.length;L<O;L++){H=G[L];if((H.value!=null)&&jQuery.trim(H.value).length>0){C[H.name]=H.value}}Q=new FormData();D=this.model.parameters;for(K=0,E=D.length;K<E;K++){I=D[K];if(I.paramType==="form"){Q.append(I.name,C[I.name])}}P={};A=this.model.parameters;for(J=0,B=A.length;J<B;J++){I=A[J];if(I.paramType==="header"){P[I.name]=C[I.name]}}console.log(P);$.each($('input[type~="file"]'),function(R,S){return Q.append($(S).attr("name"),S.files[0])});console.log(Q);this.invocationUrl=this.model.supportHeaderParams()?(P=this.model.getHeaderParams(C),this.model.urlify(C,false)):this.model.urlify(C,true);$(".request_url",$(this.el)).html("<pre>"+this.invocationUrl+"</pre>");M={type:this.model.method,url:this.invocationUrl,headers:P,data:Q,dataType:"json",contentType:false,processData:false,error:function(S,T,R){return N.showErrorStatus(N.wrap(S),N)},success:function(R){return N.showResponse(R,N)},complete:function(R){return N.showCompleteStatus(N.wrap(R),N)}};if(window.authorizations){window.authorizations.apply(M)}jQuery.ajax(M);return false};y.prototype.wrap=function(A){var B,C=this;B={};B.content={};B.content.data=A.responseText;B.getHeaders=function(){return{"Content-Type":A.getResponseHeader("Content-Type")}};B.request={};B.request.url=this.invocationUrl;B.status=A.status;return B};y.prototype.getSelectedValue=function(A){var D,C,F,B,E;if(!A.multiple){return A.value}else{C=[];E=A.options;for(F=0,B=E.length;F<B;F++){D=E[F];if(D.selected){C.push(D.value)}}if(C.length>0){return C.join(",")}else{return null}}};y.prototype.hideResponse=function(A){if(A!=null){A.preventDefault()}$(".response",$(this.el)).slideUp();return $(".response_hider",$(this.el)).fadeOut()};y.prototype.showResponse=function(A){var B;B=JSON.stringify(A,null,"\t").replace(/\n/g,"<br>");return $(".response_body",$(this.el)).html(escape(B))};y.prototype.showErrorStatus=function(B,A){return A.showStatus(B)};y.prototype.showCompleteStatus=function(B,A){return A.showStatus(B)};y.prototype.formatXml=function(H){var D,G,B,I,N,J,C,A,L,M,F,E,K;A=/(>)(<)(\/*)/g;M=/[ ]*(.*)[ ]+\n/g;D=/(<.+>)(.+\n)/g;H=H.replace(A,"$1\n$2$3").replace(M,"$1\n").replace(D,"$1\n$2");C=0;G="";N=H.split("\n");B=0;I="other";L={"single->single":0,"single->closing":-1,"single->opening":0,"single->other":0,"closing->single":0,"closing->closing":-1,"closing->opening":0,"closing->other":0,"opening->single":1,"opening->closing":0,"opening->opening":1,"opening->other":1,"other->single":0,"other->closing":-1,"other->opening":0,"other->other":0};F=function(T){var P,O,R,V,S,Q,U;Q={single:Boolean(T.match(/<.+\/>/)),closing:Boolean(T.match(/<\/.+>/)),opening:Boolean(T.match(/<[^!?].*>/))};S=((function(){var W;W=[];for(R in Q){U=Q[R];if(U){W.push(R)}}return W})())[0];S=S===void 0?"other":S;P=I+"->"+S;I=S;V="";B+=L[P];V=((function(){var X,Y,W;W=[];for(O=X=0,Y=B;0<=Y?X<Y:X>Y;O=0<=Y?++X:--X){W.push("  ")}return W})()).join("");if(P==="opening->closing"){return G=G.substr(0,G.length-1)+T+"\n"}else{return G+=V+T+"\n"}};for(E=0,K=N.length;E<K;E++){J=N[E];F(J)}return G};y.prototype.showStatus=function(D){var C,B,G,F,E,A;B=D.content.data;F=D.getHeaders();G=F["Content-Type"];if(B===void 0){C=$("<code />").text("no content");E=$('<pre class="json" />').append(C)}else{if(G.indexOf("application/json")===0||G.indexOf("application/hal+json")===0){C=$("<code />").text(JSON.stringify(JSON.parse(B),null,2));E=$('<pre class="json" />').append(C)}else{if(G.indexOf("application/xml")===0){C=$("<code />").text(this.formatXml(B));E=$('<pre class="xml" />').append(C)}else{if(G.indexOf("text/html")===0){C=$("<code />").html(B);E=$('<pre class="xml" />').append(C)}else{if(G.indexOf("image/")===0){E=$("<img>").attr("src",D.request.url)}else{C=$("<code />").text(B);E=$('<pre class="json" />').append(C)}}}}}A=E;$(".request_url",$(this.el)).html("<pre>"+D.request.url+"</pre>");$(".response_code",$(this.el)).html("<pre>"+D.status+"</pre>");$(".response_body",$(this.el)).html(A);$(".response_headers",$(this.el)).html("<pre>"+JSON.stringify(D.getHeaders(),null,"  ").replace(/\n/g,"<br>")+"</pre>");$(".response",$(this.el)).slideDown();$(".response_hider",$(this.el)).show();$(".response_throbber",$(this.el)).hide();return hljs.highlightBlock($(".response_body",$(this.el))[0])};y.prototype.toggleOperationContent=function(){var A;A=$("#"+Docs.escapeResourceName(this.model.resourceName)+"_"+this.model.nickname+"_"+this.model.method+"_"+this.model.number+"_content");if(A.is(":visible")){return Docs.collapseOperation(A)}else{return Docs.expandOperation(A)}};return y})(Backbone.View);p=(function(z){v(y,z);function y(){d=y.__super__.constructor.apply(this,arguments);return d}y.prototype.initialize=function(){};y.prototype.render=function(){var A;A=this.template();$(this.el).html(A(this.model));return this};y.prototype.template=function(){return Handlebars.templates.status_code};return y})(Backbone.View);k=(function(z){v(y,z);function y(){b=y.__super__.constructor.apply(this,arguments);return b}y.prototype.initialize=function(){};y.prototype.render=function(){var G,A,C,F,B,H,E,D;D=this.model.type||this.model.dataType;if(this.model.paramType==="body"){this.model.isBody=true}if(D.toLowerCase()==="file"){this.model.isFile=true}E=this.template();$(this.el).html(E(this.model));B={sampleJSON:this.model.sampleJSON,isParam:true,signature:this.model.signature};if(this.model.sampleJSON){H=new i({model:B,tagName:"div"});$(".model-signature",$(this.el)).append(H.render().el)}else{$(".model-signature",$(this.el)).html(this.model.signature)}A=false;if(this.model.isBody){A=true}G={isParam:A};G.consumes=this.model.consumes;if(A){C=new l({model:G});$(".parameter-content-type",$(this.el)).append(C.render().el)}else{F=new m({model:G});$(".response-content-type",$(this.el)).append(F.render().el)}return this};y.prototype.template=function(){if(this.model.isList){return Handlebars.templates.param_list}else{if(this.options.readOnly){if(this.model.required){return Handlebars.templates.param_readonly_required}else{return Handlebars.templates.param_readonly}}else{if(this.model.required){return Handlebars.templates.param_required}else{return Handlebars.templates.param}}}};return y})(Backbone.View);i=(function(z){v(y,z);function y(){a=y.__super__.constructor.apply(this,arguments);return a}y.prototype.events={"click a.description-link":"switchToDescription","click a.snippet-link":"switchToSnippet","mousedown .snippet":"snippetToTextArea"};y.prototype.initialize=function(){};y.prototype.render=function(){var A;A=this.template();$(this.el).html(A(this.model));this.switchToDescription();this.isParam=this.model.isParam;if(this.isParam){$(".notice",$(this.el)).text("Click to set as parameter value")}return this};y.prototype.template=function(){return Handlebars.templates.signature};y.prototype.switchToDescription=function(A){if(A!=null){A.preventDefault()}$(".snippet",$(this.el)).hide();$(".description",$(this.el)).show();$(".description-link",$(this.el)).addClass("selected");return $(".snippet-link",$(this.el)).removeClass("selected")};y.prototype.switchToSnippet=function(A){if(A!=null){A.preventDefault()}$(".description",$(this.el)).hide();$(".snippet",$(this.el)).show();$(".snippet-link",$(this.el)).addClass("selected");return $(".description-link",$(this.el)).removeClass("selected")};y.prototype.snippetToTextArea=function(A){var B;if(this.isParam){if(A!=null){A.preventDefault()}B=$("textarea",$(this.el.parentNode.parentNode.parentNode));if($.trim(B.val())===""){return B.val(this.model.sampleJSON)}}};return y})(Backbone.View);j=(function(y){v(z,y);function z(){x=z.__super__.constructor.apply(this,arguments);return x}z.prototype.initialize=function(){};z.prototype.render=function(){var A;A=this.template();$(this.el).html(A(this.model));$("label[for=contentType]",$(this.el)).text("Response Content Type");return this};z.prototype.template=function(){return Handlebars.templates.content_type};return z})(Backbone.View);m=(function(y){v(z,y);function z(){w=z.__super__.constructor.apply(this,arguments);return w}z.prototype.initialize=function(){};z.prototype.render=function(){var A;A=this.template();$(this.el).html(A(this.model));$("label[for=responseContentType]",$(this.el)).text("Response Content Type");return this};z.prototype.template=function(){return Handlebars.templates.response_content_type};return z})(Backbone.View);l=(function(z){v(y,z);function y(){c=y.__super__.constructor.apply(this,arguments);return c}y.prototype.initialize=function(){};y.prototype.render=function(){var A;A=this.template();$(this.el).html(A(this.model));$("label[for=parameterContentType]",$(this.el)).text("Parameter content type:");return this};y.prototype.template=function(){return Handlebars.templates.parameter_content_type};return y})(Backbone.View)}).call(this);
\ No newline at end of file
diff --git a/opendaylight/md-sal/sal-rest-docgen/src/test/java/org/opendaylight/controller/sal/rest/doc/impl/DocGeneratorTest.java b/opendaylight/md-sal/sal-rest-docgen/src/test/java/org/opendaylight/controller/sal/rest/doc/impl/DocGeneratorTest.java
new file mode 100644 (file)
index 0000000..127529a
--- /dev/null
@@ -0,0 +1,72 @@
+package org.opendaylight.controller.sal.rest.doc.impl;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.datatype.jsonorg.JsonOrgModule;
+import com.google.common.base.Preconditions;
+import junit.framework.Assert;
+import org.junit.Test;
+import org.junit.Before;
+import org.junit.After;
+import org.opendaylight.controller.sal.rest.doc.swagger.ApiDeclaration;
+import org.opendaylight.yangtools.yang.model.api.Module;
+import org.opendaylight.yangtools.yang.model.parser.api.YangModelParser;
+import org.opendaylight.yangtools.yang.parser.impl.YangParserImpl;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+/**
+ *
+ */
+public class DocGeneratorTest {
+
+  private Set<Module> modules;
+  private ObjectMapper mapper;
+
+  public Set<Module> loadModules(String resourceDirectory) throws FileNotFoundException, URISyntaxException {
+
+    URI resourceDirUri = getClass().getResource(resourceDirectory).toURI();
+    final YangModelParser parser = new YangParserImpl();
+    final File testDir = new File(resourceDirUri);
+    final String[] fileList = testDir.list();
+    final List<File> testFiles = new ArrayList<>();
+    if (fileList == null) {
+      throw new FileNotFoundException(resourceDirectory.toString());
+    }
+    for (String fileName : fileList) {
+
+      testFiles.add(new File(testDir, fileName));
+    }
+    return parser.parseYangModels(testFiles);
+  }
+
+  @Before
+  public void before() throws Exception {
+    modules = loadModules("/yang");
+    mapper = new ObjectMapper();
+    mapper.registerModule(new JsonOrgModule());
+  }
+
+  @After
+  public void after() throws Exception {
+  }
+
+  /**
+   * Method: getApiDeclaration(String module, String revision, UriInfo uriInfo)
+   */
+  @Test
+  public void testGetModuleDoc() throws Exception {
+    Preconditions.checkArgument(modules != null, "No modules found");
+
+    for (Module m : modules){
+      ApiDeclaration doc = ApiDocGenerator.getInstance().getSwaggerDocSpec(m, "http://localhost:8080/restconf");
+      Assert.assertNotNull(doc);
+    }
+  }
+
+} 
diff --git a/opendaylight/md-sal/sal-rest-docgen/src/test/resources/sample-swagger-spec.json b/opendaylight/md-sal/sal-rest-docgen/src/test/resources/sample-swagger-spec.json
new file mode 100644 (file)
index 0000000..2d1b09a
--- /dev/null
@@ -0,0 +1,440 @@
+{
+    "apiVersion": "1.0.0",
+    "swaggerVersion": "1.2",
+    "basePath": "/api",
+    "resourcePath": "/pet",
+    "produces": [
+        "application/json",
+        "application/xml",
+        "text/plain",
+        "text/html"
+    ],
+    "authorizations": {
+        "oauth2": [
+            {
+                "scope": "write:pets",
+                "description": "modify pets in your account"
+            },
+            {
+                "scope": "read:pets",
+                "description": "read your pets"
+            }
+        ]
+    },
+    "apis": [
+        {
+            "path": "/pet",
+            "operations": [
+                {
+                    "method": "POST",
+                    "summary": "Add a new pet to the store",
+                    "notes": "",
+                    "type": "void",
+                    "nickname": "addPet",
+                    "consumes": [
+                        "application/json",
+                        "application/xml"
+                    ],
+                    "authorizations": {
+                        "oauth2": [
+                            {
+                                "scope": "write:pets",
+                                "description": "modify pets in your account"
+                            }
+                        ]
+                    },
+                    "parameters": [
+                        {
+                            "name": "body",
+                            "description": "Pet object that needs to be added to the store",
+                            "required": true,
+                            "type": "Pet",
+                            "paramType": "body"
+                        }
+                    ],
+                    "responseMessages": [
+                        {
+                            "code": 405,
+                            "message": "Invalid input"
+                        }
+                    ]
+                },
+                {
+                    "method": "PUT",
+                    "summary": "Update an existing pet",
+                    "notes": "",
+                    "type": "void",
+                    "nickname": "updatePet",
+                    "authorizations": {},
+                    "parameters": [
+                        {
+                            "name": "body",
+                            "description": "Pet object that needs to be updated in the store",
+                            "required": true,
+                            "type": "Pet",
+                            "paramType": "body"
+                        }
+                    ],
+                    "responseMessages": [
+                        {
+                            "code": 400,
+                            "message": "Invalid ID supplied"
+                        },
+                        {
+                            "code": 404,
+                            "message": "Pet not found"
+                        },
+                        {
+                            "code": 405,
+                            "message": "Validation exception"
+                        }
+                    ]
+                }
+            ]
+        },
+        {
+            "path": "/pet/findByStatus",
+            "operations": [
+                {
+                    "method": "GET",
+                    "summary": "Finds Pets by status",
+                    "notes": "<strong>Multiple status values can be provided with comma seperated strings</strong>",
+                    "type": "array",
+                    "items": {
+                        "$ref": "Pet"
+                    },
+                    "nickname": "testNodeType",
+                    "authorizations": {},
+                    "parameters": [
+                        {
+                            "name": "nodeTypez",
+                            "description": "Status values that need to be considered for filter",
+                            "defaultValue": "available",
+                            "required": true,
+                            "type": "string",
+                            "paramType": "query",
+                            "enum": [
+                                "available",
+                                "pending",
+                                "sold"
+                            ]
+                        }
+                    ],
+                    "responseMessages": [
+                        {
+                            "code": 400,
+                            "message": "Invalid status value"
+                        }
+                    ]
+                }
+            ]
+        },
+        {
+            "path": "/pet/findByTags",
+            "operations": [
+                {
+                    "method": "GET",
+                    "summary": "Finds Pets by tags",
+                    "notes": "Muliple tags can be provided with comma seperated strings. Use tag1, tag2, tag3 for testing.",
+                    "type": "array",
+                    "items": {
+                        "$ref": "Pet"
+                    },
+                    "nickname": "findPetsByTags",
+                    "authorizations": {},
+                    "parameters": [
+                        {
+                            "name": "tags",
+                            "description": "Tags to filter by",
+                            "required": true,
+                            "type": "string",
+                            "paramType": "query"
+                        }
+                    ],
+                    "responseMessages": [
+                        {
+                            "code": 400,
+                            "message": "Invalid tag value"
+                        }
+                    ],
+                    "deprecated": "true"
+                }
+            ]
+        },
+        {
+            "path": "/pet/{petId}",
+            "operations": [
+                {
+                    "method": "PATCH",
+                    "summary": "partial updates to a pet",
+                    "notes": "",
+                    "type": "array",
+                    "items": {
+                        "$ref": "Pet"
+                    },
+                    "nickname": "partialUpdate",
+                    "produces": [
+                        "application/json",
+                        "application/xml"
+                    ],
+                    "consumes": [
+                        "application/json",
+                        "application/xml"
+                    ],
+                    "authorizations": {
+                        "oauth2": [
+                            {
+                                "scope": "write:pets",
+                                "description": "modify pets in your account"
+                            }
+                        ]
+                    },
+                    "parameters": [
+                        {
+                            "name": "petId",
+                            "description": "ID of pet that needs to be fetched",
+                            "required": true,
+                            "type": "string",
+                            "paramType": "path"
+                        },
+                        {
+                            "name": "body",
+                            "description": "Pet object that needs to be added to the store",
+                            "required": true,
+                            "type": "Pet",
+                            "paramType": "body"
+                        }
+                    ],
+                    "responseMessages": [
+                        {
+                            "code": 400,
+                            "message": "Invalid tag value"
+                        }
+                    ]
+                },
+                {
+                    "method": "POST",
+                    "summary": "Updates a pet in the store with form data",
+                    "notes": "",
+                    "type": "void",
+                    "nickname": "updatePetWithForm",
+                    "consumes": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "authorizations": {
+                        "oauth2": [
+                            {
+                                "scope": "write:pets",
+                                "description": "modify pets in your account"
+                            }
+                        ]
+                    },
+                    "parameters": [
+                        {
+                            "name": "petId",
+                            "description": "ID of pet that needs to be updated",
+                            "required": true,
+                            "type": "string",
+                            "paramType": "path"
+                        },
+                        {
+                            "name": "name",
+                            "description": "Updated name of the pet",
+                            "required": false,
+                            "type": "string",
+                            "paramType": "form"
+                        },
+                        {
+                            "name": "status",
+                            "description": "Updated status of the pet",
+                            "required": false,
+                            "type": "string",
+                            "paramType": "form"
+                        }
+                    ],
+                    "responseMessages": [
+                        {
+                            "code": 405,
+                            "message": "Invalid input"
+                        }
+                    ]
+                },
+                {
+                    "method": "DELETE",
+                    "summary": "Deletes a pet",
+                    "notes": "",
+                    "type": "void",
+                    "nickname": "deletePet",
+                    "authorizations": {
+                        "oauth2": [
+                            {
+                                "scope": "write:pets",
+                                "description": "modify pets in your account"
+                            }
+                        ]
+                    },
+                    "parameters": [
+                        {
+                            "name": "petId",
+                            "description": "Pet id to delete",
+                            "required": true,
+                            "type": "string",
+                            "paramType": "path"
+                        }
+                    ],
+                    "responseMessages": [
+                        {
+                            "code": 400,
+                            "message": "Invalid pet value"
+                        }
+                    ]
+                },
+                {
+                    "method": "GET",
+                    "summary": "Find pet by ID",
+                    "notes": "Returns a pet based on ID",
+                    "type": "Pet",
+                    "nickname": "getPetById",
+                    "authorizations": {},
+                    "parameters": [
+                        {
+                            "name": "petId",
+                            "description": "ID of pet that needs to be fetched",
+                            "required": true,
+                            "type": "integer",
+                            "format": "int64",
+                            "paramType": "path",
+                            "minimum": "1.0",
+                            "maximum": "100000.0"
+                        }
+                    ],
+                    "responseMessages": [
+                        {
+                            "code": 400,
+                            "message": "Invalid ID supplied"
+                        },
+                        {
+                            "code": 404,
+                            "message": "Pet not found"
+                        }
+                    ]
+                }
+            ]
+        },
+        {
+            "path": "/pet/uploadImage",
+            "operations": [
+                {
+                    "method": "POST",
+                    "summary": "uploads an image",
+                    "notes": "",
+                    "type": "void",
+                    "nickname": "uploadFile",
+                    "consumes": [
+                        "multipart/form-data"
+                    ],
+                    "authorizations": {
+                        "oauth2": [
+                            {
+                                "scope": "write:pets",
+                                "description": "modify pets in your account"
+                            },
+                            {
+                                "scope": "read:pets",
+                                "description": "read your pets"
+                            }
+                        ]
+                    },
+                    "parameters": [
+                        {
+                            "name": "additionalMetadata",
+                            "description": "Additional data to pass to server",
+                            "required": false,
+                            "type": "string",
+                            "paramType": "form"
+                        },
+                        {
+                            "name": "file",
+                            "description": "file to upload",
+                            "required": false,
+                            "type": "File",
+                            "paramType": "body"
+                        }
+                    ]
+                }
+            ]
+        }
+    ],
+    "models": {
+        "Tag": {
+            "id": "Tag",
+            "properties": {
+                "id": {
+                    "type": "integer",
+                    "format": "int64"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "Pet": {
+            "id": "Pet",
+            "required": [
+                "id",
+                "name"
+            ],
+            "properties": {
+                "id": {
+                    "type": "integer",
+                    "format": "int64",
+                    "description": "unique identifier for the pet",
+                    "minimum": "0.0",
+                    "maximum": "100.0"
+                },
+                "category": {
+                    "$ref": "Category"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "photoUrls": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "tags": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "Tag"
+                    }
+                },
+                "status": {
+                    "type": "string",
+                    "description": "pet status in the store",
+                    "enum": [
+                        "available",
+                        "pending",
+                        "sold"
+                    ]
+                }
+            }
+        },
+        "Category": {
+            "id": "Category",
+            "properties": {
+                "id": {
+                    "type": "integer",
+                    "format": "int64"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "pet": {
+                    "$ref": "Pet"
+                }
+            }
+        }
+    }
+}
diff --git a/opendaylight/md-sal/sal-rest-docgen/src/test/resources/toaster.json b/opendaylight/md-sal/sal-rest-docgen/src/test/resources/toaster.json
new file mode 100644 (file)
index 0000000..8af2462
--- /dev/null
@@ -0,0 +1,167 @@
+{
+  "apiVersion": "1.0.0",
+  "swaggerVersion": "1.2",
+  "basePath": "/api",
+  "resourcePath": "/toaster",
+  "produces": [
+    "application/json",
+    "application/xml",
+    "text/plain",
+    "text/html"
+  ],
+  "apis": [
+    {
+      "path": "/toaster",
+      "operations": [
+        {
+          "method": "POST",
+          "summary": "Add a new toaster",
+          "notes": "",
+          "type": "void",
+          "nickname": "add toaster",
+          "consumes": [
+            "application/json",
+            "application/xml"
+          ],          
+          "parameters": [
+            {
+              "name": "body",
+              "description": "Pet object that needs to be added to the store",
+              "required": true,
+              "type": "Toaster",
+              "paramType": "body"
+            }
+          ],
+          "responseMessages": [
+            {
+              "code": 405,
+              "message": "Invalid input"
+            }
+          ]
+        }
+      ]
+     },
+    {
+      "path": "/toaster",
+      "operations": [
+        {
+          "method": "GET",
+          "summary": "Add a new toaster",
+          "notes": "",
+          "type": "Toaster",
+          "nickname": "Get toaster",
+          "consumes": [
+            "application/json",
+            "application/xml"
+          ],          
+          "responseMessages": [
+            {
+              "code": 405,
+              "message": "Invalid input"
+            }
+          ]
+        }
+      ]
+     },
+       {
+           "path" : "operations/toaster/cancel-toast",
+           "operations" : [ {
+             "method" : "POST",
+             "summary" : null,
+             "notes" : "Stop making toast, if any is being made.\n           A 'resource-denied' error will be returned \n           if the toaster service is disabled.",
+             "type" : null,
+             "nickname" : "cancel-toast",
+             "consumes" : null,
+             "parameters" : null,
+             "responseMessages" : null
+           } ]
+         }, {
+           "path" : "operations/toaster/make-toast",
+           "operations" : [ {
+             "method" : "POST",
+             "summary" : null,
+             "notes" : "Make some toast.\n           The toastDone notification will be sent when \n           the toast is finished.\n           An 'in-use' error will be returned if toast\n           is already being made.\n           A 'resource-denied' error will be returned \n           if the toaster service is disabled.",
+             "type" : null,
+             "nickname" : "make-toast",
+             "consumes" : null,
+             "parameters" : null,
+             "responseMessages" : null
+           } ]
+         }
+  ],
+  "models": {
+    "Toaster": {
+    "id":"Toaster",
+               "$schema": "http://json-schema.org/draft-04/schema",
+         "description": "Top-level container for all toaster database objects.",
+         "properties": {
+           "allow-user": {
+             "description": "A list of user name patterns to allow",
+             "items": {"type": "string"},
+             "required": false,
+             "type": "array"
+           },
+                "how": {
+             "oneOf": [
+               {
+                 "manual": {"manual": {
+                   "required": false,
+                   "type": "string"
+                 }},
+                 "type": "object"
+               },
+               {
+                 "interval": {"interval": {
+                   "required": false,
+                   "type": "integer"
+                 }},
+                 "type": "object"
+               },
+               {
+                 "daily": {
+                   "daily": {
+                     "required": false,
+                     "type": "string"
+                   },
+                   "time-of-day": {
+                     "required": false,
+                     "type": "string"
+                   }
+                 },
+                 "type": "object"
+               }
+             ],
+             "type": "object"
+           },
+           "testToasterBits": {
+             "enum": [
+               "testbit1",
+               "testbit2"
+             ],
+             "minItems": 0,
+             "required": false,
+             "type": "String",
+             "uniqueItems": true
+           },
+           "toasterManufacturer": {
+             "description": "The name of the toaster's manufacturer. For instance, \n                Microsoft Toaster.",
+             "required": true,
+             "type": "string"
+           },
+           "toasterModelNumber": {
+             "description": "The name of the toaster's model. For instance,\n               Radiant Automatic.",
+             "required": true,
+             "type": "string"
+           },
+           "toasterStatus": {
+             "description": "This variable indicates the current state of \n               the toaster.",
+             "enum": [
+               "up",
+               "down"
+             ],
+             "required": true
+           }
+         }     
+    }
+  }
+}
diff --git a/opendaylight/md-sal/sal-rest-docgen/src/test/resources/topology-good.json b/opendaylight/md-sal/sal-rest-docgen/src/test/resources/topology-good.json
new file mode 100644 (file)
index 0000000..4017829
--- /dev/null
@@ -0,0 +1,106 @@
+{
+    "apiVersion": "1.0.0",
+    "swaggerVersion": "1.2",
+    "basePath": "/api",
+    "resourcePath": "/config",
+    "produces": [ "application/json", "application/xml" ],
+    "apis": [
+        {
+            "path": "/network-topology:network-topology/network-topology",
+            "operations": [
+                {
+                    "method": "GET",
+                    "summary": "Test",
+                    "notes": "",
+                    "type": "Toaster",
+                    "nickname": "something",
+                    "consumes": [
+                        "application/json",
+                        "application/xml"
+                    ],
+                    "responseMessages": [
+                        {
+                            "code": 405,
+                            "message": "Invalid input"
+                        }
+                    ]
+                }
+            ]
+        }
+    ],
+    "models": {
+        "Toaster": {
+            "id":"Toaster",
+            "$schema": "http://json-schema.org/draft-04/schema",
+            "description": "Top-level container for all toaster database objects.",
+            "properties": {
+                "allow-user": {
+                    "description": "A list of user name patterns to allow",
+                    "items": {"type": "string"},
+                    "required": false,
+                    "type": "array"
+                },
+                "how": {
+                    "oneOf": [
+                        {
+                            "manual": {"manual": {
+                                "required": false,
+                                "type": "string"
+                            }},
+                            "type": "object"
+                        },
+                        {
+                            "interval": {"interval": {
+                                "required": false,
+                                "type": "integer"
+                            }},
+                            "type": "object"
+                        },
+                        {
+                            "daily": {
+                                "daily": {
+                                    "required": false,
+                                    "type": "string"
+                                },
+                                "time-of-day": {
+                                    "required": false,
+                                    "type": "string"
+                                }
+                            },
+                            "type": "object"
+                        }
+                    ],
+                    "type": "object"
+                },
+                "testToasterBits": {
+                    "enum": [
+                        "testbit1",
+                        "testbit2"
+                    ],
+                    "minItems": 0,
+                    "required": false,
+                    "type": "String",
+                    "uniqueItems": true
+                },
+                "toasterManufacturer": {
+                    "description": "The name of the toaster's manufacturer. For instance, \n                Microsoft Toaster.",
+                    "required": true,
+                    "type": "string"
+                },
+                "toasterModelNumber": {
+                    "description": "The name of the toaster's model. For instance,\n               Radiant Automatic.",
+                    "required": true,
+                    "type": "string"
+                },
+                "toasterStatus": {
+                    "description": "This variable indicates the current state of \n               the toaster.",
+                    "enum": [
+                        "up",
+                        "down"
+                    ],
+                    "required": true
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/opendaylight/md-sal/sal-rest-docgen/src/test/resources/topology-new.json b/opendaylight/md-sal/sal-rest-docgen/src/test/resources/topology-new.json
new file mode 100644 (file)
index 0000000..c34fd8f
--- /dev/null
@@ -0,0 +1,35 @@
+{
+    "apiVersion": "1.0.0",
+    "swaggerVersion": "1.2",
+    "basePath": "/restconf",
+    "resourcePath": "/config",
+    "produces": [ "application/json", "application/xml" ],
+    "apis": [
+        {
+            "path": "/network-topology:network-topology/network-topology",
+            "operations": [
+                {
+                    "method": "GET",
+                    "summary": "Test",
+                    "notes": null,
+                    "type": "support",
+                    "nickname": "test",
+                    "consumes": null,
+                    "responseMessages": null
+                }
+            ]
+        }
+    ],
+    "models": {
+        "supporting-link": {
+            "id":"supporting-link",
+            "$schema": "http://json-schema.org/draft-04/schema",
+            "properties": {
+                "link-ref": {
+                    "required": false
+                }
+            },
+            "type": "object"
+        }
+    }
+}
\ No newline at end of file
diff --git a/opendaylight/md-sal/sal-rest-docgen/src/test/resources/topology.json b/opendaylight/md-sal/sal-rest-docgen/src/test/resources/topology.json
new file mode 100644 (file)
index 0000000..8a1a131
--- /dev/null
@@ -0,0 +1,730 @@
+{
+    "apiVersion" : "1.0.0",
+    "swaggerVersion" : "1.2",
+    "basePath" : "http://10.195.128.107:8080/restconf",
+    "resourcePath" : null,
+    "produces" : [ "application/json", "application/xml" ],
+    "apis" : [ {
+        "path" : "/operational/network-topology:network-topology",
+        "operations" : [ {
+            "method" : "GET",
+            "summary" : null,
+            "notes" : null,
+            "type" : "network-topology",
+            "nickname" : "GET-network-topology",
+            "consumes" : null,
+            "parameters" : [ ],
+            "responseMessages" : null
+        } ]
+    }, {
+        "path" : "/operational/network-topology:network-topology/topology/{topology-id}",
+        "operations" : [ {
+            "method" : "GET",
+            "summary" : null,
+            "notes" : "\n                This is the model of an abstract topology.\n                A topology contins nodes and links.  \n                Each topology MUST be identified by\n                unique topology-id for reason that a network could contain many\n                topologies.\n            ",
+            "type" : "topology",
+            "nickname" : "GET-topology",
+            "consumes" : null,
+            "parameters" : [ {
+                "name" : "topology-id",
+                "description" : "\n                    It is presumed that a datastore will contain many topologies. To\n                    distinguish between topologies it is vital to have UNIQUE\n                    topology identifiers.\n                ",
+                "required" : false,
+                "type" : "string",
+                "paramType" : "path"
+            } ],
+            "responseMessages" : null
+        } ]
+    }, {
+        "path" : "/operational/network-topology:network-topology/topology/{topology-id}/link/{link-id}",
+        "operations" : [ {
+            "method" : "GET",
+            "summary" : null,
+            "notes" : "\n                    A Network Link connects a by Local (Source) node and\n                    a Remote (Destination) Network Nodes via a set of the \n                    nodes' termination points. \n                    As it is possible to have several links between the same\n                    source and destination nodes, and as a link could potentially\n                    be re-homed between termination points, to ensure that we \n                    would always know to distinguish between links, every link \n                    is identified by a dedicated link identifier.  \n                    Note that a link models a point-to-point link, not a multipoint\n                    link.  \n                    Layering dependencies on links in underlay topologies are\n                    not represented as the layering information of nodes and of \n                    termination points is sufficient.  \n                ",
+            "type" : "link",
+            "nickname" : "GET-link",
+            "consumes" : null,
+            "parameters" : [ {
+                "name" : "topology-id",
+                "description" : "\n                    It is presumed that a datastore will contain many topologies. To\n                    distinguish between topologies it is vital to have UNIQUE\n                    topology identifiers.\n                ",
+                "required" : false,
+                "type" : "string",
+                "paramType" : "path"
+            }, {
+                "name" : "link-id",
+                "description" : "The identifier of a link in the topology.  \n                A link is specific to a topology to which it belongs.",
+                "required" : false,
+                "type" : "string",
+                "paramType" : "path"
+            } ],
+            "responseMessages" : null
+        } ]
+    }, {
+        "path" : "/operational/network-topology:network-topology/topology/{topology-id}/link/{link-id}/destination",
+        "operations" : [ {
+            "method" : "GET",
+            "summary" : null,
+            "notes" : null,
+            "type" : "destination",
+            "nickname" : "GET-destination",
+            "consumes" : null,
+            "parameters" : [ {
+                "name" : "topology-id",
+                "description" : "\n                    It is presumed that a datastore will contain many topologies. To\n                    distinguish between topologies it is vital to have UNIQUE\n                    topology identifiers.\n                ",
+                "required" : false,
+                "type" : "string",
+                "paramType" : "path"
+            }, {
+                "name" : "link-id",
+                "description" : "The identifier of a link in the topology.  \n                A link is specific to a topology to which it belongs.",
+                "required" : false,
+                "type" : "string",
+                "paramType" : "path"
+            } ],
+            "responseMessages" : null
+        } ]
+    }, {
+        "path" : "/operational/network-topology:network-topology/topology/{topology-id}/link/{link-id}/destination/dest-node",
+        "operations" : [ {
+            "method" : "GET",
+            "summary" : null,
+            "notes" : "Destination node identifier, must be in same topology.",
+            "type" : "dest-node",
+            "nickname" : "GET-dest-node",
+            "consumes" : null,
+            "parameters" : [ {
+                "name" : "topology-id",
+                "description" : "\n                    It is presumed that a datastore will contain many topologies. To\n                    distinguish between topologies it is vital to have UNIQUE\n                    topology identifiers.\n                ",
+                "required" : false,
+                "type" : "string",
+                "paramType" : "path"
+            }, {
+                "name" : "link-id",
+                "description" : "The identifier of a link in the topology.  \n                A link is specific to a topology to which it belongs.",
+                "required" : false,
+                "type" : "string",
+                "paramType" : "path"
+            } ],
+            "responseMessages" : null
+        } ]
+    }, {
+        "path" : "/operational/network-topology:network-topology/topology/{topology-id}/link/{link-id}/destination/dest-tp",
+        "operations" : [ {
+            "method" : "GET",
+            "summary" : null,
+            "notes" : "Termination point within destination node that terminates the link.",
+            "type" : "dest-tp",
+            "nickname" : "GET-dest-tp",
+            "consumes" : null,
+            "parameters" : [ {
+                "name" : "topology-id",
+                "description" : "\n                    It is presumed that a datastore will contain many topologies. To\n                    distinguish between topologies it is vital to have UNIQUE\n                    topology identifiers.\n                ",
+                "required" : false,
+                "type" : "string",
+                "paramType" : "path"
+            }, {
+                "name" : "link-id",
+                "description" : "The identifier of a link in the topology.  \n                A link is specific to a topology to which it belongs.",
+                "required" : false,
+                "type" : "string",
+                "paramType" : "path"
+            } ],
+            "responseMessages" : null
+        } ]
+    }, {
+        "path" : "/operational/network-topology:network-topology/topology/{topology-id}/link/{link-id}/link-id",
+        "operations" : [ {
+            "method" : "GET",
+            "summary" : null,
+            "notes" : "The identifier of a link in the topology.  \n                A link is specific to a topology to which it belongs.",
+            "type" : "link-id",
+            "nickname" : "GET-link-id",
+            "consumes" : null,
+            "parameters" : [ {
+                "name" : "topology-id",
+                "description" : "\n                    It is presumed that a datastore will contain many topologies. To\n                    distinguish between topologies it is vital to have UNIQUE\n                    topology identifiers.\n                ",
+                "required" : false,
+                "type" : "string",
+                "paramType" : "path"
+            }, {
+                "name" : "link-id",
+                "description" : "The identifier of a link in the topology.  \n                A link is specific to a topology to which it belongs.",
+                "required" : false,
+                "type" : "string",
+                "paramType" : "path"
+            } ],
+            "responseMessages" : null
+        } ]
+    }, {
+        "path" : "/operational/network-topology:network-topology/topology/{topology-id}/link/{link-id}/source",
+        "operations" : [ {
+            "method" : "GET",
+            "summary" : null,
+            "notes" : null,
+            "type" : "source",
+            "nickname" : "GET-source",
+            "consumes" : null,
+            "parameters" : [ {
+                "name" : "topology-id",
+                "description" : "\n                    It is presumed that a datastore will contain many topologies. To\n                    distinguish between topologies it is vital to have UNIQUE\n                    topology identifiers.\n                ",
+                "required" : false,
+                "type" : "string",
+                "paramType" : "path"
+            }, {
+                "name" : "link-id",
+                "description" : "The identifier of a link in the topology.  \n                A link is specific to a topology to which it belongs.",
+                "required" : false,
+                "type" : "string",
+                "paramType" : "path"
+            } ],
+            "responseMessages" : null
+        } ]
+    }, {
+        "path" : "/operational/network-topology:network-topology/topology/{topology-id}/link/{link-id}/source/source-node",
+        "operations" : [ {
+            "method" : "GET",
+            "summary" : null,
+            "notes" : "Source node identifier, must be in same topology.",
+            "type" : "source-node",
+            "nickname" : "GET-source-node",
+            "consumes" : null,
+            "parameters" : [ {
+                "name" : "topology-id",
+                "description" : "\n                    It is presumed that a datastore will contain many topologies. To\n                    distinguish between topologies it is vital to have UNIQUE\n                    topology identifiers.\n                ",
+                "required" : false,
+                "type" : "string",
+                "paramType" : "path"
+            }, {
+                "name" : "link-id",
+                "description" : "The identifier of a link in the topology.  \n                A link is specific to a topology to which it belongs.",
+                "required" : false,
+                "type" : "string",
+                "paramType" : "path"
+            } ],
+            "responseMessages" : null
+        } ]
+    }, {
+        "path" : "/operational/network-topology:network-topology/topology/{topology-id}/link/{link-id}/source/source-tp",
+        "operations" : [ {
+            "method" : "GET",
+            "summary" : null,
+            "notes" : "Termination point within source node that terminates the link.",
+            "type" : "source-tp",
+            "nickname" : "GET-source-tp",
+            "consumes" : null,
+            "parameters" : [ {
+                "name" : "topology-id",
+                "description" : "\n                    It is presumed that a datastore will contain many topologies. To\n                    distinguish between topologies it is vital to have UNIQUE\n                    topology identifiers.\n                ",
+                "required" : false,
+                "type" : "string",
+                "paramType" : "path"
+            }, {
+                "name" : "link-id",
+                "description" : "The identifier of a link in the topology.  \n                A link is specific to a topology to which it belongs.",
+                "required" : false,
+                "type" : "string",
+                "paramType" : "path"
+            } ],
+            "responseMessages" : null
+        } ]
+    }, {
+        "path" : "/operational/network-topology:network-topology/topology/{topology-id}/link/{link-id}/supporting-link/{link-ref}",
+        "operations" : [ {
+            "method" : "GET",
+            "summary" : null,
+            "notes" : null,
+            "type" : "supporting-link",
+            "nickname" : "GET-supporting-link",
+            "consumes" : null,
+            "parameters" : [ {
+                "name" : "topology-id",
+                "description" : "\n                    It is presumed that a datastore will contain many topologies. To\n                    distinguish between topologies it is vital to have UNIQUE\n                    topology identifiers.\n                ",
+                "required" : false,
+                "type" : "string",
+                "paramType" : "path"
+            }, {
+                "name" : "link-id",
+                "description" : "The identifier of a link in the topology.  \n                A link is specific to a topology to which it belongs.",
+                "required" : false,
+                "type" : "string",
+                "paramType" : "path"
+            }, {
+                "name" : "link-ref",
+                "description" : null,
+                "required" : false,
+                "type" : "string",
+                "paramType" : "path"
+            } ],
+            "responseMessages" : null
+        } ]
+    }, {
+        "path" : "/operational/network-topology:network-topology/topology/{topology-id}/link/{link-id}/supporting-link/{link-ref}/link-ref",
+        "operations" : [ {
+            "method" : "GET",
+            "summary" : null,
+            "notes" : null,
+            "type" : "link-ref",
+            "nickname" : "GET-link-ref",
+            "consumes" : null,
+            "parameters" : [ {
+                "name" : "topology-id",
+                "description" : "\n                    It is presumed that a datastore will contain many topologies. To\n                    distinguish between topologies it is vital to have UNIQUE\n                    topology identifiers.\n                ",
+                "required" : false,
+                "type" : "string",
+                "paramType" : "path"
+            }, {
+                "name" : "link-id",
+                "description" : "The identifier of a link in the topology.  \n                A link is specific to a topology to which it belongs.",
+                "required" : false,
+                "type" : "string",
+                "paramType" : "path"
+            }, {
+                "name" : "link-ref",
+                "description" : null,
+                "required" : false,
+                "type" : "string",
+                "paramType" : "path"
+            } ],
+            "responseMessages" : null
+        } ]
+    }, {
+        "path" : "/operational/network-topology:network-topology/topology/{topology-id}/node/{node-id}",
+        "operations" : [ {
+            "method" : "GET",
+            "summary" : null,
+            "notes" : "The list of network nodes defined for the topology.",
+            "type" : "node",
+            "nickname" : "GET-node",
+            "consumes" : null,
+            "parameters" : [ {
+                "name" : "topology-id",
+                "description" : "\n                    It is presumed that a datastore will contain many topologies. To\n                    distinguish between topologies it is vital to have UNIQUE\n                    topology identifiers.\n                ",
+                "required" : false,
+                "type" : "string",
+                "paramType" : "path"
+            }, {
+                "name" : "node-id",
+                "description" : "The identifier of a node in the topology.  \n                A node is specific to a topology to which it belongs.",
+                "required" : false,
+                "type" : "string",
+                "paramType" : "path"
+            } ],
+            "responseMessages" : null
+        } ]
+    }, {
+        "path" : "/operational/network-topology:network-topology/topology/{topology-id}/node/{node-id}/node-id",
+        "operations" : [ {
+            "method" : "GET",
+            "summary" : null,
+            "notes" : "The identifier of a node in the topology.  \n                A node is specific to a topology to which it belongs.",
+            "type" : "node-id",
+            "nickname" : "GET-node-id",
+            "consumes" : null,
+            "parameters" : [ {
+                "name" : "topology-id",
+                "description" : "\n                    It is presumed that a datastore will contain many topologies. To\n                    distinguish between topologies it is vital to have UNIQUE\n                    topology identifiers.\n                ",
+                "required" : false,
+                "type" : "string",
+                "paramType" : "path"
+            }, {
+                "name" : "node-id",
+                "description" : "The identifier of a node in the topology.  \n                A node is specific to a topology to which it belongs.",
+                "required" : false,
+                "type" : "string",
+                "paramType" : "path"
+            } ],
+            "responseMessages" : null
+        } ]
+    }, {
+        "path" : "/operational/network-topology:network-topology/topology/{topology-id}/node/{node-id}/supporting-node/{node-ref}",
+        "operations" : [ {
+            "method" : "GET",
+            "summary" : null,
+            "notes" : "This list defines vertical layering information for nodes. \n                It allows to capture for any given node, which node (or nodes)\n                in the corresponding underlay topology it maps onto.  \n                A node can map to zero, one, or more nodes below it;\n                accordingly there can be zero, one, or more elements in the list.\n                If there are specific layering requirements, for example\n                specific to a particular type of topology that only allows\n                for certain layering relationships, the choice\n                below can be augmented with additional cases.\n                A list has been chosen rather than a leaf-list in order \n                to provide room for augmentations, e.g. for \n                statistics or priorization information associated with \n                supporting nodes.",
+            "type" : "supporting-node",
+            "nickname" : "GET-supporting-node",
+            "consumes" : null,
+            "parameters" : [ {
+                "name" : "topology-id",
+                "description" : "\n                    It is presumed that a datastore will contain many topologies. To\n                    distinguish between topologies it is vital to have UNIQUE\n                    topology identifiers.\n                ",
+                "required" : false,
+                "type" : "string",
+                "paramType" : "path"
+            }, {
+                "name" : "node-id",
+                "description" : "The identifier of a node in the topology.  \n                A node is specific to a topology to which it belongs.",
+                "required" : false,
+                "type" : "string",
+                "paramType" : "path"
+            }, {
+                "name" : "node-ref",
+                "description" : null,
+                "required" : false,
+                "type" : "string",
+                "paramType" : "path"
+            } ],
+            "responseMessages" : null
+        } ]
+    }, {
+        "path" : "/operational/network-topology:network-topology/topology/{topology-id}/node/{node-id}/supporting-node/{node-ref}/node-ref",
+        "operations" : [ {
+            "method" : "GET",
+            "summary" : null,
+            "notes" : null,
+            "type" : "node-ref",
+            "nickname" : "GET-node-ref",
+            "consumes" : null,
+            "parameters" : [ {
+                "name" : "topology-id",
+                "description" : "\n                    It is presumed that a datastore will contain many topologies. To\n                    distinguish between topologies it is vital to have UNIQUE\n                    topology identifiers.\n                ",
+                "required" : false,
+                "type" : "string",
+                "paramType" : "path"
+            }, {
+                "name" : "node-id",
+                "description" : "The identifier of a node in the topology.  \n                A node is specific to a topology to which it belongs.",
+                "required" : false,
+                "type" : "string",
+                "paramType" : "path"
+            }, {
+                "name" : "node-ref",
+                "description" : null,
+                "required" : false,
+                "type" : "string",
+                "paramType" : "path"
+            } ],
+            "responseMessages" : null
+        } ]
+    }, {
+        "path" : "/operational/network-topology:network-topology/topology/{topology-id}/node/{node-id}/termination-point/{tp-id}",
+        "operations" : [ {
+            "method" : "GET",
+            "summary" : null,
+            "notes" : "A termination point can terminate a link.  \n                        Depending on the type of topology, a termination point could, \n                        for example, refer to a port or an interface.",
+            "type" : "termination-point",
+            "nickname" : "GET-termination-point",
+            "consumes" : null,
+            "parameters" : [ {
+                "name" : "topology-id",
+                "description" : "\n                    It is presumed that a datastore will contain many topologies. To\n                    distinguish between topologies it is vital to have UNIQUE\n                    topology identifiers.\n                ",
+                "required" : false,
+                "type" : "string",
+                "paramType" : "path"
+            }, {
+                "name" : "node-id",
+                "description" : "The identifier of a node in the topology.  \n                A node is specific to a topology to which it belongs.",
+                "required" : false,
+                "type" : "string",
+                "paramType" : "path"
+            }, {
+                "name" : "tp-id",
+                "description" : null,
+                "required" : false,
+                "type" : "string",
+                "paramType" : "path"
+            } ],
+            "responseMessages" : null
+        } ]
+    }, {
+        "path" : "/operational/network-topology:network-topology/topology/{topology-id}/node/{node-id}/termination-point/{tp-id}/tp-id",
+        "operations" : [ {
+            "method" : "GET",
+            "summary" : null,
+            "notes" : null,
+            "type" : "tp-id",
+            "nickname" : "GET-tp-id",
+            "consumes" : null,
+            "parameters" : [ {
+                "name" : "topology-id",
+                "description" : "\n                    It is presumed that a datastore will contain many topologies. To\n                    distinguish between topologies it is vital to have UNIQUE\n                    topology identifiers.\n                ",
+                "required" : false,
+                "type" : "string",
+                "paramType" : "path"
+            }, {
+                "name" : "node-id",
+                "description" : "The identifier of a node in the topology.  \n                A node is specific to a topology to which it belongs.",
+                "required" : false,
+                "type" : "string",
+                "paramType" : "path"
+            }, {
+                "name" : "tp-id",
+                "description" : null,
+                "required" : false,
+                "type" : "string",
+                "paramType" : "path"
+            } ],
+            "responseMessages" : null
+        } ]
+    }, {
+        "path" : "/operational/network-topology:network-topology/topology/{topology-id}/node/{node-id}/termination-point/{tp-id}/tp-ref",
+        "operations" : [ {
+            "method" : "GET",
+            "summary" : null,
+            "notes" : "The leaf list identifies any termination points that the \n                termination point is dependent on, or maps onto.  \n                Those termination points will themselves be contained \n                in a supporting node.  \n                This dependency information can be inferred from \n                the dependencies between links.  For this reason, \n                this item is not separately configurable.  Hence no\n                corresponding constraint needs to be articulated.  \n                The corresponding information is simply provided by the\n                implementing system.",
+            "type" : "tp-ref",
+            "nickname" : "GET-tp-ref",
+            "consumes" : null,
+            "parameters" : [ {
+                "name" : "topology-id",
+                "description" : "\n                    It is presumed that a datastore will contain many topologies. To\n                    distinguish between topologies it is vital to have UNIQUE\n                    topology identifiers.\n                ",
+                "required" : false,
+                "type" : "string",
+                "paramType" : "path"
+            }, {
+                "name" : "node-id",
+                "description" : "The identifier of a node in the topology.  \n                A node is specific to a topology to which it belongs.",
+                "required" : false,
+                "type" : "string",
+                "paramType" : "path"
+            }, {
+                "name" : "tp-id",
+                "description" : null,
+                "required" : false,
+                "type" : "string",
+                "paramType" : "path"
+            } ],
+            "responseMessages" : null
+        } ]
+    }, {
+        "path" : "/operational/network-topology:network-topology/topology/{topology-id}/topology-id",
+        "operations" : [ {
+            "method" : "GET",
+            "summary" : null,
+            "notes" : "\n                    It is presumed that a datastore will contain many topologies. To\n                    distinguish between topologies it is vital to have UNIQUE\n                    topology identifiers.\n                ",
+            "type" : "topology-id",
+            "nickname" : "GET-topology-id",
+            "consumes" : null,
+            "parameters" : [ {
+                "name" : "topology-id",
+                "description" : "\n                    It is presumed that a datastore will contain many topologies. To\n                    distinguish between topologies it is vital to have UNIQUE\n                    topology identifiers.\n                ",
+                "required" : false,
+                "type" : "string",
+                "paramType" : "path"
+            } ],
+            "responseMessages" : null
+        } ]
+    }, {
+        "path" : "/operational/network-topology:network-topology/topology/{topology-id}/topology-types",
+        "operations" : [ {
+            "method" : "GET",
+            "summary" : null,
+            "notes" : "This container is used to identify the type, or types \n                    (as a topology can support several types simultaneously), \n                    of the topology.  \n                    Topology types are the subject of several integrity constraints \n                    that an implementing server can validate in order to \n                    maintain integrity of the datastore.  \n                    Topology types are indicated through separate data nodes; \n                    the set of topology types is expected to increase over time.\n                    To add support for a new topology, an augmenting module\n                    needs to augment this container with a new empty optional \n                    container to indicate the new topology type.  \n                    The use of a container allows to indicate a subcategorization\n                    of topology types.  \n                    The container SHALL NOT be augmented with any data nodes \n                    that serve a purpose other than identifying a particular \n                    topology type.  \n                ",
+            "type" : "topology-types",
+            "nickname" : "GET-topology-types",
+            "consumes" : null,
+            "parameters" : [ {
+                "name" : "topology-id",
+                "description" : "\n                    It is presumed that a datastore will contain many topologies. To\n                    distinguish between topologies it is vital to have UNIQUE\n                    topology identifiers.\n                ",
+                "required" : false,
+                "type" : "string",
+                "paramType" : "path"
+            } ],
+            "responseMessages" : null
+        } ]
+    }, {
+        "path" : "/operational/network-topology:network-topology/topology/{topology-id}/underlay-topology/{topology-ref}",
+        "operations" : [ {
+            "method" : "GET",
+            "summary" : null,
+            "notes" : "Identifies the topology, or topologies, that this topology\n                    is dependent on.",
+            "type" : "underlay-topology",
+            "nickname" : "GET-underlay-topology",
+            "consumes" : null,
+            "parameters" : [ {
+                "name" : "topology-id",
+                "description" : "\n                    It is presumed that a datastore will contain many topologies. To\n                    distinguish between topologies it is vital to have UNIQUE\n                    topology identifiers.\n                ",
+                "required" : false,
+                "type" : "string",
+                "paramType" : "path"
+            }, {
+                "name" : "topology-ref",
+                "description" : null,
+                "required" : false,
+                "type" : "string",
+                "paramType" : "path"
+            } ],
+            "responseMessages" : null
+        } ]
+    }, {
+        "path" : "/operational/network-topology:network-topology/topology/{topology-id}/underlay-topology/{topology-ref}/topology-ref",
+        "operations" : [ {
+            "method" : "GET",
+            "summary" : null,
+            "notes" : null,
+            "type" : "topology-ref",
+            "nickname" : "GET-topology-ref",
+            "consumes" : null,
+            "parameters" : [ {
+                "name" : "topology-id",
+                "description" : "\n                    It is presumed that a datastore will contain many topologies. To\n                    distinguish between topologies it is vital to have UNIQUE\n                    topology identifiers.\n                ",
+                "required" : false,
+                "type" : "string",
+                "paramType" : "path"
+            }, {
+                "name" : "topology-ref",
+                "description" : null,
+                "required" : false,
+                "type" : "string",
+                "paramType" : "path"
+            } ],
+            "responseMessages" : null
+        } ]
+    } ],
+    "models" : {
+        "underlay-topology" : {
+            "id" : "underlay-topology",
+            "$schema" : "http://json-schema.org/draft-04/schema",
+            "properties" : {
+                "topology-ref" : {
+                    "required" : false
+                }
+            },
+            "type" : "object"
+        },
+        "network-topology" : "{\n  \"id\": \"network-topology\",\n  \"$schema\": \"http://json-schema.org/draft-04/schema\",\n  \"properties\": {\"topology\": {\n    \"items\": {\"$ref\": \"topology\"},\n    \"description\": \"\\n                This is the model of an abstract topology.\\n                A topology contins nodes and links.  \\n                Each topology MUST be identified by\\n                unique topology-id for reason that a network could contain many\\n                topologies.\\n            \",\n    \"type\": \"array\"\n  }},\n  \"type\": \"object\"\n}",
+        "node" : {
+            "id" : "node",
+            "$schema" : "http://json-schema.org/draft-04/schema",
+            "properties" : {
+                "supporting-node" : {
+                    "items" : {
+                        "$ref" : "supporting-node"
+                    },
+                    "description" : "This list defines vertical layering information for nodes. \n                It allows to capture for any given node, which node (or nodes)\n                in the corresponding underlay topology it maps onto.  \n                A node can map to zero, one, or more nodes below it;\n                accordingly there can be zero, one, or more elements in the list.\n                If there are specific layering requirements, for example\n                specific to a particular type of topology that only allows\n                for certain layering relationships, the choice\n                below can be augmented with additional cases.\n                A list has been chosen rather than a leaf-list in order \n                to provide room for augmentations, e.g. for \n                statistics or priorization information associated with \n                supporting nodes.",
+                    "type" : "array"
+                },
+                "termination-point" : {
+                    "items" : {
+                        "$ref" : "termination-point"
+                    },
+                    "description" : "A termination point can terminate a link.  \n                        Depending on the type of topology, a termination point could, \n                        for example, refer to a port or an interface.",
+                    "type" : "array"
+                },
+                "node-id" : {
+                    "description" : "The identifier of a node in the topology.  \n                A node is specific to a topology to which it belongs.",
+                    "type" : "string",
+                    "required" : false
+                }
+            },
+            "type" : "object"
+        },
+        "supporting-node" : {
+            "id" : "supporting-node",
+            "$schema" : "http://json-schema.org/draft-04/schema",
+            "properties" : {
+                "node-ref" : {
+                    "required" : false
+                }
+            },
+            "type" : "object"
+        },
+        "link" : {
+            "id" : "link",
+            "$schema" : "http://json-schema.org/draft-04/schema",
+            "properties" : {
+                "source" : {
+                    "properties" : {
+                        "source-node" : {
+                            "description" : "Source node identifier, must be in same topology.",
+                            "required" : true
+                        },
+                        "source-tp" : {
+                            "description" : "Termination point within source node that terminates the link.",
+                            "required" : false
+                        }
+                    },
+                    "type" : "object"
+                },
+                "supporting-link" : {
+                    "items" : {
+                        "$ref" : "supporting-link"
+                    },
+                    "type" : "array"
+                },
+                "link-id" : {
+                    "description" : "The identifier of a link in the topology.  \n                A link is specific to a topology to which it belongs.",
+                    "type" : "string",
+                    "required" : false
+                },
+                "destination" : {
+                    "properties" : {
+                        "dest-node" : {
+                            "description" : "Destination node identifier, must be in same topology.",
+                            "required" : true
+                        },
+                        "dest-tp" : {
+                            "description" : "Termination point within destination node that terminates the link.",
+                            "required" : false
+                        }
+                    },
+                    "type" : "object"
+                }
+            },
+            "type" : "object"
+        },
+        "termination-point" : {
+            "id" : "termination-point",
+            "$schema" : "http://json-schema.org/draft-04/schema",
+            "properties" : {
+                "tp-ref" : {
+                    "items" : { },
+                    "description" : "The leaf list identifies any termination points that the \n                termination point is dependent on, or maps onto.  \n                Those termination points will themselves be contained \n                in a supporting node.  \n                This dependency information can be inferred from \n                the dependencies between links.  For this reason, \n                this item is not separately configurable.  Hence no\n                corresponding constraint needs to be articulated.  \n                The corresponding information is simply provided by the\n                implementing system.",
+                    "required" : false,
+                    "type" : "array"
+                },
+                "tp-id" : {
+                    "type" : "string",
+                    "required" : false
+                }
+            },
+            "type" : "object"
+        },
+        "topology" : {
+            "id" : "topology",
+            "$schema" : "http://json-schema.org/draft-04/schema",
+            "properties" : {
+                "underlay-topology" : {
+                    "items" : {
+                        "$ref" : "underlay-topology"
+                    },
+                    "description" : "Identifies the topology, or topologies, that this topology\n                    is dependent on.",
+                    "type" : "array"
+                },
+                "node" : {
+                    "items" : {
+                        "$ref" : "node"
+                    },
+                    "description" : "The list of network nodes defined for the topology.",
+                    "type" : "array"
+                },
+                "topology-types" : {
+                    "description" : "This container is used to identify the type, or types \n                    (as a topology can support several types simultaneously), \n                    of the topology.  \n                    Topology types are the subject of several integrity constraints \n                    that an implementing server can validate in order to \n                    maintain integrity of the datastore.  \n                    Topology types are indicated through separate data nodes; \n                    the set of topology types is expected to increase over time.\n                    To add support for a new topology, an augmenting module\n                    needs to augment this container with a new empty optional \n                    container to indicate the new topology type.  \n                    The use of a container allows to indicate a subcategorization\n                    of topology types.  \n                    The container SHALL NOT be augmented with any data nodes \n                    that serve a purpose other than identifying a particular \n                    topology type.  \n                ",
+                    "properties" : { },
+                    "type" : "object"
+                },
+                "topology-id" : {
+                    "description" : "\n                    It is presumed that a datastore will contain many topologies. To\n                    distinguish between topologies it is vital to have UNIQUE\n                    topology identifiers.\n                ",
+                    "type" : "string",
+                    "required" : false
+                },
+                "link" : {
+                    "items" : {
+                        "$ref" : "link"
+                    },
+                    "description" : "\n                    A Network Link connects a by Local (Source) node and\n                    a Remote (Destination) Network Nodes via a set of the \n                    nodes' termination points. \n                    As it is possible to have several links between the same\n                    source and destination nodes, and as a link could potentially\n                    be re-homed between termination points, to ensure that we \n                    would always know to distinguish between links, every link \n                    is identified by a dedicated link identifier.  \n                    Note that a link models a point-to-point link, not a multipoint\n                    link.  \n                    Layering dependencies on links in underlay topologies are\n                    not represented as the layering information of nodes and of \n                    termination points is sufficient.  \n                ",
+                    "type" : "array"
+                }
+            },
+            "type" : "object"
+        },
+        "supporting-link" : {
+            "id" : "supporting-link",
+            "$schema" : "http://json-schema.org/draft-04/schema",
+            "properties" : {
+                "link-ref" : {
+                    "required" : false
+                }
+            },
+            "type" : "object"
+        }
+    }
+}
diff --git a/opendaylight/md-sal/sal-rest-docgen/src/test/resources/wadl.xml b/opendaylight/md-sal/sal-rest-docgen/src/test/resources/wadl.xml
new file mode 100644 (file)
index 0000000..7c3488f
--- /dev/null
@@ -0,0 +1,142 @@
+<?xml version="1.0"?>
+<application xmlns="http://wadl.dev.java.net/2009/02" xmlns:inet="urn:ietf:params:xml:ns:yang:ietf-inet-types"
+             xmlns:nt="urn:TBD:params:xml:ns:yang:network-topology">
+
+  <grammars>
+    <include href="network-topology.yang"/>
+    <include href="ietf-inet-types.yang"/>
+  </grammars>
+
+  <resources base="http://localhost:9998/restconf">
+    <resource path="operational">
+      <resource path="network-topology:network-topology">
+        <method name="GET">
+          <response>
+            <representation mediaType="application/xml" element="nt:network-topology"/>
+            <representation mediaType="text/xml" element="nt:network-topology"/>
+            <representation mediaType="application/json" element="nt:network-topology"/>
+            <representation mediaType="application/yang.data+xml" element="nt:network-topology"/>
+            <representation mediaType="application/yang.data+json" element="nt:network-topology"/>
+          </response>
+        </method>
+        <resource path="topology/{topology-id}">
+          <param required="true" style="template" name="topology-id" type="nt:topology-id"/>
+          <method name="GET">
+            <response>
+              <representation mediaType="application/xml" element="nt:topology"/>
+              <representation mediaType="text/xml" element="nt:topology"/>
+              <representation mediaType="application/json" element="nt:topology"/>
+              <representation mediaType="application/yang.data+xml" element="nt:topology"/>
+              <representation mediaType="application/yang.data+json" element="nt:topology"/>
+            </response>
+          </method>
+          <resource path="link/{link-id}">
+            <param required="true" style="template" name="link-id" type="nt:link-id"/>
+            <method name="GET">
+              <response>
+                <representation mediaType="application/xml" element="nt:link"/>
+                <representation mediaType="text/xml" element="nt:link"/>
+                <representation mediaType="application/json" element="nt:link"/>
+                <representation mediaType="application/yang.data+xml" element="nt:link"/>
+                <representation mediaType="application/yang.data+json" element="nt:link"/>
+              </response>
+            </method>
+            <resource path="destination">
+              <method name="GET">
+                <response>
+                  <representation mediaType="application/xml" element="nt:destination"/>
+                  <representation mediaType="text/xml" element="nt:destination"/>
+                  <representation mediaType="application/json" element="nt:destination"/>
+                  <representation mediaType="application/yang.data+xml" element="nt:destination"/>
+                  <representation mediaType="application/yang.data+json" element="nt:destination"/>
+                </response>
+              </method>
+            </resource>
+            <resource path="source">
+              <method name="GET">
+                <response>
+                  <representation mediaType="application/xml" element="nt:source"/>
+                  <representation mediaType="text/xml" element="nt:source"/>
+                  <representation mediaType="application/json" element="nt:source"/>
+                  <representation mediaType="application/yang.data+xml" element="nt:source"/>
+                  <representation mediaType="application/yang.data+json" element="nt:source"/>
+                </response>
+              </method>
+            </resource>
+            <resource path="supporting-link/{link-ref}">
+              <param required="true" style="template" name="link-ref" type="nt:link-ref"/>
+              <method name="GET">
+                <response>
+                  <representation mediaType="application/xml" element="nt:supporting-link"/>
+                  <representation mediaType="text/xml" element="nt:supporting-link"/>
+                  <representation mediaType="application/json" element="nt:supporting-link"/>
+                  <representation mediaType="application/yang.data+xml" element="nt:supporting-link"/>
+                  <representation mediaType="application/yang.data+json" element="nt:supporting-link"/>
+                </response>
+              </method>
+            </resource>
+          </resource>
+          <resource path="node/{node-id}">
+            <param required="true" style="template" name="node-id" type="nt:node-id"/>
+            <method name="GET">
+              <response>
+                <representation mediaType="application/xml" element="nt:node"/>
+                <representation mediaType="text/xml" element="nt:node"/>
+                <representation mediaType="application/json" element="nt:node"/>
+                <representation mediaType="application/yang.data+xml" element="nt:node"/>
+                <representation mediaType="application/yang.data+json" element="nt:node"/>
+              </response>
+            </method>
+            <resource path="supporting-node/{node-ref}">
+              <param required="true" style="template" name="node-ref" type="nt:node-ref"/>
+              <method name="GET">
+                <response>
+                  <representation mediaType="application/xml" element="nt:supporting-node"/>
+                  <representation mediaType="text/xml" element="nt:supporting-node"/>
+                  <representation mediaType="application/json" element="nt:supporting-node"/>
+                  <representation mediaType="application/yang.data+xml" element="nt:supporting-node"/>
+                  <representation mediaType="application/yang.data+json" element="nt:supporting-node"/>
+                </response>
+              </method>
+            </resource>
+            <resource path="termination-point/{tp-id}">
+              <param required="true" style="template" name="tp-id" type="nt:tp-id"/>
+              <method name="GET">
+                <response>
+                  <representation mediaType="application/xml" element="nt:termination-point"/>
+                  <representation mediaType="text/xml" element="nt:termination-point"/>
+                  <representation mediaType="application/json" element="nt:termination-point"/>
+                  <representation mediaType="application/yang.data+xml" element="nt:termination-point"/>
+                  <representation mediaType="application/yang.data+json" element="nt:termination-point"/>
+                </response>
+              </method>
+            </resource>
+          </resource>
+          <resource path="topology-types">
+            <method name="GET">
+              <response>
+                <representation mediaType="application/xml" element="nt:topology-types"/>
+                <representation mediaType="text/xml" element="nt:topology-types"/>
+                <representation mediaType="application/json" element="nt:topology-types"/>
+                <representation mediaType="application/yang.data+xml" element="nt:topology-types"/>
+                <representation mediaType="application/yang.data+json" element="nt:topology-types"/>
+              </response>
+            </method>
+          </resource>
+          <resource path="underlay-topology/{topology-ref}">
+            <param required="true" style="template" name="topology-ref" type="nt:topology-ref"/>
+            <method name="GET">
+              <response>
+                <representation mediaType="application/xml" element="nt:underlay-topology"/>
+                <representation mediaType="text/xml" element="nt:underlay-topology"/>
+                <representation mediaType="application/json" element="nt:underlay-topology"/>
+                <representation mediaType="application/yang.data+xml" element="nt:underlay-topology"/>
+                <representation mediaType="application/yang.data+json" element="nt:underlay-topology"/>
+              </response>
+            </method>
+          </resource>
+        </resource>
+      </resource>
+    </resource>
+  </resources>
+</application>
diff --git a/opendaylight/md-sal/sal-rest-docgen/src/test/resources/yang/toaster.yang b/opendaylight/md-sal/sal-rest-docgen/src/test/resources/yang/toaster.yang
new file mode 100644 (file)
index 0000000..d33bc46
--- /dev/null
@@ -0,0 +1,240 @@
+module toaster {
+
+    yang-version 1;
+
+    namespace
+      "http://netconfcentral.org/ns/toaster";
+
+    prefix toast;
+
+    organization "Netconf Central";
+
+    contact
+      "Andy Bierman <andy@netconfcentral.org>";
+
+    description
+      "YANG version of the TOASTER-MIB.";
+
+    revision "2009-11-20" {
+      description
+        "Toaster module in progress.";
+    }
+
+
+    identity toast-type {
+      description
+          "Base for all bread types supported by the toaster.
+           New bread types not listed here nay be added in the 
+           future.";
+    }
+
+    identity white-bread {
+      base toast:toast-type;
+      description "White bread.";
+    }
+
+    identity wheat-bread {
+      base toast-type;
+      description "Wheat bread.";
+    }
+
+    identity wonder-bread {
+      base toast-type;
+      description "Wonder bread.";
+    }
+
+    identity frozen-waffle {
+      base toast-type;
+      description "Frozen waffle.";
+    }
+
+    identity frozen-bagel {
+      base toast-type;
+      description "Frozen bagel.";
+    }
+
+    identity hash-brown {
+      base toast-type;
+      description "Hash browned potatos.";
+    }
+
+    typedef DisplayString {
+      type string;
+      description
+        "YANG version of the SMIv2 DisplayString TEXTUAL-CONVENTION.";
+      reference
+        "RFC 2579, section 2.";
+
+    }
+
+    container toaster {
+      presence
+        "Indicates the toaster service is available";
+      description
+        "Top-level container for all toaster database objects.";
+        
+      leaf testToasterBits {
+         type bits {
+             bit testbit1 {
+                 position 0;
+             }
+             bit testbit2 {
+                 position 1;
+             }
+         }
+         default "testbit2";
+     }
+     
+     leaf testUnion {
+        type union {
+         type int32;
+         type string;
+        }
+        
+     } 
+     
+     leaf-list allow-user  {
+          type string;
+          description "A list of user name patterns to allow";
+        
+        }
+        
+        choice how {
+             default interval;
+             case interval {
+                 leaf interval {
+                     type uint16;
+                     default 30;
+                     units minutes;
+                 }
+             }
+             case daily {
+                 leaf daily {
+                     type string;
+                 }
+                 leaf time-of-day {
+                     type string;
+                     units 24-hour-clock;
+                     default 1am;
+                 }
+             }
+             case manual {
+                 leaf manual {
+                     type string;
+                 }
+             }
+         } 
+        
+      leaf toasterManufacturer {
+        type DisplayString;
+        config false;
+        mandatory true;
+        description
+          "The name of the toaster's manufacturer. For instance, 
+                Microsoft Toaster.";
+      }
+
+      leaf toasterModelNumber {
+        type DisplayString;
+        config false;
+        mandatory true;
+        description
+          "The name of the toaster's model. For instance,
+               Radiant Automatic.";
+      }
+
+      leaf toasterStatus {
+        type enumeration {
+          enum "up" {
+            value 1;
+            description
+              "The toaster knob position is up.
+                      No toast is being made now.";
+          }
+          enum "down" {
+            value 2;
+            description
+              "The toaster knob position is down.
+                      Toast is being made now.";
+          }
+        }
+        config false;
+        mandatory true;
+        description
+          "This variable indicates the current state of 
+               the toaster.";
+      }
+    } 
+
+    rpc make-toast {
+      description
+        "Make some toast.
+           The toastDone notification will be sent when 
+           the toast is finished.
+           An 'in-use' error will be returned if toast
+           is already being made.
+           A 'resource-denied' error will be returned 
+           if the toaster service is disabled.";
+      input {
+        leaf toasterDoneness {
+          type uint32 {
+            range "1 .. 10";
+          }
+          default '5';
+          description
+            "This variable controls how well-done is the 
+                   ensuing toast. It should be on a scale of 1 to 10.
+                   Toast made at 10 generally is considered unfit 
+                   for human consumption; toast made at 1 is warmed 
+                   lightly.";
+        }
+
+        leaf toasterToastType {
+          type identityref {
+            base toast:toast-type;
+          }
+          default 'wheat-bread';
+          description
+            "This variable informs the toaster of the type of 
+                   material that is being toasted. The toaster 
+                   uses this information, combined with 
+                   toasterDoneness, to compute for how 
+                   long the material must be toasted to achieve 
+                   the required doneness.";
+        }
+      }
+    }  
+
+    rpc cancel-toast {
+      description
+        "Stop making toast, if any is being made.
+           A 'resource-denied' error will be returned 
+           if the toaster service is disabled.";
+    }  
+    
+    notification toastDone {
+      description
+        "Indicates that the toast in progress has completed.";
+      leaf toastStatus {
+        type enumeration {
+          enum "done" {
+            value 0;
+            description "The toast is done.";
+          }
+          enum "cancelled" {
+            value 1;
+            description
+              "The toast was cancelled.";
+          }
+          enum "error" {
+            value 2;
+            description
+              "The toaster service was disabled or
+                     the toaster is broken.";
+          }
+        }
+        description
+          "Indicates the final toast status";
+      }
+    }  
+  }  
index ec62568a1b378b91210af441850fb087be4ead57..a6ab915413ca1d9172df778425d780651ce7f224 100644 (file)
@@ -19,7 +19,6 @@ import org.opendaylight.yangtools.restconf.client.api.RestconfClientContext;
 import org.opendaylight.yangtools.restconf.client.api.UnsupportedProtocolException;
 import org.opendaylight.yangtools.sal.binding.generator.impl.ModuleInfoBackedContext;
 import org.opendaylight.yangtools.sal.binding.generator.impl.RuntimeGeneratedMappingServiceImpl;
-import org.opendaylight.yangtools.yang.binding.Augmentation;
 import org.opendaylight.yangtools.yang.binding.util.BindingReflections;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -37,9 +36,7 @@ class SalRemoteClientImpl implements SalRemoteClient {
     public SalRemoteClientImpl(final URL url) {
         Preconditions.checkNotNull(url);
 
-        this.mappingService = new RuntimeGeneratedMappingServiceImpl();
-        this.mappingService.setPool(ClassPool.getDefault());
-        this.mappingService.init();
+        this.mappingService = new RuntimeGeneratedMappingServiceImpl(ClassPool.getDefault());
 
         final ModuleInfoBackedContext moduleInfo = ModuleInfoBackedContext.create();
         moduleInfo.addModuleInfos(BindingReflections.loadModuleInfos());
index 065d0ee7ba2a29c55bed1ef157be991e9f2f3a7c..fccda9d5782596e7fc70784ba3c36d665c0f6bce 100644 (file)
@@ -234,6 +234,7 @@ public class FlowWriterServiceImpl implements FlowWriterService {
     Uri destPortUri = destPort.getValue().firstKeyOf(NodeConnector.class, NodeConnectorKey.class).getId();
 
     Action outputToControllerAction = new ActionBuilder() //
+        .setOrder(0)
         .setAction(new OutputActionCaseBuilder() //
             .setOutputAction(new OutputActionBuilder() //
                 .setMaxLength(new Integer(0xffff)) //
@@ -248,6 +249,7 @@ public class FlowWriterServiceImpl implements FlowWriterService {
 
     // Wrap our Apply Action in an Instruction
     Instruction applyActionsInstruction = new InstructionBuilder() //
+        .setOrder(0)
         .setInstruction(new ApplyActionsCaseBuilder()//
             .setApplyActions(applyActions) //
             .build()) //
index 60db8f9ba65432ae64cf5946ca832692517bfc5c..2fcb2f6d63ad6805603d0725ce7801b754bbcede 100644 (file)
@@ -17,7 +17,6 @@
     <dependency>
       <groupId>org.opendaylight.controller</groupId>
       <artifactId>sal-binding-it</artifactId>
-      <version>1.1-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.opendaylight.controller.samples</groupId>
       <version>1.1-SNAPSHOT</version>
     </dependency>
     <dependency>
-      <groupId>org.opendaylight.controller.thirdparty</groupId>
+      <groupId>org.openexi</groupId>
       <artifactId>nagasena</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.opendaylight.controller.thirdparty</groupId>
+      <groupId>org.openexi</groupId>
       <artifactId>nagasena-rta</artifactId>
     </dependency>
     <dependency>
index 0c3b48a071165a30e773c2566d95dfa88a99eb84..907b35475f80f3565e18d2965885ff505bb55d6e 100644 (file)
@@ -79,8 +79,8 @@ public class ToasterTest {
                 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.thirdparty", "nagasena").versionAsInProject(),
-                mavenBundle("org.opendaylight.controller.thirdparty", "nagasena-rta").versionAsInProject()
+                mavenBundle("org.openexi", "nagasena").versionAsInProject(),
+                mavenBundle("org.openexi", "nagasena-rta").versionAsInProject()
         );
     }
 
index 4222daae13324826e3bee2acd15edb408fab04aa..5c8b20a4e36bacdad1c0a5a041d94ee67e87f406 100644 (file)
   </dependencies>
 
   <build>
-    <pluginManagement>
-      <plugins>
-        <!--This plugin's configuration is used to store Eclipse 
-                    m2e settings only. It has no influence on the Maven build itself. -->
-        <plugin>
-          <groupId>org.eclipse.m2e</groupId>
-          <artifactId>lifecycle-mapping</artifactId>
-          <version>1.0.0</version>
-          <configuration>
-            <lifecycleMappingMetadata>
-              <pluginExecutions>
-                <pluginExecution>
-                  <pluginExecutionFilter>
-                    <groupId>org.opendaylight.yangtools</groupId>
-                    <artifactId>yang-maven-plugin</artifactId>
-                    <versionRange>[0.5,)</versionRange>
-                    <goals>
-                      <goal>generate-sources</goal>
-                    </goals>
-                  </pluginExecutionFilter>
-                  <action>
-                    <ignore></ignore>
-                  </action>
-                </pluginExecution>
-              </pluginExecutions>
-            </lifecycleMappingMetadata>
-          </configuration>
-        </plugin>
-      </plugins>
-    </pluginManagement>
     <plugins>
       <plugin>
         <groupId>org.opendaylight.yangtools</groupId>
index 4a58579b13fd542936f876ddad48c7ebaabcb8a5..167fb21ffdc763f6cda840fc42b6b1e6aed03c7f 100644 (file)
@@ -20,8 +20,8 @@ abstract class AbstractListeningStatsTracker<I, K> extends AbstractStatsTracker<
     private static final Logger logger = LoggerFactory.getLogger(AbstractListeningStatsTracker.class);
     private ListenerRegistration<?> reg;
 
-    protected AbstractListeningStatsTracker(FlowCapableContext context, long lifetimeNanos) {
-        super(context, lifetimeNanos);
+    protected AbstractListeningStatsTracker(FlowCapableContext context) {
+        super(context);
     }
 
     protected abstract InstanceIdentifier<?> listenPath();
index c29b6a7730ced4f24374d2e4e67a650f3ed69293..e23ad0acdbe43a2603f458dd3a17b467116acd1b 100644 (file)
@@ -32,6 +32,9 @@ import com.google.common.util.concurrent.JdkFutureAdapters;
 
 abstract class AbstractStatsTracker<I, K> {
     private static final Logger logger = LoggerFactory.getLogger(AbstractStatsTracker.class);
+
+    private static final int WAIT_FOR_REQUEST_CYCLE = 2;
+
     private final FutureCallback<RpcResult<? extends TransactionAware>> callback =
             new FutureCallback<RpcResult<? extends TransactionAware>>() {
         @Override
@@ -62,15 +65,15 @@ abstract class AbstractStatsTracker<I, K> {
 
     private final Map<K, Long> trackedItems = new HashMap<>();
     private final FlowCapableContext context;
-    private final long lifetimeNanos;
+    private long requestCounter;
 
-    protected AbstractStatsTracker(final FlowCapableContext context, final long lifetimeNanos) {
+    protected AbstractStatsTracker(final FlowCapableContext context) {
         this.context = Preconditions.checkNotNull(context);
-        this.lifetimeNanos = lifetimeNanos;
+        this.requestCounter = 0;
     }
 
     protected final InstanceIdentifierBuilder<Node> getNodeIdentifierBuilder() {
-        return InstanceIdentifier.builder(getNodeIdentifier());
+        return getNodeIdentifier().builder();
     }
 
     protected final NodeRef getNodeRef() {
@@ -89,24 +92,32 @@ abstract class AbstractStatsTracker<I, K> {
         return context.startDataModification();
     }
 
+    public final synchronized void increaseRequestCounter(){
+        this.requestCounter++;
+    }
     protected abstract void cleanupSingleStat(DataModificationTransaction trans, K item);
     protected abstract K updateSingleStat(DataModificationTransaction trans, I item);
+    public abstract void request();
 
     public final synchronized void updateStats(List<I> list) {
-        final Long expiryTime = System.nanoTime() + lifetimeNanos;
+
         final DataModificationTransaction trans = startTransaction();
 
         for (final I item : list) {
-            trackedItems.put(updateSingleStat(trans, item), expiryTime);
+            trackedItems.put(updateSingleStat(trans, item), requestCounter);
         }
 
         trans.commit();
     }
 
-    public final synchronized void cleanup(final DataModificationTransaction trans, long now) {
+    /**
+     * Statistics will be cleaned up if not update in last two request cycles.
+     * @param trans
+     */
+    public final synchronized void cleanup(final DataModificationTransaction trans) {
         for (Iterator<Entry<K, Long>> it = trackedItems.entrySet().iterator();it.hasNext();){
             Entry<K, Long> e = it.next();
-            if (now > e.getValue()) {
+            if (requestCounter >= e.getValue()+WAIT_FOR_REQUEST_CYCLE) {
                 cleanupSingleStat(trans, e.getKey());
                 it.remove();
             }
index 90ddc28acd0066e72e8e134a49c0a786b6f49b4b..add46bd162fc5644a0f4a5bf13fed72e5ad0a6d2 100644 (file)
@@ -7,6 +7,7 @@
  */
 package org.opendaylight.controller.md.statistics.manager;
 
+import java.util.Collection;
 import java.util.Map.Entry;
 
 import org.opendaylight.controller.md.sal.common.api.data.DataChangeEvent;
@@ -37,15 +38,20 @@ import org.slf4j.LoggerFactory;
 final class FlowStatsTracker extends AbstractListeningStatsTracker<FlowAndStatisticsMapList, FlowStatsEntry> {
     private static final Logger logger = LoggerFactory.getLogger(FlowStatsTracker.class);
     private final OpendaylightFlowStatisticsService flowStatsService;
+    private FlowTableStatsTracker flowTableStats;
     private int unaccountedFlowsCounter = 1;
 
-    FlowStatsTracker(OpendaylightFlowStatisticsService flowStatsService, final FlowCapableContext context, long lifetimeNanos) {
-        super(context, lifetimeNanos);
+    FlowStatsTracker(final OpendaylightFlowStatisticsService flowStatsService, final FlowCapableContext context) {
+        super(context);
         this.flowStatsService = flowStatsService;
     }
+    FlowStatsTracker(final OpendaylightFlowStatisticsService flowStatsService, final FlowCapableContext context, final FlowTableStatsTracker flowTableStats) {
+        this(flowStatsService, context);
+        this.flowTableStats = flowTableStats;
+    }
 
     @Override
-    protected void cleanupSingleStat(DataModificationTransaction trans, FlowStatsEntry item) {
+    protected void cleanupSingleStat(final DataModificationTransaction trans, final FlowStatsEntry item) {
         InstanceIdentifier<?> flowRef = getNodeIdentifierBuilder()
                             .augmentation(FlowCapableNode.class)
                             .child(Table.class, new TableKey(item.getTableId()))
@@ -55,7 +61,7 @@ final class FlowStatsTracker extends AbstractListeningStatsTracker<FlowAndStatis
     }
 
     @Override
-    protected FlowStatsEntry updateSingleStat(DataModificationTransaction trans, FlowAndStatisticsMapList map) {
+    protected FlowStatsEntry updateSingleStat(final DataModificationTransaction trans, final FlowAndStatisticsMapList map) {
         short tableId = map.getTableId();
 
         FlowBuilder flowBuilder = new FlowBuilder();
@@ -203,6 +209,20 @@ final class FlowStatsTracker extends AbstractListeningStatsTracker<FlowAndStatis
         return "Flow";
     }
 
+    @Override
+    public void request() {
+        // FIXME: it does not make sense to trigger this before sendAllFlowTablesStatisticsRequest()
+        //        comes back -- we do not have any tables anyway.
+        final Collection<TableKey> tables = flowTableStats.getTables();
+        logger.debug("Node {} supports {} table(s)", this.getNodeRef(), tables.size());
+        for (final TableKey key : tables) {
+            logger.debug("Send aggregate stats request for flow table {} to node {}", key.getId(), this.getNodeRef());
+            this.requestAggregateFlows(key);
+        }
+
+        this.requestAllFlowsAllTables();
+
+    }
     public void requestAllFlowsAllTables() {
         if (flowStatsService != null) {
             final GetAllFlowsStatisticsFromAllFlowTablesInputBuilder input = new GetAllFlowsStatisticsFromAllFlowTablesInputBuilder();
@@ -234,7 +254,7 @@ final class FlowStatsTracker extends AbstractListeningStatsTracker<FlowAndStatis
     }
 
     @Override
-    public void onDataChanged(DataChangeEvent<InstanceIdentifier<?>, DataObject> change) {
+    public void onDataChanged(final DataChangeEvent<InstanceIdentifier<?>, DataObject> change) {
         for (Entry<InstanceIdentifier<?>, DataObject> e : change.getCreatedConfigurationData().entrySet()) {
             if (Flow.class.equals(e.getKey().getTargetType())) {
                 final Flow flow = (Flow) e.getValue();
@@ -250,11 +270,8 @@ final class FlowStatsTracker extends AbstractListeningStatsTracker<FlowAndStatis
             if (Flow.class.equals(key.getTargetType())) {
                 @SuppressWarnings("unchecked")
                 final InstanceIdentifier<Flow> flow = (InstanceIdentifier<Flow>)key;
-                final InstanceIdentifier<?> del = InstanceIdentifier.builder(flow)
-                        .augmentation(FlowStatisticsData.class).build();
-                logger.debug("Key {} triggered remove of augmentation {}", key, del);
-
-                trans.removeOperationalData(del);
+                logger.debug("Key {} triggered remove of Flow from operational space.", key);
+                trans.removeOperationalData(flow);
             }
         }
         trans.commit();
index 3fe68c111a1549bc6c9df7b9b19803590ffad94b..a160f6d467ca6731a8c4d485250d6697cec8b97e 100644 (file)
@@ -30,8 +30,8 @@ final class FlowTableStatsTracker extends AbstractStatsTracker<FlowTableAndStati
     private final Set<TableKey> tables = Collections.unmodifiableSet(privateTables);
     private final OpendaylightFlowTableStatisticsService flowTableStatsService;
 
-    FlowTableStatsTracker(OpendaylightFlowTableStatisticsService flowTableStatsService, final FlowCapableContext context, long lifetimeNanos) {
-        super(context, lifetimeNanos);
+    FlowTableStatsTracker(OpendaylightFlowTableStatisticsService flowTableStatsService, final FlowCapableContext context) {
+        super(context);
         this.flowTableStatsService = flowTableStatsService;
     }
 
@@ -61,6 +61,7 @@ final class FlowTableStatsTracker extends AbstractStatsTracker<FlowTableAndStati
         return item;
     }
 
+    @Override
     public void request() {
         if (flowTableStatsService != null) {
             final GetFlowTablesStatisticsInputBuilder input = new GetFlowTablesStatisticsInputBuilder();
index 8aebd6b2491a00ce27bfb8e1093517029ea87cf3..a775b73169dc5581cd3175eebfa078a471d5dbd3 100644 (file)
@@ -29,8 +29,8 @@ final class GroupDescStatsTracker extends AbstractListeningStatsTracker<GroupDes
     private static final Logger logger = LoggerFactory.getLogger(GroupDescStatsTracker.class);
     private final OpendaylightGroupStatisticsService groupStatsService;
 
-    public GroupDescStatsTracker(OpendaylightGroupStatisticsService groupStatsService, final FlowCapableContext context, final long lifetimeNanos) {
-        super(context, lifetimeNanos);
+    public GroupDescStatsTracker(OpendaylightGroupStatisticsService groupStatsService, final FlowCapableContext context) {
+        super(context);
         this.groupStatsService = groupStatsService;
     }
 
@@ -70,6 +70,7 @@ final class GroupDescStatsTracker extends AbstractListeningStatsTracker<GroupDes
         return "Group Descriptor";
     }
 
+    @Override
     public void request() {
         if (groupStatsService != null) {
             final GetGroupDescriptionInputBuilder input = new GetGroupDescriptionInputBuilder();
@@ -95,7 +96,7 @@ final class GroupDescStatsTracker extends AbstractListeningStatsTracker<GroupDes
             if (Group.class.equals(key.getTargetType())) {
                 @SuppressWarnings("unchecked")
                 InstanceIdentifier<Group> group = (InstanceIdentifier<Group>)key;
-                InstanceIdentifier<?> del = InstanceIdentifier.builder(group).augmentation(NodeGroupDescStats.class).toInstance();
+                InstanceIdentifier<?> del = group.augmentation(NodeGroupDescStats.class);
                 logger.debug("Key {} triggered remove of augmentation {}", key, del);
 
                 trans.removeOperationalData(del);
index 1af8e4e9f1a2cf891795d06f967ca0b12307c730..c3c23c9b582cf493c02248087b08f80914b3fd82 100644 (file)
@@ -31,8 +31,8 @@ final class GroupStatsTracker extends AbstractListeningStatsTracker<GroupStats,
     private static final Logger logger = LoggerFactory.getLogger(GroupStatsTracker.class);
     private final OpendaylightGroupStatisticsService groupStatsService;
 
-    GroupStatsTracker(OpendaylightGroupStatisticsService groupStatsService, FlowCapableContext context, long lifetimeNanos) {
-        super(context, lifetimeNanos);
+    GroupStatsTracker(OpendaylightGroupStatisticsService groupStatsService, FlowCapableContext context) {
+        super(context);
         this.groupStatsService = Preconditions.checkNotNull(groupStatsService);
     }
 
@@ -72,6 +72,7 @@ final class GroupStatsTracker extends AbstractListeningStatsTracker<GroupStats,
         return "Group";
     }
 
+    @Override
     public void request() {
         final GetAllGroupStatisticsInputBuilder input = new GetAllGroupStatisticsInputBuilder();
         input.setNode(getNodeRef());
@@ -86,7 +87,7 @@ final class GroupStatsTracker extends AbstractListeningStatsTracker<GroupStats,
             if (Group.class.equals(key.getTargetType())) {
                 @SuppressWarnings("unchecked")
                 InstanceIdentifier<Group> group = (InstanceIdentifier<Group>)key;
-                InstanceIdentifier<?> del = InstanceIdentifier.builder(group).augmentation(NodeGroupStatistics.class).toInstance();
+                InstanceIdentifier<?> del = group.augmentation(NodeGroupStatistics.class);
                 logger.debug("Key {} triggered remove of augmentation {}", key, del);
 
                 trans.removeOperationalData(del);
index 4b9592570565fc94d423702a7cff9923d110895f..ea412a09e183db8dcf958c6769a8b0ac37211c5f 100644 (file)
@@ -29,8 +29,8 @@ final class MeterConfigStatsTracker extends AbstractListeningStatsTracker<MeterC
     private static final Logger logger = LoggerFactory.getLogger(MeterConfigStatsTracker.class);
     private final OpendaylightMeterStatisticsService meterStatsService;
 
-    protected MeterConfigStatsTracker(OpendaylightMeterStatisticsService meterStatsService, final FlowCapableContext context, long lifetimeNanos) {
-        super(context, lifetimeNanos);
+    protected MeterConfigStatsTracker(OpendaylightMeterStatisticsService meterStatsService, final FlowCapableContext context) {
+        super(context);
         this.meterStatsService = meterStatsService;
     }
 
@@ -62,6 +62,7 @@ final class MeterConfigStatsTracker extends AbstractListeningStatsTracker<MeterC
         return item;
     }
 
+    @Override
     public void request() {
         if (meterStatsService != null) {
             GetAllMeterConfigStatisticsInputBuilder input = new GetAllMeterConfigStatisticsInputBuilder();
@@ -81,7 +82,7 @@ final class MeterConfigStatsTracker extends AbstractListeningStatsTracker<MeterC
                 InstanceIdentifier<Meter> meter = (InstanceIdentifier<Meter>)key;
 
                 InstanceIdentifier<?> nodeMeterStatisticsAugmentation =
-                        InstanceIdentifier.builder(meter).augmentation(NodeMeterConfigStats.class).toInstance();
+                        meter.augmentation(NodeMeterConfigStats.class);
                 trans.removeOperationalData(nodeMeterStatisticsAugmentation);
             }
         }
index 091cbcc1a078f88d54cde3eaa9300da97aaed8c2..be53a38f186eb2407b9ce30ff4a2e20da6379b53 100644 (file)
@@ -29,8 +29,8 @@ final class MeterStatsTracker extends AbstractListeningStatsTracker<MeterStats,
     private static final Logger logger = LoggerFactory.getLogger(MeterStatsTracker.class);
     private final OpendaylightMeterStatisticsService meterStatsService;
 
-    MeterStatsTracker(OpendaylightMeterStatisticsService meterStatsService, final FlowCapableContext context, long lifetimeNanos) {
-        super(context, lifetimeNanos);
+    MeterStatsTracker(OpendaylightMeterStatisticsService meterStatsService, final FlowCapableContext context) {
+        super(context);
         this.meterStatsService = meterStatsService;
     }
 
@@ -61,6 +61,7 @@ final class MeterStatsTracker extends AbstractListeningStatsTracker<MeterStats,
         return item;
     }
 
+    @Override
     public void request() {
         if (meterStatsService != null) {
             GetAllMeterStatisticsInputBuilder input = new GetAllMeterStatisticsInputBuilder();
@@ -85,7 +86,7 @@ final class MeterStatsTracker extends AbstractListeningStatsTracker<MeterStats,
                 InstanceIdentifier<Meter> meter = (InstanceIdentifier<Meter>)key;
 
                 InstanceIdentifier<?> nodeMeterStatisticsAugmentation =
-                        InstanceIdentifier.builder(meter).augmentation(NodeMeterStatistics.class).toInstance();
+                        meter.augmentation(NodeMeterStatistics.class);
                 trans.removeOperationalData(nodeMeterStatisticsAugmentation);
             }
         }
index 00bd27402fc3c45c82f0f9d06c8a5a562ea76a97..701911d9a2c307c03ecd48c75bfcd4099ba2490f 100644 (file)
@@ -25,8 +25,8 @@ final class NodeConnectorStatsTracker extends AbstractStatsTracker<NodeConnector
     private static final Logger logger = LoggerFactory.getLogger(NodeConnectorStatsTracker.class);
     private final OpendaylightPortStatisticsService portStatsService;
 
-    NodeConnectorStatsTracker(final OpendaylightPortStatisticsService portStatsService, final FlowCapableContext context, long lifetimeNanos) {
-        super(context, lifetimeNanos);
+    NodeConnectorStatsTracker(final OpendaylightPortStatisticsService portStatsService, final FlowCapableContext context) {
+        super(context);
         this.portStatsService = portStatsService;
     }
 
@@ -73,6 +73,7 @@ final class NodeConnectorStatsTracker extends AbstractStatsTracker<NodeConnector
         return item;
     }
 
+    @Override
     public void request() {
         if (portStatsService != null) {
             final GetAllNodeConnectorsStatisticsInputBuilder input = new GetAllNodeConnectorsStatisticsInputBuilder();
index 5ace260251673bb9fa42b9da14a95a5ece724b4c..dbcbab982a9aec997e37a2fb09e763bb3f3c5f96 100644 (file)
@@ -7,7 +7,6 @@
  */
 package org.opendaylight.controller.md.statistics.manager;
 
-import java.util.Collection;
 import java.util.List;
 import java.util.Timer;
 import java.util.TimerTask;
@@ -73,6 +72,7 @@ public final class NodeStatisticsHandler implements AutoCloseable, FlowCapableCo
     private static final int NUMBER_OF_WAIT_CYCLES = 2;
 
     private final MultipartMessageManager msgManager;
+    private final StatisticsRequestScheduler srScheduler;
     private final InstanceIdentifier<Node> targetNodeIdentifier;
     private final FlowStatsTracker flowStats;
     private final FlowTableStatsTracker flowTableStats;
@@ -103,23 +103,25 @@ public final class NodeStatisticsHandler implements AutoCloseable, FlowCapableCo
             final OpendaylightGroupStatisticsService groupStatsService,
             final OpendaylightMeterStatisticsService meterStatsService,
             final OpendaylightPortStatisticsService portStatsService,
-            final OpendaylightQueueStatisticsService queueStatsService) {
+            final OpendaylightQueueStatisticsService queueStatsService, 
+            final StatisticsRequestScheduler srScheduler) {
         this.dps = Preconditions.checkNotNull(dps);
         this.targetNodeKey = Preconditions.checkNotNull(nodeKey);
+        this.srScheduler = Preconditions.checkNotNull(srScheduler);
         this.targetNodeIdentifier = InstanceIdentifier.builder(Nodes.class).child(Node.class, targetNodeKey).build();
         this.targetNodeRef = new NodeRef(targetNodeIdentifier);
 
         final long lifetimeNanos = TimeUnit.MILLISECONDS.toNanos(STATS_COLLECTION_MILLIS * NUMBER_OF_WAIT_CYCLES);
 
         msgManager = new MultipartMessageManager(lifetimeNanos);
-        flowStats = new FlowStatsTracker(flowStatsService, this, lifetimeNanos);
-        flowTableStats = new FlowTableStatsTracker(flowTableStatsService, this, lifetimeNanos);
-        groupDescStats = new GroupDescStatsTracker(groupStatsService, this, lifetimeNanos);
-        groupStats = new GroupStatsTracker(groupStatsService, this, lifetimeNanos);
-        meterConfigStats = new MeterConfigStatsTracker(meterStatsService, this, lifetimeNanos);
-        meterStats = new MeterStatsTracker(meterStatsService, this, lifetimeNanos);
-        nodeConnectorStats = new NodeConnectorStatsTracker(portStatsService, this, lifetimeNanos);
-        queueStats = new QueueStatsTracker(queueStatsService, this, lifetimeNanos);
+        flowTableStats = new FlowTableStatsTracker(flowTableStatsService, this);
+        flowStats = new FlowStatsTracker(flowStatsService, this, flowTableStats);
+        groupDescStats = new GroupDescStatsTracker(groupStatsService, this);
+        groupStats = new GroupStatsTracker(groupStatsService, this);
+        meterConfigStats = new MeterConfigStatsTracker(meterStatsService, this);
+        meterStats = new MeterStatsTracker(meterStatsService, this);
+        nodeConnectorStats = new NodeConnectorStatsTracker(portStatsService, this);
+        queueStats = new QueueStatsTracker(queueStatsService, this);
     }
 
     public NodeKey getTargetNodeKey() {
@@ -138,7 +140,9 @@ public final class NodeStatisticsHandler implements AutoCloseable, FlowCapableCo
 
     @Override
     public DataModificationTransaction startDataModification() {
-        return dps.beginTransaction();
+        DataModificationTransaction dmt = dps.beginTransaction();
+        dmt.registerListener(this.srScheduler);
+        return dmt;
     }
 
     public synchronized void updateGroupDescStats(TransactionAware transaction, List<GroupDescStats> list) {
@@ -186,7 +190,7 @@ public final class NodeStatisticsHandler implements AutoCloseable, FlowCapableCo
     public synchronized void updateAggregateFlowStats(TransactionAware transaction, AggregateFlowStatistics flowStats) {
         final Short tableId = msgManager.isExpectedTableTransaction(transaction);
         if (tableId != null) {
-            final DataModificationTransaction trans = dps.beginTransaction();
+            final DataModificationTransaction trans = this.startDataModification();
             InstanceIdentifier<Table> tableRef = InstanceIdentifier.builder(Nodes.class).child(Node.class, targetNodeKey)
                     .augmentation(FlowCapableNode.class).child(Table.class, new TableKey(tableId)).toInstance();
 
@@ -214,7 +218,7 @@ public final class NodeStatisticsHandler implements AutoCloseable, FlowCapableCo
     }
 
     public synchronized void updateGroupFeatures(GroupFeatures notification) {
-        final DataModificationTransaction trans = dps.beginTransaction();
+        final DataModificationTransaction trans = this.startDataModification();
 
         final NodeBuilder nodeData = new NodeBuilder();
         nodeData.setKey(targetNodeKey);
@@ -232,7 +236,7 @@ public final class NodeStatisticsHandler implements AutoCloseable, FlowCapableCo
     }
 
     public synchronized void updateMeterFeatures(MeterFeatures features) {
-        final DataModificationTransaction trans = dps.beginTransaction();
+        final DataModificationTransaction trans = this.startDataModification();
 
         final NodeBuilder nodeData = new NodeBuilder();
         nodeData.setKey(targetNodeKey);
@@ -250,16 +254,15 @@ public final class NodeStatisticsHandler implements AutoCloseable, FlowCapableCo
     }
 
     public synchronized void cleanStaleStatistics() {
-        final DataModificationTransaction trans = dps.beginTransaction();
-        final long now = System.nanoTime();
-
-        flowStats.cleanup(trans, now);
-        groupDescStats.cleanup(trans, now);
-        groupStats.cleanup(trans, now);
-        meterConfigStats.cleanup(trans, now);
-        meterStats.cleanup(trans, now);
-        nodeConnectorStats.cleanup(trans, now);
-        queueStats.cleanup(trans, now);
+        final DataModificationTransaction trans = this.startDataModification();
+
+        flowStats.cleanup(trans);
+        groupDescStats.cleanup(trans);
+        groupStats.cleanup(trans);
+        meterConfigStats.cleanup(trans);
+        meterStats.cleanup(trans);
+        nodeConnectorStats.cleanup(trans);
+        queueStats.cleanup(trans);
         msgManager.cleanStaleTransactionIds();
 
         trans.commit();
@@ -268,26 +271,23 @@ public final class NodeStatisticsHandler implements AutoCloseable, FlowCapableCo
     public synchronized void requestPeriodicStatistics() {
         logger.debug("Send requests for statistics collection to node : {}", targetNodeKey);
 
-        flowTableStats.request();
-
-        // FIXME: it does not make sense to trigger this before sendAllFlowTablesStatisticsRequest()
-        //        comes back -- we do not have any tables anyway.
-        final Collection<TableKey> tables = flowTableStats.getTables();
-        logger.debug("Node {} supports {} table(s)", targetNodeKey, tables.size());
-        for (final TableKey key : tables) {
-            logger.debug("Send aggregate stats request for flow table {} to node {}", key.getId(), targetNodeKey);
-            flowStats.requestAggregateFlows(key);
-        }
-
-        flowStats.requestAllFlowsAllTables();
-        nodeConnectorStats.request();
-        groupStats.request();
-        groupDescStats.request();
-        meterStats.request();
-        meterConfigStats.request();
-        queueStats.request();
+        this.srScheduler.addRequestToSchedulerQueue(flowTableStats);
+
+        this.srScheduler.addRequestToSchedulerQueue(flowStats);
+        
+        this.srScheduler.addRequestToSchedulerQueue(nodeConnectorStats);
+        
+        this.srScheduler.addRequestToSchedulerQueue(groupStats);
+        
+        this.srScheduler.addRequestToSchedulerQueue(groupDescStats);
+        
+        this.srScheduler.addRequestToSchedulerQueue(meterStats);
+        
+        this.srScheduler.addRequestToSchedulerQueue(meterConfigStats);
+        
+        this.srScheduler.addRequestToSchedulerQueue(queueStats);
     }
-
+    
     public synchronized void start(final Timer timer) {
         flowStats.start(dps);
         groupDescStats.start(dps);
index f187c7082e6e3b2093e2e0b0654a406dd9315950..03f7808c8f9b119cfb6ed0ba2fe877d340e3ffc0 100644 (file)
@@ -36,8 +36,8 @@ final class QueueStatsTracker extends AbstractListeningStatsTracker<QueueIdAndSt
     private static final Logger logger = LoggerFactory.getLogger(QueueStatsTracker.class);
     private final OpendaylightQueueStatisticsService queueStatsService;
 
-    QueueStatsTracker(OpendaylightQueueStatisticsService queueStatsService, final FlowCapableContext context, long lifetimeNanos) {
-        super(context, lifetimeNanos);
+    QueueStatsTracker(OpendaylightQueueStatisticsService queueStatsService, final FlowCapableContext context) {
+        super(context);
         this.queueStatsService = queueStatsService;
     }
 
@@ -82,6 +82,7 @@ final class QueueStatsTracker extends AbstractListeningStatsTracker<QueueIdAndSt
         return queueEntry;
     }
 
+    @Override
     public void request() {
         if (queueStatsService != null) {
             GetAllQueuesStatisticsFromAllPortsInputBuilder input = new GetAllQueuesStatisticsFromAllPortsInputBuilder();
@@ -121,8 +122,8 @@ final class QueueStatsTracker extends AbstractListeningStatsTracker<QueueIdAndSt
             if (Queue.class.equals(key.getTargetType())) {
                 @SuppressWarnings("unchecked")
                 final InstanceIdentifier<Queue> queue = (InstanceIdentifier<Queue>)key;
-                final InstanceIdentifier<?> del = InstanceIdentifier.builder(queue)
-                        .augmentation(FlowCapableNodeConnectorQueueStatisticsData.class).build();
+                final InstanceIdentifier<?> del = queue
+                        .augmentation(FlowCapableNodeConnectorQueueStatisticsData.class);
                 logger.debug("Key {} triggered remove of augmentation {}", key, del);
 
                 trans.removeOperationalData(del);
index 892d304daa8d6cd20c7010082f2698cb8de90266..d8bea7c63a4606fffaed51a9dce5fe889dca2d36 100644 (file)
@@ -66,9 +66,12 @@ public class StatisticsProvider implements AutoCloseable {
     private OpendaylightFlowTableStatisticsService flowTableStatsService;
 
     private OpendaylightQueueStatisticsService queueStatsService;
+    
+    private final StatisticsRequestScheduler srScheduler;
 
     public StatisticsProvider(final DataProviderService dataService) {
         this.dps = Preconditions.checkNotNull(dataService);
+        this.srScheduler = new StatisticsRequestScheduler();
     }
 
     private final StatisticsListener updateCommiter = new StatisticsListener(StatisticsProvider.this);
@@ -86,7 +89,8 @@ public class StatisticsProvider implements AutoCloseable {
         portStatsService = rpcRegistry.getRpcService(OpendaylightPortStatisticsService.class);
         flowTableStatsService = rpcRegistry.getRpcService(OpendaylightFlowTableStatisticsService.class);
         queueStatsService = rpcRegistry.getRpcService(OpendaylightQueueStatisticsService.class);
-
+        this.srScheduler.start();
+        
         // Start receiving notifications
         this.listenerRegistration = nps.registerNotificationListener(this.updateCommiter);
 
@@ -144,7 +148,7 @@ public class StatisticsProvider implements AutoCloseable {
 
             final NodeStatisticsHandler h = new NodeStatisticsHandler(dps, key,
                     flowStatsService, flowTableStatsService, groupStatsService,
-                    meterStatsService, portStatsService, queueStatsService);
+                    meterStatsService, portStatsService, queueStatsService,srScheduler);
             final NodeStatisticsHandler old = handlers.putIfAbsent(key.getId(), h);
             if (old == null) {
                 spLogger.debug("Started node handler for {}", key.getId());
diff --git a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatisticsRequestScheduler.java b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatisticsRequestScheduler.java
new file mode 100644 (file)
index 0000000..9ebfd6f
--- /dev/null
@@ -0,0 +1,118 @@
+/*
+ * Copyright IBM Corporation, 2013.  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.statistics.manager;
+
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Timer;
+import java.util.TimerTask;
+import java.util.concurrent.TimeUnit;
+
+import org.opendaylight.controller.md.sal.common.api.TransactionStatus;
+import org.opendaylight.controller.sal.binding.api.data.DataModificationTransaction;
+import org.opendaylight.controller.sal.binding.api.data.DataModificationTransaction.DataTransactionListener;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Main responsibility of the class is to check the MD-SAL data store read/write
+ * transaction accumulation level and send statistics request if number of pending 
+ * read/write transactions are zero.
+ * @author avishnoi@in.ibm.com
+ *
+ */
+@SuppressWarnings("rawtypes")
+public class StatisticsRequestScheduler implements DataTransactionListener {
+
+    private static final Logger srsLogger = LoggerFactory.getLogger(StatisticsRequestScheduler.class);
+    private final Timer timer = new Timer("request-monitor", true);
+
+    // We need ordered retrieval, and O(1) contains operation
+    private final Map<AbstractStatsTracker,Integer> requestQueue = 
+            Collections.synchronizedMap(new LinkedHashMap<AbstractStatsTracker,Integer>());
+    
+    private Long PendingTransactions;
+    
+    private long lastRequestTime = System.nanoTime();
+    
+    private static final long REQUEST_MONITOR_INTERVAL = 1000;
+    
+    private final TimerTask task = new TimerTask() {
+        @Override
+        public void run() {
+            long now = System.nanoTime();
+            if(now > lastRequestTime+TimeUnit.MILLISECONDS.toNanos(REQUEST_MONITOR_INTERVAL)){
+                requestStatistics();
+            }
+        }
+    };
+
+    public StatisticsRequestScheduler(){
+        PendingTransactions = (long) 0;
+    }
+    
+    public void addRequestToSchedulerQueue(AbstractStatsTracker statsRequest){
+        requestQueue.put(statsRequest, null);
+    }
+    
+    public AbstractStatsTracker getNextRequestFromSchedulerQueue(){
+        //Remove first element
+        AbstractStatsTracker stats = null;
+        synchronized(requestQueue){
+            Iterator<Map.Entry<AbstractStatsTracker, Integer>> nodesItr = requestQueue.entrySet().iterator();
+            if(nodesItr.hasNext()){
+                stats = nodesItr.next().getKey();
+                srsLogger.debug("{} chosen up for execution",stats.getNodeRef());
+                nodesItr.remove();
+                return stats;
+            }
+        }
+        return stats;
+    }
+
+    private void requestStatistics(){
+        AbstractStatsTracker stats = this.getNextRequestFromSchedulerQueue();
+        if(stats != null) {
+            stats.request();
+            stats.increaseRequestCounter();
+        }
+    }
+    @Override
+    public void onStatusUpdated(DataModificationTransaction transaction, TransactionStatus status) {
+        
+        AbstractStatsTracker stats = null;
+        synchronized(PendingTransactions){
+            switch(status){
+            case SUBMITED:
+                this.PendingTransactions++;
+                break;
+            case COMMITED:
+            case FAILED:
+                this.PendingTransactions--;
+                if(PendingTransactions == 0){
+                    lastRequestTime = System.nanoTime();
+                    stats = this.getNextRequestFromSchedulerQueue();
+                }
+                srsLogger.debug("Pending MD-SAL transactions : {} & Scheduler queue size : {}",this.PendingTransactions,this.requestQueue.size());
+                break;
+            default:
+                break;
+            }
+        }
+        if(stats != null){
+            stats.request();
+            stats.increaseRequestCounter();
+        }
+    }
+    
+    public void start(){
+        timer.schedule(task, 0, REQUEST_MONITOR_INTERVAL);
+    }
+}
index 2d003f8079f9296db0b9a45b2bb09582c5e73aa2..a51f6c2f9f0eb6669ace2e8febe1404f8189df51 100644 (file)
       <groupId>equinoxSDK381</groupId>
       <artifactId>org.eclipse.osgi</artifactId>
     </dependency>
-    <dependency>
-      <groupId>org.eclipse.xtend</groupId>
-      <artifactId>org.eclipse.xtend.lib</artifactId>
-    </dependency>
     <dependency>
       <groupId>org.opendaylight.controller</groupId>
       <artifactId>sal</artifactId>
           <manifestLocation>${project.basedir}/META-INF</manifestLocation>
         </configuration>
       </plugin>
-      <plugin>
-        <groupId>org.eclipse.xtend</groupId>
-        <artifactId>xtend-maven-plugin</artifactId>
-      </plugin>
     </plugins>
   </build>
   <scm>
diff --git a/opendaylight/md-sal/topology-lldp-discovery/src/main/java/org/opendaylight/md/controller/topology/lldp/LLDPActivator.java b/opendaylight/md-sal/topology-lldp-discovery/src/main/java/org/opendaylight/md/controller/topology/lldp/LLDPActivator.java
new file mode 100644 (file)
index 0000000..0e003db
--- /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.md.controller.topology.lldp;
+
+import org.opendaylight.controller.sal.binding.api.AbstractBindingAwareProvider;
+import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
+import org.opendaylight.controller.sal.binding.api.NotificationProviderService;
+import org.opendaylight.controller.sal.binding.api.data.DataProviderService;
+import org.osgi.framework.BundleContext;
+
+public class LLDPActivator extends AbstractBindingAwareProvider {
+    private static LLDPDiscoveryProvider provider = new LLDPDiscoveryProvider();
+
+    public void onSessionInitiated(final ProviderContext session) {
+        DataProviderService dataService = session.<DataProviderService>getSALService(DataProviderService.class);
+        provider.setDataService(dataService);
+        NotificationProviderService notificationService = session.<NotificationProviderService>getSALService(NotificationProviderService.class);
+        provider.setNotificationService(notificationService);
+        provider.start();
+    }
+
+    protected void stopImpl(final BundleContext context) {
+        provider.close();
+    }
+}
diff --git a/opendaylight/md-sal/topology-lldp-discovery/src/main/java/org/opendaylight/md/controller/topology/lldp/LLDPActivator.xtend b/opendaylight/md-sal/topology-lldp-discovery/src/main/java/org/opendaylight/md/controller/topology/lldp/LLDPActivator.xtend
deleted file mode 100644 (file)
index 674e919..0000000
+++ /dev/null
@@ -1,30 +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.md.controller.topology.lldp
-
-import org.opendaylight.controller.sal.binding.api.AbstractBindingAwareProvider
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext
-import org.opendaylight.controller.sal.binding.api.NotificationProviderService
-import org.opendaylight.controller.sal.binding.api.data.DataProviderService
-import org.osgi.framework.BundleContext
-
-class LLDPActivator extends AbstractBindingAwareProvider {
-
-    static var LLDPDiscoveryProvider provider = new LLDPDiscoveryProvider();
-
-    override onSessionInitiated(ProviderContext session) {
-        provider.dataService = session.getSALService(DataProviderService)
-        provider.notificationService = session.getSALService(NotificationProviderService)
-        provider.start();
-    }
-
-    override protected stopImpl(BundleContext context) {
-        provider.close();
-    }
-
-}
diff --git a/opendaylight/md-sal/topology-lldp-discovery/src/main/java/org/opendaylight/md/controller/topology/lldp/LLDPDiscoveryProvider.java b/opendaylight/md-sal/topology-lldp-discovery/src/main/java/org/opendaylight/md/controller/topology/lldp/LLDPDiscoveryProvider.java
new file mode 100644 (file)
index 0000000..b219722
--- /dev/null
@@ -0,0 +1,58 @@
+/**
+ * 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.md.controller.topology.lldp;
+
+import org.opendaylight.controller.sal.binding.api.NotificationProviderService;
+import org.opendaylight.controller.sal.binding.api.data.DataProviderService;
+import org.opendaylight.yangtools.concepts.Registration;
+import org.opendaylight.yangtools.yang.binding.NotificationListener;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class LLDPDiscoveryProvider implements AutoCloseable {
+    private final static Logger LOG =  LoggerFactory.getLogger(LLDPDiscoveryProvider.class);
+    private DataProviderService dataService;
+    private NotificationProviderService notificationService;
+    private final LLDPDiscoveryListener commiter = new LLDPDiscoveryListener(LLDPDiscoveryProvider.this);
+    private Registration<NotificationListener> listenerRegistration;
+
+    public DataProviderService getDataService() {
+        return this.dataService;
+    }
+
+    public void setDataService(final DataProviderService dataService) {
+        this.dataService = dataService;
+    }
+
+    public NotificationProviderService getNotificationService() {
+        return this.notificationService;
+    }
+
+    public void setNotificationService(final NotificationProviderService notificationService) {
+        this.notificationService = notificationService;
+    }
+
+    public void start() {
+        Registration<NotificationListener> registerNotificationListener = this.getNotificationService().registerNotificationListener(this.commiter);
+        this.listenerRegistration = registerNotificationListener;
+        LLDPLinkAger.getInstance().setManager(this);
+        LOG.info("LLDPDiscoveryListener Started.");
+    }
+
+    public void close() {
+        try {
+            LOG.info("LLDPDiscoveryListener stopped.");
+            if (this.listenerRegistration!=null) {
+                this.listenerRegistration.close();
+            }
+            LLDPLinkAger.getInstance().close();
+        } catch (Exception e) {
+            throw new Error(e);
+        }
+    }
+}
diff --git a/opendaylight/md-sal/topology-lldp-discovery/src/main/java/org/opendaylight/md/controller/topology/lldp/LLDPDiscoveryProvider.xtend b/opendaylight/md-sal/topology-lldp-discovery/src/main/java/org/opendaylight/md/controller/topology/lldp/LLDPDiscoveryProvider.xtend
deleted file mode 100644 (file)
index fc724ac..0000000
+++ /dev/null
@@ -1,46 +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.md.controller.topology.lldp
-
-import org.opendaylight.controller.sal.binding.api.NotificationProviderService
-import org.opendaylight.controller.sal.binding.api.data.DataProviderService
-import org.opendaylight.yangtools.concepts.Registration
-import org.opendaylight.yangtools.yang.binding.NotificationListener
-import org.slf4j.LoggerFactory
-
-class LLDPDiscoveryProvider implements AutoCloseable {
-
-
-    static val LOG = LoggerFactory.getLogger(LLDPDiscoveryProvider);
-
-    @Property
-    DataProviderService dataService;        
-
-    @Property
-    NotificationProviderService notificationService;
-
-    val LLDPDiscoveryListener commiter = new LLDPDiscoveryListener(this);
-
-    Registration<NotificationListener> listenerRegistration
-
-    def void start() {
-        listenerRegistration = notificationService.registerNotificationListener(commiter);
-        LLDPLinkAger.instance.manager = this;
-        LOG.info("LLDPDiscoveryListener Started.");
-        
-    }   
-    
-    override close() {
-       LOG.info("LLDPDiscoveryListener stopped.");
-        listenerRegistration?.close();
-        LLDPLinkAger.instance.close();
-    }
-    
-}
-
-
index 54f1fc0bb4fbcd0889fa185fd82248907594c3ec..542e972deb2d7585348876219b5f82dab6ceca14 100644 (file)
@@ -15,9 +15,10 @@ import static org.opendaylight.md.controller.topology.manager.FlowCapableNodeMap
 import static org.opendaylight.md.controller.topology.manager.FlowCapableNodeMapping.toTopologyNode;
 import static org.opendaylight.md.controller.topology.manager.FlowCapableNodeMapping.toTopologyNodeId;
 
-import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
 
 import org.opendaylight.controller.md.sal.binding.util.TypeSafeDataReader;
+import org.opendaylight.controller.md.sal.common.api.TransactionStatus;
 import org.opendaylight.controller.sal.binding.api.data.DataModificationTransaction;
 import org.opendaylight.controller.sal.binding.api.data.DataProviderService;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnectorUpdated;
@@ -48,15 +49,20 @@ import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPoint;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPointKey;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.google.common.util.concurrent.FutureCallback;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.JdkFutureAdapters;
+
 class FlowCapableTopologyExporter implements //
         FlowTopologyDiscoveryListener, //
         OpendaylightInventoryListener //
 {
 
-    private final static Logger LOG = LoggerFactory.getLogger(FlowCapableTopologyExporter.class);
+    protected final static Logger LOG = LoggerFactory.getLogger(FlowCapableTopologyExporter.class);
     public static TopologyKey topology = new TopologyKey(new TopologyId("flow:1"));
 
     // FIXME: Flow capable topology exporter should use transaction chaining API
@@ -79,7 +85,7 @@ class FlowCapableTopologyExporter implements //
         Topology top = tb.build();
         DataModificationTransaction tx = dataService.beginTransaction();
         tx.putOperationalData(topologyPath, top);
-        tx.commit();
+        listenOnTransactionState(tx.getIdentifier(),tx.commit());
     }
 
     @Override
@@ -90,11 +96,7 @@ class FlowCapableTopologyExporter implements //
         DataModificationTransaction tx = dataService.beginTransaction();
         tx.removeOperationalData(nodeInstance);
         removeAffectedLinks(tx, nodeId);
-        try {
-            tx.commit().get();
-        } catch (InterruptedException | ExecutionException e) {
-            LOG.error("Topology state export not successful. ",e);
-        }
+        listenOnTransactionState(tx.getIdentifier(),tx.commit());
     }
 
     @Override
@@ -105,11 +107,7 @@ class FlowCapableTopologyExporter implements //
             InstanceIdentifier<Node> path = getNodePath(toTopologyNodeId(notification.getId()));
             DataModificationTransaction tx = dataService.beginTransaction();
             tx.putOperationalData(path, node);
-            try {
-                tx.commit().get();
-            } catch (InterruptedException | ExecutionException e) {
-                LOG.error("Topology state export not successful. ",e);
-            }
+            listenOnTransactionState(tx.getIdentifier(),tx.commit());
         }
     }
 
@@ -121,11 +119,7 @@ class FlowCapableTopologyExporter implements //
         DataModificationTransaction tx = dataService.beginTransaction();
         tx.removeOperationalData(tpInstance);
         removeAffectedLinks(tx, tpId);
-        try {
-            tx.commit().get();
-        } catch (InterruptedException | ExecutionException e) {
-            LOG.error("Topology state export not successful. ",e);
-        }
+        listenOnTransactionState(tx.getIdentifier(),tx.commit());
 
     }
 
@@ -144,11 +138,7 @@ class FlowCapableTopologyExporter implements //
                     || (fcncu.getConfiguration() != null && fcncu.getConfiguration().isPORTDOWN())) {
                 removeAffectedLinks(tx, point.getTpId());
             }
-            try {
-                tx.commit().get();
-            } catch (InterruptedException | ExecutionException e) {
-                LOG.error("Topology state export not successful. ",e);
-            }
+            listenOnTransactionState(tx.getIdentifier(),tx.commit());
         }
     }
 
@@ -158,11 +148,8 @@ class FlowCapableTopologyExporter implements //
         InstanceIdentifier<Link> path = linkPath(link);
         DataModificationTransaction tx = dataService.beginTransaction();
         tx.putOperationalData(path, link);
-        try {
-            tx.commit().get();
-        } catch (InterruptedException | ExecutionException e) {
-            LOG.error("Topology state export not successful. ",e);
-        }
+        listenOnTransactionState(tx.getIdentifier(),tx.commit());
+
     }
 
     @Override
@@ -175,7 +162,7 @@ class FlowCapableTopologyExporter implements //
         InstanceIdentifier<Link> path = linkPath(toTopologyLink(notification));
         DataModificationTransaction tx = dataService.beginTransaction();
         tx.removeOperationalData(path);
-        ;
+        listenOnTransactionState(tx.getIdentifier(),tx.commit());
     }
 
     @Override
@@ -206,8 +193,7 @@ class FlowCapableTopologyExporter implements //
         }
         for (Link link : topologyData.getLink()) {
             if (id.equals(link.getSource().getSourceNode()) || id.equals(link.getDestination().getDestNode())) {
-                InstanceIdentifier<Link> path = InstanceIdentifier.builder(topologyPath)
-                        .child(Link.class, link.getKey()).build();
+                InstanceIdentifier<Link> path = topologyPath.child(Link.class, link.getKey());
                 transaction.removeOperationalData(path);
             }
         }
@@ -221,8 +207,7 @@ class FlowCapableTopologyExporter implements //
         }
         for (Link link : topologyData.getLink()) {
             if (id.equals(link.getSource().getSourceTp()) || id.equals(link.getDestination().getDestTp())) {
-                InstanceIdentifier<Link> path = InstanceIdentifier.builder(topologyPath)
-                        .child(Link.class, link.getKey()).build();
+                InstanceIdentifier<Link> path = topologyPath.child(Link.class, link.getKey());
                 transaction.removeOperationalData(path);
             }
         }
@@ -246,4 +231,26 @@ class FlowCapableTopologyExporter implements //
                 .child(Topology.class, topology).child(Link.class, link.getKey()).build();
         return linkInstanceId;
     }
+
+    /**
+     * @param txId transaction identificator
+     * @param future transaction result
+     */
+    private static void listenOnTransactionState(final Object txId, Future<RpcResult<TransactionStatus>> future) {
+        Futures.addCallback(JdkFutureAdapters.listenInPoolThread(future),new FutureCallback<RpcResult<TransactionStatus>>() {
+
+            @Override
+            public void onFailure(Throwable t) {
+                LOG.error("Topology export failed for Tx:{}", txId, t);
+
+            }
+
+            @Override
+            public void onSuccess(RpcResult<TransactionStatus> result) {
+                if(!result.isSuccessful()) {
+                    LOG.error("Topology export failed for Tx:{}", txId);
+                }
+            }
+        });
+    }
 }
index be44a71e06ee9714277edf59e50196ac4b2e1241..f6d070b2a8babb4ebd92ee2c24c6bf74359d5ad0 100644 (file)
@@ -7,12 +7,13 @@
  */
 package org.opendaylight.controller.netconf.confignetconfconnector.exception;
 
-import org.opendaylight.controller.netconf.api.NetconfDocumentedException;
-
 import java.util.Collections;
 import java.util.Map;
 
+import org.opendaylight.controller.netconf.api.NetconfDocumentedException;
+
 public class NetconfConfigHandlingException extends NetconfDocumentedException {
+    private static final long serialVersionUID = 1L;
 
     public NetconfConfigHandlingException(final String message, final ErrorType errorType, final ErrorTag errorTag,
                                           final ErrorSeverity errorSeverity) {
index ebb8054c71fd85739af465ca08d71b10a6bb1f63..dea8443c29614540a6e719f952c4135be85607a2 100644 (file)
@@ -7,12 +7,13 @@
  */
 package org.opendaylight.controller.netconf.confignetconfconnector.exception;
 
-import org.opendaylight.controller.netconf.api.NetconfDocumentedException;
-
 import java.util.Collections;
 import java.util.Map;
 
+import org.opendaylight.controller.netconf.api.NetconfDocumentedException;
+
 public class NoTransactionFoundException extends NetconfDocumentedException {
+    private static final long serialVersionUID = 1L;
 
     public NoTransactionFoundException(final String message, final ErrorType errorType, final ErrorTag errorTag,
                                           final ErrorSeverity errorSeverity) {
index e0d63c14189b7df142a8e4f50558265ffacf6a47..49276663b8aa49894369a98906d7fcfc882f7fe2 100644 (file)
@@ -7,12 +7,13 @@
  */
 package org.opendaylight.controller.netconf.confignetconfconnector.exception;
 
-import org.opendaylight.controller.netconf.api.NetconfDocumentedException;
-
 import java.util.Collections;
 import java.util.Map;
 
+import org.opendaylight.controller.netconf.api.NetconfDocumentedException;
+
 public class OperationNotPermittedException extends NetconfDocumentedException {
+    private static final long serialVersionUID = 1L;
 
     public OperationNotPermittedException(final String message, final ErrorType errorType, final ErrorTag errorTag,
                                        final ErrorSeverity errorSeverity) {
index 54d24a4cec3823c0a07e1bfaf5e36b2c69815d0d..c08be06c9f619bfc48ff144f523f64535cb8a605 100644 (file)
@@ -23,7 +23,7 @@ import org.opendaylight.yangtools.yang.model.api.type.BinaryTypeDefinition;
 
 public abstract class AttributeIfcSwitchStatement<T> {
 
-    protected AttributeIfc lastAttribute;
+    private AttributeIfc lastAttribute;
 
     public T switchAttribute(AttributeIfc attributeIfc) {
 
@@ -39,8 +39,9 @@ public abstract class AttributeIfcSwitchStatement<T> {
                     return caseJavaUnionAttribute(openType);
                 } else if(((JavaAttribute)attributeIfc).isIdentityRef()) {
                     return caseJavaIdentityRefAttribute(openType);
-                } else
+                } else {
                     return caseJavaAttribute(openType);
+                }
             } catch (UnknownOpenTypeException e) {
                 throw getIllegalArgumentException(attributeIfc);
             }
@@ -58,6 +59,10 @@ public abstract class AttributeIfcSwitchStatement<T> {
         throw getIllegalArgumentException(attributeIfc);
     }
 
+    public AttributeIfc getLastAttribute() {
+        return lastAttribute;
+    }
+
     protected T caseJavaIdentityRefAttribute(OpenType<?> openType) {
         return caseJavaAttribute(openType);
     }
index dbc1b48d4f9abebe5fc89c306f65b68fcee924d2..dcc2fa15439b01ecd15eca5144f15eaa3a77086b 100644 (file)
@@ -9,6 +9,7 @@
 package org.opendaylight.controller.netconf.confignetconfconnector.mapping.attributes.fromxml;
 
 import com.google.common.base.Optional;
+import org.opendaylight.controller.netconf.api.NetconfDocumentedException;
 import org.opendaylight.controller.netconf.confignetconfconnector.mapping.attributes.resolving.AttributeResolvingStrategy;
 
 import javax.management.openmbean.OpenType;
@@ -39,7 +40,7 @@ public class AttributeConfigElement {
     }
 
     public void resolveValue(AttributeResolvingStrategy<?, ? extends OpenType<?>> attributeResolvingStrategy,
-            String attrName) {
+            String attrName) throws NetconfDocumentedException {
         resolvedValue = attributeResolvingStrategy.parseAttribute(attrName, value);
         Optional<?> resolvedDefault = attributeResolvingStrategy.parseAttribute(attrName, dafaultValue);
         resolvedDefaultValue = resolvedDefault.isPresent() ? resolvedDefault.get() : null;
index 5f44c16dcaefb754f7732143c41f59968cea9fda..bf9eee7f267fd5ded0f73f431443eecb9fa76183 100644 (file)
@@ -55,7 +55,7 @@ public class ObjectNameAttributeReadingStrategy extends AbstractAttributeReading
     public static String checkPrefixAndExtractServiceName(XmlElement typeElement, Map.Entry<String, String> prefixNamespace) throws NetconfDocumentedException {
         String serviceName = typeElement.getTextContent();
 
-        Preconditions.checkState(prefixNamespace.equals("") == false, "Service %s value not prefixed with namespace",
+        Preconditions.checkState(!prefixNamespace.equals(""), "Service %s value not prefixed with namespace",
                 XmlNetconfConstants.TYPE_KEY);
         String prefix = prefixNamespace.getKey() + PREFIX_SEPARATOR;
         Preconditions.checkState(serviceName.startsWith(prefix),
index 61db74feb570bc1f0c20e3ee24a938cce0d849ea..61ea76bbfeb9504f456132ba7cfebd67bcc6e508 100644 (file)
@@ -50,31 +50,31 @@ public class ObjectXmlReader extends AttributeIfcSwitchStatement<AttributeReadin
 
     @Override
     protected AttributeReadingStrategy caseJavaBinaryAttribute(OpenType<?> openType) {
-        return new SimpleBinaryAttributeReadingStrategy(lastAttribute.getNullableDefault());
+        return new SimpleBinaryAttributeReadingStrategy(getLastAttribute().getNullableDefault());
     }
 
     @Override
     protected AttributeReadingStrategy caseJavaUnionAttribute(OpenType<?> openType) {
         String mappingKey = JavaAttribute.DESCRIPTION_OF_VALUE_ATTRIBUTE_FOR_UNION;
-        return new SimpleUnionAttributeReadingStrategy(lastAttribute.getNullableDefault(), mappingKey);
+        return new SimpleUnionAttributeReadingStrategy(getLastAttribute().getNullableDefault(), mappingKey);
     }
 
     @Override
     public AttributeReadingStrategy caseJavaSimpleAttribute(SimpleType<?> openType) {
-        return new SimpleAttributeReadingStrategy(lastAttribute.getNullableDefault());
+        return new SimpleAttributeReadingStrategy(getLastAttribute().getNullableDefault());
     }
 
     @Override
     public AttributeReadingStrategy caseJavaArrayAttribute(ArrayType<?> openType) {
-        SimpleAttributeReadingStrategy innerStrategy = new SimpleAttributeReadingStrategy(lastAttribute.getNullableDefault());
-        return new ArrayAttributeReadingStrategy(lastAttribute.getNullableDefault(), innerStrategy);
+        SimpleAttributeReadingStrategy innerStrategy = new SimpleAttributeReadingStrategy(getLastAttribute().getNullableDefault());
+        return new ArrayAttributeReadingStrategy(getLastAttribute().getNullableDefault(), innerStrategy);
     }
 
     @Override
     public AttributeReadingStrategy caseJavaCompositeAttribute(CompositeType openType) {
         Preconditions.checkState(openType.keySet().size() == 1, "Unexpected number of elements for open type %s, should be 1", openType);
         String mappingKey = openType.keySet().iterator().next();
-        return new SimpleCompositeAttributeReadingStrategy(lastAttribute.getNullableDefault(), mappingKey);
+        return new SimpleCompositeAttributeReadingStrategy(getLastAttribute().getNullableDefault(), mappingKey);
     }
 
     @Override
@@ -83,18 +83,18 @@ public class ObjectXmlReader extends AttributeIfcSwitchStatement<AttributeReadin
         Set<String> keys = ((CompositeType) openType).keySet();
         Preconditions.checkState(keys.size() == 1, "Unexpected number of elements for open type %s, should be 1", openType);
         String mappingKey = keys.iterator().next();
-        return new SimpleIdentityRefAttributeReadingStrategy(lastAttribute.getNullableDefault(), mappingKey, identityMap);
+        return new SimpleIdentityRefAttributeReadingStrategy(getLastAttribute().getNullableDefault(), mappingKey, identityMap);
     }
 
     @Override
     protected AttributeReadingStrategy caseDependencyAttribute(SimpleType<?> openType) {
-        return new ObjectNameAttributeReadingStrategy(lastAttribute.getNullableDefault());
+        return new ObjectNameAttributeReadingStrategy(getLastAttribute().getNullableDefault());
     }
 
     @Override
     protected AttributeReadingStrategy caseTOAttribute(CompositeType openType) {
-        Preconditions.checkState(lastAttribute instanceof TOAttribute);
-        Map<String, AttributeIfc> inner = ((TOAttribute)lastAttribute).getYangPropertiesToTypesMap();
+        Preconditions.checkState(getLastAttribute() instanceof TOAttribute);
+        Map<String, AttributeIfc> inner = ((TOAttribute)getLastAttribute()).getYangPropertiesToTypesMap();
 
         Map<String, AttributeReadingStrategy> innerStrategies = Maps.newHashMap();
 
@@ -104,21 +104,21 @@ public class ObjectXmlReader extends AttributeIfcSwitchStatement<AttributeReadin
             innerStrategies.put(innerAttrEntry.getKey(), innerStrat);
         }
 
-        return new CompositeAttributeReadingStrategy(lastAttribute.getNullableDefault(), innerStrategies);
+        return new CompositeAttributeReadingStrategy(getLastAttribute().getNullableDefault(), innerStrategies);
     }
 
     @Override
     protected AttributeReadingStrategy caseListAttribute(ArrayType<?> openType) {
-        Preconditions.checkState(lastAttribute instanceof ListAttribute);
-        AttributeReadingStrategy innerStrategy = prepareReadingStrategy(key, ((ListAttribute) lastAttribute).getInnerAttribute());
-        return new ArrayAttributeReadingStrategy(lastAttribute.getNullableDefault(), innerStrategy);
+        Preconditions.checkState(getLastAttribute() instanceof ListAttribute);
+        AttributeReadingStrategy innerStrategy = prepareReadingStrategy(key, ((ListAttribute) getLastAttribute()).getInnerAttribute());
+        return new ArrayAttributeReadingStrategy(getLastAttribute().getNullableDefault(), innerStrategy);
     }
 
     @Override
     protected AttributeReadingStrategy caseListDependeciesAttribute(ArrayType<?> openType) {
-        Preconditions.checkState(lastAttribute instanceof ListDependenciesAttribute);
+        Preconditions.checkState(getLastAttribute() instanceof ListDependenciesAttribute);
         AttributeReadingStrategy innerStrategy = caseDependencyAttribute(SimpleType.OBJECTNAME);
-        return new ArrayAttributeReadingStrategy(lastAttribute.getNullableDefault(), innerStrategy);
+        return new ArrayAttributeReadingStrategy(getLastAttribute().getNullableDefault(), innerStrategy);
     }
 
 }
index 58f91a7deec8c9ce7522f426bb4428b2dee3d691..8e7ba708c6cea71ba46400f99fb765a2113bf762 100644 (file)
@@ -54,9 +54,9 @@ public class SimpleIdentityRefAttributeReadingStrategy extends SimpleAttributeRe
                     revision = date;
                 }
             }
-        } else
+        } else {
             revision = revisions.keySet().iterator().next();
-
+        }
 
         return QName.create(URI.create(namespace), revision, localName).toString();
     }
index 30436bb42f077c72de371e45fc5453849a40f9bc..54ffe08cfbd455f19e2d8996588e19ce7e706cc0 100644 (file)
@@ -30,8 +30,9 @@ public class ArrayAttributeMappingStrategy extends AbstractAttributeMappingStrat
 
     @Override
     public Optional<List<Object>> mapAttribute(Object value) {
-        if (value == null)
+        if (value == null){
             return Optional.absent();
+        }
 
         Preconditions.checkArgument(value.getClass().isArray(), "Value has to be instanceof Array ");
 
@@ -39,19 +40,11 @@ public class ArrayAttributeMappingStrategy extends AbstractAttributeMappingStrat
 
         for (int i = 0; i < Array.getLength(value); i++) {
             Object innerValue = Array.get(value, i);
-            // String expectedClassName =
-            // getOpenType().getElementOpenType().getClassName();
-            // String realClassName = value.getClass().getName();
-
-            // Preconditions.checkState(realClassName.contains(expectedClassName),
-            // "Element in collection/array should be of type " +
-            // expectedClassName + " but was "
-            // + realClassName + " for attribute: " + getOpenType());
-
             Optional<?> mapAttribute = innerElementStrategy.mapAttribute(innerValue);
 
-            if (mapAttribute.isPresent())
+            if (mapAttribute.isPresent()){
                 retVal.add(mapAttribute.get());
+            }
         }
 
         return Optional.of(retVal);
index 368e1f12a642e54dc90ac8231818619a0de96815..594953e569e6c0c2c5531a8100e5e7f106f2d114 100644 (file)
@@ -35,8 +35,9 @@ public class CompositeAttributeMappingStrategy extends
 
     @Override
     public Optional<Map<String, Object>> mapAttribute(Object value) {
-        if (value == null)
+        if (value == null){
             return Optional.absent();
+        }
 
         Util.checkType(value, CompositeDataSupport.class);
 
@@ -54,8 +55,9 @@ public class CompositeAttributeMappingStrategy extends
 
         for (String jmxName : jmxToJavaNameMapping.keySet()) {
             Optional<?> mapped = mapInnerAttribute(compositeData, jmxName, expectedType.getDescription(jmxName));
-            if(mapped.isPresent())
+            if(mapped.isPresent()){
                 retVal.put(jmxToJavaNameMapping.get(jmxName), mapped.get());
+            }
         }
 
         return Optional.of(retVal);
@@ -66,8 +68,7 @@ public class CompositeAttributeMappingStrategy extends
 
         AttributeMappingStrategy<?, ? extends OpenType<?>> attributeMappingStrategy = innerStrategies
                 .get(jmxName);
-        Optional<?> mapAttribute = attributeMappingStrategy.mapAttribute(innerValue);
-        return mapAttribute;
+        return attributeMappingStrategy.mapAttribute(innerValue);
     }
 
 }
index 506d7d61c347016ef76a6601500ed773762dafb0..01844f27d4cb8609d8df9b4916f7fbe69a47eac2 100644 (file)
@@ -112,7 +112,7 @@ public class ObjectMapper extends AttributeIfcSwitchStatement<AttributeMappingSt
     @Override
     protected AttributeMappingStrategy<?, ? extends OpenType<?>> caseDependencyAttribute(
             SimpleType<?> openType) {
-        return new ObjectNameAttributeMappingStrategy(openType, dependencyTracker,
+        return new ObjectNameAttributeMappingStrategy(openType,
                 serviceNameOfDepAttr, namespaceOfDepAttr);
     }
 
@@ -120,10 +120,10 @@ public class ObjectMapper extends AttributeIfcSwitchStatement<AttributeMappingSt
     protected AttributeMappingStrategy<?, ? extends OpenType<?>> caseTOAttribute(CompositeType openType) {
         Map<String, AttributeMappingStrategy<?, ? extends OpenType<?>>> innerStrategies = Maps.newHashMap();
 
-        Preconditions.checkState(lastAttribute instanceof TOAttribute);
-        TOAttribute lastTO = (TOAttribute) lastAttribute;
+        Preconditions.checkState(getLastAttribute() instanceof TOAttribute);
+        TOAttribute lastTO = (TOAttribute) getLastAttribute();
 
-        for (Entry<String, AttributeIfc> innerAttrEntry : ((TOAttribute)lastAttribute).getJmxPropertiesToTypesMap().entrySet()) {
+        for (Entry<String, AttributeIfc> innerAttrEntry : ((TOAttribute)getLastAttribute()).getJmxPropertiesToTypesMap().entrySet()) {
             innerStrategies.put(innerAttrEntry.getKey(), prepareStrategy(innerAttrEntry.getValue()));
         }
 
@@ -133,14 +133,14 @@ public class ObjectMapper extends AttributeIfcSwitchStatement<AttributeMappingSt
 
     @Override
     protected AttributeMappingStrategy<?, ? extends OpenType<?>> caseListAttribute(ArrayType<?> openType) {
-        Preconditions.checkState(lastAttribute instanceof ListAttribute);
+        Preconditions.checkState(getLastAttribute() instanceof ListAttribute);
         return new ArrayAttributeMappingStrategy(openType,
-                prepareStrategy(((ListAttribute) lastAttribute).getInnerAttribute()));
+                prepareStrategy(((ListAttribute) getLastAttribute()).getInnerAttribute()));
     }
 
     @Override
     protected AttributeMappingStrategy<?, ? extends OpenType<?>> caseListDependeciesAttribute(ArrayType<?> openType) {
-        Preconditions.checkState(lastAttribute instanceof ListDependenciesAttribute);
+        Preconditions.checkState(getLastAttribute() instanceof ListDependenciesAttribute);
         return new ArrayAttributeMappingStrategy(openType, caseDependencyAttribute(SimpleType.OBJECTNAME));
     }
 
index 83e8086eef2507b648d918cf4592d9d7c553c1b6..b827a5b03965d7f7471731a646b80e44ee835266 100644 (file)
@@ -10,31 +10,28 @@ package org.opendaylight.controller.netconf.confignetconfconnector.mapping.attri
 
 import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
-import org.opendaylight.controller.config.api.jmx.ObjectNameUtil;
-import org.opendaylight.controller.netconf.confignetconfconnector.mapping.config.ServiceRegistryWrapper;
-import org.opendaylight.controller.netconf.confignetconfconnector.util.Util;
-
 import javax.management.ObjectName;
 import javax.management.openmbean.SimpleType;
+import org.opendaylight.controller.config.api.jmx.ObjectNameUtil;
+import org.opendaylight.controller.netconf.confignetconfconnector.util.Util;
 
 public class ObjectNameAttributeMappingStrategy extends
         AbstractAttributeMappingStrategy<ObjectNameAttributeMappingStrategy.MappedDependency, SimpleType<?>> {
 
-    private final ServiceRegistryWrapper tracker;
     private final String serviceName;
     private final String namespace;
 
-    public ObjectNameAttributeMappingStrategy(SimpleType<?> openType, ServiceRegistryWrapper dependencyTracker, String serviceName, String namespace) {
+    public ObjectNameAttributeMappingStrategy(SimpleType<?> openType,  String serviceName, String namespace) {
         super(openType);
-        this.tracker = dependencyTracker;
         this.serviceName = serviceName;
         this.namespace = namespace;
     }
 
     @Override
     public Optional<MappedDependency> mapAttribute(Object value) {
-        if (value == null)
+        if (value == null){
             return Optional.absent();
+        }
 
         String expectedClass = getOpenType().getClassName();
         String realClass = value.getClass().getName();
index d92b7c432df344ae989f3fff8acbe94876ea512f..7dbf4f41bc6fc16eecf5b92bde33130b8261e910 100644 (file)
@@ -25,8 +25,9 @@ public class SimpleAttributeMappingStrategy extends AbstractAttributeMappingStra
 
     @Override
     public Optional<String> mapAttribute(Object value) {
-        if (value == null)
+        if (value == null){
             return Optional.absent();
+        }
 
         String expectedClass = getOpenType().getClassName();
         String realClass = value.getClass().getName();
index 81a1e535989192474d34fa49fa0f99d07c71b2f4..1754fc7e0945d4f43b69d5280ce9791ae7c16c0f 100644 (file)
@@ -26,9 +26,9 @@ public class UnionCompositeAttributeMappingStrategy extends
 
     @Override
     protected Optional<?> mapInnerAttribute(CompositeDataSupport compositeData, String jmxName, String description) {
-        if(description.equals(JavaAttribute.DESCRIPTION_OF_VALUE_ATTRIBUTE_FOR_UNION) == false)
+        if(!description.equals(JavaAttribute.DESCRIPTION_OF_VALUE_ATTRIBUTE_FOR_UNION)){
             return Optional.absent();
-
+        }
         return super.mapInnerAttribute(compositeData, jmxName, description);
     }
 }
index adee8bec58086a02a92835deea84c578a8c94cd6..f0d7960085f21bd5e4a220797d648521c93f51d8 100644 (file)
@@ -9,6 +9,7 @@
 package org.opendaylight.controller.netconf.confignetconfconnector.mapping.attributes.resolving;
 
 import com.google.common.base.Optional;
+import org.opendaylight.controller.netconf.api.NetconfDocumentedException;
 import org.opendaylight.controller.netconf.confignetconfconnector.util.Util;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -33,7 +34,7 @@ final class ArrayAttributeResolvingStrategy extends AbstractAttributeResolvingSt
     }
 
     @Override
-    public Optional<Object> parseAttribute(String attrName, Object value) {
+    public Optional<Object> parseAttribute(String attrName, Object value) throws NetconfDocumentedException {
         if (value == null) {
             return Optional.absent();
         }
@@ -45,31 +46,31 @@ final class ArrayAttributeResolvingStrategy extends AbstractAttributeResolvingSt
 
         if (innerTypeResolvingStrategy.getOpenType() instanceof CompositeType) {
             innerTypeClass = CompositeDataSupport.class;
-        } else
+        } else {
             try {
                 innerTypeClass = Class.forName(getOpenType().getElementOpenType().getClassName());
             } catch (ClassNotFoundException e) {
-                throw new RuntimeException("Unable to locate class for "
+                throw new IllegalStateException("Unable to locate class for "
                         + getOpenType().getElementOpenType().getClassName(), e);
             }
+        }
 
         Object parsedArray = null;
 
         if (getOpenType().isPrimitiveArray()) {
             Class<?> primitiveType = getPrimitiveType(innerTypeClass);
             parsedArray = Array.newInstance(primitiveType, valueList.size());
-        } else
+        } else {
             parsedArray = Array.newInstance(innerTypeClass, valueList.size());
+        }
 
         int i = 0;
         for (Object innerValue : valueList) {
             Optional<?> parsedElement = innerTypeResolvingStrategy.parseAttribute(attrName + "_" + i, innerValue);
-
-            if (!parsedElement.isPresent())
+            if (!parsedElement.isPresent()){
                 continue;
-
+            }
             Array.set(parsedArray, i, parsedElement.get());
-            // parsedArray[i] = parsedElement.get();
             i++;
         }
 
@@ -94,7 +95,7 @@ final class ArrayAttributeResolvingStrategy extends AbstractAttributeResolvingSt
         try {
             return (Class<?>) innerTypeClass.getField("TYPE").get(null);
         } catch (Exception e) {
-            throw new RuntimeException("Unable to determine primitive type to " + innerTypeClass);
+            throw new IllegalStateException("Unable to determine primitive type to " + innerTypeClass);
         }
     }
 
index 0bb274ae413c2fbd4c4712cd31ec8b25e2442c5f..599d81396e6fea26dbe5c83778e90592f46e15e3 100644 (file)
@@ -11,6 +11,7 @@ package org.opendaylight.controller.netconf.confignetconfconnector.mapping.attri
 import com.google.common.base.Optional;
 
 import javax.management.openmbean.OpenType;
+import org.opendaylight.controller.netconf.api.NetconfDocumentedException;
 
 /**
  * Create real object from String or Map that corresponds to given opentype.
@@ -18,5 +19,5 @@ import javax.management.openmbean.OpenType;
 public interface AttributeResolvingStrategy<T, O extends OpenType<?>> {
     O getOpenType();
 
-    Optional<T> parseAttribute(String attrName, Object value);
+    Optional<T> parseAttribute(String attrName, Object value) throws NetconfDocumentedException;
 }
index e8e97f990f44cd45608fb8df92e042437351e319..83ebf65d7fb71c1e5791dcfac416e4097a94f675 100644 (file)
@@ -11,6 +11,7 @@ package org.opendaylight.controller.netconf.confignetconfconnector.mapping.attri
 import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Maps;
+import org.opendaylight.controller.netconf.api.NetconfDocumentedException;
 import org.opendaylight.controller.netconf.confignetconfconnector.util.Util;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -41,7 +42,7 @@ class CompositeAttributeResolvingStrategy extends
     }
 
     @Override
-    public Optional<CompositeDataSupport> parseAttribute(String attrName, Object value) {
+    public Optional<CompositeDataSupport> parseAttribute(String attrName, Object value) throws NetconfDocumentedException {
 
         if (value == null) {
             return Optional.absent();
@@ -75,7 +76,7 @@ class CompositeAttributeResolvingStrategy extends
         try {
             parsedValue = new CompositeDataSupport(getOpenType(), items);
         } catch (OpenDataException e) {
-            throw new RuntimeException("An error occured during restoration of composite type " + this
+            throw new IllegalStateException("An error occured during restoration of composite type " + this
                     + " for attribute " + attrName + " from value " + value, e);
         }
 
index 82c8c1ec6b537f2ca25cc585dfe4c795cd2b7350..4a4281a55e04489beb1a8ed9360a457ec9899dad 100644 (file)
@@ -106,8 +106,8 @@ public class ObjectResolver extends AttributeIfcSwitchStatement<AttributeResolvi
 
     @Override
     protected AttributeResolvingStrategy<?, ? extends OpenType<?>> caseTOAttribute(CompositeType openType) {
-        Preconditions.checkState(lastAttribute instanceof TOAttribute);
-        TOAttribute toAttribute = (TOAttribute) lastAttribute;
+        Preconditions.checkState(getLastAttribute() instanceof TOAttribute);
+        TOAttribute toAttribute = (TOAttribute) getLastAttribute();
 
         Map<String, AttributeResolvingStrategy<?, ? extends OpenType<?>>> innerMap = Maps.newHashMap();
 
@@ -122,14 +122,14 @@ public class ObjectResolver extends AttributeIfcSwitchStatement<AttributeResolvi
 
     @Override
     protected AttributeResolvingStrategy<?, ? extends OpenType<?>> caseListAttribute(ArrayType<?> openType) {
-        Preconditions.checkState(lastAttribute instanceof ListAttribute);
-        AttributeIfc innerAttribute = ((ListAttribute) lastAttribute).getInnerAttribute();
+        Preconditions.checkState(getLastAttribute() instanceof ListAttribute);
+        AttributeIfc innerAttribute = ((ListAttribute) getLastAttribute()).getInnerAttribute();
         return new ArrayAttributeResolvingStrategy(prepareStrategy(innerAttribute), openType);
     }
 
     @Override
     protected AttributeResolvingStrategy<?, ? extends OpenType<?>> caseListDependeciesAttribute(ArrayType<?> openType) {
-        Preconditions.checkState(lastAttribute instanceof ListDependenciesAttribute);
+        Preconditions.checkState(getLastAttribute() instanceof ListDependenciesAttribute);
         return new ArrayAttributeResolvingStrategy(caseDependencyAttribute(SimpleType.OBJECTNAME), openType);
     }
 
index e1b8ecf17ee50c1a4895d73301025faabd5f88e6..26709dbe6b97e2b8fcb37cde22526053debe51df 100644 (file)
@@ -10,6 +10,9 @@ package org.opendaylight.controller.netconf.confignetconfconnector.mapping.attri
 
 import com.google.common.base.Optional;
 import com.google.common.collect.Maps;
+import java.lang.reflect.InvocationTargetException;
+import java.text.ParseException;
+import org.opendaylight.controller.netconf.api.NetconfDocumentedException;
 import org.opendaylight.controller.netconf.confignetconfconnector.util.Util;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -35,7 +38,7 @@ final class SimpleAttributeResolvingStrategy extends AbstractAttributeResolvingS
     }
 
     @Override
-    public Optional<Object> parseAttribute(String attrName, Object value) {
+    public Optional<Object> parseAttribute(String attrName, Object value) throws NetconfDocumentedException {
         if (value == null) {
             return Optional.absent();
         }
@@ -70,32 +73,42 @@ final class SimpleAttributeResolvingStrategy extends AbstractAttributeResolvingS
     }
 
     static interface Resolver {
-        Object resolveObject(Class<?> type, String attrName, String value);
+        Object resolveObject(Class<?> type, String attrName, String value) throws NetconfDocumentedException;
     }
 
     static class DefaultResolver implements Resolver {
 
         @Override
-        public Object resolveObject(Class<?> type, String attrName, String value) {
+        public Object resolveObject(Class<?> type, String attrName, String value) throws NetconfDocumentedException {
             try {
-                Object parsedValue = parseObject(type, value);
-                return parsedValue;
+                return parseObject(type, value);
             } catch (Exception e) {
-                throw new RuntimeException("Unable to resolve attribute " + attrName + " from " + value, e);
+                throw new NetconfDocumentedException("Unable to resolve attribute " + attrName + " from " + value,
+                        NetconfDocumentedException.ErrorType.application,
+                        NetconfDocumentedException.ErrorTag.operation_failed,
+                        NetconfDocumentedException.ErrorSeverity.error);
             }
         }
 
-        protected Object parseObject(Class<?> type, String value) throws Exception {
-            Method method = type.getMethod("valueOf", String.class);
-            Object parsedValue = method.invoke(null, value);
-            return parsedValue;
+        protected Object parseObject(Class<?> type, String value) throws NetconfDocumentedException {
+            Method method = null;
+            try {
+                method = type.getMethod("valueOf", String.class);
+                return method.invoke(null, value);
+            } catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
+                logger.trace("Error parsing object {}",e);
+                throw new NetconfDocumentedException("Error parsing object.",
+                        NetconfDocumentedException.ErrorType.application,
+                        NetconfDocumentedException.ErrorTag.operation_failed,
+                        NetconfDocumentedException.ErrorSeverity.error);
+            }
         }
     }
 
     static class StringResolver extends DefaultResolver {
 
         @Override
-        protected Object parseObject(Class<?> type, String value) throws Exception {
+        protected Object parseObject(Class<?> type, String value) {
             return value;
         }
     }
@@ -103,7 +116,7 @@ final class SimpleAttributeResolvingStrategy extends AbstractAttributeResolvingS
     static class BigIntegerResolver extends DefaultResolver {
 
         @Override
-        protected Object parseObject(Class<?> type, String value) throws Exception {
+        protected Object parseObject(Class<?> type, String value) {
             return new BigInteger(value);
         }
     }
@@ -111,7 +124,7 @@ final class SimpleAttributeResolvingStrategy extends AbstractAttributeResolvingS
     static class BigDecimalResolver extends DefaultResolver {
 
         @Override
-        protected Object parseObject(Class<?> type, String value) throws Exception {
+        protected Object parseObject(Class<?> type, String value) {
             return new BigDecimal(value);
         }
     }
@@ -119,16 +132,23 @@ final class SimpleAttributeResolvingStrategy extends AbstractAttributeResolvingS
     static class CharResolver extends DefaultResolver {
 
         @Override
-        protected Object parseObject(Class<?> type, String value) throws Exception {
+        protected Object parseObject(Class<?> type, String value)  {
             return new Character(value.charAt(0));
         }
     }
 
     static class DateResolver extends DefaultResolver {
-
         @Override
-        protected Object parseObject(Class<?> type, String value) throws Exception {
-            return Util.readDate(value);
+        protected Object parseObject(Class<?> type, String value) throws NetconfDocumentedException {
+            try {
+                return Util.readDate(value);
+            } catch (ParseException e) {
+                logger.trace("Unable parse value {} due to  {}",value, e);
+                throw new NetconfDocumentedException("Unable to parse value "+value+" as date.",
+                        NetconfDocumentedException.ErrorType.application,
+                        NetconfDocumentedException.ErrorTag.operation_failed,
+                        NetconfDocumentedException.ErrorSeverity.error);
+            }
         }
     }
 
index bc99ecf09a90b480f71b6444776fefc354177559..cdebcfaa34620595134ce868f2ac743e9eabd606 100644 (file)
@@ -34,10 +34,11 @@ final class UnionCompositeAttributeResolvingStrategy extends CompositeAttributeR
         Map<String, Object> newMap = Maps.newHashMap();
 
         for (String key : openType.keySet()) {
-            if (openType.getDescription(key).equals(JavaAttribute.DESCRIPTION_OF_VALUE_ATTRIBUTE_FOR_UNION))
+            if (openType.getDescription(key).equals(JavaAttribute.DESCRIPTION_OF_VALUE_ATTRIBUTE_FOR_UNION)){
                 newMap.put(key, valueMap.get(JavaAttribute.DESCRIPTION_OF_VALUE_ATTRIBUTE_FOR_UNION));
-            else
+            } else {
                 newMap.put(key, null);
+            }
         }
         return newMap;
     }
diff --git a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/toxml/AbstractAttributeWritingStrategy.java b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/toxml/AbstractAttributeWritingStrategy.java
new file mode 100644 (file)
index 0000000..61465f9
--- /dev/null
@@ -0,0 +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
+ */
+package org.opendaylight.controller.netconf.confignetconfconnector.mapping.attributes.toxml;
+
+public abstract class AbstractAttributeWritingStrategy {
+    protected Object preprocess(Object value) {
+        return value;
+    }
+}
index 051f365086624ce5acf8bf2cb3d52d268044f892..b17842b8e20f50e6aa468f10800dfe43f7d4f6ae 100644 (file)
@@ -20,9 +20,9 @@ import com.google.common.base.Optional;
 
 public class CompositeAttributeWritingStrategy implements AttributeWritingStrategy {
 
-    protected final String key;
-    protected final Document document;
-    protected final Map<String, AttributeWritingStrategy> innerStrats;
+    private final String key;
+    private final Document document;
+    private final Map<String, AttributeWritingStrategy> innerStrats;
 
     public CompositeAttributeWritingStrategy(Document document, String key,
             Map<String, AttributeWritingStrategy> innerStrats) {
@@ -49,4 +49,16 @@ public class CompositeAttributeWritingStrategy implements AttributeWritingStrate
         }
         parentElement.appendChild(innerNode);
     }
+
+    public String getKey() {
+        return key;
+    }
+
+    public Document getDocument() {
+        return document;
+    }
+
+    public Map<String, AttributeWritingStrategy> getInnerStrats() {
+        return innerStrats;
+    }
 }
index 8d63bb05d8b8a275dc8984d4ebb2f438772d7ab4..4e07ec8c31e7beb81e369f9c7c68fcac5d65058f 100644 (file)
@@ -90,11 +90,11 @@ public class ObjectXmlWriter extends AttributeIfcSwitchStatement<AttributeWritin
 
     @Override
     protected AttributeWritingStrategy caseTOAttribute(CompositeType openType) {
-        Preconditions.checkState(lastAttribute instanceof TOAttribute);
+        Preconditions.checkState(getLastAttribute() instanceof TOAttribute);
 
         Map<String, AttributeWritingStrategy> innerStrats = Maps.newHashMap();
         String currentKey = key;
-        for (Entry<String, AttributeIfc> innerAttrEntry : ((TOAttribute) lastAttribute).getYangPropertiesToTypesMap().entrySet()) {
+        for (Entry<String, AttributeIfc> innerAttrEntry : ((TOAttribute) getLastAttribute()).getYangPropertiesToTypesMap().entrySet()) {
 
             AttributeWritingStrategy innerStrategy = prepareWritingStrategy(innerAttrEntry.getKey(),
                     innerAttrEntry.getValue(), document);
@@ -106,8 +106,8 @@ public class ObjectXmlWriter extends AttributeIfcSwitchStatement<AttributeWritin
 
     @Override
     protected AttributeWritingStrategy caseListAttribute(ArrayType<?> openType) {
-        Preconditions.checkState(lastAttribute instanceof ListAttribute);
-        AttributeIfc innerAttribute = ((ListAttribute) lastAttribute).getInnerAttribute();
+        Preconditions.checkState(getLastAttribute() instanceof ListAttribute);
+        AttributeIfc innerAttribute = ((ListAttribute) getLastAttribute()).getInnerAttribute();
 
         AttributeWritingStrategy innerStrategy = prepareWritingStrategy(key, innerAttribute, document);
         return new ArrayAttributeWritingStrategy(innerStrategy);
@@ -115,7 +115,7 @@ public class ObjectXmlWriter extends AttributeIfcSwitchStatement<AttributeWritin
 
     @Override
     protected AttributeWritingStrategy caseListDependeciesAttribute(ArrayType<?> openType) {
-        Preconditions.checkState(lastAttribute instanceof ListDependenciesAttribute);
+        Preconditions.checkState(getLastAttribute() instanceof ListDependenciesAttribute);
         AttributeWritingStrategy innerStrategy = caseDependencyAttribute(SimpleType.OBJECTNAME);
         return new ArrayAttributeWritingStrategy(innerStrategy);
     }
index b2555f712a0b2bd175d47fc19c482ef5713ddfab..a74afd08122ef026d235f90192207dc121a627d8 100644 (file)
@@ -8,15 +8,14 @@
 
 package org.opendaylight.controller.netconf.confignetconfconnector.mapping.attributes.toxml;
 
-import java.util.Map;
-import java.util.Map.Entry;
-
+import com.google.common.base.Optional;
 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;
+import java.util.Map;
+import java.util.Map.Entry;
 
 public class RuntimeBeanEntryWritingStrategy extends CompositeAttributeWritingStrategy {
 
@@ -36,7 +35,7 @@ public class RuntimeBeanEntryWritingStrategy extends CompositeAttributeWritingSt
     public void writeElement(Element parentElement, String namespace, Object value) {
         Util.checkType(value, Map.class);
 
-        Element innerNode = XmlUtil.createElement(document, key, Optional.<String>absent());
+        Element innerNode = XmlUtil.createElement(getDocument(), getKey(), Optional.<String>absent());
 
         Map<?, ?> map = (Map<?, ?>) value;
 
@@ -46,7 +45,7 @@ public class RuntimeBeanEntryWritingStrategy extends CompositeAttributeWritingSt
             // bean
             Util.checkType(runtimeBeanInstanceMappingEntry.getValue(), Map.class);
             Map<?, ?> innerMap = (Map<?, ?>) runtimeBeanInstanceMappingEntry.getValue();
-            Element runtimeInstanceNode = XmlUtil.createElement(document, "_"
+            Element runtimeInstanceNode = XmlUtil.createElement(getDocument(), "_"
                     + (String) runtimeBeanInstanceMappingEntry.getKey(), Optional.<String>absent());
             innerNode.appendChild(runtimeInstanceNode);
 
@@ -57,7 +56,7 @@ public class RuntimeBeanEntryWritingStrategy extends CompositeAttributeWritingSt
                 String innerKey = (String) innerObjectEntry.getKey();
                 Object innerValue = innerObjectEntry.getValue();
 
-                innerStrats.get(innerKey).writeElement(runtimeInstanceNode, namespace, innerValue);
+                getInnerStrats().get(innerKey).writeElement(runtimeInstanceNode, namespace, innerValue);
             }
         }
         parentElement.appendChild(innerNode);
index bb5a67cb9ce9051570b6ea736cc83d5e89cd1977..854f99c5c0522902f1c2f7288c353ba66dfe28aa 100644 (file)
@@ -8,20 +8,20 @@
 
 package org.opendaylight.controller.netconf.confignetconfconnector.mapping.config;
 
-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;
 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.api.NetconfDocumentedException;
 import org.opendaylight.controller.netconf.confignetconfconnector.operations.editconfig.EditConfig;
@@ -29,24 +29,15 @@ import org.opendaylight.controller.netconf.confignetconfconnector.operations.edi
 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 static com.google.common.base.Preconditions.checkState;
 
-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);
 
     private final Map<String/* Namespace from yang file */,
             Map<String /* Name of module entry from yang file */, ModuleConfig>> moduleConfigs;
-    private final Map<String, ModuleConfig> moduleNamesToConfigs;
 
     private final Map<String, Map<Date, EditConfig.IdentityMapping>> identityMap;
 
@@ -56,11 +47,6 @@ public class Config {
 
     public Config(Map<String, Map<String, ModuleConfig>> moduleConfigs, Map<String, Map<Date,EditConfig.IdentityMapping>> identityMap) {
         this.moduleConfigs = moduleConfigs;
-        Map<String, ModuleConfig> moduleNamesToConfigs = new HashMap<>();
-        for (Entry<String, Map<String, ModuleConfig>> entry : moduleConfigs.entrySet()) {
-            moduleNamesToConfigs.putAll(entry.getValue());
-        }
-        this.moduleNamesToConfigs = Collections.unmodifiableMap(moduleNamesToConfigs);
         this.identityMap = identityMap;
     }
 
@@ -82,8 +68,9 @@ public class Config {
                 // TODO, this code does not support same module names from different namespaces
                 // Namespace should be present in ObjectName
 
-                if (instances == null)
+                if (instances == null){
                     continue;
+                }
 
                 innerRetVal.put(moduleName, instances);
 
@@ -104,11 +91,6 @@ public class Config {
         return retVal;
     }
 
-    // public Element toXml(Set<ObjectName> instancesToMap, String namespace,
-    // Document document) {
-    // return toXml(instancesToMap, Optional.of(namespace), document);
-    // }
-
     public Element toXml(Set<ObjectName> instancesToMap, Optional<String> maybeNamespace, Document document,
             Element dataElement, ServiceRegistryWrapper serviceTracker) {
 
@@ -264,10 +246,12 @@ public class Config {
         Optional<XmlElement> modulesOpt = getModulesElement(parent);
 
         List<XmlElement> recognised = Lists.newArrayList();
-        if(servicesOpt.isPresent())
+        if(servicesOpt.isPresent()){
             recognised.add(servicesOpt.get());
-        if(modulesOpt.isPresent())
+        }
+        if(modulesOpt.isPresent()){
             recognised.add(modulesOpt.get());
+        }
 
         parent.checkUnrecognisedElements(recognised);
     }
@@ -275,7 +259,7 @@ public class Config {
     private String getFactoryName(String factoryNameWithPrefix, String prefixOrEmptyString) {
         checkState(
                 factoryNameWithPrefix.startsWith(prefixOrEmptyString),
-                format("Internal error: text " + "content '%s' of type node does not start with prefix '%s'",
+                String.format("Internal error: text " + "content '%s' of type node does not start with prefix '%s'",
                         factoryNameWithPrefix, prefixOrEmptyString));
 
         int factoryNameAfterPrefixIndex;
index 1da9fabdb38390dd0a153b37f4f30a3560fdd03d..0fe5fad29c1d4ad20e5cb67c3d8c21357e791f46 100644 (file)
@@ -63,26 +63,24 @@ public final class InstanceConfig {
         Map<String, Object> toXml = Maps.newHashMap();
 
         for (Entry<String, AttributeIfc> configDefEntry : jmxToAttrConfig.entrySet()) {
-
             // Skip children runtime beans as they are mapped by InstanceRuntime
-            if (configDefEntry.getValue() instanceof RuntimeBeanEntry)
+            if (configDefEntry.getValue() instanceof RuntimeBeanEntry){
                 continue;
-
+            }
             Object value = configRegistryClient.getAttributeCurrentValue(on, configDefEntry.getKey());
             try {
                 AttributeMappingStrategy<?, ? extends OpenType<?>> attributeMappingStrategy = mappingStrategies
                         .get(configDefEntry.getKey());
                 Optional<?> a = attributeMappingStrategy.mapAttribute(value);
-                if (a.isPresent() == false)
+                if (!a.isPresent()){
                     continue;
-
+                }
                 toXml.put(configDefEntry.getValue().getAttributeYangName(), a.get());
             } catch (Exception e) {
                 throw new IllegalStateException("Unable to map value " + value + " to attribute "
                         + configDefEntry.getKey(), e);
             }
         }
-
         return toXml;
     }
 
index 0d55902b1295fb91480bb86c65e5bfb75d0d8fb0..c9605af5868db41a4910523d61347d2d83ae1729 100644 (file)
@@ -9,15 +9,13 @@
 package org.opendaylight.controller.netconf.confignetconfconnector.mapping.config;
 
 import com.google.common.collect.Multimap;
+import java.util.Map;
 import org.opendaylight.controller.netconf.api.NetconfDocumentedException;
 import org.opendaylight.controller.netconf.confignetconfconnector.exception.OperationNotPermittedException;
 import org.opendaylight.controller.netconf.confignetconfconnector.mapping.attributes.fromxml.AttributeConfigElement;
 import org.opendaylight.controller.netconf.confignetconfconnector.operations.editconfig.EditConfigStrategy;
-import org.opendaylight.controller.netconf.confignetconfconnector.operations.editconfig.EditConfigXmlParser;
 import org.opendaylight.controller.netconf.confignetconfconnector.operations.editconfig.EditStrategyType;
 
-import java.util.Map;
-
 /**
  * Parsed xml element containing whole configuration for an instance of some
  * module. Contains preferred edit strategy type.
@@ -44,16 +42,6 @@ public class InstanceConfigElementResolved {
 
 
     static EditStrategyType parseStrategy(String currentStrategy, EditStrategyType defaultStrategy) throws OperationNotPermittedException {
-        if (null == currentStrategy || currentStrategy.equals("")){
-            throw new OperationNotPermittedException(String.format("With "
-                    + defaultStrategy
-                    + " as "
-                    + EditConfigXmlParser.DEFAULT_OPERATION_KEY
-                    + " operations on module elements are not permitted since the default option is restrictive"),
-                    NetconfDocumentedException.ErrorType.application,
-                    NetconfDocumentedException.ErrorTag.operation_failed,
-                    NetconfDocumentedException.ErrorSeverity.error);
-        }
         EditStrategyType parsedStrategy = EditStrategyType.valueOf(currentStrategy);
         EditStrategyType.compareParsedStrategyToDefaultEnforcing(parsedStrategy,defaultStrategy);
         return parsedStrategy;
index f3d75d07bef7ec9dc33ac1d0a189f9e37d30e50d..a5a625a2d6859a373511a1c22ffc9b98c9df6521 100644 (file)
@@ -8,12 +8,9 @@
 
 package org.opendaylight.controller.netconf.confignetconfconnector.mapping.config;
 
-import java.util.Collection;
-import java.util.Date;
-import java.util.Map;
-
-import javax.management.ObjectName;
-
+import com.google.common.base.Optional;
+import com.google.common.collect.HashMultimap;
+import com.google.common.collect.Multimap;
 import org.opendaylight.controller.config.api.jmx.ObjectNameUtil;
 import org.opendaylight.controller.netconf.api.NetconfDocumentedException;
 import org.opendaylight.controller.netconf.confignetconfconnector.operations.editconfig.EditConfig;
@@ -25,9 +22,10 @@ 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.collect.HashMultimap;
-import com.google.common.collect.Multimap;
+import javax.management.ObjectName;
+import java.util.Collection;
+import java.util.Date;
+import java.util.Map;
 
 public class ModuleConfig {
 
@@ -64,7 +62,7 @@ public class ModuleConfig {
         Element root = XmlUtil.createElement(document, XmlNetconfConstants.MODULE_KEY, Optional.<String>absent());
         // Xml.addNamespaceAttr(document, root, namespace);
 
-        final String prefix = getPrefix(namespace);
+        final String prefix = getPrefix();
         Element typeElement = XmlUtil.createPrefixedTextElement(document, XmlUtil.createPrefixedValue(prefix, XmlNetconfConstants.TYPE_KEY), prefix,
                 moduleName, Optional.<String>of(namespace));
         // Xml.addNamespaceAttr(document, typeElement,
@@ -82,12 +80,8 @@ public class ModuleConfig {
         return root;
     }
 
-    private String getPrefix(String namespace) {
-        // if(namespace.contains(":")==false)
+    private String getPrefix() {
         return XmlNetconfConstants.PREFIX;
-        // return namespace.substring(namespace.lastIndexOf(':') + 1,
-        // namespace.length());
-
     }
 
     public ModuleElementResolved fromXml(XmlElement moduleElement, ServiceRegistryWrapper depTracker, String instanceName,
index d1c3ebeb0d212f52805f8200636c4dae8b6be8b5..b772eee0d7a9f3b37a5c8854cfe6b9d1650270b2 100644 (file)
@@ -27,20 +27,22 @@ public class ModuleElementDefinition {
 
     public ModuleElementDefinition(String instanceName, String currentStrategy, EditStrategyType defaultStrategy) {
         this.instanceName = instanceName;
-        EditStrategyType _edStrategy = null;
-        try {
-            _edStrategy = InstanceConfigElementResolved.parseStrategy(currentStrategy, defaultStrategy);
-        } catch (OperationNotPermittedException e) {
-            _edStrategy = defaultStrategy;
-            logger.warn("Operation not permitted on current strategy {} while default strategy is {}. Element definition strategy set to default.",
-                    currentStrategy,
-                    defaultStrategy,
-                    e);
+        if (currentStrategy == null || currentStrategy.isEmpty()) {
+            this.editStrategy = defaultStrategy;
+        } else {
+            EditStrategyType _edStrategy = null;
+            try {
+                _edStrategy = InstanceConfigElementResolved.parseStrategy(currentStrategy, defaultStrategy);
+            } catch (OperationNotPermittedException e) {
+                _edStrategy = defaultStrategy;
+                logger.warn("Operation not permitted on current strategy {} while default strategy is {}. Element definition strategy set to default.",
+                        currentStrategy,
+                        defaultStrategy,
+                        e);
+            }
+            this.editStrategy = _edStrategy;
         }
-        if (currentStrategy == null || currentStrategy.isEmpty())
-            _edStrategy = defaultStrategy;
 
-        this.editStrategy = _edStrategy;
     }
 
     public String getInstanceName() {
index 8d2d149822011ccc856e934e84271550846b1ed1..1f63555e83d93b57565ec44027114bd801eea0e1 100644 (file)
@@ -35,7 +35,9 @@ public class ServiceRegistryWrapper {
     public boolean hasRefName(String namespace, String serviceName, ObjectName on) {
         String qname = configServiceRefRegistry.getServiceInterfaceName(namespace, serviceName);
         Map<String, ObjectName> forQName = configServiceRefRegistry.getServiceMapping().get(qname);
-        if(forQName==null) return false;
+        if(forQName==null){
+            return false;
+        }
         return forQName.values().contains(on);
     }
 
@@ -70,7 +72,7 @@ public class ServiceRegistryWrapper {
         Map<String, Map<String, Map<String, String>>> retVal = Maps.newHashMap();
 
         Map<String, Map<String, ObjectName>> serviceMapping = configServiceRefRegistry.getServiceMapping();
-        for (String serviceQName : serviceMapping.keySet())
+        for (String serviceQName : serviceMapping.keySet()){
             for (String refName : serviceMapping.get(serviceQName).keySet()) {
 
                 ObjectName on = serviceMapping.get(serviceQName).get(refName);
@@ -91,11 +93,12 @@ public class ServiceRegistryWrapper {
                     serviceToRefs.put(localName, refsToSis);
                 }
 
-                Preconditions.checkState(refsToSis.containsKey(refName) == false,
+                Preconditions.checkState(!refsToSis.containsKey(refName),
                         "Duplicate reference name %s for service %s:%s, now for instance %s", refName, namespace,
                         localName, on);
                 refsToSis.put(refName, si.toString());
             }
+        }
 
         return retVal;
     }
@@ -108,10 +111,11 @@ public class ServiceRegistryWrapper {
         Map<String, Map<String, String>> serviceNameToRefNameToInstance = getMappedServices().get(namespace);
 
         Map<String, String> refNameToInstance;
-        if(serviceNameToRefNameToInstance == null || serviceNameToRefNameToInstance.containsKey(serviceName) == false) {
+        if(serviceNameToRefNameToInstance == null || !serviceNameToRefNameToInstance.containsKey(serviceName)) {
             refNameToInstance = Collections.emptyMap();
-        } else
+        } else {
             refNameToInstance = serviceNameToRefNameToInstance.get(serviceName);
+        }
 
         final Set<String> refNamesAsSet = toSet(refNameToInstance.keySet());
         if (refNamesAsSet.contains(refName)) {
@@ -135,12 +139,13 @@ public class ServiceRegistryWrapper {
     }
 
     private String findAvailableRefName(String refName, Set<String> refNamesAsSet) {
-        String intitialRefName = refName;
+        String availableRefName = "";
 
         while (true) {
-            refName = intitialRefName + "_" + suffix++;
-            if (refNamesAsSet.contains(refName) == false)
-                return refName;
+            availableRefName = refName + "_" + suffix++;
+            if (!refNamesAsSet.contains(availableRefName)){
+                return availableRefName;
+            }
         }
     }
 }
index f9df71700870d12e7f14e7121c14e088cd5ce474..eb5c018cf3db0af76ced902576543861b732a4f6 100644 (file)
@@ -8,33 +8,27 @@
 
 package org.opendaylight.controller.netconf.confignetconfconnector.mapping.config;
 
-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 com.google.common.base.Optional;
+import com.google.common.base.Preconditions;
+import com.google.common.collect.Maps;
 import org.opendaylight.controller.config.api.jmx.ObjectNameUtil;
 import org.opendaylight.controller.netconf.api.NetconfDocumentedException;
 import org.opendaylight.controller.netconf.confignetconfconnector.mapping.attributes.fromxml.ObjectNameAttributeReadingStrategy;
 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;
-import com.google.common.collect.Maps;
+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;
 
 public final class Services {
 
-    private static final Logger logger = LoggerFactory.getLogger(Services.class);
-
     private static final String PROVIDER_KEY = "provider";
     private static final String NAME_KEY = "name";
     public static final String TYPE_KEY = "type";
@@ -98,7 +92,7 @@ public final class Services {
             XmlElement typeElement = service.getOnlyChildElement(TYPE_KEY);
             Entry<String, String> prefixNamespace = typeElement.findNamespaceOfTextContent();
 
-            Preconditions.checkState(prefixNamespace.getKey()!=null && prefixNamespace.getKey().equals("") == false, "Type attribute was not prefixed");
+            Preconditions.checkState(prefixNamespace.getKey()!=null && !prefixNamespace.getKey().equals(""), "Type attribute was not prefixed");
 
             Map<String, Map<String, String>> namespaceToServices = retVal.get(prefixNamespace.getValue());
             if(namespaceToServices == null) {
@@ -169,7 +163,7 @@ public final class Services {
         public static ServiceInstance fromString(String instanceId) {
             instanceId = instanceId.trim();
             Matcher matcher = p.matcher(instanceId);
-            if(matcher.matches() == false) {
+            if(!matcher.matches()) {
                 matcher = pDeprecated.matcher(instanceId);
             }
 
@@ -237,23 +231,30 @@ public final class Services {
 
         @Override
         public boolean equals(Object obj) {
-            if (this == obj)
+            if (this == obj){
                 return true;
-            if (obj == null)
+            }
+            if (obj == null){
                 return false;
-            if (getClass() != obj.getClass())
+            }
+            if (getClass() != obj.getClass()){
                 return false;
+            }
             ServiceInstance other = (ServiceInstance) obj;
             if (instanceName == null) {
-                if (other.instanceName != null)
+                if (other.instanceName != null){
                     return false;
-            } else if (!instanceName.equals(other.instanceName))
+                }
+            } else if (!instanceName.equals(other.instanceName)){
                 return false;
+            }
             if (moduleName == null) {
-                if (other.moduleName != null)
+                if (other.moduleName != null){
                     return false;
-            } else if (!moduleName.equals(other.moduleName))
+                }
+            } else if (!moduleName.equals(other.moduleName)){
                 return false;
+            }
             return true;
         }
 
index a081890d398c1c8fd2f349b8e5127b83e5a57cbf..28b14178937aeca68acc76dcebd3370a0f45aaf2 100644 (file)
@@ -17,12 +17,12 @@ import java.util.Map;
 
 public final class ModuleRpcs {
 
-    Map<String, String> yangToJavaNames = Maps.newHashMap();
-    Map<String, Map<String, InstanceRuntimeRpc>> rpcMapping = Maps.newHashMap();
+    private final Map<String, String> yangToJavaNames = Maps.newHashMap();
+    private final Map<String, Map<String, InstanceRuntimeRpc>> rpcMapping = Maps.newHashMap();
 
     public void addNameMapping(RuntimeBeanEntry runtimeEntry) {
         String yangName = runtimeEntry.getYangName();
-        Preconditions.checkState(yangToJavaNames.containsKey(yangName) == false,
+        Preconditions.checkState(!yangToJavaNames.containsKey(yangName),
                 "RuntimeBean %s found twice in same namespace", yangName);
         yangToJavaNames.put(yangName, runtimeEntry.getJavaNamePrefix());
     }
@@ -35,7 +35,7 @@ public final class ModuleRpcs {
             rpcMapping.put(yangName, map);
         }
 
-        Preconditions.checkState(map.containsKey(rpc.getYangName()) == false, "Rpc %s for runtime bean %s added twice",
+        Preconditions.checkState(!map.containsKey(rpc.getYangName()), "Rpc %s for runtime bean %s added twice",
                 rpc.getYangName(), yangName);
         map.put(rpc.getYangName(), new InstanceRuntimeRpc(rpc));
     }
@@ -55,4 +55,12 @@ public final class ModuleRpcs {
         Preconditions.checkState(rpc != null, "No rpc found for runtime bean %s with name %s", rbeName, rpcName);
         return rpc;
     }
+
+    public Map<String, String> getYangToJavaNames() {
+        return yangToJavaNames;
+    }
+
+    public Map<String, Map<String, InstanceRuntimeRpc>> getRpcMapping() {
+        return rpcMapping;
+    }
 }
index 8c3b35122c2061af455222b70b464b3471ad6fc5..6a49275f260d7c0d047d3b3642d1886b35458b93 100644 (file)
@@ -8,22 +8,19 @@
 
 package org.opendaylight.controller.netconf.confignetconfconnector.mapping.runtime;
 
-import java.util.Hashtable;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-
-import javax.management.ObjectName;
-
+import com.google.common.base.Optional;
+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.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;
+import javax.management.ObjectName;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
 
 public class InstanceRuntime {
 
@@ -48,20 +45,23 @@ public class InstanceRuntime {
      * root + any number of additional properties
      */
     private Set<ObjectName> findChildren(ObjectName innerRootBean, Set<ObjectName> childRbeOns) {
-        final Hashtable<String, String> wantedProperties = innerRootBean.getKeyPropertyList();
+        final Map<String, String> wantedProperties = innerRootBean.getKeyPropertyList();
 
         return Sets.newHashSet(Collections2.filter(childRbeOns, new Predicate<ObjectName>() {
 
             @Override
             public boolean apply(ObjectName on) {
-                Hashtable<String, String> localProperties = on.getKeyPropertyList();
+                Map<String, String> localProperties = on.getKeyPropertyList();
                 for (Entry<String, String> propertyEntry : wantedProperties.entrySet()) {
-                    if (!localProperties.containsKey(propertyEntry.getKey()))
+                    if (!localProperties.containsKey(propertyEntry.getKey())){
                         return false;
-                    if (!localProperties.get(propertyEntry.getKey()).equals(propertyEntry.getValue()))
+                    }
+                    if (!localProperties.get(propertyEntry.getKey()).equals(propertyEntry.getValue())){
                         return false;
-                    if (localProperties.size() <= wantedProperties.size())
+                    }
+                    if (localProperties.size() <= wantedProperties.size()){
                         return false;
+                    }
                 }
                 return true;
             }
@@ -77,10 +77,12 @@ public class InstanceRuntime {
 
             @Override
             public boolean apply(ObjectName on) {
-                if (on.getKeyPropertyList().size() != keyListSize + 1)
+                if (on.getKeyPropertyList().size() != keyListSize + 1){
                     return false;
-                if (!on.getKeyPropertyList().containsKey(string))
+                }
+                if (!on.getKeyPropertyList().containsKey(string)){
                     return false;
+                }
                 return true;
             }
         }));
index 4936d1dbcda833b7fb5fdfe904d8b5e1493f6b34..59767fec6e79546595d9a6bf9207e80482b09a94 100644 (file)
@@ -20,11 +20,9 @@ import java.util.Set;
 
 public class ModuleRuntime {
 
-    private final String moduleName;
     private final InstanceRuntime instanceRuntime;
 
     public ModuleRuntime(String moduleName, InstanceRuntime instanceRuntime) {
-        this.moduleName = moduleName;
         this.instanceRuntime = instanceRuntime;
     }
 
@@ -34,8 +32,9 @@ public class ModuleRuntime {
 
     private ObjectName findRoot(Collection<ObjectName> runtimeBeanOns) {
         for (ObjectName objectName : runtimeBeanOns) {
-            if (objectName.getKeyPropertyList().size() == 3)
+            if (objectName.getKeyPropertyList().size() == 3){
                 return objectName;
+            }
         }
         throw new IllegalStateException("Root runtime bean not found among " + runtimeBeanOns);
     }
index 8fc3ee14233b31cf04c7703f2ba4ff65a1b28728..439dea2a80c352252228333cc19b9a66adc7775f 100644 (file)
@@ -85,7 +85,7 @@ public class Runtime {
 
                     Element runtimeXml;
                     ModuleConfig moduleConfig = moduleConfigs.get(localNamespace).get(moduleName);
-                    if(instanceToRbe==null || instanceToRbe.containsKey(instanceName) == false) {
+                    if(instanceToRbe==null || !instanceToRbe.containsKey(instanceName)) {
                         runtimeXml = moduleConfig.toXml(instanceON, serviceRegistry, document, localNamespace);
                     } else {
                         ModuleRuntime moduleRuntime = moduleRuntimes.get(localNamespace).get(moduleName);
@@ -101,14 +101,4 @@ public class Runtime {
         return root;
     }
 
-    private ObjectName findInstance(Collection<ObjectName> objectNames, String instanceName) {
-        for (ObjectName objectName : objectNames) {
-            String name = ObjectNameUtil.getInstanceName(objectName);
-            if(name.equals(instanceName))
-                return objectName;
-        }
-
-        throw new UnsupportedOperationException("Unable to find config bean instance under name " + instanceName + " among " + objectNames);
-    }
-
 }
index cd99ac4d8d672b039fffb3fcdbed0fa62fc4790e..c4217106cee221cc543b405eb6e4423a64437d8f 100644 (file)
@@ -13,11 +13,15 @@ import org.opendaylight.controller.netconf.util.mapping.AbstractLastNetconfOpera
 
 public abstract class AbstractConfigNetconfOperation extends AbstractLastNetconfOperation {
 
-    protected final ConfigRegistryClient configRegistryClient;
+    private final ConfigRegistryClient configRegistryClient;
 
     protected AbstractConfigNetconfOperation(ConfigRegistryClient configRegistryClient,
             String netconfSessionIdForReporting) {
         super(netconfSessionIdForReporting);
         this.configRegistryClient = configRegistryClient;
     }
+
+    public ConfigRegistryClient getConfigRegistryClient() {
+        return configRegistryClient;
+    }
 }
index e88863c685ace15c486c9b5c263345a81ace9a44..c5fadb097f2d64f4d8b694e345f98dd71136d1c6 100644 (file)
@@ -8,8 +8,9 @@
 
 package org.opendaylight.controller.netconf.confignetconfconnector.operations.editconfig;
 
-import com.google.common.collect.HashMultimap;
-import com.google.common.collect.Multimap;
+import java.util.Map;
+import javax.management.InstanceNotFoundException;
+import javax.management.ObjectName;
 import org.opendaylight.controller.config.util.ConfigTransactionClient;
 import org.opendaylight.controller.netconf.api.NetconfDocumentedException;
 import org.opendaylight.controller.netconf.confignetconfconnector.exception.NetconfConfigHandlingException;
@@ -18,23 +19,10 @@ import org.opendaylight.controller.netconf.confignetconfconnector.mapping.config
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import javax.management.InstanceNotFoundException;
-import javax.management.ObjectName;
-import java.util.Map;
-
 public class DeleteEditConfigStrategy extends AbstractEditConfigStrategy {
 
     private static final Logger logger = LoggerFactory.getLogger(DeleteEditConfigStrategy.class);
 
-    private final Multimap<String, String> providedServices;
-
-    public DeleteEditConfigStrategy() {
-        this.providedServices = HashMultimap.create();
-    }
-
-    public DeleteEditConfigStrategy(Multimap<String, String> providedServices) {
-        this.providedServices = providedServices;
-    }
 
     @Override
     void handleMissingInstance(Map<String, AttributeConfigElement> configuration, ConfigTransactionClient ta,
index 428ddb3b740dfbb5e34e62bff86035d0e9464b03..3ea26055f33c79212debc907caa259109f7101a2 100644 (file)
@@ -72,11 +72,11 @@ public class EditConfig extends AbstractConfigNetconfOperation {
             final EditConfigXmlParser.EditConfigExecution editConfigExecution) throws NetconfDocumentedException, NetconfConfigHandlingException {
 
         if (editConfigExecution.shouldTest()) {
-            executeTests(configRegistryClient, editConfigExecution);
+            executeTests(getConfigRegistryClient(), editConfigExecution);
         }
 
         if (editConfigExecution.shouldSet()) {
-            executeSet(configRegistryClient, editConfigExecution);
+            executeSet(getConfigRegistryClient(), editConfigExecution);
         }
 
         logger.trace("Operation {} successful", EditConfigXmlParser.EDIT_CONFIG);
@@ -224,7 +224,7 @@ public class EditConfig extends AbstractConfigNetconfOperation {
 
         void addIdSchemaNode(IdentitySchemaNode node) {
             String name = node.getQName().getLocalName();
-            Preconditions.checkState(identityNameToSchemaNode.containsKey(name) == false);
+            Preconditions.checkState(!identityNameToSchemaNode.containsKey(name));
             identityNameToSchemaNode.put(name, node);
         }
 
@@ -250,7 +250,7 @@ public class EditConfig extends AbstractConfigNetconfOperation {
             }
 
             Date revision = module.getRevision();
-            Preconditions.checkState(revisionsByNamespace.containsKey(revision) == false,
+            Preconditions.checkState(!revisionsByNamespace.containsKey(revision),
                     "Duplicate revision %s for namespace %s", revision, namespace);
 
             IdentityMapping identityMapping = revisionsByNamespace.get(revision);
@@ -306,8 +306,8 @@ public class EditConfig extends AbstractConfigNetconfOperation {
     protected Element handleWithNoSubsequentOperations(Document document, XmlElement xml) throws NetconfDocumentedException {
 
         EditConfigXmlParser.EditConfigExecution editConfigExecution;
-        Config cfg = getConfigMapping(configRegistryClient, yangStoreSnapshot);
-        editConfigExecution = editConfigXmlParser.fromXml(xml, cfg, transactionProvider, configRegistryClient);
+        Config cfg = getConfigMapping(getConfigRegistryClient(), yangStoreSnapshot);
+        editConfigExecution = editConfigXmlParser.fromXml(xml, cfg, transactionProvider, getConfigRegistryClient());
 
         Element responseInternal;
         responseInternal = getResponseInternal(document, editConfigExecution);
index de6979565e3fe225fc7150dbbe645d4042decdc0..547ffcda3db0941459d4c2163a7fdc9596bc5bb2 100644 (file)
@@ -98,9 +98,10 @@ public class EditConfigXmlParser {
                 .getOnlyChildElementWithSameNamespaceOptionally(EditConfigXmlParser.ERROR_OPTION_KEY);
         if (errorOptionElement.isPresent()) {
             String errorOptionParsed = errorOptionElement.get().getTextContent();
-            if (false == errorOptionParsed.equals(EditConfigXmlParser.DEFAULT_ERROR_OPTION))
+            if (!errorOptionParsed.equals(EditConfigXmlParser.DEFAULT_ERROR_OPTION)){
                 throw new UnsupportedOperationException("Only " + EditConfigXmlParser.DEFAULT_ERROR_OPTION
                         + " supported for " + EditConfigXmlParser.ERROR_OPTION_KEY + ", was " + errorOptionParsed);
+            }
         }
 
         // Default op
index 2f41defac8ff880a9733e21513f6a3dd96d914f5..6b81603dcd01cdffa0ce3d4b5c9486fc66db2b8d 100644 (file)
@@ -65,7 +65,7 @@ public enum EditStrategyType {
         case replace:
             return new ReplaceEditConfigStrategy(providedServices);
         case delete:
-            return new DeleteEditConfigStrategy(providedServices);
+            return new DeleteEditConfigStrategy();
         case remove:
             return new RemoveEditConfigStrategy();
         case none:
index 0a72547d78454cc242756a5a683045ad2f034fa0..3e5707cf6ddbc29f842d50fe5cde929458604a91 100644 (file)
@@ -54,8 +54,9 @@ public class MergeEditConfigStrategy extends AbstractEditConfigStrategy {
         for (Entry<String, String> namespaceToService : providedServices.entries()) {
 
             if(services.hasRefName(namespaceToService.getKey(),
-                    namespaceToService.getValue(), on))
+                    namespaceToService.getValue(), on)){
                 continue;
+            }
 
             String refName = services.getNewDefaultRefName(namespaceToService.getKey(), namespaceToService.getValue(),
                     ObjectNameUtil.getFactoryName(on), ObjectNameUtil.getInstanceName(on));
index b61fcbadc07cd3caaa6582538f734077c79839ba..bc3082ff50f51b4365280e6f37861c7c36cdaaf0 100644 (file)
@@ -55,8 +55,9 @@ public class ReplaceEditConfigStrategy extends AbstractEditConfigStrategy {
         for (Entry<String, String> namespaceToService : providedServices.entries()) {
 
             if(services.hasRefName(namespaceToService.getKey(),
-                    namespaceToService.getValue(), on))
+                    namespaceToService.getValue(), on)){
                 continue;
+            }
 
             String refName = services.getNewDefaultRefName(namespaceToService.getKey(), namespaceToService.getValue(),
                     ObjectNameUtil.getFactoryName(on), ObjectNameUtil.getInstanceName(on));
index dd0e53b1bbb42f8fb2b91fb8b1eb1cc97671aa52..4665c2cc89cf23d9f5efbb876b532b377ef22896 100644 (file)
@@ -69,12 +69,14 @@ public class Get extends AbstractConfigNetconfOperation {
                 RuntimeBeanEntry root = null;
                 for (RuntimeBeanEntry rbe : mbe.getRuntimeBeans()) {
                     cache.put(rbe, new InstanceConfig(configRegistryClient, rbe.getYangPropertiesToTypesMap()));
-                    if (rbe.isRoot())
+                    if (rbe.isRoot()){
                         root = rbe;
+                    }
                 }
 
-                if (root == null)
+                if (root == null){
                     continue;
+                }
 
                 InstanceRuntime rootInstanceRuntime = createInstanceRuntime(root, cache);
                 ModuleRuntime moduleRuntime = new ModuleRuntime(module, rootInstanceRuntime);
@@ -108,8 +110,9 @@ public class Get extends AbstractConfigNetconfOperation {
         xml.checkNamespace(XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_NETCONF_BASE_1_0);
 
         // Filter option - unsupported
-        if (xml.getChildElements(XmlNetconfConstants.FILTER).size() != 0)
+        if (xml.getChildElements(XmlNetconfConstants.FILTER).size() != 0){
             throw new UnsupportedOperationException("Unsupported option " + XmlNetconfConstants.FILTER + " for " + XmlNetconfConstants.GET);
+        }
     }
 
     @Override
@@ -121,21 +124,21 @@ public class Get extends AbstractConfigNetconfOperation {
     protected Element handleWithNoSubsequentOperations(Document document, XmlElement xml) throws NetconfDocumentedException {
         checkXml(xml);
 
-        final Set<ObjectName> runtimeBeans = configRegistryClient.lookupRuntimeBeans();
+        final Set<ObjectName> runtimeBeans = getConfigRegistryClient().lookupRuntimeBeans();
 
         //Transaction provider required only for candidate datastore
         final Set<ObjectName> configBeans = Datastore.getInstanceQueryStrategy(Datastore.running, null)
-                .queryInstances(configRegistryClient);
+                .queryInstances(getConfigRegistryClient());
 
-        final Map<String, Map<String, ModuleRuntime>> moduleRuntimes = createModuleRuntimes(configRegistryClient,
+        final Map<String, Map<String, ModuleRuntime>> moduleRuntimes = createModuleRuntimes(getConfigRegistryClient(),
                 yangStoreSnapshot.getModuleMXBeanEntryMap());
         final Map<String, Map<String, ModuleConfig>> moduleConfigs = EditConfig.transformMbeToModuleConfigs(
-                configRegistryClient, yangStoreSnapshot.getModuleMXBeanEntryMap());
+                getConfigRegistryClient(), yangStoreSnapshot.getModuleMXBeanEntryMap());
 
         final Runtime runtime = new Runtime(moduleRuntimes, moduleConfigs);
 
         ObjectName txOn = transactionProvider.getOrCreateTransaction();
-        ConfigTransactionClient ta = configRegistryClient.getConfigTransactionClient(txOn);
+        ConfigTransactionClient ta = getConfigRegistryClient().getConfigTransactionClient(txOn);
         final Element element = runtime.toXml(runtimeBeans, configBeans, document, new ServiceRegistryWrapper(ta));
 
         logger.trace("{} operation successful", XmlNetconfConstants.GET);
index 11d3e32edf6748fe811a9a25174330afae5b1d28..82e07c1e7b29bd5b8eaffafc6e1a53cdeaa82828 100644 (file)
@@ -66,9 +66,10 @@ public class GetConfig extends AbstractConfigNetconfOperation {
         Datastore sourceDatastore = Datastore.valueOf(sourceParsed);
 
         // Filter option - unsupported
-        if (xml.getChildElements(XmlNetconfConstants.FILTER).size() != 0)
+        if (xml.getChildElements(XmlNetconfConstants.FILTER).size() != 0){
             throw new UnsupportedOperationException("Unsupported option " + XmlNetconfConstants.FILTER + " for "
                     + GET_CONFIG);
+        }
 
         return sourceDatastore;
 
@@ -104,6 +105,6 @@ public class GetConfig extends AbstractConfigNetconfOperation {
     public Element handleWithNoSubsequentOperations(Document document, XmlElement xml) throws NetconfDocumentedException {
         Datastore source;
         source = fromXml(xml);
-        return getResponseInternal(document, configRegistryClient, source);
+        return getResponseInternal(document, getConfigRegistryClient(), source);
     }
 }
index 5a30fc8352600f524f86224c88ff09a6c5365a68..7790e09ceeb245b926f9c1c4c71fe1f2dde16589 100644 (file)
@@ -139,8 +139,9 @@ public class RuntimeRpc extends AbstractConfigNetconfOperation {
         final Optional<XmlElement> contextInstanceElement = operationElement
                 .getOnlyChildElementOptionally(CONTEXT_INSTANCE);
 
-        if (contextInstanceElement.isPresent() == false)
+        if (!contextInstanceElement.isPresent()){
             return HandlingPriority.CANNOT_HANDLE;
+        }
 
         final RuntimeRpcElementResolved id = RuntimeRpcElementResolved.fromXpath(contextInstanceElement.get()
                 .getTextContent(), netconfOperationName, netconfOperationNamespace);
@@ -182,7 +183,7 @@ public class RuntimeRpc extends AbstractConfigNetconfOperation {
 
         logger.debug("Invoking operation {} on {} with arguments {}", execution.operationName, execution.on,
                 execution.attributes);
-        final Object result = executeOperation(configRegistryClient, execution.on, execution.operationName,
+        final Object result = executeOperation(getConfigRegistryClient(), execution.on, execution.operationName,
                 execution.attributes);
 
         logger.trace("Operation {} called successfully on {} with arguments {} with result {}", execution.operationName,
@@ -225,7 +226,7 @@ public class RuntimeRpc extends AbstractConfigNetconfOperation {
 
         for (XmlElement xmlElement : xml.getChildElements()) {
             final String name = xmlElement.getName();
-            if (CONTEXT_INSTANCE.equals(name) == false) { // skip context
+            if (!CONTEXT_INSTANCE.equals(name)) { // skip context
                                                           // instance child node
                                                           // because it
                                                           // specifies
index 0f0b1227a625cd717840f2841dcb4706b270e47c..5cf7f30abcaa5cf356a2faf89635c0cb1ee06f63 100644 (file)
@@ -93,12 +93,12 @@ public final class RuntimeRpcElementResolved {
                 RuntimeRpc.CONTEXT_INSTANCE, xpath, elementName, xpathPatternBlueprint);
 
         PatternGroupResolver groups = new PatternGroupResolver(matcher.group("key1"), matcher.group("value1"),
-                matcher.group("key2"), matcher.group("value2"), matcher.group("additional"));
+                matcher.group("value2"), matcher.group("additional"));
 
         String moduleName = groups.getModuleName();
         String instanceName = groups.getInstanceName();
 
-        HashMap<String, String> additionalAttributes = groups.getAdditionalKeys(elementName, moduleName);
+        Map<String, String> additionalAttributes = groups.getAdditionalKeys(elementName, moduleName);
 
         return new RuntimeRpcElementResolved(namespace, moduleName, instanceName, groups.getRuntimeBeanYangName(),
                 additionalAttributes);
@@ -106,15 +106,14 @@ public final class RuntimeRpcElementResolved {
 
     private static final class PatternGroupResolver {
 
-        private final String key1, key2, value1, value2;
+        private final String key1, value1, value2;
         private final String additional;
         private String runtimeBeanYangName;
 
-        PatternGroupResolver(String key1, String value1, String key2, String value2, String additional) {
+        PatternGroupResolver(String key1, String value1,  String value2, String additional) {
             this.key1 = Preconditions.checkNotNull(key1);
             this.value1 = Preconditions.checkNotNull(value1);
 
-            this.key2 = Preconditions.checkNotNull(key2);
             this.value2 = Preconditions.checkNotNull(value2);
 
             this.additional = Preconditions.checkNotNull(additional);
@@ -128,13 +127,14 @@ public final class RuntimeRpcElementResolved {
             return key1.equals(XmlNetconfConstants.NAME_KEY) ? value1 : value2;
         }
 
-        HashMap<String, String> getAdditionalKeys(String elementName, String moduleName) {
+        Map<String, String> getAdditionalKeys(String elementName, String moduleName) {
             HashMap<String, String> additionalAttributes = Maps.newHashMap();
 
             runtimeBeanYangName = moduleName;
             for (String additionalKeyValue : additional.split("/")) {
-                if (Strings.isNullOrEmpty(additionalKeyValue))
+                if (Strings.isNullOrEmpty(additionalKeyValue)){
                     continue;
+                }
                 Matcher matcher = additionalPattern.matcher(additionalKeyValue);
                 Preconditions
                         .checkState(
index 421870ca3611bb6e35a8e7ddd9ec574d0e62e4ab..3ba92b092ed2f5ccb067a8ee25aae3efd08a4d82 100644 (file)
@@ -73,7 +73,7 @@ public class Activator implements BundleActivator {
     }
 
     @Override
-    public void stop(BundleContext context) throws Exception {
+    public void stop(BundleContext context) {
         if (configRegistryLookup != null) {
             configRegistryLookup.interrupt();
         }
index 09966b8c3bd6c74f29ed93f20cd12e6654ee9a04..7f4f8fccb50740c9a9c990e0f942c11b80a5fa64 100644 (file)
@@ -24,17 +24,11 @@ import org.opendaylight.controller.netconf.mapping.api.NetconfOperation;
 import java.util.Set;
 
 final class NetconfOperationProvider {
-    private final YangStoreSnapshot yangStoreSnapshot;
     private final Set<NetconfOperation> operations;
-    private final ConfigRegistryClient configRegistryClient;
-    private final TransactionProvider transactionProvider;
 
     NetconfOperationProvider(YangStoreSnapshot yangStoreSnapshot, ConfigRegistryClient configRegistryClient,
             TransactionProvider transactionProvider, String netconfSessionIdForReporting) {
 
-        this.yangStoreSnapshot = yangStoreSnapshot;
-        this.configRegistryClient = configRegistryClient;
-        this.transactionProvider = transactionProvider;
         operations = setUpOperations(yangStoreSnapshot, configRegistryClient, transactionProvider,
                 netconfSessionIdForReporting);
     }
index b8b7fcb47f137f5d422c0239f9159cec3c5ad234..12469f66b7be00d2649f231f8e1471073eaa66bd 100644 (file)
@@ -52,7 +52,7 @@ public class NetconfOperationServiceFactoryImpl implements NetconfOperationServi
                     Thread.sleep(ATTEMPT_TIMEOUT_MS);
                 } catch (InterruptedException e1) {
                     Thread.currentThread().interrupt();
-                    throw new RuntimeException("Interrupted while reattempting connection", e1);
+                    throw new IllegalStateException("Interrupted while reattempting connection", e1);
                 }
             }
         }
index c6248df41bc133f7754f9c78f0ec2bb15fa69bcb..1069858b4777008a321b7021beb172ca951675df 100644 (file)
@@ -61,8 +61,9 @@ public class NetconfOperationServiceImpl implements NetconfOperationService {
         for (Map<String, ModuleMXBeanEntry> moduleNameToMBE : moduleMXBeanEntryMap.values()) {
             for (ModuleMXBeanEntry moduleMXBeanEntry : moduleNameToMBE.values()) {
                 String moduleSeenByYangStore = moduleMXBeanEntry.getYangModuleQName().toString();
-                if(modulesSeenByConfig.contains(moduleSeenByYangStore) == false)
+                if(!modulesSeenByConfig.contains(moduleSeenByYangStore)){
                     missingModulesFromConfig.add(moduleSeenByYangStore);
+                }
             }
         }
 
@@ -149,7 +150,7 @@ public class NetconfOperationServiceImpl implements NetconfOperationService {
         }
     }
 
-    private static class YangStoreCapability extends BasicCapability {
+    private static final class YangStoreCapability extends BasicCapability {
 
         private final String content;
         private final String revision;
index 756a38ed940be7e910dc82a90523bbf3cbf48b50..250af688eac0db0a796b2e4dd668f84684949b99 100644 (file)
@@ -34,6 +34,7 @@ public class TransactionProvider implements AutoCloseable {
     private final String netconfSessionIdForReporting;
     private ObjectName transaction;
     private final List<ObjectName> allOpenedTransactions = new ArrayList<>();
+    private static final String  NO_TRANSACTION_FOUND_FOR_SESSION = "No transaction found for session ";
 
     public TransactionProvider(ConfigRegistryClient configRegistryClient, String netconfSessionIdForReporting) {
         this.configRegistryClient = configRegistryClient;
@@ -56,11 +57,12 @@ public class TransactionProvider implements AutoCloseable {
 
     public Optional<ObjectName> getTransaction() {
 
-        if (transaction == null)
+        if (transaction == null){
             return Optional.absent();
+        }
 
         // Transaction was already closed somehow
-        if (isStillOpenTransaction(transaction) == false) {
+        if (!isStillOpenTransaction(transaction)) {
             logger.warn("Fixing illegal state: transaction {} was closed in {}", transaction,
                     netconfSessionIdForReporting);
             transaction = null;
@@ -70,8 +72,7 @@ public class TransactionProvider implements AutoCloseable {
     }
 
     private boolean isStillOpenTransaction(ObjectName transaction) {
-        boolean isStillOpenTransaction = configRegistryClient.getOpenConfigs().contains(transaction);
-        return isStillOpenTransaction;
+        return configRegistryClient.getOpenConfigs().contains(transaction);
     }
 
     public synchronized ObjectName getOrCreateTransaction() {
@@ -126,7 +127,7 @@ public class TransactionProvider implements AutoCloseable {
     public synchronized void abortTransaction() {
         logger.debug("Aborting current transaction");
         Optional<ObjectName> taON = getTransaction();
-        Preconditions.checkState(taON.isPresent(), "No transaction found for session " + netconfSessionIdForReporting);
+        Preconditions.checkState(taON.isPresent(), NO_TRANSACTION_FOUND_FOR_SESSION + netconfSessionIdForReporting);
 
         ConfigTransactionClient transactionClient = configRegistryClient.getConfigTransactionClient(taON.get());
         transactionClient.abortConfig();
@@ -143,7 +144,7 @@ public class TransactionProvider implements AutoCloseable {
 
     public void validateTransaction() throws ValidationException {
         Optional<ObjectName> taON = getTransaction();
-        Preconditions.checkState(taON.isPresent(), "No transaction found for session " + netconfSessionIdForReporting);
+        Preconditions.checkState(taON.isPresent(), NO_TRANSACTION_FOUND_FOR_SESSION + netconfSessionIdForReporting);
 
         ConfigTransactionClient transactionClient = configRegistryClient.getConfigTransactionClient(taON.get());
         transactionClient.validateConfig();
@@ -171,10 +172,11 @@ public class TransactionProvider implements AutoCloseable {
             try {
                 transactionClient.destroyModule(instance);
             } catch (InstanceNotFoundException e) {
-                if (isTest)
+                if (isTest){
                     logger.debug("Unable to clean configuration in transactiom {}", taON, e);
-                else
+                } else {
                     logger.warn("Unable to clean configuration in transactiom {}", taON, e);
+                }
 
                 throw new IllegalStateException("Unable to clean configuration in transactiom " + taON, e);
             }
@@ -187,7 +189,7 @@ public class TransactionProvider implements AutoCloseable {
 
     public void wipeTransaction() {
         Optional<ObjectName> taON = getTransaction();
-        Preconditions.checkState(taON.isPresent(), "No transaction found for session " + netconfSessionIdForReporting);
+        Preconditions.checkState(taON.isPresent(), NO_TRANSACTION_FOUND_FOR_SESSION + netconfSessionIdForReporting);
         wipeInternal(taON.get(), false, null);
     }
 
index f151949abc3c859018e02daca7620d25b2d1b34e..2e8d1f64ab62cded6bde037c0d082e4604c8785a 100644 (file)
@@ -145,7 +145,7 @@ public class NetconfMappingTest extends AbstractConfigTest {
         this.factory = new NetconfTestImplModuleFactory();
         this.factory2 = new DepTestImplModuleFactory();
         this.factory3 = new IdentityTestModuleFactory();
-        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(this.factory, this.factory2,
+        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(mockedContext, this.factory, this.factory2,
                 this.factory3));
 
         transactionProvider = new TransactionProvider(this.configRegistryClient, NETCONF_SESSION_ID);
index 1616857949d91c0678e7740ae2b277bfc12b25a0..40a15be70616217d81529b003f899236865d8ac8 100644 (file)
@@ -50,7 +50,7 @@ public class ConfigPersisterNotificationHandler implements Closeable {
         try {
             mBeanServerConnection.addNotificationListener(DefaultCommitOperationMXBean.OBJECT_NAME, listener, null, null);
         } catch (InstanceNotFoundException | IOException e) {
-            throw new RuntimeException("Cannot register as JMX listener to netconf", e);
+            throw new IllegalStateException("Cannot register as JMX listener to netconf", e);
         }
     }
 
@@ -79,9 +79,8 @@ class ConfigPersisterNotificationListener implements NotificationListener {
 
     @Override
     public void handleNotification(Notification notification, Object handback) {
-        if (notification instanceof NetconfJMXNotification == false) {
+        if (!(notification instanceof NetconfJMXNotification))
             return;
-        }
 
         // Socket should not be closed at this point
         // Activator unregisters this as JMX listener before close is called
index 44e90270e7e31e5d691756ef421122d4418f0287..957db50c61a8b7ca076fc26fcc2c9886251f73bb 100644 (file)
@@ -8,10 +8,19 @@
 
 package org.opendaylight.controller.netconf.persist.impl;
 
-import com.google.common.base.Function;
-import com.google.common.base.Preconditions;
-import com.google.common.base.Stopwatch;
-import com.google.common.collect.Collections2;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.TreeMap;
+import java.util.concurrent.TimeUnit;
+
+import javax.annotation.concurrent.Immutable;
+
 import org.opendaylight.controller.config.api.ConflictingVersionException;
 import org.opendaylight.controller.config.persist.api.ConfigSnapshotHolder;
 import org.opendaylight.controller.netconf.api.NetconfDocumentedException;
@@ -32,17 +41,10 @@ import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.xml.sax.SAXException;
 
-import javax.annotation.concurrent.Immutable;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map.Entry;
-import java.util.Set;
-import java.util.TreeMap;
-import java.util.concurrent.TimeUnit;
+import com.google.common.base.Function;
+import com.google.common.base.Preconditions;
+import com.google.common.base.Stopwatch;
+import com.google.common.collect.Collections2;
 
 @Immutable
 public class ConfigPusher {
@@ -110,6 +112,8 @@ public class ConfigPusher {
     }
 
     private static class NotEnoughCapabilitiesException extends Exception {
+        private static final long serialVersionUID = 1L;
+
         private NotEnoughCapabilitiesException(String message, Throwable cause) {
             super(message, cause);
         }
index 31a4f080368515c075872173e9ba066c830f5e0e..a0e7974b942951c521305ae4726baa4a5a74d74a 100644 (file)
@@ -9,20 +9,19 @@
 package org.opendaylight.controller.netconf.persist.impl;
 
 import com.google.common.annotations.VisibleForTesting;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.ListIterator;
 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.config.persist.api.StorageAdapter;
 import org.opendaylight.controller.netconf.persist.impl.osgi.ConfigPersisterActivator;
-import org.opendaylight.controller.netconf.persist.impl.osgi.PropertiesProviderBaseImpl;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.ListIterator;
-
 /**
  * {@link Persister} implementation that delegates persisting functionality to
  * underlying {@link Persister} storages. Each storage has unique id, class, readonly value.
@@ -88,7 +87,7 @@ public final class PersisterAggregator implements Persister {
         }
     }
 
-    private static PersisterWithConfiguration loadConfiguration(final String index, final PropertiesProviderBaseImpl propertiesProvider) {
+    private static PersisterWithConfiguration loadConfiguration(final String index, final PropertiesProvider propertiesProvider) {
 
         String classKey = index + "." + ConfigPersisterActivator.STORAGE_ADAPTER_CLASS_PROP_SUFFIX;
         String storageAdapterClass = propertiesProvider.getProperty(classKey);
@@ -102,7 +101,7 @@ public final class PersisterAggregator implements Persister {
         try {
             Class<?> clazz = Class.forName(storageAdapterClass);
             boolean implementsCorrectIfc = StorageAdapter.class.isAssignableFrom(clazz);
-            if (implementsCorrectIfc == false) {
+            if (!implementsCorrectIfc) {
                 throw new IllegalArgumentException("Storage adapter " + clazz + " does not implement " + StorageAdapter.class);
             }
             storageAdapter = StorageAdapter.class.cast(clazz.newInstance());
@@ -131,10 +130,10 @@ public final class PersisterAggregator implements Persister {
 
     }
 
-    public static PersisterAggregator createFromProperties(PropertiesProviderBaseImpl propertiesProvider) {
+    public static PersisterAggregator createFromProperties(PropertiesProvider propertiesProvider) {
         List<PersisterWithConfiguration> persisterWithConfigurations = new ArrayList<>();
         String prefixes = propertiesProvider.getProperty("active");
-        if (prefixes!=null && prefixes.isEmpty() == false) {
+        if (prefixes!=null && !prefixes.isEmpty()) {
             String [] keys = prefixes.split(",");
             for (String index: keys) {
                 persisterWithConfigurations.add(PersisterAggregator.loadConfiguration(index, propertiesProvider));
@@ -169,7 +168,7 @@ public final class PersisterAggregator implements Persister {
             } catch (IOException e) {
                 throw new RuntimeException("Error while calling loadLastConfig on " +  persisterWithConfiguration, e);
             }
-            if (configs.isEmpty() == false) {
+            if (!configs.isEmpty()) {
                 logger.debug("Found non empty configs using {}:{}", persisterWithConfiguration, configs);
                 return configs;
             }
index d9466ff00b6d6a0d1e9c034d43ad310600407dd3..238661f638afd870d55c7d441fb8bcffe1c1b392 100644 (file)
@@ -8,13 +8,12 @@
 package org.opendaylight.controller.netconf.persist.impl;
 
 import org.opendaylight.controller.config.persist.api.PropertiesProvider;
-import org.opendaylight.controller.netconf.persist.impl.osgi.PropertiesProviderBaseImpl;
 
 public class PropertiesProviderAdapterImpl implements PropertiesProvider {
-    private final PropertiesProviderBaseImpl inner;
+    private final PropertiesProvider inner;
     private final String index;
 
-    public PropertiesProviderAdapterImpl(PropertiesProviderBaseImpl inner, String index) {
+    public PropertiesProviderAdapterImpl(PropertiesProvider inner, String index) {
         this.inner = inner;
         this.index = index;
     }
@@ -29,6 +28,12 @@ public class PropertiesProviderAdapterImpl implements PropertiesProvider {
         return inner.getPrefix() + "." + index + ".properties";
     }
 
+    @Override
+    public String getPropertyWithoutPrefix(String fullKey) {
+        return inner.getPropertyWithoutPrefix(fullKey);
+    }
+
+
     @Override
     public String getFullKeyForReporting(String key) {
         return getPrefix()  + "." + key;
index 1a261da32342525c1eeaf52aca44e33803692a7c..87bbb50860322bcfcfc24be4b912700269757179 100644 (file)
@@ -62,7 +62,7 @@ public class ConfigPersisterActivator implements BundleActivator {
         long maxWaitForCapabilitiesMillis = getMaxWaitForCapabilitiesMillis(propertiesProvider);
         List<ConfigSnapshotHolder> configs = persisterAggregator.loadLastConfigs();
         long conflictingVersionTimeoutMillis = getConflictingVersionTimeoutMillis(propertiesProvider);
-        logger.trace("Following configs will be pushed: {}", configs);
+        logger.debug("Following configs will be pushed: {}", configs);
 
         InnerCustomizer innerCustomizer = new InnerCustomizer(configs, maxWaitForCapabilitiesMillis,
                 conflictingVersionTimeoutMillis, persisterAggregator);
index b1bf23292875611d40c6875fd1a05bb8d81b328e..e02e27a745a032e1f36414c63e9e93dfd55e41c1 100644 (file)
@@ -81,7 +81,7 @@ public class ConfigPersisterTest {
 
     // this means pushing of config was successful
     public void assertCannotRegisterAsJMXListener_pushWasSuccessful() {
-        handler.assertException(RuntimeException.class, "Cannot register as JMX listener to netconf");
+        handler.assertException(IllegalStateException.class, "Cannot register as JMX listener to netconf");
     }
 
     public NetconfOperationService getWorkingService(Document document) throws SAXException, IOException, NetconfDocumentedException {
index 0a084b0ff6fd3989bf4e0e98b72e444ab5da5ce4..8e62a147d25276535b656a4ed606701163de6111 100644 (file)
@@ -13,7 +13,7 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.mon
 
 /**
 **/
-public class LocationBuilder {
+public final class LocationBuilder {
 
     public static Location getDefaultInstance(String defaultValue) {
         return defaultValue.equals("NETCONF") ? new Location(Location.Enumeration.NETCONF) : new Location(new Uri(
index fd44315499acdcb127b519ebca77c161035958a3..ce77fdc08ed801219fb58f72b6d356c32ae77449 100644 (file)
@@ -41,7 +41,7 @@
         <artifactId>maven-bundle-plugin</artifactId>
         <configuration>
           <instructions>
-            <Export-Package>org.opendaylight.controller.netconf.client,</Export-Package>
+            <Export-Package>org.opendaylight.controller.netconf.client.*,</Export-Package>
             <Import-Package>com.google.common.base,
                             com.google.common.collect,
                             io.netty.channel,
index 20da6aa86934a71eb91a4461988d8d1097babba8..37e29876f304b620e33d40490e3a9890855633c4 100644 (file)
 /*
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ * 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.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 org.opendaylight.controller.netconf.util.AbstractChannelInitializer;
-import org.opendaylight.controller.netconf.util.messages.NetconfHelloMessageAdditionalHeader;
-import org.opendaylight.protocol.framework.AbstractDispatcher;
-import org.opendaylight.protocol.framework.ReconnectStrategy;
-import org.opendaylight.protocol.framework.ReconnectStrategyFactory;
-import org.opendaylight.protocol.framework.SessionListenerFactory;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.Closeable;
-import java.net.InetSocketAddress;
-
-public class NetconfClientDispatcher extends AbstractDispatcher<NetconfClientSession, NetconfClientSessionListener> implements Closeable {
-
-    private static final Logger logger = LoggerFactory.getLogger(NetconfClientDispatcher.class);
-
-    private final NetconfClientSessionNegotiatorFactory negotiatorFactory;
-    private final HashedWheelTimer timer;
-
-    public NetconfClientDispatcher(EventLoopGroup bossGroup, EventLoopGroup workerGroup,
-            long clientConnectionTimeoutMillis) {
-        super(bossGroup, workerGroup);
-        timer = new HashedWheelTimer();
-        this.negotiatorFactory = new NetconfClientSessionNegotiatorFactory(timer,
-                Optional.<NetconfHelloMessageAdditionalHeader> absent(), clientConnectionTimeoutMillis);
-    }
-
-    public NetconfClientDispatcher(EventLoopGroup bossGroup, EventLoopGroup workerGroup,
-            NetconfHelloMessageAdditionalHeader additionalHeader, long connectionTimeoutMillis) {
-        super(bossGroup, workerGroup);
-        timer = new HashedWheelTimer();
-        this.negotiatorFactory = new NetconfClientSessionNegotiatorFactory(timer, Optional.of(additionalHeader),
-                connectionTimeoutMillis);
-    }
-
-    public Future<NetconfClientSession> createClient(InetSocketAddress address,
-            final NetconfClientSessionListener sessionListener, ReconnectStrategy strat) {
-
-        return super.createClient(address, strat, new PipelineInitializer<NetconfClientSession>() {
-
-            @Override
-            public void initializeChannel(final SocketChannel ch, final Promise<NetconfClientSession> promise) {
-                initialize(ch, promise);
-            }
-
-            private void initialize(SocketChannel ch, Promise<NetconfClientSession> promise) {
-                new ClientChannelInitializer(negotiatorFactory, sessionListener).initialize(ch, promise);
-            }
-        });
-    }
-
-    public Future<Void> createReconnectingClient(final InetSocketAddress address,
-            final NetconfClientSessionListener listener,
-            final ReconnectStrategyFactory connectStrategyFactory, final ReconnectStrategy reestablishStrategy) {
-        final ClientChannelInitializer init = new ClientChannelInitializer(negotiatorFactory, listener);
-
-        return super.createReconnectingClient(address, connectStrategyFactory, reestablishStrategy,
-                new PipelineInitializer<NetconfClientSession>() {
-            @Override
-            public void initializeChannel(final SocketChannel ch, final Promise<NetconfClientSession> promise) {
-                init.initialize(ch, promise);
-            }
-        });
-    }
-
-    private static class ClientChannelInitializer extends AbstractChannelInitializer<NetconfClientSession> {
-
-        private final NetconfClientSessionNegotiatorFactory negotiatorFactory;
-        private final NetconfClientSessionListener sessionListener;
-
-        private ClientChannelInitializer(NetconfClientSessionNegotiatorFactory negotiatorFactory,
-                NetconfClientSessionListener sessionListener) {
-            this.negotiatorFactory = negotiatorFactory;
-            this.sessionListener = sessionListener;
-        }
+import org.opendaylight.controller.netconf.client.conf.NetconfClientConfiguration;
+import org.opendaylight.controller.netconf.client.conf.NetconfReconnectingClientConfiguration;
 
-        @Override
-        public void initialize(SocketChannel ch, Promise<NetconfClientSession> promise) {
-                super.initialize(ch,promise);
-        }
+public interface NetconfClientDispatcher {
 
-        @Override
-        protected void initializeSessionNegotiator(SocketChannel ch, Promise<NetconfClientSession> promise) {
-            ch.pipeline().addAfter(NETCONF_MESSAGE_DECODER,  AbstractChannelInitializer.NETCONF_SESSION_NEGOTIATOR,
-                    negotiatorFactory.getSessionNegotiator(
-                            new SessionListenerFactory<NetconfClientSessionListener>() {
-                                @Override
-                                public NetconfClientSessionListener getSessionListener() {
-                                    return sessionListener;
-                                }
-                            }, ch, promise));
-        }
-    }
+    /**
+     *
+     * Create netconf client. Network communication has to be set up based on network protocol specified in clientConfiguration
+     *
+     * @param clientConfiguration
+     * @return netconf client based on provided configuration
+     */
+    Future<NetconfClientSession> createClient(NetconfClientConfiguration clientConfiguration);
 
-    @Override
-    public void close() {
-        try {
-            timer.stop();
-        } catch (Exception e) {
-            logger.debug("Ignoring exception while closing {}", timer, e);
-        }
-    }
+    Future<Void> createReconnectingClient(NetconfReconnectingClientConfiguration clientConfiguration);
 }
diff --git a/opendaylight/netconf/netconf-client/src/main/java/org/opendaylight/controller/netconf/client/NetconfClientDispatcherImpl.java b/opendaylight/netconf/netconf-client/src/main/java/org/opendaylight/controller/netconf/client/NetconfClientDispatcherImpl.java
new file mode 100644 (file)
index 0000000..bdebfa2
--- /dev/null
@@ -0,0 +1,122 @@
+/*
+ * 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 java.io.Closeable;
+
+import org.opendaylight.controller.netconf.client.conf.NetconfClientConfiguration;
+import org.opendaylight.controller.netconf.client.conf.NetconfReconnectingClientConfiguration;
+import org.opendaylight.protocol.framework.AbstractDispatcher;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import io.netty.channel.EventLoopGroup;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.util.Timer;
+import io.netty.util.concurrent.Future;
+import io.netty.util.concurrent.Promise;
+
+public class NetconfClientDispatcherImpl extends AbstractDispatcher<NetconfClientSession, NetconfClientSessionListener>
+        implements NetconfClientDispatcher, Closeable {
+
+    private static final Logger logger = LoggerFactory.getLogger(NetconfClientDispatcherImpl.class);
+
+    private final Timer timer;
+
+    public NetconfClientDispatcherImpl(final EventLoopGroup bossGroup, final EventLoopGroup workerGroup, final Timer timer) {
+        super(bossGroup, workerGroup);
+        this.timer = timer;
+    }
+
+    @Override
+    public Future<NetconfClientSession> createClient(final NetconfClientConfiguration clientConfiguration) {
+        switch (clientConfiguration.getProtocol()) {
+        case TCP:
+            return createTcpClient(clientConfiguration);
+        case SSH:
+            return createSshClient(clientConfiguration);
+        }
+        throw new IllegalArgumentException("Unknown client protocol " + clientConfiguration.getProtocol());
+    }
+
+    @Override
+    public Future<Void> createReconnectingClient(final NetconfReconnectingClientConfiguration clientConfiguration) {
+        switch (clientConfiguration.getProtocol()) {
+            case TCP: return createReconnectingTcpClient(clientConfiguration);
+            case SSH: return createReconnectingSshClient(clientConfiguration);
+            default: throw new IllegalArgumentException("Unknown client protocol " + clientConfiguration.getProtocol());
+        }
+    }
+
+    private Future<NetconfClientSession> createTcpClient(final NetconfClientConfiguration currentConfiguration) {
+        logger.debug("Creating TCP client with configuration: {}", currentConfiguration);
+        return super.createClient(currentConfiguration.getAddress(), currentConfiguration.getReconnectStrategy(),
+                new PipelineInitializer<NetconfClientSession>() {
+
+                    @Override
+                    public void initializeChannel(final SocketChannel ch, final Promise<NetconfClientSession> promise) {
+                        initialize(ch, promise);
+                    }
+
+                    private void initialize(final SocketChannel ch, final Promise<NetconfClientSession> promise) {
+                        new TcpClientChannelInitializer(getNegotiatorFactory(currentConfiguration), currentConfiguration
+                                .getSessionListener()).initialize(ch, promise);
+                    }
+                });
+    }
+
+    private Future<Void> createReconnectingTcpClient(final NetconfReconnectingClientConfiguration currentConfiguration) {
+        logger.debug("Creating reconnecting TCP client with configuration: {}", currentConfiguration);
+        final TcpClientChannelInitializer init = new TcpClientChannelInitializer(getNegotiatorFactory(currentConfiguration),
+                currentConfiguration.getSessionListener());
+
+        return super.createReconnectingClient(currentConfiguration.getAddress(), currentConfiguration.getConnectStrategyFactory(),
+                currentConfiguration.getReconnectStrategy(), new PipelineInitializer<NetconfClientSession>() {
+                    @Override
+                    public void initializeChannel(final SocketChannel ch, final Promise<NetconfClientSession> promise) {
+                        init.initialize(ch, promise);
+                    }
+                });
+    }
+
+    private Future<NetconfClientSession> createSshClient(final NetconfClientConfiguration currentConfiguration) {
+        logger.debug("Creating SSH client with configuration: {}", currentConfiguration);
+        return super.createClient(currentConfiguration.getAddress(), currentConfiguration.getReconnectStrategy(),
+                new PipelineInitializer<NetconfClientSession>() {
+
+                    @Override
+                    public void initializeChannel(final SocketChannel ch,
+                                                  final Promise<NetconfClientSession> sessionPromise) {
+                        new SshClientChannelInitializer(currentConfiguration.getAuthHandler(),
+                                getNegotiatorFactory(currentConfiguration), currentConfiguration.getSessionListener())
+                                .initialize(ch, sessionPromise);
+                    }
+
+                });
+    }
+
+    private Future<Void> createReconnectingSshClient(final NetconfReconnectingClientConfiguration currentConfiguration) {
+        logger.debug("Creating reconnecting SSH client with configuration: {}", currentConfiguration);
+        final SshClientChannelInitializer init = new SshClientChannelInitializer(currentConfiguration.getAuthHandler(),
+                getNegotiatorFactory(currentConfiguration), currentConfiguration.getSessionListener());
+
+        return super.createReconnectingClient(currentConfiguration.getAddress(), currentConfiguration.getConnectStrategyFactory(), currentConfiguration.getReconnectStrategy(),
+                new PipelineInitializer<NetconfClientSession>() {
+                    @Override
+                    public void initializeChannel(final SocketChannel ch, final Promise<NetconfClientSession> promise) {
+                        init.initialize(ch, promise);
+                    }
+                });
+    }
+
+    protected NetconfClientSessionNegotiatorFactory getNegotiatorFactory(final NetconfClientConfiguration cfg) {
+        return new NetconfClientSessionNegotiatorFactory(timer, cfg.getAdditionalHeader(),
+                cfg.getConnectionTimeoutMillis());
+    }
+}
index ad50fedf6b564fbef12cfd6f8e3308b717d9515a..f4efb1fc7dc9bf56cd3176c769f72c312ee351d2 100644 (file)
@@ -8,7 +8,8 @@
 
 package org.opendaylight.controller.netconf.client;
 
-import io.netty.channel.Channel;
+import java.util.Collection;
+
 import org.opendaylight.controller.netconf.util.AbstractNetconfSession;
 import org.opendaylight.controller.netconf.util.handler.NetconfEXICodec;
 import org.opendaylight.controller.netconf.util.handler.NetconfEXIToMessageDecoder;
@@ -18,7 +19,7 @@ import org.opendaylight.controller.netconf.util.handler.NetconfXMLToMessageDecod
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.Collection;
+import io.netty.channel.Channel;
 
 public final class NetconfClientSession extends AbstractNetconfSession<NetconfClientSession, NetconfClientSessionListener> {
 
@@ -36,7 +37,6 @@ public final class NetconfClientSession extends AbstractNetconfSession<NetconfCl
         return capabilities;
     }
 
-
     @Override
     protected NetconfClientSession thisInstance() {
         return this;
index f8f73fc8e5296b9534e0759bc43f24bbf493521e..4e2393171afd2090a103dbdb110ed4aea71f9dca 100644 (file)
@@ -8,13 +8,14 @@
 
 package org.opendaylight.controller.netconf.client;
 
-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;
+import java.util.Collection;
+import javax.xml.xpath.XPathConstants;
+import javax.xml.xpath.XPathExpression;
+
 import org.opendaylight.controller.netconf.api.NetconfClientSessionPreferences;
 import org.opendaylight.controller.netconf.api.NetconfDocumentedException;
 import org.opendaylight.controller.netconf.api.NetconfMessage;
@@ -22,6 +23,7 @@ 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.messages.NetconfStartExiMessage;
 import org.opendaylight.controller.netconf.util.xml.XMLNetconfUtil;
 import org.opendaylight.controller.netconf.util.xml.XmlNetconfConstants;
 import org.opendaylight.controller.netconf.util.xml.XmlUtil;
@@ -31,8 +33,9 @@ import org.w3c.dom.Document;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 
-import javax.xml.xpath.XPathConstants;
-import javax.xml.xpath.XPathExpression;
+import io.netty.channel.Channel;
+import io.netty.util.Timer;
+import io.netty.util.concurrent.Promise;
 
 public class NetconfClientSessionNegotiator extends
         AbstractNetconfSessionNegotiator<NetconfClientSessionPreferences, NetconfClientSession, NetconfClientSessionListener>
@@ -55,19 +58,47 @@ public class NetconfClientSessionNegotiator extends
 
     @Override
     protected void handleMessage(NetconfHelloMessage netconfMessage) throws NetconfDocumentedException {
-        NetconfClientSession session = super.getSessionForHelloMessage(netconfMessage);
-
-        if (shouldUseExi(netconfMessage.getDocument())){
-            logger.debug("Netconf session: {} should use exi.", session);
-            tryToStartExi(session);
+        final NetconfClientSession session = getSessionForHelloMessage(netconfMessage);
+        replaceHelloMessageInboundHandler(session);
+
+        // If exi should be used, try to initiate exi communication
+        // Call negotiationSuccessFul after exi negotiation is finished successfully or not
+        if (shouldUseExi(netconfMessage)) {
+            logger.debug("Netconf session {} should use exi.", session);
+            NetconfStartExiMessage startExiMessage = (NetconfStartExiMessage) sessionPreferences.getStartExiMessage();
+            tryToInitiateExi(session, startExiMessage);
+        // Exi is not supported, release session immediately
         } else {
-            logger.debug("Netconf session {} isn't capable using exi.", session);
+            logger.debug("Netconf session {} isn't capable of using exi.", session);
             negotiationSuccessful(session);
         }
     }
 
-    private boolean shouldUseExi(Document doc) {
-        return containsExi10Capability(doc)
+    /**
+     * Initiates exi communication by sending start-exi message and waiting for positive/negative response.
+     *
+     * @param startExiMessage
+     */
+    void tryToInitiateExi(final NetconfClientSession session, final NetconfStartExiMessage startExiMessage) {
+        channel.pipeline().addAfter(AbstractChannelInitializer.NETCONF_MESSAGE_DECODER,
+                ExiConfirmationInboundHandler.EXI_CONFIRMED_HANDLER,
+                new ExiConfirmationInboundHandler(session, startExiMessage));
+
+        session.sendMessage(startExiMessage).addListener(new ChannelFutureListener() {
+            @Override
+            public void operationComplete(final ChannelFuture f) {
+                if (!f.isSuccess()) {
+                    logger.warn("Failed to send start-exi message {} on session {}", startExiMessage, this, f.cause());
+                    channel.pipeline().remove(ExiConfirmationInboundHandler.EXI_CONFIRMED_HANDLER);
+                } else {
+                    logger.trace("Start-exi message {} sent to socket on session {}", startExiMessage, this);
+                }
+            }
+        });
+    }
+
+    private boolean shouldUseExi(NetconfHelloMessage helloMsg) {
+        return containsExi10Capability(helloMsg.getDocument())
                 && containsExi10Capability(sessionPreferences.getHelloMessage().getDocument());
     }
 
@@ -81,23 +112,6 @@ public class NetconfClientSessionNegotiator extends
         return false;
     }
 
-    private void tryToStartExi(final NetconfClientSession session) {
-        final NetconfMessage startExi = sessionPreferences.getStartExiMessage();
-        session.sendMessage(startExi).addListener(new ChannelFutureListener() {
-            @Override
-            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 long extractSessionId(Document doc) {
         final Node sessionIdNode = (Node) XmlUtil.evaluateXPath(sessionIdXPath, doc, XPathConstants.NODE);
         String textContent = sessionIdNode.getTextContent();
@@ -109,9 +123,11 @@ public class NetconfClientSessionNegotiator extends
     }
 
     @Override
-    protected NetconfClientSession getSession(NetconfClientSessionListener sessionListener, Channel channel, NetconfHelloMessage message) throws NetconfDocumentedException {
-        return new NetconfClientSession(sessionListener, channel, extractSessionId(message.getDocument()),
-                NetconfMessageUtil.extractCapabilitiesFromHello(message.getDocument()));
+    protected NetconfClientSession getSession(NetconfClientSessionListener sessionListener, Channel channel,
+            NetconfHelloMessage message) throws NetconfDocumentedException {
+        long sessionId = extractSessionId(message.getDocument());
+        Collection<String> capabilities = NetconfMessageUtil.extractCapabilitiesFromHello(message.getDocument());
+        return new NetconfClientSession(sessionListener, channel, sessionId, capabilities);
     }
 
     /**
@@ -121,9 +137,11 @@ public class NetconfClientSessionNegotiator extends
         private static final String EXI_CONFIRMED_HANDLER = "exiConfirmedHandler";
 
         private final NetconfClientSession session;
+        private NetconfStartExiMessage startExiMessage;
 
-        ExiConfirmationInboundHandler(NetconfClientSession session) {
+        ExiConfirmationInboundHandler(NetconfClientSession session, final NetconfStartExiMessage startExiMessage) {
             this.session = session;
+            this.startExiMessage = startExiMessage;
         }
 
         @Override
@@ -136,19 +154,19 @@ public class NetconfClientSessionNegotiator extends
             if (NetconfMessageUtil.isOKMessage(netconfMessage)) {
                 logger.trace("Positive response on start-exi call received on session {}", session);
                 try {
-                    session.startExiCommunication(sessionPreferences.getStartExiMessage());
+                    session.startExiCommunication(startExiMessage);
                 } 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
+                // 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
+                // Unexpected response to start-exi, throwing message away, continue without exi
             } else {
                 logger.warn(
                         "Unexpected response to start-exi message, should be ok, was {}, " +
@@ -159,4 +177,5 @@ public class NetconfClientSessionNegotiator extends
             negotiationSuccessful(session);
         }
     }
+
 }
index 9e15b49a843c677cdc12ae6bee2a927a2f891df7..e65adc3fdf5b736522592a55e5c81d8fa8f37451 100644 (file)
@@ -33,8 +33,8 @@ import org.slf4j.LoggerFactory;
 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_BASE_1_0,
+            XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_BASE_1_1,
             XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_CAPABILITY_EXI_1_0);
 
     private static final String START_EXI_MESSAGE_ID = "default-start-exi";
@@ -74,7 +74,7 @@ public class NetconfClientSessionNegotiatorFactory implements SessionNegotiatorF
             throw new IllegalStateException(e);
         }
 
-        NetconfClientSessionPreferences proposal = new NetconfClientSessionPreferences(helloMessage,startExiMessage);
+        NetconfClientSessionPreferences proposal = new NetconfClientSessionPreferences(helloMessage, startExiMessage);
         return new NetconfClientSessionNegotiator(proposal, promise, channel, timer,
                 sessionListenerFactory.getSessionListener(),connectionTimeoutMillis);
     }
diff --git a/opendaylight/netconf/netconf-client/src/main/java/org/opendaylight/controller/netconf/client/NetconfSshClientDispatcher.java b/opendaylight/netconf/netconf-client/src/main/java/org/opendaylight/controller/netconf/client/NetconfSshClientDispatcher.java
deleted file mode 100644 (file)
index 5b82ff2..0000000
+++ /dev/null
@@ -1,120 +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.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.IOException;
-import java.net.InetSocketAddress;
-
-import org.opendaylight.controller.netconf.util.AbstractChannelInitializer;
-import org.opendaylight.controller.netconf.util.handler.ssh.SshHandler;
-import org.opendaylight.controller.netconf.util.handler.ssh.authentication.AuthenticationHandler;
-import org.opendaylight.controller.netconf.util.handler.ssh.client.Invoker;
-import org.opendaylight.controller.netconf.util.messages.NetconfHelloMessageAdditionalHeader;
-import org.opendaylight.protocol.framework.ReconnectStrategy;
-import org.opendaylight.protocol.framework.ReconnectStrategyFactory;
-import org.opendaylight.protocol.framework.SessionListenerFactory;
-
-import com.google.common.base.Optional;
-
-public class NetconfSshClientDispatcher extends NetconfClientDispatcher {
-
-    private final AuthenticationHandler authHandler;
-    private final HashedWheelTimer timer;
-    private final NetconfClientSessionNegotiatorFactory negotiatorFactory;
-
-    public NetconfSshClientDispatcher(AuthenticationHandler authHandler, EventLoopGroup bossGroup,
-            EventLoopGroup workerGroup, long connectionTimeoutMillis) {
-        super(bossGroup, workerGroup, connectionTimeoutMillis);
-        this.authHandler = authHandler;
-        this.timer = new HashedWheelTimer();
-        this.negotiatorFactory = new NetconfClientSessionNegotiatorFactory(timer,
-                Optional.<NetconfHelloMessageAdditionalHeader> absent(), connectionTimeoutMillis);
-    }
-
-    public NetconfSshClientDispatcher(AuthenticationHandler authHandler, EventLoopGroup bossGroup,
-            EventLoopGroup workerGroup, NetconfHelloMessageAdditionalHeader additionalHeader, long socketTimeoutMillis) {
-        super(bossGroup, workerGroup, additionalHeader, socketTimeoutMillis);
-        this.authHandler = authHandler;
-        this.timer = new HashedWheelTimer();
-        this.negotiatorFactory = new NetconfClientSessionNegotiatorFactory(timer, Optional.of(additionalHeader),
-                socketTimeoutMillis);
-    }
-
-    @Override
-    public Future<NetconfClientSession> createClient(InetSocketAddress address,
-            final NetconfClientSessionListener sessionListener, ReconnectStrategy strat) {
-        return super.createClient(address, strat, new PipelineInitializer<NetconfClientSession>() {
-
-            @Override
-            public void initializeChannel(SocketChannel arg0, Promise<NetconfClientSession> arg1) {
-                new NetconfSshClientInitializer(authHandler, negotiatorFactory, sessionListener).initialize(arg0, arg1);
-            }
-
-        });
-    }
-
-    @Override
-    public Future<Void> createReconnectingClient(final InetSocketAddress address,
-            final NetconfClientSessionListener listener,
-            final ReconnectStrategyFactory connectStrategyFactory, final ReconnectStrategy reestablishStrategy) {
-        final NetconfSshClientInitializer init = new NetconfSshClientInitializer(authHandler, negotiatorFactory, listener);
-
-        return super.createReconnectingClient(address, connectStrategyFactory, reestablishStrategy,
-                new PipelineInitializer<NetconfClientSession>() {
-            @Override
-            public void initializeChannel(final SocketChannel ch, final Promise<NetconfClientSession> promise) {
-                init.initialize(ch, promise);
-            }
-        });
-    }
-
-    private static final class NetconfSshClientInitializer extends AbstractChannelInitializer<NetconfClientSession> {
-
-        private final AuthenticationHandler authenticationHandler;
-        private final NetconfClientSessionNegotiatorFactory negotiatorFactory;
-        private final NetconfClientSessionListener sessionListener;
-
-        public NetconfSshClientInitializer(AuthenticationHandler authHandler,
-                NetconfClientSessionNegotiatorFactory negotiatorFactory,
-                final NetconfClientSessionListener sessionListener) {
-            this.authenticationHandler = authHandler;
-            this.negotiatorFactory = negotiatorFactory;
-            this.sessionListener = sessionListener;
-        }
-
-        @Override
-        public void initialize(SocketChannel ch, Promise<NetconfClientSession> promise) {
-            try {
-                Invoker invoker = Invoker.subsystem("netconf");
-                ch.pipeline().addFirst(new SshHandler(authenticationHandler, invoker));
-                super.initialize(ch,promise);
-            } catch (IOException e) {
-                throw new RuntimeException(e);
-            }
-        }
-
-        @Override
-        protected void initializeSessionNegotiator(SocketChannel ch,
-                Promise<NetconfClientSession> promise) {
-            ch.pipeline().addAfter(NETCONF_MESSAGE_DECODER,  AbstractChannelInitializer.NETCONF_SESSION_NEGOTIATOR,
-                    negotiatorFactory.getSessionNegotiator(new SessionListenerFactory<NetconfClientSessionListener>() {
-                @Override
-                public NetconfClientSessionListener getSessionListener() {
-                    return sessionListener;
-                }
-            }, ch, promise));
-        }
-    }
-}
index 504e4c994915aeafc5d303fc2a56ab4bcf2722d8..524f0b52b7e22f4dc01317d5c7cf7dbcc1c045a0 100644 (file)
@@ -26,8 +26,8 @@ import com.google.common.base.Preconditions;
 
 public class SimpleNetconfClientSessionListener implements NetconfClientSessionListener {
     private static final class RequestEntry {
-        final Promise<NetconfMessage> promise;
-        final NetconfMessage request;
+        private final Promise<NetconfMessage> promise;
+        private final NetconfMessage request;
 
         public RequestEntry(Promise<NetconfMessage> future, NetconfMessage request) {
             this.promise = Preconditions.checkNotNull(future);
diff --git a/opendaylight/netconf/netconf-client/src/main/java/org/opendaylight/controller/netconf/client/SshClientChannelInitializer.java b/opendaylight/netconf/netconf-client/src/main/java/org/opendaylight/controller/netconf/client/SshClientChannelInitializer.java
new file mode 100644 (file)
index 0000000..b86349d
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * 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.client;
+
+import io.netty.channel.socket.SocketChannel;
+import io.netty.util.concurrent.Promise;
+import org.opendaylight.controller.netconf.util.AbstractChannelInitializer;
+import org.opendaylight.controller.netconf.util.handler.ssh.SshHandler;
+import org.opendaylight.controller.netconf.util.handler.ssh.authentication.AuthenticationHandler;
+import org.opendaylight.controller.netconf.util.handler.ssh.client.Invoker;
+import org.opendaylight.protocol.framework.SessionListenerFactory;
+
+import java.io.IOException;
+
+final class SshClientChannelInitializer extends AbstractChannelInitializer<NetconfClientSession> {
+
+    private final AuthenticationHandler authenticationHandler;
+    private final NetconfClientSessionNegotiatorFactory negotiatorFactory;
+    private final NetconfClientSessionListener sessionListener;
+
+    public SshClientChannelInitializer(final AuthenticationHandler authHandler,
+                                       final NetconfClientSessionNegotiatorFactory negotiatorFactory,
+                                       final NetconfClientSessionListener sessionListener) {
+        this.authenticationHandler = authHandler;
+        this.negotiatorFactory = negotiatorFactory;
+        this.sessionListener = sessionListener;
+    }
+
+    @Override
+    public void initialize(final SocketChannel ch, final Promise<NetconfClientSession> promise) {
+        try {
+            final Invoker invoker = Invoker.subsystem("netconf");
+            ch.pipeline().addFirst(new SshHandler(authenticationHandler, invoker));
+            super.initialize(ch,promise);
+        } catch (final IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @Override
+    protected void initializeSessionNegotiator(final SocketChannel ch,
+                                               final Promise<NetconfClientSession> promise) {
+        ch.pipeline().addAfter(NETCONF_MESSAGE_DECODER,  AbstractChannelInitializer.NETCONF_SESSION_NEGOTIATOR,
+                negotiatorFactory.getSessionNegotiator(new SessionListenerFactory<NetconfClientSessionListener>() {
+                    @Override
+                    public NetconfClientSessionListener getSessionListener() {
+                        return sessionListener;
+                    }
+                }, ch, promise));
+    }
+}
diff --git a/opendaylight/netconf/netconf-client/src/main/java/org/opendaylight/controller/netconf/client/TcpClientChannelInitializer.java b/opendaylight/netconf/netconf-client/src/main/java/org/opendaylight/controller/netconf/client/TcpClientChannelInitializer.java
new file mode 100644 (file)
index 0000000..967d3c6
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * 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.client;
+
+import io.netty.channel.socket.SocketChannel;
+import io.netty.util.concurrent.Promise;
+import org.opendaylight.controller.netconf.util.AbstractChannelInitializer;
+import org.opendaylight.protocol.framework.SessionListenerFactory;
+
+class TcpClientChannelInitializer extends AbstractChannelInitializer<NetconfClientSession> {
+
+    private final NetconfClientSessionNegotiatorFactory negotiatorFactory;
+    private final NetconfClientSessionListener sessionListener;
+
+    TcpClientChannelInitializer(final NetconfClientSessionNegotiatorFactory negotiatorFactory,
+                                final NetconfClientSessionListener sessionListener) {
+        this.negotiatorFactory = negotiatorFactory;
+        this.sessionListener = sessionListener;
+    }
+
+    @Override
+    public void initialize(final SocketChannel ch, final Promise<NetconfClientSession> promise) {
+        super.initialize(ch, promise);
+    }
+
+    @Override
+    protected void initializeSessionNegotiator(final SocketChannel ch, final Promise<NetconfClientSession> promise) {
+        ch.pipeline().addAfter(NETCONF_MESSAGE_DECODER, AbstractChannelInitializer.NETCONF_SESSION_NEGOTIATOR,
+                negotiatorFactory.getSessionNegotiator(new SessionListenerFactory<NetconfClientSessionListener>() {
+                    @Override
+                    public NetconfClientSessionListener getSessionListener() {
+                        return sessionListener;
+                    }
+                }, ch, promise));
+    }
+}
diff --git a/opendaylight/netconf/netconf-client/src/main/java/org/opendaylight/controller/netconf/client/conf/NetconfClientConfiguration.java b/opendaylight/netconf/netconf-client/src/main/java/org/opendaylight/controller/netconf/client/conf/NetconfClientConfiguration.java
new file mode 100644 (file)
index 0000000..5a3ec3a
--- /dev/null
@@ -0,0 +1,114 @@
+/*
+ * 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.client.conf;
+
+import com.google.common.base.Objects;
+import com.google.common.base.Optional;
+import com.google.common.base.Preconditions;
+import org.opendaylight.controller.netconf.client.NetconfClientSessionListener;
+import org.opendaylight.controller.netconf.util.handler.ssh.authentication.AuthenticationHandler;
+import org.opendaylight.controller.netconf.util.messages.NetconfHelloMessageAdditionalHeader;
+import org.opendaylight.protocol.framework.ReconnectStrategy;
+
+import java.net.InetSocketAddress;
+
+public class NetconfClientConfiguration {
+
+    private final NetconfClientProtocol clientProtocol;
+    private final InetSocketAddress address;
+    private final Long connectionTimeoutMillis;
+
+    private final NetconfHelloMessageAdditionalHeader additionalHeader;
+    private final NetconfClientSessionListener sessionListener;
+
+    private final ReconnectStrategy reconnectStrategy;
+
+    private final AuthenticationHandler authHandler;
+
+    NetconfClientConfiguration(final NetconfClientProtocol protocol, final InetSocketAddress address, final Long connectionTimeoutMillis, final NetconfHelloMessageAdditionalHeader additionalHeader, final NetconfClientSessionListener sessionListener, final ReconnectStrategy reconnectStrategy, final AuthenticationHandler authHandler) {
+        this.address = address;
+        this.connectionTimeoutMillis = connectionTimeoutMillis;
+        this.additionalHeader = additionalHeader;
+        this.sessionListener = sessionListener;
+        this.clientProtocol = protocol;
+        this.reconnectStrategy = reconnectStrategy;
+        this.authHandler = authHandler;
+        validateConfiguration();
+    }
+
+    public final InetSocketAddress getAddress() {
+        return address;
+    }
+
+    public final Long getConnectionTimeoutMillis() {
+        return connectionTimeoutMillis;
+    }
+
+    public final Optional<NetconfHelloMessageAdditionalHeader> getAdditionalHeader() {
+        return Optional.fromNullable(additionalHeader);
+    }
+
+    public final NetconfClientSessionListener getSessionListener() {
+        return sessionListener;
+    }
+
+    public final ReconnectStrategy getReconnectStrategy() {
+        return reconnectStrategy;
+    }
+
+    public final AuthenticationHandler getAuthHandler() {
+        return authHandler;
+    }
+
+    public NetconfClientProtocol getProtocol() {
+        return clientProtocol;
+    }
+
+    private void validateConfiguration() {
+        Preconditions.checkNotNull(clientProtocol, " ");
+        switch (clientProtocol) {
+        case SSH:
+            validateSshConfiguration();
+            // Fall through intentional (ssh validation is a superset of tcp validation)
+        case TCP:
+            validateTcpConfiguration();
+        }
+    }
+
+    protected void validateSshConfiguration() {
+        Preconditions.checkNotNull(authHandler, "authHandler");
+    }
+
+    protected void validateTcpConfiguration() {
+        Preconditions.checkNotNull(address, "address");
+        Preconditions.checkNotNull(clientProtocol, "clientProtocol");
+        Preconditions.checkNotNull(connectionTimeoutMillis, "connectionTimeoutMillis");
+        Preconditions.checkNotNull(sessionListener, "sessionListener");
+        Preconditions.checkNotNull(reconnectStrategy, "reconnectStrategy");
+    }
+
+    @Override
+    public final String toString() {
+        return buildToStringHelper().toString();
+    }
+
+    protected Objects.ToStringHelper buildToStringHelper() {
+        return Objects.toStringHelper(this)
+                .add("address", address)
+                .add("connectionTimeoutMillis", connectionTimeoutMillis)
+                .add("additionalHeader", additionalHeader)
+                .add("sessionListener", sessionListener)
+                .add("reconnectStrategy", reconnectStrategy)
+                .add("clientProtocol", clientProtocol)
+                .add("authHandler", authHandler);
+    }
+
+    public static enum NetconfClientProtocol {
+        TCP, SSH
+    }
+}
\ No newline at end of file
diff --git a/opendaylight/netconf/netconf-client/src/main/java/org/opendaylight/controller/netconf/client/conf/NetconfClientConfigurationBuilder.java b/opendaylight/netconf/netconf-client/src/main/java/org/opendaylight/controller/netconf/client/conf/NetconfClientConfigurationBuilder.java
new file mode 100644 (file)
index 0000000..a3e57bd
--- /dev/null
@@ -0,0 +1,103 @@
+/*
+ * 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.client.conf;
+
+import org.opendaylight.controller.netconf.client.NetconfClientSessionListener;
+import org.opendaylight.controller.netconf.util.handler.ssh.authentication.AuthenticationHandler;
+import org.opendaylight.controller.netconf.util.messages.NetconfHelloMessageAdditionalHeader;
+import org.opendaylight.protocol.framework.ReconnectStrategy;
+
+import java.net.InetSocketAddress;
+
+public class NetconfClientConfigurationBuilder {
+
+    public static final int DEFAULT_CONNECTION_TIMEOUT_MILLIS = 5000;
+    public static final NetconfClientConfiguration.NetconfClientProtocol DEFAULT_CLIENT_PROTOCOL = NetconfClientConfiguration.NetconfClientProtocol.TCP;
+
+    private InetSocketAddress address;
+    private long connectionTimeoutMillis = DEFAULT_CONNECTION_TIMEOUT_MILLIS;
+    private NetconfHelloMessageAdditionalHeader additionalHeader;
+    private NetconfClientSessionListener sessionListener;
+    private ReconnectStrategy reconnectStrategy;
+    private AuthenticationHandler authHandler;
+    private NetconfClientConfiguration.NetconfClientProtocol clientProtocol = DEFAULT_CLIENT_PROTOCOL;
+
+    protected NetconfClientConfigurationBuilder() {
+    }
+
+    public static NetconfClientConfigurationBuilder create() {
+        return new NetconfClientConfigurationBuilder();
+    }
+
+    public NetconfClientConfigurationBuilder withAddress(final InetSocketAddress address) {
+        this.address = address;
+        return this;
+    }
+
+    public NetconfClientConfigurationBuilder withConnectionTimeoutMillis(final long connectionTimeoutMillis) {
+        this.connectionTimeoutMillis = connectionTimeoutMillis;
+        return this;
+    }
+
+    public NetconfClientConfigurationBuilder withProtocol(final NetconfClientConfiguration.NetconfClientProtocol clientProtocol) {
+        this.clientProtocol = clientProtocol;
+        return this;
+    }
+
+    public NetconfClientConfigurationBuilder withAdditionalHeader(final NetconfHelloMessageAdditionalHeader additionalHeader) {
+        this.additionalHeader = additionalHeader;
+        return this;
+    }
+
+    public NetconfClientConfigurationBuilder withSessionListener(final NetconfClientSessionListener sessionListener) {
+        this.sessionListener = sessionListener;
+        return this;
+    }
+
+    public NetconfClientConfigurationBuilder withReconnectStrategy(final ReconnectStrategy reconnectStrategy) {
+        this.reconnectStrategy = reconnectStrategy;
+        return this;
+    }
+
+    public NetconfClientConfigurationBuilder withAuthHandler(final AuthenticationHandler authHandler) {
+        this.authHandler = authHandler;
+        return this;
+    }
+
+    final InetSocketAddress getAddress() {
+        return address;
+    }
+
+    final long getConnectionTimeoutMillis() {
+        return connectionTimeoutMillis;
+    }
+
+    final NetconfHelloMessageAdditionalHeader getAdditionalHeader() {
+        return additionalHeader;
+    }
+
+    final NetconfClientSessionListener getSessionListener() {
+        return sessionListener;
+    }
+
+    final ReconnectStrategy getReconnectStrategy() {
+        return reconnectStrategy;
+    }
+
+    final AuthenticationHandler getAuthHandler() {
+        return authHandler;
+    }
+
+    final NetconfClientConfiguration.NetconfClientProtocol getProtocol() {
+        return clientProtocol;
+    }
+
+    public NetconfClientConfiguration build() {
+        return new NetconfClientConfiguration(clientProtocol, address, connectionTimeoutMillis, additionalHeader, sessionListener, reconnectStrategy, authHandler);
+    }
+}
diff --git a/opendaylight/netconf/netconf-client/src/main/java/org/opendaylight/controller/netconf/client/conf/NetconfReconnectingClientConfiguration.java b/opendaylight/netconf/netconf-client/src/main/java/org/opendaylight/controller/netconf/client/conf/NetconfReconnectingClientConfiguration.java
new file mode 100644 (file)
index 0000000..64fcc48
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+ * 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.client.conf;
+
+import com.google.common.base.Objects;
+import com.google.common.base.Preconditions;
+import org.opendaylight.controller.netconf.client.NetconfClientSessionListener;
+import org.opendaylight.controller.netconf.util.handler.ssh.authentication.AuthenticationHandler;
+import org.opendaylight.controller.netconf.util.messages.NetconfHelloMessageAdditionalHeader;
+import org.opendaylight.protocol.framework.ReconnectStrategy;
+import org.opendaylight.protocol.framework.ReconnectStrategyFactory;
+
+import java.net.InetSocketAddress;
+
+public final class NetconfReconnectingClientConfiguration extends NetconfClientConfiguration {
+
+    private final ReconnectStrategyFactory connectStrategyFactory;
+
+    NetconfReconnectingClientConfiguration(final NetconfClientProtocol clientProtocol, final InetSocketAddress address,
+            final Long connectionTimeoutMillis, final NetconfHelloMessageAdditionalHeader additionalHeader,
+            final NetconfClientSessionListener sessionListener, final ReconnectStrategy reconnectStrategy,
+            final ReconnectStrategyFactory connectStrategyFactory, final AuthenticationHandler authHandler) {
+        super(clientProtocol, address, connectionTimeoutMillis, additionalHeader, sessionListener, reconnectStrategy,
+                authHandler);
+        this.connectStrategyFactory = connectStrategyFactory;
+        validateReconnectConfiguration();
+    }
+
+    public ReconnectStrategyFactory getConnectStrategyFactory() {
+        return connectStrategyFactory;
+    }
+
+    private void validateReconnectConfiguration() {
+        Preconditions.checkNotNull(connectStrategyFactory);
+    }
+
+    @Override
+    protected Objects.ToStringHelper buildToStringHelper() {
+        return super.buildToStringHelper().add("connectStrategyFactory", connectStrategyFactory);
+    }
+}
diff --git a/opendaylight/netconf/netconf-client/src/main/java/org/opendaylight/controller/netconf/client/conf/NetconfReconnectingClientConfigurationBuilder.java b/opendaylight/netconf/netconf-client/src/main/java/org/opendaylight/controller/netconf/client/conf/NetconfReconnectingClientConfigurationBuilder.java
new file mode 100644 (file)
index 0000000..411ac3c
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+ * 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.client.conf;
+
+import java.net.InetSocketAddress;
+
+import org.opendaylight.controller.netconf.client.NetconfClientSessionListener;
+import org.opendaylight.controller.netconf.util.handler.ssh.authentication.AuthenticationHandler;
+import org.opendaylight.controller.netconf.util.messages.NetconfHelloMessageAdditionalHeader;
+import org.opendaylight.protocol.framework.ReconnectStrategy;
+import org.opendaylight.protocol.framework.ReconnectStrategyFactory;
+
+public class NetconfReconnectingClientConfigurationBuilder extends NetconfClientConfigurationBuilder {
+
+    private ReconnectStrategyFactory connectStrategyFactory;
+
+    private NetconfReconnectingClientConfigurationBuilder() {
+    }
+
+    public static NetconfReconnectingClientConfigurationBuilder create() {
+        return new NetconfReconnectingClientConfigurationBuilder();
+    }
+
+
+    public NetconfReconnectingClientConfigurationBuilder withConnectStrategyFactory(final ReconnectStrategyFactory connectStrategyFactory) {
+        this.connectStrategyFactory = connectStrategyFactory;
+        return this;
+    }
+
+    @Override
+    public NetconfReconnectingClientConfiguration build() {
+        return new NetconfReconnectingClientConfiguration(getProtocol(), getAddress(), getConnectionTimeoutMillis(), getAdditionalHeader(), getSessionListener(), getReconnectStrategy(), connectStrategyFactory, getAuthHandler());
+    }
+
+    // Override setter methods to return subtype
+
+    @Override
+    public NetconfReconnectingClientConfigurationBuilder withAddress(final InetSocketAddress address) {
+        return (NetconfReconnectingClientConfigurationBuilder) super.withAddress(address);
+    }
+
+    @Override
+    public NetconfReconnectingClientConfigurationBuilder withConnectionTimeoutMillis(final long connectionTimeoutMillis) {
+        return (NetconfReconnectingClientConfigurationBuilder) super.withConnectionTimeoutMillis(connectionTimeoutMillis);
+    }
+
+    @Override
+    public NetconfReconnectingClientConfigurationBuilder withAdditionalHeader(final NetconfHelloMessageAdditionalHeader additionalHeader) {
+        return (NetconfReconnectingClientConfigurationBuilder) super.withAdditionalHeader(additionalHeader);
+    }
+
+    @Override
+    public NetconfReconnectingClientConfigurationBuilder withSessionListener(final NetconfClientSessionListener sessionListener) {
+        return (NetconfReconnectingClientConfigurationBuilder) super.withSessionListener(sessionListener);
+    }
+
+    @Override
+    public NetconfReconnectingClientConfigurationBuilder withReconnectStrategy(final ReconnectStrategy reconnectStrategy) {
+        return (NetconfReconnectingClientConfigurationBuilder) super.withReconnectStrategy(reconnectStrategy);
+    }
+
+    @Override
+    public NetconfReconnectingClientConfigurationBuilder withAuthHandler(final AuthenticationHandler authHandler) {
+        return (NetconfReconnectingClientConfigurationBuilder) super.withAuthHandler(authHandler);
+    }
+
+    @Override
+    public NetconfReconnectingClientConfigurationBuilder withProtocol(NetconfClientConfiguration.NetconfClientProtocol clientProtocol) {
+        return (NetconfReconnectingClientConfigurationBuilder) super.withProtocol(clientProtocol);
+    }
+}
index 32c6ea85d69ffdd112afdd0cf103d3be7ac58247..60d8f3044aee5667ea04858377d31b109ca88ef0 100644 (file)
@@ -8,12 +8,8 @@
 
 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;
@@ -25,11 +21,11 @@ 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 org.opendaylight.controller.netconf.client.conf.NetconfClientConfiguration;
 
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Sets;
+import io.netty.util.concurrent.Future;
 
 
 /**
@@ -44,11 +40,11 @@ public class TestingNetconfClient implements Closeable {
     private final NetconfClientSessionListener sessionListener;
     private final long sessionId;
 
-    private TestingNetconfClient(String clientLabel, InetSocketAddress address, ReconnectStrategy strat,
-            NetconfClientDispatcher netconfClientDispatcher) throws InterruptedException {
+    public TestingNetconfClient(String clientLabel,
+                                 NetconfClientDispatcher netconfClientDispatcher, final NetconfClientConfiguration config) throws InterruptedException {
         this.label = clientLabel;
-        sessionListener = new SimpleNetconfClientSessionListener();
-        Future<NetconfClientSession> clientFuture = netconfClientDispatcher.createClient(address, sessionListener, strat);
+        sessionListener = config.getSessionListener();
+        Future<NetconfClientSession> clientFuture = netconfClientDispatcher.createClient(config);
         clientSession = get(clientFuture);
         this.sessionId = clientSession.getSessionId();
     }
@@ -63,18 +59,6 @@ public class TestingNetconfClient implements Closeable {
         }
     }
 
-    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);
     }
@@ -111,4 +95,4 @@ public class TestingNetconfClient implements Closeable {
         Preconditions.checkState(clientSession != null, "Client was not initialized successfully");
         return Sets.newHashSet(clientSession.getServerCapabilities());
     }
-}
\ No newline at end of file
+}
index 6a86ecd21f4d81fdfa9db9de1a81d6e28e1d9488..91385bab33e5102659e72c7f42a435f509b5c1fa 100644 (file)
@@ -68,12 +68,11 @@ public class CapabilityProviderImpl implements CapabilityProvider {
             final Set<Capability> caps = netconfOperationService.getCapabilities();
 
             for (Capability cap : caps) {
-                if (cap.getModuleName().isPresent() == false)
-                    continue;
-                if (cap.getRevision().isPresent() == false)
-                    continue;
-                if (cap.getCapabilitySchema().isPresent() == false)
+                if (!cap.getModuleName().isPresent()
+                        || !cap.getRevision().isPresent()
+                        || !cap.getCapabilitySchema().isPresent()){
                     continue;
+                }
 
                 final String currentModuleName = cap.getModuleName().get();
                 Map<String, String> revisionMap = mappedModulesToRevisionToSchema.get(currentModuleName);
index 4461054437ce61ef47fd2eea76a9b23ae15b5ef3..203fdf272584015f40f8bde0dd4e80b753eb51f0 100644 (file)
@@ -35,6 +35,7 @@ public class DefaultCommitNotificationProducer extends NotificationBroadcasterSu
 
     public DefaultCommitNotificationProducer(MBeanServer mBeanServer) {
         this.mbeanServer = mBeanServer;
+        logger.debug("Registering to JMX under {}", on);
         registerMBean(this, mbeanServer, on);
     }
 
@@ -42,7 +43,7 @@ public class DefaultCommitNotificationProducer extends NotificationBroadcasterSu
         try {
             mbs.registerMBean(instance, on);
         } catch (InstanceAlreadyExistsException | MBeanRegistrationException | NotCompliantMBeanException e) {
-            throw new RuntimeException("Unable to register " + instance + " as " + on, e);
+            throw new IllegalStateException("Unable to register " + instance + " as " + on, e);
         }
     }
 
index b3245fff2b812775803acf59e1c2e53aa875d77e..75be1f8fe01647beeabbcb1101bd5265c7813578 100644 (file)
@@ -9,6 +9,8 @@
 package org.opendaylight.controller.netconf.impl;
 
 
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableMap;
 import org.opendaylight.controller.netconf.api.NetconfDocumentedException;
 import org.opendaylight.controller.netconf.api.NetconfMessage;
 import org.opendaylight.controller.netconf.impl.osgi.NetconfOperationRouter;
@@ -26,9 +28,6 @@ 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> {
 
     static final Logger logger = LoggerFactory.getLogger(NetconfServerSessionListener.class);
@@ -97,8 +96,9 @@ public class NetconfServerSessionListener implements NetconfSessionListener<Netc
             // TODO: should send generic error or close session?
             logger.error("Unexpected exception", e);
             session.onIncommingRpcFail();
-            throw new RuntimeException("Unable to process incoming message " + netconfMessage, e);
+            throw new IllegalStateException("Unable to process incoming message " + netconfMessage, e);
         } catch (NetconfDocumentedException e) {
+            logger.trace("Error occured while processing mesage {}",e);
             session.onOutgoingRpcError();
             session.onIncommingRpcFail();
             SendErrorExceptionUtil.sendErrorMessage(session, e, netconfMessage);
index 5c389fa966af340ef277f5d51ebe992b2c6081ff..6528fe251775694e8ea47cf59b094d0efcc07ddf 100644 (file)
@@ -8,10 +8,9 @@
 
 package org.opendaylight.controller.netconf.impl;
 
-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;
+
+import org.opendaylight.controller.netconf.api.NetconfDocumentedException;
 import org.opendaylight.controller.netconf.api.NetconfServerSessionPreferences;
 import org.opendaylight.controller.netconf.util.AbstractNetconfSessionNegotiator;
 import org.opendaylight.controller.netconf.util.messages.NetconfHelloMessage;
@@ -19,7 +18,11 @@ import org.opendaylight.controller.netconf.util.messages.NetconfHelloMessageAddi
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-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;
 
 public class NetconfServerSessionNegotiator extends
         AbstractNetconfSessionNegotiator<NetconfServerSessionPreferences, NetconfServerSession, NetconfServerSessionListener> {
@@ -32,6 +35,14 @@ public class NetconfServerSessionNegotiator extends
         super(sessionPreferences, promise, channel, timer, sessionListener, connectionTimeoutMillis);
     }
 
+    @Override
+    protected void handleMessage(NetconfHelloMessage netconfMessage) throws NetconfDocumentedException {
+        NetconfServerSession session = getSessionForHelloMessage(netconfMessage);
+        replaceHelloMessageInboundHandler(session);
+        // Negotiation successful after all non hello messages were processed
+        negotiationSuccessful(session);
+    }
+
     @Override
     protected NetconfServerSession getSession(NetconfServerSessionListener sessionListener, Channel channel, NetconfHelloMessage message) {
         Optional<NetconfHelloMessageAdditionalHeader> additionalHeader = message.getAdditionalHeader();
index 9d958660615c27c27e86fee68e669f7e17c6a1b1..d5a34d11b244681b1540ff95bae22b26ba607670 100644 (file)
@@ -8,10 +8,12 @@
 
 package org.opendaylight.controller.netconf.impl;
 
-import com.google.common.collect.Sets;
-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 com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableSet;
+import java.util.Set;
+
 import org.opendaylight.controller.netconf.api.NetconfDocumentedException;
 import org.opendaylight.controller.netconf.api.NetconfServerSessionPreferences;
 import org.opendaylight.controller.netconf.impl.mapping.CapabilityProvider;
@@ -23,18 +25,22 @@ 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.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
-import java.util.Set;
+import com.google.common.collect.Sets;
 
-import static org.opendaylight.controller.netconf.mapping.api.NetconfOperationProvider.NetconfOperationProviderUtil.getNetconfSessionIdForReporting;
+import io.netty.channel.Channel;
+import io.netty.util.Timer;
+import io.netty.util.concurrent.Promise;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class NetconfServerSessionNegotiatorFactory implements SessionNegotiatorFactory<NetconfHelloMessage, NetconfServerSession, NetconfServerSessionListener> {
 
-    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);
+    public static final Set<String> DEFAULT_BASE_CAPABILITIES = ImmutableSet.of(
+            XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_BASE_1_0,
+            XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_BASE_1_1,
+            XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_CAPABILITY_EXI_1_0
+    );
 
     private final Timer timer;
 
@@ -44,16 +50,42 @@ public class NetconfServerSessionNegotiatorFactory implements SessionNegotiatorF
     private final DefaultCommitNotificationProducer commitNotificationProducer;
     private final SessionMonitoringService monitoringService;
     private static final Logger logger = LoggerFactory.getLogger(NetconfServerSessionNegotiatorFactory.class);
+    private final Set<String> baseCapabilities;
+
+    // TODO too many params, refactor
+    public NetconfServerSessionNegotiatorFactory(Timer timer, NetconfOperationProvider netconfOperationProvider,
+                                                 SessionIdProvider idProvider, long connectionTimeoutMillis,
+                                                 DefaultCommitNotificationProducer commitNot,
+                                                 SessionMonitoringService monitoringService) {
+        this(timer, netconfOperationProvider, idProvider, connectionTimeoutMillis, commitNot, monitoringService, DEFAULT_BASE_CAPABILITIES);
+    }
 
+    // TODO too many params, refactor
     public NetconfServerSessionNegotiatorFactory(Timer timer, NetconfOperationProvider netconfOperationProvider,
                                                  SessionIdProvider idProvider, long connectionTimeoutMillis,
-                                                 DefaultCommitNotificationProducer commitNot, SessionMonitoringService monitoringService) {
+                                                 DefaultCommitNotificationProducer commitNot,
+                                                 SessionMonitoringService monitoringService, Set<String> baseCapabilities) {
         this.timer = timer;
         this.netconfOperationProvider = netconfOperationProvider;
         this.idProvider = idProvider;
         this.connectionTimeoutMillis = connectionTimeoutMillis;
         this.commitNotificationProducer = commitNot;
         this.monitoringService = monitoringService;
+        this.baseCapabilities = validateBaseCapabilities(baseCapabilities);
+    }
+
+    private ImmutableSet<String> validateBaseCapabilities(final Set<String> baseCapabilities) {
+        // Check base capabilities to be supported by the server
+        Sets.SetView<String> unknownBaseCaps = Sets.difference(baseCapabilities, DEFAULT_BASE_CAPABILITIES);
+        Preconditions.checkArgument(unknownBaseCaps.isEmpty(),
+                "Base capabilities that will be supported by netconf server have to be subset of %s, unknown base capabilities: %s",
+                DEFAULT_BASE_CAPABILITIES, unknownBaseCaps);
+
+        ImmutableSet.Builder<String> b = ImmutableSet.builder();
+        b.addAll(baseCapabilities);
+        // Base 1.0 capability is supported by default
+        b.add(XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_BASE_1_0);
+        return b.build();
     }
 
     /**
@@ -91,7 +123,7 @@ public class NetconfServerSessionNegotiatorFactory implements SessionNegotiatorF
     }
 
     private NetconfHelloMessage createHelloMessage(long sessionId, CapabilityProvider capabilityProvider) throws NetconfDocumentedException {
-        return NetconfHelloMessage.createServerHello(Sets.union(capabilityProvider.getCapabilities(), DEFAULT_CAPABILITIES), sessionId);
+        return NetconfHelloMessage.createServerHello(Sets.union(capabilityProvider.getCapabilities(), baseCapabilities), sessionId);
     }
 
 }
index d6940a1a453fcaaf14f4e6e30292f8dbc427256d..d4545430b47834ae8604737a50762056fd712526 100644 (file)
@@ -64,14 +64,14 @@ public class DefaultCommit extends AbstractNetconfOperation {
 
     @Override
     public Document handle(Document requestMessage, NetconfOperationChainedExecution subsequentOperation) throws NetconfDocumentedException {
-        Preconditions.checkArgument(subsequentOperation.isExecutionTermination() == false,
+        Preconditions.checkArgument(!subsequentOperation.isExecutionTermination(),
                 "Subsequent netconf operation expected by %s", this);
 
         if (isCommitWithoutNotification(requestMessage)) {
             logger.debug("Skipping commit notification");
         } else {
             // Send commit notification if commit was not issued by persister
-            requestMessage = removePersisterAttributes(requestMessage);
+            removePersisterAttributes(requestMessage);
             Element cfgSnapshot = getConfigSnapshot(operationRouter);
             logger.debug("Config snapshot retrieved successfully {}", cfgSnapshot);
             notificationProducer.sendCommitNotification("ok", cfgSnapshot, cap.getCapabilities());
@@ -90,10 +90,8 @@ public class DefaultCommit extends AbstractNetconfOperation {
         return HandlingPriority.HANDLE_WITH_DEFAULT_PRIORITY.increasePriority(1);
     }
 
-    private Document removePersisterAttributes(Document message) {
-        final Element documentElement = message.getDocumentElement();
-        documentElement.removeAttribute(NOTIFY_ATTR);
-        return message;
+    private void removePersisterAttributes(Document message) {
+        message.getDocumentElement().removeAttribute(NOTIFY_ATTR);
     }
 
     private boolean isCommitWithoutNotification(Document message) {
@@ -108,9 +106,9 @@ public class DefaultCommit extends AbstractNetconfOperation {
 
         String attr = xmlElement.getAttribute(NOTIFY_ATTR);
 
-        if (attr == null || attr.equals(""))
+        if (attr == null || attr.equals("")){
             return false;
-        else if (attr.equals(Boolean.toString(false))) {
+        else if (attr.equals(Boolean.toString(false))) {
             logger.debug("Commit operation received with notify=false attribute {}", message);
             return true;
         } else {
index bbd07e42bf515c46dec0a6900bd2105f3140596f..303047df12b6fae6c77e964b702cb23a9ed52b59 100644 (file)
@@ -39,7 +39,7 @@ public class NetconfImplActivator implements BundleActivator {
     private ServiceRegistration<NetconfMonitoringService> regMonitoring;
 
     @Override
-    public void start(final BundleContext context) throws Exception {
+    public void start(final BundleContext context)  {
         InetSocketAddress address = NetconfConfigUtil.extractTCPNetconfAddress(context,
                 "TCP is not configured, netconf not available.", false);
 
@@ -85,7 +85,7 @@ public class NetconfImplActivator implements BundleActivator {
     }
 
     @Override
-    public void stop(final BundleContext context) throws Exception {
+    public void stop(final BundleContext context) {
         logger.info("Shutting down netconf because YangStoreService service was removed");
 
         commitNot.close();
index a7560fadb602cc450f84c71e2f9936cb131cd495..81fac5f12f9c7dc9d3bf40922c19723836c036ce 100644 (file)
@@ -51,7 +51,7 @@ public class NetconfMonitoringServiceImpl implements NetconfMonitoringService, S
     @Override
     public void onSessionUp(NetconfManagementSession session) {
         logger.debug("Session {} up", session);
-        Preconditions.checkState(sessions.contains(session) == false, "Session %s was already added", session);
+        Preconditions.checkState(!sessions.contains(session), "Session %s was already added", session);
         sessions.add(session);
     }
 
index c2ab36f2c68ac8478d89fc14b02b6729e0ccf072..ff96ad779fbc974539ced455494129381bb09635 100644 (file)
@@ -17,9 +17,9 @@ 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.DefaultNetconfOperation;
 import org.opendaylight.controller.netconf.impl.mapping.operations.DefaultStartExi;
 import org.opendaylight.controller.netconf.impl.mapping.operations.DefaultStopExi;
-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;
@@ -33,6 +33,7 @@ import org.w3c.dom.Document;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Map;
+import java.util.NavigableMap;
 import java.util.Set;
 import java.util.TreeMap;
 
@@ -83,7 +84,7 @@ public class NetconfOperationRouterImpl implements NetconfOperationRouter {
         for (NetconfOperationService netconfOperationService : netconfOperationServiceSnapshot.getServices()) {
             final Set<NetconfOperation> netOpsFromService = netconfOperationService.getNetconfOperations();
             for (NetconfOperation netconfOperation : netOpsFromService) {
-                Preconditions.checkState(result.contains(netconfOperation) == false,
+                Preconditions.checkState(!result.contains(netconfOperation),
                         "Netconf operation %s already present", netconfOperation);
                 result.add(netconfOperation);
             }
@@ -97,9 +98,10 @@ public class NetconfOperationRouterImpl implements NetconfOperationRouter {
         Preconditions.checkNotNull(allNetconfOperations, "Operation router was not initialized properly");
 
         NetconfOperationExecution netconfOperationExecution;
-        String messageAsString = XmlUtil.toString(message);
 
+        String messageAsString = "";
         try {
+            messageAsString = XmlUtil.toString(message);
             netconfOperationExecution = getNetconfOperationWithHighestPriority(message, session);
         } catch (IllegalArgumentException | IllegalStateException e) {
             logger.warn("Unable to handle rpc {} on session {}", messageAsString, session, e);
@@ -155,7 +157,7 @@ public class NetconfOperationRouterImpl implements NetconfOperationRouter {
     private NetconfOperationExecution getNetconfOperationWithHighestPriority(
             Document message, NetconfServerSession session) throws NetconfDocumentedException {
 
-        TreeMap<HandlingPriority, NetconfOperation> sortedByPriority = getSortedNetconfOperationsWithCanHandle(
+        NavigableMap<HandlingPriority, NetconfOperation> sortedByPriority = getSortedNetconfOperationsWithCanHandle(
                 message, session);
 
         Preconditions.checkArgument(sortedByPriority.isEmpty() == false,
@@ -174,9 +176,9 @@ public class NetconfOperationRouterImpl implements NetconfOperationRouter {
             if (netconfOperation instanceof DefaultNetconfOperation) {
                 ((DefaultNetconfOperation) netconfOperation).setNetconfSession(session);
             }
-            if (handlingPriority.equals(HandlingPriority.CANNOT_HANDLE) == false) {
+            if (!handlingPriority.equals(HandlingPriority.CANNOT_HANDLE)) {
 
-                Preconditions.checkState(sortedPriority.containsKey(handlingPriority) == false,
+                Preconditions.checkState(!sortedPriority.containsKey(handlingPriority),
                         "Multiple %s available to handle message %s with priority %s",
                         NetconfOperation.class.getName(), message, handlingPriority);
                 sortedPriority.put(handlingPriority, netconfOperation);
@@ -220,7 +222,7 @@ public class NetconfOperationRouterImpl implements NetconfOperationRouter {
         }
 
         public static NetconfOperationExecution createExecutionChain(
-                TreeMap<HandlingPriority, NetconfOperation> sortedByPriority, HandlingPriority handlingPriority) {
+                NavigableMap<HandlingPriority, NetconfOperation> sortedByPriority, HandlingPriority handlingPriority) {
             NetconfOperation netconfOperation = sortedByPriority.get(handlingPriority);
             HandlingPriority subsequentHandlingPriority = sortedByPriority.lowerKey(handlingPriority);
 
index db5a359d7a16c72784911a447b2756de36356b42..b8622d1e911c54e225fb02bc032c5a9f9fae702a 100644 (file)
@@ -8,20 +8,47 @@
 
 package org.opendaylight.controller.netconf.impl;
 
-import com.google.common.base.Optional;
-import com.google.common.collect.Sets;
-import io.netty.channel.ChannelFuture;
-import io.netty.channel.EventLoopGroup;
-import io.netty.channel.nio.NioEventLoopGroup;
-import io.netty.util.HashedWheelTimer;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.mock;
+
+import java.io.DataOutputStream;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.lang.management.ManagementFactory;
+import java.net.InetSocketAddress;
+import java.net.Socket;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.ThreadFactory;
+import java.util.concurrent.atomic.AtomicLong;
+
 import org.apache.commons.io.IOUtils;
 import org.junit.After;
+import org.junit.AfterClass;
 import org.junit.Before;
+import org.junit.BeforeClass;
 import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
 import org.opendaylight.controller.netconf.api.NetconfDocumentedException;
 import org.opendaylight.controller.netconf.api.NetconfMessage;
-import org.opendaylight.controller.netconf.client.test.TestingNetconfClient;
 import org.opendaylight.controller.netconf.client.NetconfClientDispatcher;
+import org.opendaylight.controller.netconf.client.NetconfClientDispatcherImpl;
+import org.opendaylight.controller.netconf.client.SimpleNetconfClientSessionListener;
+import org.opendaylight.controller.netconf.client.conf.NetconfClientConfiguration;
+import org.opendaylight.controller.netconf.client.conf.NetconfClientConfigurationBuilder;
+import org.opendaylight.controller.netconf.client.test.TestingNetconfClient;
 import org.opendaylight.controller.netconf.impl.osgi.NetconfOperationServiceFactoryListenerImpl;
 import org.opendaylight.controller.netconf.impl.osgi.SessionMonitoringService;
 import org.opendaylight.controller.netconf.mapping.api.Capability;
@@ -31,45 +58,67 @@ import org.opendaylight.controller.netconf.mapping.api.NetconfOperationChainedEx
 import org.opendaylight.controller.netconf.mapping.api.NetconfOperationService;
 import org.opendaylight.controller.netconf.mapping.api.NetconfOperationServiceFactory;
 import org.opendaylight.controller.netconf.util.messages.NetconfHelloMessageAdditionalHeader;
+import org.opendaylight.controller.netconf.util.messages.NetconfMessageUtil;
+import org.opendaylight.controller.netconf.util.messages.NetconfStartExiMessage;
 import org.opendaylight.controller.netconf.util.test.XmlFileLoader;
+import org.opendaylight.controller.netconf.util.xml.XmlNetconfConstants;
 import org.opendaylight.controller.netconf.util.xml.XmlUtil;
+import org.opendaylight.protocol.framework.NeverReconnectStrategy;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
 
-import java.io.DataOutputStream;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.lang.management.ManagementFactory;
-import java.net.InetSocketAddress;
-import java.net.Socket;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Set;
+import com.google.common.base.Preconditions;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
 
-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.Mockito.mock;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.EventLoopGroup;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.util.HashedWheelTimer;
+import io.netty.util.concurrent.GlobalEventExecutor;
 
+@RunWith(Parameterized.class)
 public class ConcurrentClientsTest {
+    private static final Logger logger = LoggerFactory.getLogger(ConcurrentClientsTest.class);
 
-    private static final int CONCURRENCY = 16;
-    private EventLoopGroup nettyGroup;
-    private NetconfClientDispatcher netconfClientDispatcher;
+    private static ExecutorService clientExecutor;
 
-    private final InetSocketAddress netconfAddress = new InetSocketAddress("127.0.0.1", 8303);
+    private static final int CONCURRENCY = 32;
+    private static final InetSocketAddress netconfAddress = new InetSocketAddress("127.0.0.1", 8303);
 
-    static final Logger logger = LoggerFactory.getLogger(ConcurrentClientsTest.class);
+    private int nettyThreads;
+    private Class<? extends Runnable> clientRunnable;
+    private Set<String> serverCaps;
 
-    private DefaultCommitNotificationProducer commitNot;
-    private NetconfServerDispatcher dispatch;
+    public ConcurrentClientsTest(int nettyThreads, Class<? extends Runnable> clientRunnable, Set<String> serverCaps) {
+        this.nettyThreads = nettyThreads;
+        this.clientRunnable = clientRunnable;
+        this.serverCaps = serverCaps;
+    }
 
+    @Parameterized.Parameters()
+    public static Collection<Object[]> data() {
+        return Arrays.asList(new Object[][]{
+                {4, TestingNetconfClientRunnable.class, NetconfServerSessionNegotiatorFactory.DEFAULT_BASE_CAPABILITIES},
+                {1, TestingNetconfClientRunnable.class, NetconfServerSessionNegotiatorFactory.DEFAULT_BASE_CAPABILITIES},
+                // empty set of capabilities = only base 1.0 netconf capability
+                {4, TestingNetconfClientRunnable.class, Collections.emptySet()},
+                {4, TestingNetconfClientRunnable.class, getOnlyExiServerCaps()},
+                {4, TestingNetconfClientRunnable.class, getOnlyChunkServerCaps()},
+
+                {4, BlockingClientRunnable.class, getOnlyExiServerCaps()},
+                {1, BlockingClientRunnable.class, getOnlyExiServerCaps()},
+        });
+    }
 
+    private EventLoopGroup nettyGroup;
+    private NetconfClientDispatcher netconfClientDispatcher;
+
+    private DefaultCommitNotificationProducer commitNot;
 
     HashedWheelTimer hashedWheelTimer;
+    private TestingNetconfOperation testingNetconfOperation;
 
     public static SessionMonitoringService createMockedMonitoringService() {
         SessionMonitoringService monitoring = mock(SessionMonitoringService.class);
@@ -78,27 +127,41 @@ public class ConcurrentClientsTest {
         return monitoring;
     }
 
+    @BeforeClass
+    public static void setUpClientExecutor() {
+        clientExecutor = Executors.newFixedThreadPool(CONCURRENCY, new ThreadFactory() {
+            int i = 1;
+
+            @Override
+            public Thread newThread(final Runnable r) {
+                Thread thread = new Thread(r);
+                thread.setName("client-" + i++);
+                thread.setDaemon(true);
+                return thread;
+            }
+        });
+    }
+
     @Before
     public void setUp() throws Exception {
-
-        nettyGroup = new NioEventLoopGroup();
-        NetconfHelloMessageAdditionalHeader additionalHeader = new NetconfHelloMessageAdditionalHeader("uname", "10.10.10.1", "830", "tcp", "client");
-        netconfClientDispatcher = new NetconfClientDispatcher( nettyGroup, nettyGroup, additionalHeader, 5000);
+        hashedWheelTimer = new HashedWheelTimer();
+        nettyGroup = new NioEventLoopGroup(nettyThreads);
+        netconfClientDispatcher = new NetconfClientDispatcherImpl(nettyGroup, nettyGroup, hashedWheelTimer);
 
         NetconfOperationServiceFactoryListenerImpl factoriesListener = new NetconfOperationServiceFactoryListenerImpl();
-        factoriesListener.onAddNetconfOperationServiceFactory(mockOpF());
+
+        testingNetconfOperation = new TestingNetconfOperation();
+        factoriesListener.onAddNetconfOperationServiceFactory(new TestingOperationServiceFactory(testingNetconfOperation));
 
         SessionIdProvider idProvider = new SessionIdProvider();
-        hashedWheelTimer = new HashedWheelTimer();
+
         NetconfServerSessionNegotiatorFactory serverNegotiatorFactory = new NetconfServerSessionNegotiatorFactory(
-                hashedWheelTimer, factoriesListener, idProvider, 5000, commitNot, createMockedMonitoringService());
+                hashedWheelTimer, factoriesListener, idProvider, 5000, commitNot, createMockedMonitoringService(), serverCaps);
 
         commitNot = new DefaultCommitNotificationProducer(ManagementFactory.getPlatformMBeanServer());
 
-
-
         NetconfServerDispatcher.ServerChannelInitializer serverChannelInitializer = new NetconfServerDispatcher.ServerChannelInitializer(serverNegotiatorFactory);
-        dispatch = new NetconfServerDispatcher(serverChannelInitializer, nettyGroup, nettyGroup);
+        final NetconfServerDispatcher dispatch = new NetconfServerDispatcher(serverChannelInitializer, nettyGroup, nettyGroup);
 
         ChannelFuture s = dispatch.createServer(netconfAddress);
         s.await();
@@ -106,111 +169,131 @@ public class ConcurrentClientsTest {
 
     @After
     public void tearDown(){
+        commitNot.close();
         hashedWheelTimer.stop();
-        nettyGroup.shutdownGracefully();
+        try {
+            nettyGroup.shutdownGracefully().get();
+        } catch (InterruptedException | ExecutionException e) {
+            logger.warn("Ignoring exception while cleaning up after test", e);
+        }
     }
 
-    private NetconfOperationServiceFactory mockOpF() {
-        return new NetconfOperationServiceFactory() {
-            @Override
-            public NetconfOperationService createService(String netconfSessionIdForReporting) {
-                return new NetconfOperationService() {
-                    @Override
-                    public Set<Capability> getCapabilities() {
-                        return Collections.emptySet();
-                    }
-
-                    @Override
-                    public Set<NetconfOperation> getNetconfOperations() {
-                        return Sets.<NetconfOperation> newHashSet(new NetconfOperation() {
-                            @Override
-                            public HandlingPriority canHandle(Document message) {
-                                return HandlingPriority.getHandlingPriority(Integer.MAX_VALUE);
-                            }
-
-                            @Override
-                            public Document handle(Document requestMessage, NetconfOperationChainedExecution subsequentOperation) throws NetconfDocumentedException {
-                                try {
-                                    return XmlUtil.readXmlToDocument("<test/>");
-                                } catch (Exception e) {
-                                    throw new RuntimeException(e);
-                                }
-                            }
-                        });
-                    }
-
-                    @Override
-                    public void close() {
-                    }
-                };
-            }
-        };
+    @AfterClass
+    public static void tearDownClientExecutor() {
+        clientExecutor.shutdownNow();
     }
 
-    @After
-    public void cleanUp() throws Exception {
-        commitNot.close();
-    }
+    @Test(timeout = CONCURRENCY * 1000)
+    public void testConcurrentClients() throws Exception {
 
-    @Test
-    public void multipleClients() throws Exception {
-        List<TestingThread> threads = new ArrayList<>();
+        List<Future<?>> futures = Lists.newArrayListWithCapacity(CONCURRENCY);
 
-        final int attempts = 5;
         for (int i = 0; i < CONCURRENCY; i++) {
-            TestingThread thread = new TestingThread(String.valueOf(i), attempts);
-            threads.add(thread);
-            thread.start();
+            futures.add(clientExecutor.submit(getInstanceOfClientRunnable()));
         }
 
-        for (TestingThread thread : threads) {
-            thread.join();
-            if(thread.thrownException.isPresent()) {
-                Exception exception = thread.thrownException.get();
-                logger.error("Thread for testing client failed", exception);
-                fail("Client thread " + thread + " failed: " + exception.getMessage());
+        for (Future<?> future : futures) {
+            try {
+                future.get();
+            } catch (InterruptedException e) {
+                throw new IllegalStateException(e);
+            } catch (ExecutionException e) {
+                logger.error("Thread for testing client failed", e);
+                fail("Client failed: " + e.getMessage());
             }
         }
+
+        assertEquals(CONCURRENCY, testingNetconfOperation.getMessageCount());
     }
 
-    @Test
-    public void synchronizationTest() throws Exception {
-        new BlockingThread("foo").run2();
+    public static Set<String> getOnlyExiServerCaps() {
+        return Sets.newHashSet(
+                XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_BASE_1_0,
+                XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_CAPABILITY_EXI_1_0
+        );
     }
 
-    @Test
-    public void multipleBlockingClients() throws Exception {
-        List<BlockingThread> threads = new ArrayList<>();
-        for (int i = 0; i < CONCURRENCY; i++) {
-            BlockingThread thread = new BlockingThread(String.valueOf(i));
-            threads.add(thread);
-            thread.start();
+    public static Set<String> getOnlyChunkServerCaps() {
+        return Sets.newHashSet(
+                XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_BASE_1_0,
+                XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_BASE_1_1
+        );
+    }
+
+    public Runnable getInstanceOfClientRunnable() throws Exception {
+        return clientRunnable.getConstructor(ConcurrentClientsTest.class).newInstance(this);
+    }
+
+    /**
+     * Responds to all operations except start-exi and counts all requests
+     */
+    private static class TestingNetconfOperation implements NetconfOperation {
+
+        private final AtomicLong counter = new AtomicLong();
+
+        @Override
+        public HandlingPriority canHandle(Document message) {
+            return XmlUtil.toString(message).contains(NetconfStartExiMessage.START_EXI) ?
+                    HandlingPriority.CANNOT_HANDLE :
+                    HandlingPriority.HANDLE_WITH_MAX_PRIORITY;
         }
 
-        for (BlockingThread thread : threads) {
-            thread.join();
-            if(thread.thrownException.isPresent()) {
-                Exception exception = thread.thrownException.get();
-                logger.error("Thread for testing client failed", exception);
-                fail("Client thread " + thread + " failed: " + exception.getMessage());
+        @Override
+        public Document handle(Document requestMessage, NetconfOperationChainedExecution subsequentOperation) throws NetconfDocumentedException {
+            try {
+                logger.info("Handling netconf message from test {}", XmlUtil.toString(requestMessage));
+                counter.getAndIncrement();
+                return XmlUtil.readXmlToDocument("<test/>");
+            } catch (Exception e) {
+                throw new RuntimeException(e);
             }
         }
+
+        public long getMessageCount() {
+            return counter.get();
+        }
     }
 
-    class BlockingThread extends Thread {
-        private Optional<Exception> thrownException;
+    /**
+     * Hardcoded operation service factory
+     */
+    private static class TestingOperationServiceFactory implements NetconfOperationServiceFactory {
+        private final NetconfOperation[] operations;
 
-        public BlockingThread(String name) {
-            super("client-" + name);
+        public TestingOperationServiceFactory(final NetconfOperation... operations) {
+            this.operations = operations;
         }
 
+        @Override
+        public NetconfOperationService createService(String netconfSessionIdForReporting) {
+            return new NetconfOperationService() {
+                @Override
+                public Set<Capability> getCapabilities() {
+                    return Collections.emptySet();
+                }
+
+                @Override
+                public Set<NetconfOperation> getNetconfOperations() {
+                    return Sets.newHashSet(operations);
+                }
+
+                @Override
+                public void close() {}
+            };
+        }
+    }
+
+    /**
+     * Pure socket based blocking client
+     */
+    public final class BlockingClientRunnable implements Runnable {
+
         @Override
         public void run() {
             try {
                 run2();
-                thrownException = Optional.absent();
             } catch (Exception e) {
-                thrownException = Optional.of(e);
+                throw new IllegalStateException(Thread.currentThread().getName(), e);
             }
         }
 
@@ -246,35 +329,44 @@ public class ConcurrentClientsTest {
         }
     }
 
-    class TestingThread extends Thread {
-
-        private final String clientId;
-        private final int attempts;
-        private Optional<Exception> thrownException;
-
-        TestingThread(String clientId, int attempts) {
-            this.clientId = clientId;
-            this.attempts = attempts;
-            setName("client-" + clientId);
-        }
+    /**
+     * TestingNetconfClient based runnable
+     */
+    public final class TestingNetconfClientRunnable implements Runnable {
 
         @Override
         public void run() {
             try {
-                final TestingNetconfClient netconfClient = new TestingNetconfClient(clientId, netconfAddress, netconfClientDispatcher);
+                final TestingNetconfClient netconfClient =
+                        new TestingNetconfClient(Thread.currentThread().getName(), netconfClientDispatcher, getClientConfig());
                 long sessionId = netconfClient.getSessionId();
-                logger.info("Client with sessionid {} hello exchanged", sessionId);
+                logger.info("Client with session id {}: hello exchanged", sessionId);
 
                 final NetconfMessage getMessage = XmlFileLoader
                         .xmlFileToNetconfMessage("netconfMessages/getConfig.xml");
                 NetconfMessage result = netconfClient.sendRequest(getMessage).get();
-                logger.info("Client with sessionid {} got result {}", sessionId, result);
+                logger.info("Client with session id {}: got result {}", sessionId, result);
+
+                Preconditions.checkState(NetconfMessageUtil.isErrorMessage(result) == false,
+                        "Received error response: " + XmlUtil.toString(result.getDocument()) + " to request: "
+                                + XmlUtil.toString(getMessage.getDocument()));
+
                 netconfClient.close();
-                logger.info("Client with session id {} ended", sessionId);
-                thrownException = Optional.absent();
+                logger.info("Client with session id {}: ended", sessionId);
             } catch (final Exception e) {
-                thrownException = Optional.of(e);
+                throw new IllegalStateException(Thread.currentThread().getName(), e);
             }
         }
+
+        private NetconfClientConfiguration getClientConfig() {
+            final NetconfClientConfigurationBuilder b = NetconfClientConfigurationBuilder.create();
+            b.withAddress(netconfAddress);
+            b.withAdditionalHeader(new NetconfHelloMessageAdditionalHeader("uname", "10.10.10.1", "830", "tcp",
+                    "client"));
+            b.withSessionListener(new SimpleNetconfClientSessionListener());
+            b.withReconnectStrategy(new NeverReconnectStrategy(GlobalEventExecutor.INSTANCE,
+                    NetconfClientConfigurationBuilder.DEFAULT_CONNECTION_TIMEOUT_MILLIS));
+            return b.build();
+        }
     }
 }
diff --git a/opendaylight/netconf/netconf-impl/src/test/resources/org/opendaylight/controller/netconf/impl/chunked1.txt b/opendaylight/netconf/netconf-impl/src/test/resources/org/opendaylight/controller/netconf/impl/chunked1.txt
deleted file mode 100644 (file)
index aad7239..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-
-#24
-<rpc message-id="101" xm
-#28
-lns="urn:ietf:params:xml:ns:
-#2
-ne
-#33
-tconf:base:1.0">
-  <my-own-method
-#3
- xm
-#13
-lns="http://e
-#34
-xample.net/me/my-own/1.0">
-    <my
-#8
--first-p
-#21
-arameter>14</my-first
-#26
--parameter>
-    <another-p
-#23
-arameter>fred</another-
-#31
-parameter>
- </my-own-method>
- <
-#2
-/r
-#3
-pc>
-##
diff --git a/opendaylight/netconf/netconf-impl/src/test/resources/org/opendaylight/controller/netconf/impl/chunked2.txt b/opendaylight/netconf/netconf-impl/src/test/resources/org/opendaylight/controller/netconf/impl/chunked2.txt
deleted file mode 100644 (file)
index a36a85e..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-
-#22
-<rpc message-id="101" 
-#24
-xmlns="urn:ietf:params:x
-#15
-ml:ns:netconf:b
-#54
-ase:1.0">
-  <get-config>
-      <source>
-            <r
-#2
-un
-#9
-ning/>
-  
-#18
-  </source>    <fi
-#33
-lter type="subtree">
-      <top x
-#4
-mlns
-#31
-="http://example.com/schema/1.2
-#15
-/config">
-     
-#19
-   <users>
-        
-#8
-     <us
-#3
-er/
-#5
->
-   
-#77
-     </users>
-           </top>
-               </filter>
-                 </g
-#17
-et-config>
-</rpc>
-##
diff --git a/opendaylight/netconf/netconf-impl/src/test/resources/org/opendaylight/controller/netconf/impl/chunked3.txt b/opendaylight/netconf/netconf-impl/src/test/resources/org/opendaylight/controller/netconf/impl/chunked3.txt
deleted file mode 100644 (file)
index d9dc43d..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-
-#43
-<rpc message-id="101" xmlns="urn:ietf:param
-#14
-s:xml:ns:netco
-#14
-nf:base:1.0">
-
-#26
-<get-config>
-    <source>
-
-#35
-     <running/>
-         </source>
-
-#39
-    <filter type="subtree">
-          <
-#40
-top xmlns="http://example.com/schema/1.2
-#26
-/config">
-        <users>
-
-#36
-     <user>
-                 <name>f
-#56
-red</name>
-          </user>
-                  </users>
-
-#28
-      </top>
-          </fil
-#1
-t
-#28
-er>
-  </get-config>
-  </rpc>
-##
diff --git a/opendaylight/netconf/netconf-impl/src/test/resources/org/opendaylight/controller/netconf/impl/chunked4.txt b/opendaylight/netconf/netconf-impl/src/test/resources/org/opendaylight/controller/netconf/impl/chunked4.txt
deleted file mode 100644 (file)
index 0b8a102..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-
-#17
-<rpc message-id="
-#25
-101" xmlns="urn:ietf:para
-#19
-ms:xml:ns:netconf:b
-#3
-ase
-#19
-:1.0">
-  <get-confi
-#61
-g>
-    <source>
-          <running/>
-              </source>
-
-#43
-  <filter type="subtree">
-        <!-- requ
-#13
-est a text ve
-#22
-rsion of the configura
-#9
-tion -->
-
-#16
-   <config-text 
-#45
-xmlns="http://example.com/text/1.2/config"/>
-
-#22
-    </filter>
-      </
-#18
-get-config>
-</rpc>
-##
diff --git a/opendaylight/netconf/netconf-impl/src/test/resources/org/opendaylight/controller/netconf/impl/chunked5.txt b/opendaylight/netconf/netconf-impl/src/test/resources/org/opendaylight/controller/netconf/impl/chunked5.txt
deleted file mode 100644 (file)
index f8f3c4d..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-
-#43
-<rpc message-id="101" xmlns="urn:ietf:param
-#41
-s:xml:ns:netconf:base:1.0">
-  <edit-confi
-#29
-g>
-    <target>
-          <ru
-#13
-nning/>
-    <
-#4
-/tar
-#18
-get>
-    <config>
-
-#41
-  <top xmlns="http://example.com/schema/1
-#32
-.2/config">
-        <interface>
-
-#29
-        <name>Ethernet0/0</na
-#30
-me>
-          <mtu>1500</mtu>
-
-#61
-</interface>
-      </top>
-          </config>
-            </e
-#9
-dit-confi
-#9
-g>
-</rpc>
-##
diff --git a/opendaylight/netconf/netconf-impl/src/test/resources/org/opendaylight/controller/netconf/impl/listener/databaseinteractions/jolokia_config_bean_response.txt b/opendaylight/netconf/netconf-impl/src/test/resources/org/opendaylight/controller/netconf/impl/listener/databaseinteractions/jolokia_config_bean_response.txt
deleted file mode 100644 (file)
index 2ae32ef..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-curl http://localhost:17777/jolokia/read/org.opendaylight.controller:instanceName=fixed1,type=ConfigBean,interfaceName=testing-threadpool | jsonpp
-{
-    "request": {
-        "mbean": "org.opendaylight.controller:instanceName=fixed1,interfaceName=testing-threadpool,type=ConfigBean",
-        "type": "read"
-    },
-    "status": 200,
-    "timestamp": 1362416252,
-    "value": {
-        "ExportedInterfaces": [
-            "testing-threadpool",
-            "modifiable-threadpool"
-        ],
-        "ImplementationName": "fixed",
-        "ThreadCount": 10,
-        "TriggerNewInstanceCreation": false
-    }
-}
\ No newline at end of file
diff --git a/opendaylight/netconf/netconf-impl/src/test/resources/org/opendaylight/controller/netconf/impl/listener/databaseinteractions/jolokia_lookupConfigBeans.txt b/opendaylight/netconf/netconf-impl/src/test/resources/org/opendaylight/controller/netconf/impl/listener/databaseinteractions/jolokia_lookupConfigBeans.txt
deleted file mode 100644 (file)
index 2ae705a..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-$ curl 'http://localhost:17777/jolokia/exec/org.opendaylight.controller:type=ConfigRegistry/lookupConfigBeans()' | jsonpp
-{
-    "request": {
-        "mbean": "org.opendaylight.controller:type=ConfigRegistry",
-        "operation": "lookupConfigBeans()",
-        "type": "exec"
-    },
-    "status": 200,
-    "timestamp": 1362417043,
-    "value": [
-        {
-            "objectName": "org.opendaylight.controller:instanceName=fixed1,interfaceName=modifiable-threadpool,type=ConfigBean"
-        },
-        {
-            "objectName": "org.opendaylight.controller:instanceName=fixed1,interfaceName=testing-threadpool,type=ConfigBean"
-        }
-    ]
-}
diff --git a/opendaylight/netconf/netconf-impl/src/test/resources/org/opendaylight/controller/netconf/impl/notused/client_commit.xml b/opendaylight/netconf/netconf-impl/src/test/resources/org/opendaylight/controller/netconf/impl/notused/client_commit.xml
deleted file mode 100644 (file)
index 6eca609..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<rpc message-id="104"
-     xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
-    <commit/>
-</rpc>
\ No newline at end of file
diff --git a/opendaylight/netconf/netconf-impl/src/test/resources/org/opendaylight/controller/netconf/impl/notused/client_lock_candidate.xml b/opendaylight/netconf/netconf-impl/src/test/resources/org/opendaylight/controller/netconf/impl/notused/client_lock_candidate.xml
deleted file mode 100644 (file)
index 6a9ed63..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<rpc message-id="102"
-     xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
-    <lock>
-        <target>
-            <candidate/>
-        </target>
-    </lock>
-</rpc>
\ No newline at end of file
diff --git a/opendaylight/netconf/netconf-impl/src/test/resources/org/opendaylight/controller/netconf/impl/notused/client_lock_running.xml b/opendaylight/netconf/netconf-impl/src/test/resources/org/opendaylight/controller/netconf/impl/notused/client_lock_running.xml
deleted file mode 100644 (file)
index 2d66c45..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<rpc message-id="101"
-     xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
-    <lock>
-        <target>
-            <running/>
-        </target>
-    </lock>
-</rpc>
\ No newline at end of file
diff --git a/opendaylight/netconf/netconf-impl/src/test/resources/org/opendaylight/controller/netconf/impl/notused/client_modify_candidate.xml b/opendaylight/netconf/netconf-impl/src/test/resources/org/opendaylight/controller/netconf/impl/notused/client_modify_candidate.xml
deleted file mode 100644 (file)
index ce67845..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-<rpc message-id="103"
-     xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
-    <edit-config>
-        <target>
-            <candidate/>
-        </target>
-        <default-operation>none</default-operation>
-        <test-option>test-then-set</test-option>
-        <error-option>stop-on-error</error-option>
-        <nc:config
-                xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0"
-                xmlns="uri-for-my-data-model-namespace">
-            <some-existing-node>
-                <my-new-node nc:operation="create">
-                    <my-new-leaf>7</my-new-leaf>
-                </my-new-node>
-            </some-existing-node>
-        </nc:config>
-    </edit-config>
-</rpc>
\ No newline at end of file
diff --git a/opendaylight/netconf/netconf-impl/src/test/resources/org/opendaylight/controller/netconf/impl/notused/client_unlock_candidate.xml b/opendaylight/netconf/netconf-impl/src/test/resources/org/opendaylight/controller/netconf/impl/notused/client_unlock_candidate.xml
deleted file mode 100644 (file)
index dd6fe1b..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<rpc message-id="105"
-     xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
-    <unlock>
-        <target>
-            <candidate/>
-        </target>
-    </unlock>
-</rpc>
\ No newline at end of file
diff --git a/opendaylight/netconf/netconf-impl/src/test/resources/org/opendaylight/controller/netconf/impl/notused/client_unlock_running.xml b/opendaylight/netconf/netconf-impl/src/test/resources/org/opendaylight/controller/netconf/impl/notused/client_unlock_running.xml
deleted file mode 100644 (file)
index f94af46..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<rpc message-id="106"
-     xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
-    <unlock>
-        <target>
-            <running/>
-        </target>
-    </unlock>
-</rpc>
\ No newline at end of file
diff --git a/opendaylight/netconf/netconf-impl/src/test/resources/org/opendaylight/controller/netconf/impl/notused/server_error_missing_attribute.xml b/opendaylight/netconf/netconf-impl/src/test/resources/org/opendaylight/controller/netconf/impl/notused/server_error_missing_attribute.xml
deleted file mode 100644 (file)
index c70184e..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
-    <rpc-error>
-        <error-type>rpc</error-type>
-        <error-tag>missing-attribute</error-tag>
-        <error-severity>error</error-severity>
-        <error-info>
-            <bad-attribute>message-id</bad-attribute>
-            <bad-element>rpc</bad-element>
-        </error-info>
-    </rpc-error>
-</rpc-reply>
diff --git a/opendaylight/netconf/netconf-impl/src/test/resources/testConfigs/input.json b/opendaylight/netconf/netconf-impl/src/test/resources/testConfigs/input.json
deleted file mode 100644 (file)
index fcef6b7..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-   "value":null,
-   "status":200,
-   "request": {
-                "type":"exec",
-                "mbean":"java.util.logging:type=Logging",
-                "operation":"setLoggerLevel",
-                "arguments":["global","INFO"]
-              }
-}
\ No newline at end of file
diff --git a/opendaylight/netconf/netconf-impl/src/test/resources/testConfigs/input.xml b/opendaylight/netconf/netconf-impl/src/test/resources/testConfigs/input.xml
deleted file mode 100644 (file)
index 09ba714..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<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
diff --git a/opendaylight/netconf/netconf-impl/src/test/resources/testConfigs/inputList.xml b/opendaylight/netconf/netconf-impl/src/test/resources/testConfigs/inputList.xml
deleted file mode 100644 (file)
index 011d472..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<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
diff --git a/opendaylight/netconf/netconf-impl/src/test/resources/testConfigs/inputMap.xml b/opendaylight/netconf/netconf-impl/src/test/resources/testConfigs/inputMap.xml
deleted file mode 100644 (file)
index 947335d..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-<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
diff --git a/opendaylight/netconf/netconf-impl/src/test/resources/testConfigs/inputMultiple.xml b/opendaylight/netconf/netconf-impl/src/test/resources/testConfigs/inputMultiple.xml
deleted file mode 100644 (file)
index 2ad485f..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-<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
diff --git a/opendaylight/netconf/netconf-impl/src/test/resources/testConfigs/inputSetter.xml b/opendaylight/netconf/netconf-impl/src/test/resources/testConfigs/inputSetter.xml
deleted file mode 100644 (file)
index a5882d6..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<jmxbean>
-    <mBean>org.opendaylight.controller:type=AppDeployer</mBean>
-    <type>WRITE</type>
-    <attribute>attribute</attribute>
-    <value>22</value>
-</jmxbean>
\ No newline at end of file
diff --git a/opendaylight/netconf/netconf-impl/src/test/resources/testConfigs/inputSetterList.xml b/opendaylight/netconf/netconf-impl/src/test/resources/testConfigs/inputSetterList.xml
deleted file mode 100644 (file)
index 24d2171..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<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
diff --git a/opendaylight/netconf/netconf-impl/src/test/resources/testConfigs/inputSetterMap.xml b/opendaylight/netconf/netconf-impl/src/test/resources/testConfigs/inputSetterMap.xml
deleted file mode 100644 (file)
index 9af105f..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<jmxbean>
-    <mBean>org.opendaylight.controller:type=AppDeployer</mBean>
-    <type>WRITE</type>
-    <attribute>setAtr</attribute>
-    <value>
-        <abc>1</abc>
-        <bcd>2</bcd>
-    </value>
-</jmxbean>
diff --git a/opendaylight/netconf/netconf-impl/src/test/resources/testConfigs/map.json b/opendaylight/netconf/netconf-impl/src/test/resources/testConfigs/map.json
deleted file mode 100644 (file)
index d753866..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-{
-   "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 b330f9bcd4f05b915e76caf878dc0fa25e6489e2..66106075d320b14269ebb0a05ffde05df42ce740 100644 (file)
       <artifactId>netty-config-api</artifactId>
       <scope>test</scope>
     </dependency>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>sal-binding-it</artifactId>
-    </dependency>
     <dependency>
       <groupId>org.opendaylight.controller</groupId>
       <artifactId>yang-test</artifactId>
       <scope>test</scope>
     </dependency>
-    <dependency>
-      <groupId>org.ops4j.pax.tinybundles</groupId>
-      <artifactId>tinybundles</artifactId>
-      <version>${tinybundles.version}</version>
-      <scope>test</scope>
-    </dependency>
   </dependencies>
 
   <build>
index b81f950cb362cf8f810201bfe98c983e1bf0988d..d4073e5c178f1748ef71ee8466e70982646dab94 100644 (file)
@@ -7,22 +7,30 @@
  */
 package org.opendaylight.controller.netconf.it;
 
-import io.netty.channel.EventLoopGroup;
-import io.netty.channel.nio.NioEventLoopGroup;
-import io.netty.util.HashedWheelTimer;
+import java.net.InetSocketAddress;
+
 import org.junit.After;
 import org.junit.Before;
 import org.opendaylight.controller.config.manager.impl.AbstractConfigTest;
+import org.opendaylight.controller.netconf.client.SimpleNetconfClientSessionListener;
+import org.opendaylight.controller.netconf.client.conf.NetconfClientConfiguration;
+import org.opendaylight.controller.netconf.client.conf.NetconfClientConfigurationBuilder;
 import org.opendaylight.controller.netconf.impl.DefaultCommitNotificationProducer;
 import org.opendaylight.controller.netconf.impl.NetconfServerDispatcher;
 import org.opendaylight.controller.netconf.impl.NetconfServerSessionNegotiatorFactory;
 import org.opendaylight.controller.netconf.impl.SessionIdProvider;
 import org.opendaylight.controller.netconf.impl.osgi.NetconfOperationServiceFactoryListenerImpl;
 import org.opendaylight.controller.netconf.impl.osgi.SessionMonitoringService;
+import org.opendaylight.protocol.framework.NeverReconnectStrategy;
+
+import io.netty.channel.EventLoopGroup;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.util.HashedWheelTimer;
+import io.netty.util.concurrent.GlobalEventExecutor;
 
 public class AbstractNetconfConfigTest extends AbstractConfigTest {
 
-    protected EventLoopGroup nettyThreadgroup;
+    private EventLoopGroup nettyThreadgroup;
     private HashedWheelTimer hashedWheelTimer;
 
     @Before
@@ -31,7 +39,6 @@ public class AbstractNetconfConfigTest extends AbstractConfigTest {
         hashedWheelTimer = new HashedWheelTimer();
     }
 
-
     protected NetconfServerDispatcher createDispatcher(
             NetconfOperationServiceFactoryListenerImpl factoriesListener, SessionMonitoringService sessionMonitoringService,
             DefaultCommitNotificationProducer commitNotifier) {
@@ -45,6 +52,13 @@ public class AbstractNetconfConfigTest extends AbstractConfigTest {
         return new NetconfServerDispatcher(serverChannelInitializer, nettyThreadgroup, nettyThreadgroup);
     }
 
+    protected HashedWheelTimer getHashedWheelTimer() {
+        return hashedWheelTimer;
+    }
+
+    protected EventLoopGroup getNettyThreadgroup() {
+        return nettyThreadgroup;
+    }
 
     @After
     public void cleanUpTimer() {
@@ -52,4 +66,13 @@ public class AbstractNetconfConfigTest extends AbstractConfigTest {
         nettyThreadgroup.shutdownGracefully();
     }
 
+    public NetconfClientConfiguration getClientConfiguration(final InetSocketAddress tcpAddress, final int timeout) {
+        final NetconfClientConfigurationBuilder b = NetconfClientConfigurationBuilder.create();
+        b.withAddress(tcpAddress);
+        b.withSessionListener(new SimpleNetconfClientSessionListener());
+        b.withReconnectStrategy(new NeverReconnectStrategy(GlobalEventExecutor.INSTANCE,
+                timeout));
+        b.withConnectionTimeoutMillis(timeout);
+        return b.build();
+    }
 }
index d7f77148e812f98cf466f1250ee49d82aee2cb71..3fa1b0195a4a95c0acda2a04edbe7a556c7dfb58 100644 (file)
@@ -7,14 +7,7 @@
  */
 package org.opendaylight.controller.netconf.it;
 
-import org.apache.commons.io.IOUtils;
-import org.opendaylight.controller.netconf.confignetconfconnector.osgi.YangStoreException;
-import org.opendaylight.controller.netconf.confignetconfconnector.osgi.YangStoreService;
-import org.opendaylight.controller.netconf.confignetconfconnector.osgi.YangStoreServiceImpl;
-import org.opendaylight.controller.netconf.confignetconfconnector.osgi.YangStoreSnapshot;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
-import org.opendaylight.yangtools.yang.model.api.SchemaContextProvider;
-import org.opendaylight.yangtools.yang.parser.impl.YangParserImpl;
+import static org.junit.Assert.assertNotNull;
 
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
@@ -24,7 +17,14 @@ import java.util.Collection;
 import java.util.HashSet;
 import java.util.List;
 
-import static org.junit.Assert.assertNotNull;
+import org.apache.commons.io.IOUtils;
+import org.opendaylight.controller.netconf.confignetconfconnector.osgi.YangStoreException;
+import org.opendaylight.controller.netconf.confignetconfconnector.osgi.YangStoreService;
+import org.opendaylight.controller.netconf.confignetconfconnector.osgi.YangStoreServiceImpl;
+import org.opendaylight.controller.netconf.confignetconfconnector.osgi.YangStoreSnapshot;
+import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.SchemaContextProvider;
+import org.opendaylight.yangtools.yang.parser.impl.YangParserImpl;
 
 public class HardcodedYangStoreService implements YangStoreService {
 
index 8b2af393439e932ac069481ad3670b3b154fe0cb..29afa93d373cb5e7a7b86c57b0f93b6cceeeb48e 100644 (file)
@@ -17,7 +17,6 @@ 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 java.io.IOException;
 import java.io.InputStream;
@@ -43,6 +42,7 @@ 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.NetconfClientDispatcher;
+import org.opendaylight.controller.netconf.client.NetconfClientDispatcherImpl;
 import org.opendaylight.controller.netconf.client.test.TestingNetconfClient;
 import org.opendaylight.controller.netconf.confignetconfconnector.osgi.NetconfOperationServiceFactoryImpl;
 import org.opendaylight.controller.netconf.confignetconfconnector.osgi.YangStoreException;
@@ -65,20 +65,18 @@ import org.xml.sax.SAXException;
 
 import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
+import io.netty.channel.ChannelFuture;
 
 public class NetconfConfigPersisterITTest extends AbstractNetconfConfigTest {
 
     private static final InetSocketAddress tcpAddress = new InetSocketAddress("127.0.0.1", 12023);
 
-
-
     private NetconfClientDispatcher clientDispatcher;
-
-    DefaultCommitNotificationProducer commitNotifier;
+    private DefaultCommitNotificationProducer commitNotifier;
 
     @Before
     public void setUp() throws Exception {
-        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(NetconfITTest.getModuleFactoriesS().toArray(
+        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(mockedContext,NetconfITTest.getModuleFactoriesS().toArray(
                 new ModuleFactory[0])));
 
         NetconfMonitoringServiceImpl monitoringService = new NetconfMonitoringServiceImpl(getNetconfOperationProvider());
@@ -95,7 +93,7 @@ public class NetconfConfigPersisterITTest extends AbstractNetconfConfigTest {
         ChannelFuture s = dispatch.createServer(tcpAddress);
         s.await();
 
-        clientDispatcher = new NetconfClientDispatcher(nettyThreadgroup, nettyThreadgroup, 5000);
+        clientDispatcher = new NetconfClientDispatcherImpl(getNettyThreadgroup(), getNettyThreadgroup(), getHashedWheelTimer());
     }
 
     @After
@@ -124,12 +122,12 @@ public class NetconfConfigPersisterITTest extends AbstractNetconfConfigTest {
         VerifyingNotificationListener notificationVerifier = createCommitNotificationListener();
         VerifyingPersister mockedAggregator = mockAggregator();
 
-        try (TestingNetconfClient persisterClient = new TestingNetconfClient("persister", tcpAddress, 4000, clientDispatcher)) {
+        try (TestingNetconfClient persisterClient = new TestingNetconfClient("persister", clientDispatcher, getClientConfiguration(tcpAddress, 4000))) {
             try (ConfigPersisterNotificationHandler configPersisterNotificationHandler = new ConfigPersisterNotificationHandler(
                     platformMBeanServer, mockedAggregator)) {
 
 
-                try (TestingNetconfClient netconfClient = new TestingNetconfClient("client", tcpAddress, 4000, clientDispatcher)) {
+                try (TestingNetconfClient netconfClient = new TestingNetconfClient("client", clientDispatcher, getClientConfiguration(tcpAddress, 4000))) {
                     NetconfMessage response = netconfClient.sendMessage(loadGetConfigMessage());
                     assertContainsElementWithName(response.getDocument(), "modules");
                     assertContainsElementWithName(response.getDocument(), "services");
index e45a249ad4e1f901075060451c6865a5fd54b585..4dc4b707d4708253579e8135ddd1b6c1e95af1c9 100644 (file)
@@ -8,45 +8,71 @@
 
 package org.opendaylight.controller.netconf.it;
 
-import io.netty.channel.ChannelFuture;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.management.ManagementFactory;
+import java.net.InetSocketAddress;
+import java.nio.file.Files;
+import java.util.Collection;
+import java.util.List;
+
+import junit.framework.Assert;
+
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
 import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;
 import org.opendaylight.controller.config.spi.ModuleFactory;
+import org.opendaylight.controller.netconf.api.NetconfMessage;
 import org.opendaylight.controller.netconf.client.NetconfClientDispatcher;
+import org.opendaylight.controller.netconf.client.NetconfClientDispatcherImpl;
+import org.opendaylight.controller.netconf.client.SimpleNetconfClientSessionListener;
+import org.opendaylight.controller.netconf.client.conf.NetconfClientConfiguration;
+import org.opendaylight.controller.netconf.client.conf.NetconfClientConfigurationBuilder;
 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;
-
-import javax.net.ssl.KeyManagerFactory;
-import javax.net.ssl.SSLContext;
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.management.ManagementFactory;
-import java.net.InetSocketAddress;
-import java.security.KeyManagementException;
-import java.security.KeyStoreException;
-import java.security.NoSuchAlgorithmException;
-import java.security.UnrecoverableKeyException;
-import java.security.cert.CertificateException;
-import java.util.Collection;
-import java.util.List;
+import org.opendaylight.controller.netconf.ssh.NetconfSSHServer;
+import org.opendaylight.controller.netconf.ssh.authentication.AuthProvider;
+import org.opendaylight.controller.netconf.ssh.authentication.PEMGenerator;
+import org.opendaylight.controller.netconf.util.handler.ssh.authentication.AuthenticationHandler;
+import org.opendaylight.controller.netconf.util.messages.NetconfMessageUtil;
+import org.opendaylight.controller.netconf.util.test.XmlFileLoader;
+import org.opendaylight.controller.netconf.util.xml.XmlUtil;
+import org.opendaylight.controller.sal.authorization.AuthResultEnum;
+import org.opendaylight.controller.usermanager.IUserManager;
+import org.opendaylight.protocol.framework.NeverReconnectStrategy;
+
+import ch.ethz.ssh2.Connection;
+import io.netty.channel.ChannelFuture;
+import io.netty.util.concurrent.GlobalEventExecutor;
 
 public class NetconfITSecureTest extends AbstractNetconfConfigTest {
 
     private static final InetSocketAddress tlsAddress = new InetSocketAddress("127.0.0.1", 12024);
+    private static final InetSocketAddress tcpAddress = new InetSocketAddress("127.0.0.1", 12023);
 
     private DefaultCommitNotificationProducer commitNot;
-    private NetconfServerDispatcher dispatchS;
-
+    private NetconfSSHServer sshServer;
+    private NetconfMessage getConfig;
 
     @Before
     public void setUp() throws Exception {
-        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(getModuleFactories().toArray(
+        this.getConfig = XmlFileLoader.xmlFileToNetconfMessage("netconfMessages/getConfig.xml");
+
+        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(mockedContext, getModuleFactories().toArray(
                 new ModuleFactory[0])));
 
         NetconfOperationServiceFactoryListenerImpl factoriesListener = new NetconfOperationServiceFactoryListenerImpl();
@@ -55,9 +81,14 @@ public class NetconfITSecureTest extends AbstractNetconfConfigTest {
         commitNot = new DefaultCommitNotificationProducer(ManagementFactory.getPlatformMBeanServer());
 
 
-        dispatchS = createDispatcher(factoriesListener);
-        ChannelFuture s = dispatchS.createServer(tlsAddress);
+        final NetconfServerDispatcher dispatchS = createDispatcher(factoriesListener);
+        ChannelFuture s = dispatchS.createServer(tcpAddress);
         s.await();
+
+        sshServer = NetconfSSHServer.start(tlsAddress.getPort(), tcpAddress, getAuthProvider());
+        Thread thread = new Thread(sshServer);
+        thread.setDaemon(true);
+        thread.start();
     }
 
     private NetconfServerDispatcher createDispatcher(NetconfOperationServiceFactoryListenerImpl factoriesListener) {
@@ -66,19 +97,10 @@ public class NetconfITSecureTest extends AbstractNetconfConfigTest {
 
     @After
     public void tearDown() throws Exception {
+        sshServer.stop();
         commitNot.close();
     }
 
-    private SSLContext getSslContext() throws KeyStoreException, NoSuchAlgorithmException, CertificateException,
-            IOException, UnrecoverableKeyException, KeyManagementException {
-        final InputStream keyStore = getClass().getResourceAsStream("/keystore.jks");
-        final InputStream trustStore = getClass().getResourceAsStream("/keystore.jks");
-        SSLContext sslContext = SSLUtil.initializeSecureContext("password", keyStore, trustStore, KeyManagerFactory.getDefaultAlgorithm());
-        keyStore.close();
-        trustStore.close();
-        return sslContext;
-    }
-
     private HardcodedYangStoreService getYangStore() throws YangStoreException, IOException {
         final Collection<InputStream> yangDependencies = NetconfITTest.getBasicYangs();
         return new HardcodedYangStoreService(yangDependencies);
@@ -90,9 +112,57 @@ public class NetconfITSecureTest extends AbstractNetconfConfigTest {
 
     @Test
     public void testSecure() throws Exception {
-        NetconfClientDispatcher dispatch = new NetconfClientDispatcher(nettyThreadgroup, nettyThreadgroup, 5000);
-        try (TestingNetconfClient netconfClient = new TestingNetconfClient("tls-client", tlsAddress, 4000, dispatch))  {
-
+        NetconfClientDispatcher dispatch = new NetconfClientDispatcherImpl(getNettyThreadgroup(), getNettyThreadgroup(), getHashedWheelTimer());
+        try (TestingNetconfClient netconfClient = new TestingNetconfClient("testing-ssh-client", dispatch, getClientConfiguration())) {
+            NetconfMessage response = netconfClient.sendMessage(getConfig);
+            Assert.assertFalse("Unexpected error message " + XmlUtil.toString(response.getDocument()),
+                    NetconfMessageUtil.isErrorMessage(response));
+
+            NetconfMessage gs = new NetconfMessage(XmlUtil.readXmlToDocument("<rpc message-id=\"2\"\n" +
+                    "     xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">\n" +
+                    "    <get-schema xmlns=\"urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring\">\n" +
+                    "        <identifier>config</identifier>\n" +
+                    "    </get-schema>\n" +
+                    "</rpc>\n"));
+
+            response = netconfClient.sendMessage(gs);
+            Assert.assertFalse("Unexpected error message " + XmlUtil.toString(response.getDocument()),
+                    NetconfMessageUtil.isErrorMessage(response));
         }
     }
+
+    public NetconfClientConfiguration getClientConfiguration() throws IOException {
+        final NetconfClientConfigurationBuilder b = NetconfClientConfigurationBuilder.create();
+        b.withAddress(tlsAddress);
+        b.withSessionListener(new SimpleNetconfClientSessionListener());
+        b.withReconnectStrategy(new NeverReconnectStrategy(GlobalEventExecutor.INSTANCE, 5000));
+        b.withProtocol(NetconfClientConfiguration.NetconfClientProtocol.SSH);
+        b.withConnectionTimeoutMillis(5000);
+        b.withAuthHandler(getAuthHandler());
+        return b.build();
+    }
+
+    public AuthProvider getAuthProvider() throws Exception {
+        final IUserManager userManager = mock(IUserManager.class);
+        doReturn(AuthResultEnum.AUTH_ACCEPT).when(userManager).authenticate(anyString(), anyString());
+
+        final File privateKeyFile = Files.createTempFile("tmp-netconf-test", "pk").toFile();
+        privateKeyFile.deleteOnExit();
+        String privateKeyPEMString = PEMGenerator.generateTo(privateKeyFile);
+        return new AuthProvider(userManager, privateKeyPEMString);
+    }
+
+    public AuthenticationHandler getAuthHandler() throws IOException {
+        final AuthenticationHandler authHandler = mock(AuthenticationHandler.class);
+        doAnswer(new Answer() {
+            @Override
+            public Object answer(final InvocationOnMock invocation) throws Throwable {
+                Connection conn = (Connection) invocation.getArguments()[0];
+                conn.authenticateWithPassword("user", "pwd");
+                return null;
+            }
+        }).when(authHandler).authenticate(any(Connection.class));
+        doReturn("auth handler").when(authHandler).toString();
+        return authHandler;
+    }
 }
index 634a18f852a05184a861fc1ab8ce1eb7073e893b..cd53995bce8a54c2bf12e2419ceab87300204edb 100644 (file)
@@ -8,28 +8,47 @@
 
 package org.opendaylight.controller.netconf.it;
 
-import ch.ethz.ssh2.Connection;
-import ch.ethz.ssh2.Session;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Sets;
-import io.netty.channel.ChannelFuture;
-import junit.framework.Assert;
-import org.apache.commons.io.IOUtils;
+import static java.util.Collections.emptyList;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.fail;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.management.ManagementFactory;
+import java.net.InetSocketAddress;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeoutException;
+
+import javax.management.ObjectName;
+import javax.xml.parsers.ParserConfigurationException;
+
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Ignore;
 import org.junit.Test;
+import org.junit.matchers.JUnitMatchers;
 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.config.yang.test.impl.DepTestImplModuleFactory;
+import org.opendaylight.controller.config.yang.test.impl.IdentityTestModuleFactory;
 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.NetconfDocumentedException;
 import org.opendaylight.controller.netconf.api.NetconfMessage;
-import org.opendaylight.controller.netconf.client.NetconfClientDispatcher;
+import org.opendaylight.controller.netconf.client.NetconfClientDispatcherImpl;
 import org.opendaylight.controller.netconf.client.test.TestingNetconfClient;
 import org.opendaylight.controller.netconf.confignetconfconnector.osgi.NetconfOperationServiceFactoryImpl;
 import org.opendaylight.controller.netconf.confignetconfconnector.osgi.YangStoreException;
@@ -40,11 +59,13 @@ import org.opendaylight.controller.netconf.impl.osgi.NetconfOperationServiceFact
 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;
 import org.opendaylight.controller.netconf.util.test.XmlFileLoader;
 import org.opendaylight.controller.netconf.util.xml.XmlElement;
 import org.opendaylight.controller.netconf.util.xml.XmlUtil;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.test.types.rev131127.TestIdentity1;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.test.types.rev131127.TestIdentity2;
+import org.opendaylight.yangtools.yang.data.impl.codec.CodecRegistry;
+import org.opendaylight.yangtools.yang.data.impl.codec.IdentityCodec;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
@@ -53,28 +74,10 @@ import org.w3c.dom.NamedNodeMap;
 import org.w3c.dom.Node;
 import org.xml.sax.SAXException;
 
-import javax.management.ObjectName;
-import javax.xml.parsers.ParserConfigurationException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.management.ManagementFactory;
-import java.net.InetSocketAddress;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Set;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.TimeoutException;
-
-import static java.util.Collections.emptyList;
-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;
+import com.google.common.base.Throwables;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+import io.netty.channel.ChannelFuture;
 
 public class NetconfITTest extends AbstractNetconfConfigTest {
 
@@ -92,11 +95,11 @@ public class NetconfITTest extends AbstractNetconfConfigTest {
     private DefaultCommitNotificationProducer commitNot;
     private NetconfServerDispatcher dispatch;
 
-    private NetconfClientDispatcher clientDispatcher;
+    private NetconfClientDispatcherImpl clientDispatcher;
 
     @Before
     public void setUp() throws Exception {
-        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(getModuleFactories().toArray(
+        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(mockedContext,getModuleFactories().toArray(
                 new ModuleFactory[0])));
 
         loadMessages();
@@ -111,7 +114,7 @@ public class NetconfITTest extends AbstractNetconfConfigTest {
         ChannelFuture s = dispatch.createServer(tcpAddress);
         s.await();
 
-        clientDispatcher = new NetconfClientDispatcher(nettyThreadgroup, nettyThreadgroup, 5000);
+        clientDispatcher = new NetconfClientDispatcherImpl(getNettyThreadgroup(), getNettyThreadgroup(), getHashedWheelTimer());
     }
 
     private NetconfServerDispatcher createDispatcher(NetconfOperationServiceFactoryListenerImpl factoriesListener) {
@@ -173,12 +176,12 @@ public class NetconfITTest extends AbstractNetconfConfigTest {
 
     static List<ModuleFactory> getModuleFactoriesS() {
         return Lists.newArrayList(new TestImplModuleFactory(), new DepTestImplModuleFactory(),
-                new NetconfTestImplModuleFactory());
+                new NetconfTestImplModuleFactory(), new IdentityTestModuleFactory());
     }
 
     @Test
     public void testNetconfClientDemonstration() throws Exception {
-        try (TestingNetconfClient netconfClient = new TestingNetconfClient("client", tcpAddress, 4000, clientDispatcher)) {
+        try (TestingNetconfClient netconfClient = new TestingNetconfClient("client", clientDispatcher, getClientConfiguration(tcpAddress, 4000))) {
 
             Set<String> capabilitiesFromNetconfServer = netconfClient.getCapabilities();
             long sessionId = netconfClient.getSessionId();
@@ -193,8 +196,8 @@ public class NetconfITTest extends AbstractNetconfConfigTest {
 
     @Test
     public void testTwoSessions() throws Exception {
-        try (TestingNetconfClient netconfClient = new TestingNetconfClient("1", tcpAddress, 10000, clientDispatcher))  {
-            try (TestingNetconfClient netconfClient2 = new TestingNetconfClient("2", tcpAddress, 10000, clientDispatcher)) {
+        try (TestingNetconfClient netconfClient = new TestingNetconfClient("1", clientDispatcher, getClientConfiguration(tcpAddress, 10000)))  {
+            try (TestingNetconfClient netconfClient2 = new TestingNetconfClient("2", clientDispatcher, getClientConfiguration(tcpAddress, 10000))) {
             }
         }
     }
@@ -367,59 +370,40 @@ public class NetconfITTest extends AbstractNetconfConfigTest {
     }
 
     private TestingNetconfClient createSession(final InetSocketAddress address, final String expected) throws Exception {
-        final TestingNetconfClient netconfClient = new TestingNetconfClient("test " + address.toString(), address, 5000, clientDispatcher);
+        final TestingNetconfClient netconfClient = new TestingNetconfClient("test " + address.toString(), clientDispatcher, getClientConfiguration(address, 5000));
         assertEquals(expected, Long.toString(netconfClient.getSessionId()));
         return netconfClient;
     }
 
-    private void startSSHServer() throws Exception {
-        logger.info("Creating SSH server");
-        StubUserManager um = new StubUserManager(USERNAME, PASSWORD);
-        String pem;
-        try (InputStream is = getClass().getResourceAsStream("/RSA.pk")) {
-            pem = IOUtils.toString(is);
+    @Test
+    public void testIdRef() throws Exception {
+        NetconfMessage editId = XmlFileLoader.xmlFileToNetconfMessage("netconfMessages/editConfig_identities.xml");
+        NetconfMessage commit = XmlFileLoader.xmlFileToNetconfMessage("netconfMessages/commit.xml");
+
+        try (TestingNetconfClient netconfClient = createSession(tcpAddress, "1")) {
+            assertIsOK(netconfClient.sendMessage(editId).getDocument());
+            assertIsOK(netconfClient.sendMessage(commit).getDocument());
+
+            NetconfMessage response = netconfClient.sendMessage(getConfig);
+
+            assertThat(XmlUtil.toString(response.getDocument()), JUnitMatchers.containsString("<prefix:afi xmlns:prefix=\"urn:opendaylight:params:xml:ns:yang:controller:config:test:types\">prefix:test-identity1</prefix:afi>"));
+            assertThat(XmlUtil.toString(response.getDocument()), JUnitMatchers.containsString("<prefix:afi xmlns:prefix=\"urn:opendaylight:params:xml:ns:yang:controller:config:test:types\">prefix:test-identity2</prefix:afi>"));
+            assertThat(XmlUtil.toString(response.getDocument()), JUnitMatchers.containsString("<prefix:safi xmlns:prefix=\"urn:opendaylight:params:xml:ns:yang:controller:config:test:types\">prefix:test-identity2</prefix:safi>"));
+            assertThat(XmlUtil.toString(response.getDocument()), JUnitMatchers.containsString("<prefix:safi xmlns:prefix=\"urn:opendaylight:params:xml:ns:yang:controller:config:test:types\">prefix:test-identity1</prefix:safi>"));
+
+        } catch (Exception e) {
+            fail(Throwables.getStackTraceAsString(e));
         }
-        AuthProvider ap = new AuthProvider(um, pem);
-        Thread sshServerThread = new Thread(NetconfSSHServer.start(10830, tcpAddress, ap));
-        sshServerThread.setDaemon(true);
-        sshServerThread.start();
-        logger.info("SSH server on");
     }
 
-    @Test
-    public void sshTest() throws Exception {
-        startSSHServer();
-        logger.info("creating connection");
-        Connection conn = new Connection(sshAddress.getHostName(), sshAddress.getPort());
-        Assert.assertNotNull(conn);
-        logger.info("connection created");
-        conn.connect();
-        boolean isAuthenticated = conn.authenticateWithPassword(USERNAME, PASSWORD);
-        assertTrue(isAuthenticated);
-        logger.info("user authenticated");
-        final Session sess = conn.openSession();
-        sess.startSubSystem("netconf");
-        logger.info("user authenticated");
-        sess.getStdin().write(XmlUtil.toString(this.getConfig.getDocument()).getBytes());
-
-        new Thread() {
-            @Override
-            public void run() {
-                while (true) {
-                    byte[] bytes = new byte[1024];
-                    int c = 0;
-                    try {
-                        c = sess.getStdout().read(bytes);
-                    } catch (IOException e) {
-                        e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
-                    }
-                    logger.info("got data:" + bytes);
-                    if (c == 0) {
-                        break;
-                    }
-                }
-            }
-        }.join();
-    }
+    @Override
+    protected CodecRegistry getCodecRegistry() {
+        final IdentityCodec<?> codec = mock(IdentityCodec.class);
+        doReturn(TestIdentity1.class).when(codec).deserialize(TestIdentity1.QNAME);
+        doReturn(TestIdentity2.class).when(codec).deserialize(TestIdentity2.QNAME);
 
+        final CodecRegistry ret = super.getCodecRegistry();
+        doReturn(codec).when(ret).getIdentityCodec();
+        return ret;
+    }
 }
index 92caea17d5eaea998d5d62ab6682c765287c5329..3b263f7e75cc826b55b893a76a1f5fbf4b051c34 100644 (file)
@@ -7,22 +7,35 @@
  */
 package org.opendaylight.controller.netconf.it;
 
-import com.google.common.base.Charsets;
-import com.google.common.base.Optional;
-import com.google.common.collect.Sets;
-import io.netty.channel.ChannelFuture;
+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;
+
+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.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.NetconfClientDispatcher;
+import org.opendaylight.controller.netconf.client.NetconfClientDispatcherImpl;
+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;
@@ -40,21 +53,10 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
 
-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;
+import com.google.common.base.Charsets;
+import com.google.common.base.Optional;
+import com.google.common.collect.Sets;
+import io.netty.channel.ChannelFuture;
 
 public class NetconfMonitoringITTest extends AbstractNetconfConfigTest {
 
@@ -66,13 +68,13 @@ public class NetconfMonitoringITTest extends AbstractNetconfConfigTest {
     private DefaultCommitNotificationProducer commitNot;
     private NetconfServerDispatcher dispatch;
 
-    private NetconfClientDispatcher clientDispatcher;
+    private NetconfClientDispatcherImpl clientDispatcher;
 
     private NetconfMonitoringServiceImpl monitoringService;
 
     @Before
     public void setUp() throws Exception {
-        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(NetconfITTest.getModuleFactoriesS().toArray(
+        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(mockedContext, NetconfITTest.getModuleFactoriesS().toArray(
                 new ModuleFactory[0])));
 
         monitoringService = new NetconfMonitoringServiceImpl(getNetconfOperationProvider());
@@ -88,7 +90,7 @@ public class NetconfMonitoringITTest extends AbstractNetconfConfigTest {
         ChannelFuture s = dispatch.createServer(tcpAddress);
         s.await();
 
-        clientDispatcher = new NetconfClientDispatcher(nettyThreadgroup, nettyThreadgroup, 5000);
+        clientDispatcher = new NetconfClientDispatcherImpl(getNettyThreadgroup(), getNettyThreadgroup(), getHashedWheelTimer());
     }
 
     private HardcodedYangStoreService getYangStore() throws YangStoreException, IOException {
@@ -120,8 +122,8 @@ public class NetconfMonitoringITTest extends AbstractNetconfConfigTest {
 
     @Test
     public void testGetResponseFromMonitoring() throws Exception {
-        try (TestingNetconfClient netconfClient = new TestingNetconfClient("client-monitoring", tcpAddress, 4000, clientDispatcher)) {
-        try (TestingNetconfClient netconfClient2 = new TestingNetconfClient("client-monitoring2", tcpAddress, 4000, clientDispatcher)) {
+        try (TestingNetconfClient netconfClient = new TestingNetconfClient("client-monitoring", clientDispatcher, getClientConfiguration(tcpAddress, 4000))) {
+        try (TestingNetconfClient netconfClient2 = new TestingNetconfClient("client-monitoring2", clientDispatcher, getClientConfiguration(tcpAddress, 4000))) {
             NetconfMessage response = netconfClient.sendMessage(loadGetMessage());
             assertSessionElementsInResponse(response.getDocument(), 2);
         }
diff --git a/opendaylight/netconf/netconf-it/src/test/java/org/opendaylight/controller/netconf/it/pax/IdentityRefNetconfTest.java b/opendaylight/netconf/netconf-it/src/test/java/org/opendaylight/controller/netconf/it/pax/IdentityRefNetconfTest.java
deleted file mode 100644 (file)
index 96a9eff..0000000
+++ /dev/null
@@ -1,160 +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.it.pax;
-
-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.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;
-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.ops4j.pax.tinybundles.core.TinyBundles;
-import org.osgi.framework.Constants;
-import org.xml.sax.SAXException;
-
-import com.google.common.base.Preconditions;
-import com.google.common.base.Throwables;
-
-@Ignore
-@RunWith(PaxExam.class)
-public class IdentityRefNetconfTest {
-
-    public static final int CLIENT_CONNECTION_TIMEOUT_MILLIS = 15000;
-
-    // Wait for controller to start
-    @Inject
-    @Filter(timeout = 60 * 1000)
-    BindingAwareBroker broker;
-
-    @Configuration
-    public Option[] config() {
-        return options(
-                systemProperty("osgi.console").value("2401"),
-                systemProperty("osgi.bundles.defaultStartLevel").value("4"),
-                systemProperty("pax.exam.osgi.unresolved.fail").value("true"),
-                systemPackages("sun.nio.ch"),
-
-                testingModules(),
-                loggingModules(),
-                mdSalCoreBundles(),
-                bindingAwareSalBundles(), configMinumumBundles(), baseModelBundles(), flowCapableModelBundles(),
-                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() {
-        return new DefaultCompositeOption(
-                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("org.opendaylight.controller.thirdparty", "nagasena").versionAsInProject(),
-                mavenBundle("org.opendaylight.controller.thirdparty", "nagasena-rta").versionAsInProject());
-
-
-    }
-
-    private Option testingModules() {
-        return new DefaultCompositeOption(
-                mavenBundle("org.opendaylight.controller", "yang-test").versionAsInProject());
-    }
-
-    private static final InetSocketAddress tcpAddress = new InetSocketAddress("127.0.0.1", 18383);
-
-    @Test
-    public void testIdRef() throws Exception {
-        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) {
-            fail(Throwables.getStackTraceAsString(e));
-        }
-    }
-
-    private void sendMessage(NetconfMessage edit, TestingNetconfClient netconfClient, String... containingResponse)
-            throws ExecutionException, InterruptedException, TimeoutException {
-        NetconfMessage response = netconfClient.sendRequest(edit).get();
-        if (containingResponse == null) {
-            Assert.assertThat(XmlUtil.toString(response.getDocument()), JUnitMatchers.containsString("<ok/>"));
-        } else {
-            for (String resp : containingResponse) {
-                Assert.assertThat(XmlUtil.toString(response.getDocument()), JUnitMatchers.containsString(resp));
-            }
-        }
-    }
-
-    public static NetconfMessage xmlFileToNetconfMessage(final String fileName) throws IOException, SAXException,
-            ParserConfigurationException {
-        return XmlFileLoader.xmlFileToNetconfMessage(fileName);
-    }
-}
diff --git a/opendaylight/netconf/netconf-it/src/test/resources/RSA.pk b/opendaylight/netconf/netconf-it/src/test/resources/RSA.pk
deleted file mode 100644 (file)
index c0266c7..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
------BEGIN RSA PRIVATE KEY-----
-MIIEogIBAAKCAQEAuC9hbEacpewvylI0mwFwjy3Wou2hpr/ncN9BBiFDSaG5yW2k
-3Oy+SCAcFCL+ZKWb6cc6Ch4gUeCwyEHRojZguuhliKtak9YQf6qbvpPLe00842Lx
-iqNAGurMpzizCDsGFq8ChaAkBZQI3TvcHuPoSUWSMJ+K8xHpRyUdVr6g2yEjezKJ
-sTXBtWaeCCh6YUafFujuDJk7fvYcPW7Je5KRBBStIKvxcMW0zB+7eq04deTHwGbJ
-gGjKWilQ72hsDDP3Hbp5CJMAYg1r4GlCmFx3KyHRGztgWgNgaD7nNpKCkTLjtmA6
-b4x7TA+jrzZ6Af2z5TMrI4dv5w1SrxHaZ+ziLQIDAQABAoIBAHTndeGgq/rQf8De
-Do+4CTaHtK0zQSAyu/azbXUzlZ7drKuCEVs8VMY4wzmwwGEnkF+A2YDkgEUX5X0l
-8aYQ97KKoS9u+43MGCrAIhyDeGrpqlT1TzRcy+qJz53v6gq2U/X/3QztiQ+VV078
-mIluxNgE9XYxPaNsYfGLSCTv1+9c8y/hjGVX2kwFK+u4ut0ZZETggNa8UxfaHVDS
-fIJQX9Gm3J3GSUV30fDGMBIUW6ESLc2L8b7u8Mp9TRP39ZeQSuEUjBe8MYKv0Rel
-oEpjZvcnniMTpFbLpndBYn7/AoIiEBvtCN8faVTuRRcvvLcsRm09IctzKQYnMh6M
-6PLKV+ECgYEA8HFRYaKHUzxpzE/fyon82GQbzqFFY0/bbWrfWICMfNbIgshJUie6
-FmH5iUFMfeqaT7v557HFM0GB9FeIeSbvd88YmiBAcRopZ3DfMkDH+DT73yJ+/TKG
-2nrQtdhyuTIs4bwHqeS2BBJYs7PK9R2rratF3l34Tf7mjlvyOgygHdUCgYEAxBo2
-8hEBlAVNcNb1hTYUxe1w1B6675/mFlmw98Xmj9dRYfICXNhahs8tX3/lsBEd+vBu
-fI0oyHaff8m5bPgGzD1ZMybfeROujNrgxaKVk7Ef0FDRRCop4bm18OroFlFAt9l8
-wMp++ToACbdvQvL/mjWMPYlIxhB/YxHswICZZvkCgYAexxKYwdo6sGAGlC7cWT9x
-X5cjowcjyEQZRHXkeUgCbufpvcOM7aLnXJE5nY8yCwbHsBM0MlBA2GDPKylAANjk
-aDEJAZneIHAuWodngl1Wi0m2bU7+ECqs6s2uiU9eH2sZVh1RBQK7kLGkBx6ys6KX
-L3ZZGYRAT6GplWFzRsx0JQKBgCeVlxPD5QqpC1nEumi6YvUVGdpnnZpzL3HBhxxs
-wT612wKnZFyze4qM1X7ahVXGDsQxtkvD/sCAWW/lG13orw6ZL6FIroF1PJ3ILOkY
-CZN3hJF7TtKwpCWhZB2OfWzL2AGEkE8mUP0j/Q/5DCd6f6f0OSvOw3bfq6cm3iB5
-lP2ZAoGAXsRN5TZTX4AQ2xTlrDQ8A5XgcvyWQpJOmEXMTyHV7VaJVzmNWFVAvndK
-5UIq8ALDwB2t7vjmMUW6euvIwqtXiop7G79UOb3e3NhzeyWFGQyBLqCRznGaXQTT
-dlFy73xhukZMhFnj006bjKCYvOPnwuGl3+0fuWil5Rq3jOuY5c8=
------END RSA PRIVATE KEY-----
diff --git a/opendaylight/netconf/netconf-it/src/test/resources/controller.xml b/opendaylight/netconf/netconf-it/src/test/resources/controller.xml
deleted file mode 100644 (file)
index 96efc10..0000000
+++ /dev/null
@@ -1,181 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<persisted-snapshots>
-   <snapshots>
-      <snapshot>
-         <required-capabilities>
-            <capability>urn:opendaylight:params:xml:ns:yang:controller:config:test:types?module=test-types&amp;revision=2013-11-27</capability>
-            <capability>urn:opendaylight:params:xml:ns:yang:controller:config?module=config&amp;revision=2013-04-05</capability>
-            <capability>urn:opendaylight:params:xml:ns:yang:controller:logback:config?module=config-logging&amp;revision=2013-07-16</capability>
-            <capability>urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl?module=opendaylight-sal-binding-broker-impl&amp;revision=2013-10-28</capability>
-            <capability>urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding?module=opendaylight-md-sal-binding&amp;revision=2013-10-28</capability>
-            <capability>urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:impl?module=opendaylight-sal-dom-broker-impl&amp;revision=2013-10-28</capability>
-            <capability>urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom?module=opendaylight-md-sal-dom&amp;revision=2013-10-28</capability>
-            <capability>urn:opendaylight:params:xml:ns:yang:controller:test:impl?module=config-test-impl&amp;revision=2013-04-03</capability>
-            <capability>urn:opendaylight:params:xml:ns:yang:controller:test?module=config-test&amp;revision=2013-06-13</capability>
-         </required-capabilities>
-         <configuration>
-            <data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
-               <modules xmlns="urn:opendaylight:params:xml:ns:yang:controller:config">
-                  <module>
-                     <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">
-                        <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">
-                        <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">
-                        <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>
-                     <prefix:afi xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:config:test:types">prefix:test-identity1</prefix:afi>
-                  </module>
-                  <module>
-                     <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">
-                        <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">
-                        <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>
-                     <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>
-                     <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>
-                     <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">
-                        <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">
-                        <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>
-                     <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>
-                        <encoder-pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</encoder-pattern>
-                     </console-appenders>
-                     <loggers xmlns="urn:opendaylight:params:xml:ns:yang:controller:logback:config">
-                        <level>DEBUG</level>
-                        <logger-name>ROOT</logger-name>
-                        <appenders>console</appenders>
-                     </loggers>
-                  </module>
-                  <module>
-                     <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>
-                     <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>
-                     <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">
-                        <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>
-                     <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>
-                     <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>
-                     <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>
-                     <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>
-                     <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>
-                     <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>
-                     <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>
-                     <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>
-                     <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>
-                     <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>
-                     <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>
-                     </instance>
-                  </service>
-               </services>
-            </data>
-         </configuration>
-      </snapshot>
-   </snapshots>
-</persisted-snapshots>
diff --git a/opendaylight/netconf/netconf-it/src/test/resources/keystore.jks b/opendaylight/netconf/netconf-it/src/test/resources/keystore.jks
deleted file mode 100644 (file)
index 201d375..0000000
Binary files a/opendaylight/netconf/netconf-it/src/test/resources/keystore.jks and /dev/null differ
diff --git a/opendaylight/netconf/netconf-it/src/test/resources/netconfMessages/commit.xml b/opendaylight/netconf/netconf-it/src/test/resources/netconfMessages/commit.xml
deleted file mode 100644 (file)
index ffdf132..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="101">
-    <commit></commit>
-</rpc>
diff --git a/opendaylight/netconf/netconf-it/src/test/resources/netconfMessages/getConfig.xml b/opendaylight/netconf/netconf-it/src/test/resources/netconfMessages/getConfig.xml
deleted file mode 100644 (file)
index 39efb49..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<rpc id="a" a="64" xmlnx="a:b:c:d" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="101">
-    <get-config>
-        <source>
-            <running/>
-        </source>
-    </get-config>
-</rpc>
index 05122be4d245a8f09b0c566aab90337c28c513af..1f7eed250f5b61725ee32c01aa2b1ce1a3c46f37 100644 (file)
@@ -8,10 +8,11 @@
 
 package org.opendaylight.controller.netconf.mapping.api;
 
+import com.google.common.base.Objects;
 import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
 
-public class HandlingPriority implements Comparable<HandlingPriority> {
+public final class HandlingPriority implements Comparable<HandlingPriority> {
 
     public static final HandlingPriority CANNOT_HANDLE = new HandlingPriority();
     public static final HandlingPriority HANDLE_WITH_DEFAULT_PRIORITY = new HandlingPriority(Integer.MIN_VALUE);
@@ -51,34 +52,43 @@ public class HandlingPriority implements Comparable<HandlingPriority> {
 
     @Override
     public int compareTo(HandlingPriority o) {
-        if (this == o)
+        if (this == o) {
             return 0;
-        if (this == CANNOT_HANDLE)
+        }
+        if (isCannotHandle()) {
             return -1;
-        if (o == CANNOT_HANDLE)
+        }
+        if (o.isCannotHandle()) {
             return 1;
+        }
 
-        if (priority > o.priority)
+        if (priority > o.priority){
             return 1;
-        if (priority == o.priority)
+        }
+        if (priority.equals(o.priority)){
             return 0;
-        if (priority < o.priority)
+        }
+        if (priority < o.priority){
             return -1;
+        }
 
-        throw new IllegalStateException("Unexpected state");
+        throw new IllegalStateException("Unexpected state comparing " + this + " with " + o);
     }
 
     @Override
     public boolean equals(Object o) {
-        if (this == o)
+        if (this == o){
             return true;
-        if (!(o instanceof HandlingPriority))
+        }
+        if (!(o instanceof HandlingPriority)){
             return false;
+        }
 
         HandlingPriority that = (HandlingPriority) o;
 
-        if (priority != null ? !priority.equals(that.priority) : that.priority != null)
+        if (priority != null ? !priority.equals(that.priority) : that.priority != null){
             return false;
+        }
 
         return true;
     }
@@ -87,4 +97,11 @@ public class HandlingPriority implements Comparable<HandlingPriority> {
     public int hashCode() {
         return priority != null ? priority.hashCode() : 0;
     }
+
+    @Override
+    public String toString() {
+        return Objects.toStringHelper(this)
+                .add("priority", priority)
+                .toString();
+    }
 }
index 6449c3e05fa39a6510e27d59ed69664e243e29b2..c277e20553fb3ed469c9f849d624f795f0acf635 100644 (file)
@@ -7,7 +7,6 @@
  */
 package org.opendaylight.controller.netconf.monitoring;
 
-import com.google.common.base.Preconditions;
 import com.google.common.collect.Maps;
 import org.opendaylight.controller.netconf.api.NetconfDocumentedException;
 import org.opendaylight.controller.netconf.api.monitoring.NetconfMonitoringService;
@@ -63,8 +62,12 @@ public class Get extends AbstractNetconfOperation {
     @Override
     public Document handle(Document requestMessage, NetconfOperationChainedExecution subsequentOperation)
             throws NetconfDocumentedException {
-        Preconditions.checkArgument(subsequentOperation.isExecutionTermination() == false,
-                "Subsequent netconf operation expected by %s", this);
+        if (subsequentOperation.isExecutionTermination()){
+            throw new NetconfDocumentedException(String.format("Subsequent netconf operation expected by %s", this),
+                    NetconfDocumentedException.ErrorType.application,
+                    NetconfDocumentedException.ErrorTag.operation_failed,
+                    NetconfDocumentedException.ErrorSeverity.error);
+        }
 
         try {
             Document innerResult = subsequentOperation.execute(requestMessage);
index 200cd344a6617b995065b652efca10a6a2a35791..d14464d66734a3a890af70f8e49d068fbafc4c9a 100644 (file)
@@ -7,8 +7,11 @@
  */
 package org.opendaylight.controller.netconf.monitoring;
 
-public class MonitoringConstants {
+public final class MonitoringConstants {
 
+    private MonitoringConstants(){
+        // not called - private constructor for utility class
+    }
     public static final String MODULE_NAME = "ietf-netconf-monitoring";
     public static final String MODULE_REVISION = "2010-10-04";
 
index de04484d1388f411577c7b1c2537996f2e625e7d..14c47352a8409d633dca64a01db06759ad79f8f6 100644 (file)
@@ -21,14 +21,14 @@ public class NetconfMonitoringActivator implements BundleActivator {
     private NetconfMonitoringServiceTracker monitor;
 
     @Override
-    public void start(final BundleContext context) throws Exception {
+    public void start(final BundleContext context)  {
         monitor = new NetconfMonitoringServiceTracker(context);
         monitor.open();
 
     }
 
     @Override
-    public void stop(final BundleContext context) throws Exception {
+    public void stop(final BundleContext context) {
         if(monitor!=null) {
             try {
                 monitor.close();
index a42bc09591ba0160d964ebe6f4b4900b91282ff8..731aad6d1a4d7103ca12fc99541482b81a82757b 100644 (file)
@@ -7,30 +7,20 @@
 */
 package org.opendaylight.controller.netconf.monitoring.osgi;
 
-import java.io.File;
-import java.io.IOException;
-import java.net.URL;
-import java.util.HashSet;
+import com.google.common.base.Optional;
+import com.google.common.collect.Sets;
 import java.util.List;
 import java.util.Set;
-
 import org.opendaylight.controller.netconf.api.monitoring.NetconfMonitoringService;
 import org.opendaylight.controller.netconf.mapping.api.Capability;
 import org.opendaylight.controller.netconf.mapping.api.NetconfOperation;
 import org.opendaylight.controller.netconf.mapping.api.NetconfOperationService;
 import org.opendaylight.controller.netconf.monitoring.Get;
 import org.opendaylight.controller.netconf.monitoring.MonitoringConstants;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.Schemas;
-
-import com.google.common.base.Charsets;
-import com.google.common.base.Optional;
-import com.google.common.base.Preconditions;
-import com.google.common.collect.Sets;
-import com.google.common.io.Files;
 
 public class NetconfMonitoringOperationService implements NetconfOperationService {
 
-    public static final HashSet<Capability> CAPABILITIES = Sets.<Capability>newHashSet(new Capability() {
+    public static final Set<Capability> CAPABILITIES = Sets.<Capability>newHashSet(new Capability() {
 
         @Override
         public String getCapabilityUri() {
@@ -69,18 +59,6 @@ public class NetconfMonitoringOperationService implements NetconfOperationServic
         this.monitor = monitor;
     }
 
-    private static String readSchema() {
-        String schemaLocation = "/META-INF/yang/ietf-netconf-monitoring.yang";
-        URL resource = Schemas.class.getClassLoader().getResource(schemaLocation);
-        Preconditions.checkNotNull(resource, "Unable to read schema content from %s", schemaLocation);
-        File file = new File(resource.getFile());
-        try {
-            return Files.toString(file, Charsets.UTF_8);
-        } catch (IOException e) {
-            throw new RuntimeException("Unable to load schema from " + schemaLocation, e);
-        }
-    }
-
     @Override
     public Set<Capability> getCapabilities() {
         return CAPABILITIES;
index c2d067915516b27efb44bd5a7644f942744a13d2..ff950e95e9700289bf9dda3bed79642f1fba096e 100644 (file)
@@ -20,7 +20,7 @@ import java.net.ServerSocket;
 import java.util.concurrent.atomic.AtomicLong;
 
 @ThreadSafe
-public class NetconfSSHServer implements Runnable {
+public final class NetconfSSHServer implements Runnable {
 
     private ServerSocket ss = null;
     private static final Logger logger =  LoggerFactory.getLogger(NetconfSSHServer.class);
@@ -29,12 +29,12 @@ public class NetconfSSHServer implements Runnable {
     private final AuthProvider authProvider;
     private boolean up = false;
 
-    private NetconfSSHServer(int serverPort,InetSocketAddress clientAddress, AuthProvider authProvider) throws Exception{
+    private NetconfSSHServer(int serverPort,InetSocketAddress clientAddress, AuthProvider authProvider) throws IllegalStateException, IOException {
 
         logger.trace("Creating SSH server socket on port {}",serverPort);
         this.ss = new ServerSocket(serverPort);
         if (!ss.isBound()){
-            throw new Exception("Socket can't be bound to requested port :"+serverPort);
+            throw new IllegalStateException("Socket can't be bound to requested port :"+serverPort);
         }
         logger.trace("Server socket created.");
         this.clientAddress = clientAddress;
@@ -42,11 +42,11 @@ public class NetconfSSHServer implements Runnable {
         this.up = true;
     }
 
-    public static NetconfSSHServer start(int serverPort, InetSocketAddress clientAddress,AuthProvider authProvider) throws Exception {
+    public static NetconfSSHServer start(int serverPort, InetSocketAddress clientAddress,AuthProvider authProvider) throws IllegalStateException, IOException {
         return new NetconfSSHServer(serverPort, clientAddress,authProvider);
     }
 
-    public void stop() throws Exception {
+    public void stop() throws IOException {
         up = false;
         logger.trace("Closing SSH server socket.");
         ss.close();
@@ -68,9 +68,9 @@ public class NetconfSSHServer implements Runnable {
         while (up) {
             logger.trace("Starting new socket thread.");
             try {
-               SocketThread.start(ss.accept(), clientAddress, sesssionId.incrementAndGet(),authProvider);
+               SocketThread.start(ss.accept(), clientAddress, sesssionId.incrementAndGet(), authProvider);
             } catch (IOException e) {
-                logger.error("Exception occurred during socket thread initialization {}",e);
+                logger.error("Exception occurred during socket thread initialization {}", e);
             }
         }
     }
index 2d380482ba456afd4beef97c77d7a86d1bf79f14..2e9a0b9d8bbd256154ff82689e85e556b60c9e90 100644 (file)
@@ -7,42 +7,26 @@
  */
 package org.opendaylight.controller.netconf.ssh.authentication;
 
+import java.io.IOException;
 import org.opendaylight.controller.sal.authorization.AuthResultEnum;
-import org.opendaylight.controller.sal.authorization.UserLevel;
 import org.opendaylight.controller.usermanager.IUserManager;
-import org.opendaylight.controller.usermanager.UserConfig;
-
-import java.util.ArrayList;
-import java.util.List;
-
 import static com.google.common.base.Preconditions.checkNotNull;
 
 public class AuthProvider implements AuthProviderInterface {
 
-    private static IUserManager um; //FIXME static mutable state, no locks
-    private static final String DEFAULT_USER = "netconf";
-    private static final String DEFAULT_PASSWORD = "netconf";
+    private IUserManager um;
     private final String pem;
 
-    public AuthProvider(IUserManager ium, String pemCertificate) throws Exception {
+    public AuthProvider(IUserManager ium, String pemCertificate) throws IllegalArgumentException, IOException {
         checkNotNull(pemCertificate, "Parameter 'pemCertificate' is null");
-        AuthProvider.um = ium;
-        if (AuthProvider.um == null) {
-            throw new Exception("No usermanager service available.");
-        }
-
-        List<String> roles = new ArrayList<String>(1);
-        roles.add(UserLevel.SYSTEMADMIN.toString());
-        AuthProvider.um.addLocalUser(new UserConfig(DEFAULT_USER, DEFAULT_PASSWORD, roles)); //FIXME hardcoded auth
+        checkNotNull(ium, "No user manager service available.");
+        this.um = ium;
         pem = pemCertificate;
     }
 
     @Override
-    public boolean authenticated(String username, String password) throws Exception {
-        if (AuthProvider.um == null) {
-            throw new Exception("No usermanager service available.");
-        }
-        AuthResultEnum authResult = AuthProvider.um.authenticate(username, password);
+    public boolean authenticated(String username, String password) {
+        AuthResultEnum authResult = this.um.authenticate(username, password);
         return authResult.equals(AuthResultEnum.AUTH_ACCEPT) || authResult.equals(AuthResultEnum.AUTH_ACCEPT_LOC);
     }
 
@@ -53,11 +37,11 @@ public class AuthProvider implements AuthProviderInterface {
 
     @Override
     public void removeUserManagerService() {
-        AuthProvider.um = null;
+        this.um = null;
     }
 
     @Override
     public void addUserManagerService(IUserManager userManagerService) {
-        AuthProvider.um = userManagerService;
+        this.um = userManagerService;
     }
 }
index 8e40578a0e47c001676b8fb28809a9cf306364e2..fad0f79a4e7b9eb5d883b3d8086bd046343e4f6d 100644 (file)
@@ -12,7 +12,7 @@ import org.opendaylight.controller.usermanager.IUserManager;
 
 public interface AuthProviderInterface {
 
-    public boolean authenticated(String username, String password) throws Exception;
+    public boolean authenticated(String username, String password) throws IllegalStateException;
     public char[] getPEMAsCharArray() throws Exception;
     public void removeUserManagerService();
     public void addUserManagerService(IUserManager userManagerService);
index 112bf67f69b48d869fede643308dca962c317819..ca0c9454d4a5c8934a96da245b41029198e464d6 100644 (file)
@@ -8,12 +8,21 @@
 package org.opendaylight.controller.netconf.ssh.osgi;
 
 import com.google.common.base.Optional;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.commons.io.FilenameUtils;
 import org.apache.commons.io.IOUtils;
 import org.opendaylight.controller.netconf.ssh.NetconfSSHServer;
 import org.opendaylight.controller.netconf.ssh.authentication.AuthProvider;
 import org.opendaylight.controller.netconf.ssh.authentication.PEMGenerator;
 import org.opendaylight.controller.netconf.util.osgi.NetconfConfigUtil;
+import org.opendaylight.controller.sal.authorization.UserLevel;
 import org.opendaylight.controller.usermanager.IUserManager;
+import org.opendaylight.controller.usermanager.UserConfig;
 import org.osgi.framework.BundleActivator;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceReference;
@@ -21,16 +30,12 @@ import org.osgi.util.tracker.ServiceTracker;
 import org.osgi.util.tracker.ServiceTrackerCustomizer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.net.InetSocketAddress;
+import static com.google.common.base.Preconditions.checkNotNull;
 
 /**
  * Activator for netconf SSH bundle which creates SSH bridge between netconf client and netconf server. Activator
  * starts SSH Server in its own thread. This thread is closed when activator calls stop() method. Server opens socket
- * and listen for client connections. Each client connection creation is handled in separate
+ * and listens for client connections. Each client connection creation is handled in separate
  * {@link org.opendaylight.controller.netconf.ssh.threads.SocketThread} thread.
  * This thread creates two additional threads {@link org.opendaylight.controller.netconf.ssh.threads.IOThread}
  * forwarding data from/to client.IOThread closes servers session and server connection when it gets -1 on input stream.
@@ -44,8 +49,10 @@ public class NetconfSSHActivator implements BundleActivator{
     private static final String EXCEPTION_MESSAGE = "Netconf ssh bridge is not available.";
     private IUserManager iUserManager;
     private BundleContext context = null;
+    private Optional<String> defaultPassword;
+    private Optional<String> defaultUser;
 
-    ServiceTrackerCustomizer<IUserManager, IUserManager> customizer = new ServiceTrackerCustomizer<IUserManager, IUserManager>(){
+    private ServiceTrackerCustomizer<IUserManager, IUserManager> customizer = new ServiceTrackerCustomizer<IUserManager, IUserManager>(){
         @Override
         public IUserManager addingService(ServiceReference<IUserManager> reference) {
             logger.trace("Service {} added, let there be SSH bridge.", reference);
@@ -72,36 +79,42 @@ public class NetconfSSHActivator implements BundleActivator{
 
 
     @Override
-    public void start(BundleContext context) throws Exception {
+    public void start(BundleContext context)  {
         this.context = context;
         listenForManagerService();
     }
 
     @Override
-    public void stop(BundleContext context) throws Exception {
+    public void stop(BundleContext context) throws IOException {
+        if (this.defaultUser.isPresent()){
+            this.iUserManager.removeLocalUser(this.defaultUser.get());
+        }
         if (server != null){
             server.stop();
             logger.trace("Netconf SSH bridge is down ...");
         }
     }
-    private void startSSHServer() throws Exception {
+    private void startSSHServer() throws IllegalStateException, IOException {
+        checkNotNull(this.iUserManager, "No user manager service available.");
         logger.trace("Starting netconf SSH  bridge.");
         Optional<InetSocketAddress> sshSocketAddressOptional = NetconfConfigUtil.extractSSHNetconfAddress(context, EXCEPTION_MESSAGE);
         InetSocketAddress tcpSocketAddress = NetconfConfigUtil.extractTCPNetconfAddress(context,
                 EXCEPTION_MESSAGE, true);
 
         if (sshSocketAddressOptional.isPresent()){
-            String path = NetconfConfigUtil.getPrivateKeyPath(context);
-            path = path.replace("\\", "/");  // FIXME: shouldn't this convert lines to system dependent path separator?
+            String path =  FilenameUtils.separatorsToSystem(NetconfConfigUtil.getPrivateKeyPath(context));
             if (path.equals("")){
-                throw new Exception("Missing netconf.ssh.pk.path key in configuration file.");
+                throw new IllegalStateException("Missing netconf.ssh.pk.path key in configuration file.");
             }
 
             File privateKeyFile = new File(path);
-            String privateKeyPEMString;
+            String privateKeyPEMString = null;
             if (privateKeyFile.exists() == false) {
-                // generate & save to file
-                privateKeyPEMString = PEMGenerator.generateTo(privateKeyFile);
+                try {
+                    privateKeyPEMString = PEMGenerator.generateTo(privateKeyFile);
+                } catch (Exception e) {
+                    logger.error("Exception occurred while generating PEM string {}",e);
+                }
             } else {
                 // read from file
                 try (FileInputStream fis = new FileInputStream(path)) {
@@ -111,7 +124,23 @@ public class NetconfSSHActivator implements BundleActivator{
                     throw new IllegalStateException("Error reading RSA key from file " + path);
                 }
             }
-            AuthProvider authProvider = new AuthProvider(iUserManager, privateKeyPEMString);
+            AuthProvider authProvider = null;
+            try {
+                this.defaultPassword = NetconfConfigUtil.getSSHDefaultPassword(context);
+                this.defaultUser = NetconfConfigUtil.getSSHDefaultUser(context);
+                // Since there is no user data store yet (ldap, ...) this adds default user/password to UserManager
+                // if these parameters are set in netconf configuration file.
+                if (defaultUser.isPresent() &&
+                        defaultPassword.isPresent()){
+                    logger.trace(String.format("Default username and password for netconf ssh bridge found. Adding user %s to user manager.",defaultUser.get()));
+                    List<String> roles = new ArrayList<String>(1);
+                    roles.add(UserLevel.SYSTEMADMIN.toString());
+                    iUserManager.addLocalUser(new UserConfig(defaultUser.get(), defaultPassword.get(), roles));
+                }
+                authProvider = new AuthProvider(iUserManager, privateKeyPEMString);
+            } catch (Exception e) {
+                logger.error("Error instantiating AuthProvider {}",e);
+            }
             this.server = NetconfSSHServer.start(sshSocketAddressOptional.get().getPort(),tcpSocketAddress,authProvider);
 
             Thread serverThread = new  Thread(server,"netconf SSH server thread");
@@ -120,10 +149,10 @@ public class NetconfSSHActivator implements BundleActivator{
             logger.trace("Netconf SSH  bridge up and running.");
         } else {
             logger.trace("No valid connection configuration for SSH bridge found.");
-            throw new Exception("No valid connection configuration for SSH bridge found.");
+            throw new IllegalStateException("No valid connection configuration for SSH bridge found.");
         }
     }
-    private void onUserManagerFound(IUserManager userManager) throws Exception{
+    private void onUserManagerFound(IUserManager userManager) throws IOException {
         if (server!=null && server.isUp()){
            server.addUserManagerService(userManager);
         } else {
index ce26910b97dd449b10d395933e57cd6deccd52ea..04639cb36fb665753bda35908321508688e75103 100644 (file)
@@ -66,7 +66,7 @@ public class SocketThread implements Runnable, ServerAuthenticationCallback, Ser
         try {
             conn.setPEMHostKey(authProvider.getPEMAsCharArray(), "netconf");
         } catch (Exception e) {
-            logger.debug("Server authentication setup failed.");
+            logger.warn("Server authentication setup failed.", e);
         }
         conn.setAuthenticationCallback(this);
         conn.setServerConnectionCallback(this);
@@ -112,18 +112,18 @@ public class SocketThread implements Runnable, ServerAuthenticationCallback, Ser
                                     if (netconf_ssh_input != null) {
                                         netconf_ssh_input.join();
                                     }
-                                } catch (InterruptedException e) {
+                                } catch (InterruptedException e1) {
                                     Thread.currentThread().interrupt();
-                                    logger.error("netconf_ssh_input join error ", e);
+                                    logger.error("netconf_ssh_input join error ", e1);
                                 }
 
                                 try {
                                     if (netconf_ssh_output != null) {
                                         netconf_ssh_output.join();
                                     }
-                                } catch (InterruptedException e) {
+                                } catch (InterruptedException e2) {
                                     Thread.currentThread().interrupt();
-                                    logger.error("netconf_ssh_output join error ", e);
+                                    logger.error("netconf_ssh_output join error ", e2);
                                 }
                             }
                         } else {
index 65d2954afd9d0f2e1cd607acb170b2b444928cb7..14a71fd9ba6a35c04eb0405df187cec8436be2e2 100644 (file)
       <artifactId>ganymed</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.opendaylight.controller.thirdparty</groupId>
+      <groupId>org.openexi</groupId>
       <artifactId>nagasena</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.opendaylight.controller.thirdparty</groupId>
+      <groupId>org.openexi</groupId>
       <artifactId>nagasena-rta</artifactId>
     </dependency>
 
index 270af3505f63a7589ab0957c1177badb72b6ab1d..c789206436f1eecb1fd92fc1480a027eb8943d09 100644 (file)
@@ -61,7 +61,7 @@ public abstract class AbstractNetconfSession<S extends NetconfSession, L extends
     @Override
     public ChannelFuture sendMessage(final NetconfMessage netconfMessage) {
         final ChannelFuture future = channel.writeAndFlush(netconfMessage);
-        if (delayedEncoder !=null) {
+        if (delayedEncoder != null) {
                 replaceMessageEncoder(delayedEncoder);
                 delayedEncoder = null;
         }
@@ -93,23 +93,19 @@ public abstract class AbstractNetconfSession<S extends NetconfSession, L extends
         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) {
+    protected final void replaceMessageDecoder(final ChannelHandler handler) {
         replaceChannelHandler(AbstractChannelInitializer.NETCONF_MESSAGE_DECODER, handler);
     }
 
-    protected void replaceMessageEncoder(final ChannelHandler handler) {
+    protected final void replaceMessageEncoder(final ChannelHandler handler) {
         replaceChannelHandler(AbstractChannelInitializer.NETCONF_MESSAGE_ENCODER, handler);
     }
 
-    protected void replaceMessageEncoderAfterNextMessage(final ChannelHandler handler) {
+    protected final void replaceMessageEncoderAfterNextMessage(final ChannelHandler handler) {
         this.delayedEncoder = handler;
     }
 
-    protected void replaceChannelHandler(final String handlerName, final ChannelHandler handler) {
+    protected final void replaceChannelHandler(final String handlerName, final ChannelHandler handler) {
         channel.pipeline().replace(handlerName, handlerName, handler);
     }
 
@@ -124,7 +120,7 @@ public abstract class AbstractNetconfSession<S extends NetconfSession, L extends
         }
         final NetconfEXICodec exiCodec = new NetconfEXICodec(exiParams.getOptions());
         addExiHandlers(exiCodec);
-        logger.debug("EXI handlers added to pipeline on session {}", this);
+        logger.debug("Session {} EXI handlers added to pipeline", this);
     }
 
     protected abstract void addExiHandlers(NetconfEXICodec exiCodec);
index 5521e28818b20fcb9291089ced8867cce787e2e6..b0c8c6dc19e6b3b6c97f90b21fe0e1dc680e0ba3 100644 (file)
@@ -28,6 +28,7 @@ import org.opendaylight.controller.netconf.api.NetconfSessionPreferences;
 import org.opendaylight.controller.netconf.util.handler.FramingMechanismHandlerFactory;
 import org.opendaylight.controller.netconf.util.handler.NetconfChunkAggregator;
 import org.opendaylight.controller.netconf.util.handler.NetconfMessageToXMLEncoder;
+import org.opendaylight.controller.netconf.util.handler.NetconfXMLToHelloMessageDecoder;
 import org.opendaylight.controller.netconf.util.handler.NetconfXMLToMessageDecoder;
 import org.opendaylight.controller.netconf.util.messages.FramingMechanism;
 import org.opendaylight.controller.netconf.util.messages.NetconfHelloMessage;
@@ -74,7 +75,7 @@ extends AbstractSessionNegotiator<NetconfHelloMessage, S> {
     }
 
     @Override
-    protected void startNegotiation() {
+    protected final void startNegotiation() {
         final Optional<SslHandler> sslHandler = getSslHandler(channel);
         if (sslHandler.isPresent()) {
             Future<Channel> future = sslHandler.get().handshakeFuture();
@@ -125,27 +126,22 @@ extends AbstractSessionNegotiator<NetconfHelloMessage, S> {
 
         // FIXME, make sessionPreferences return HelloMessage, move NetconfHelloMessage to API
         sendMessage((NetconfHelloMessage)helloMessage);
+
+        replaceHelloMessageOutboundHandler();
         changeState(State.OPEN_WAIT);
     }
+
     private void cancelTimeout() {
         if(timeout!=null) {
             timeout.cancel();
         }
     }
 
-    @Override
-    protected void handleMessage(NetconfHelloMessage netconfMessage) throws NetconfDocumentedException {
-        S session = getSessionForHelloMessage(netconfMessage)   ;
-        negotiationSuccessful(session);
-    }
-
     protected final S getSessionForHelloMessage(NetconfHelloMessage netconfMessage) throws NetconfDocumentedException {
         Preconditions.checkNotNull(netconfMessage, "netconfMessage");
 
         final Document doc = netconfMessage.getDocument();
 
-        replaceHelloMessageHandlers();
-
         if (shouldUseChunkFraming(doc)) {
             insertChunkFramingToPipeline();
         }
@@ -157,23 +153,44 @@ extends AbstractSessionNegotiator<NetconfHelloMessage, S> {
     /**
      * Insert chunk framing handlers into the pipeline
      */
-    protected void insertChunkFramingToPipeline() {
+    private void insertChunkFramingToPipeline() {
         replaceChannelHandler(channel, AbstractChannelInitializer.NETCONF_MESSAGE_FRAME_ENCODER,
                 FramingMechanismHandlerFactory.createHandler(FramingMechanism.CHUNK));
         replaceChannelHandler(channel, AbstractChannelInitializer.NETCONF_MESSAGE_AGGREGATOR,
                 new NetconfChunkAggregator());
     }
 
-    protected boolean shouldUseChunkFraming(Document doc) {
+    private boolean shouldUseChunkFraming(Document doc) {
         return containsBase11Capability(doc)
                 && containsBase11Capability(sessionPreferences.getHelloMessage().getDocument());
     }
 
     /**
-     * Remove special handlers for hello message. Insert regular netconf xml message (en|de)coders.
+     * Remove special inbound handler for hello message. Insert regular netconf xml message (en|de)coders.
+     *
+     * Inbound hello message handler should be kept until negotiation is successful
+     * It caches any non-hello messages while negotiation is still in progress
+     */
+    protected final void replaceHelloMessageInboundHandler(final S session) {
+        ChannelHandler helloMessageHandler = replaceChannelHandler(channel, AbstractChannelInitializer.NETCONF_MESSAGE_DECODER, new NetconfXMLToMessageDecoder());
+
+        Preconditions.checkState(helloMessageHandler instanceof NetconfXMLToHelloMessageDecoder,
+                "Pipeline handlers misplaced on session: %s, pipeline: %s", session, channel.pipeline());
+        Iterable<NetconfMessage> netconfMessagesFromNegotiation =
+                ((NetconfXMLToHelloMessageDecoder) helloMessageHandler).getPostHelloNetconfMessages();
+
+        // Process messages received during negotiation
+        // The hello message handler does not have to be synchronized, since it is always call from the same thread by netty
+        // It means, we are now using the thread now
+        for (NetconfMessage message : netconfMessagesFromNegotiation) {
+            session.handleMessage(message);
+        }
+    }
+
+    /**
+     * Remove special outbound handler for hello message. Insert regular netconf xml message (en|de)coders.
      */
-    protected void replaceHelloMessageHandlers() {
-        replaceChannelHandler(channel, AbstractChannelInitializer.NETCONF_MESSAGE_DECODER, new NetconfXMLToMessageDecoder());
+    private void replaceHelloMessageOutboundHandler() {
         replaceChannelHandler(channel, AbstractChannelInitializer.NETCONF_MESSAGE_ENCODER, new NetconfMessageToXMLEncoder());
     }
 
@@ -183,7 +200,7 @@ extends AbstractSessionNegotiator<NetconfHelloMessage, S> {
 
     protected abstract S getSession(L sessionListener, Channel channel, NetconfHelloMessage message) throws NetconfDocumentedException;
 
-    protected synchronized void changeState(final State newState) {
+    private 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);
index 0a3e0b3ec33429051aade9cdd6e24b817505b209..6cc5006aba4ba7f9266935564911905d9b364b58 100644 (file)
@@ -7,20 +7,21 @@
  */
 package org.opendaylight.controller.netconf.util.exception;
 
-import org.opendaylight.controller.netconf.api.NetconfDocumentedException;
-
 import java.util.Collections;
 import java.util.Map;
 
+import org.opendaylight.controller.netconf.api.NetconfDocumentedException;
+
 public class MissingNameSpaceException extends NetconfDocumentedException {
+    private static final long serialVersionUID = 1L;
 
     public MissingNameSpaceException(final String message, final ErrorType errorType, final ErrorTag errorTag,
-                                      final ErrorSeverity errorSeverity) {
+                                     final ErrorSeverity errorSeverity) {
         this(message, errorType, errorTag, errorSeverity, Collections.<String, String> emptyMap());
     }
 
     public MissingNameSpaceException(final String message, final ErrorType errorType, final ErrorTag errorTag,
-                                      final ErrorSeverity errorSeverity, final Map<String, String> errorInfo){
+                                     final ErrorSeverity errorSeverity, final Map<String, String> errorInfo){
         super(message,errorType,errorTag,errorSeverity,errorInfo);
     }
 }
index b470ce13a85e10db56ff4582d17bdb1faec99245..7b5f52e3967178c8e30da453a06662994e054093 100644 (file)
@@ -7,20 +7,21 @@
  */
 package org.opendaylight.controller.netconf.util.exception;
 
-import org.opendaylight.controller.netconf.api.NetconfDocumentedException;
-
 import java.util.Collections;
 import java.util.Map;
 
+import org.opendaylight.controller.netconf.api.NetconfDocumentedException;
+
 public class UnexpectedElementException extends NetconfDocumentedException {
+    private static final long serialVersionUID = 1L;
 
     public UnexpectedElementException(final String message, final ErrorType errorType, final ErrorTag errorTag,
-                                        final ErrorSeverity errorSeverity) {
+                                      final ErrorSeverity errorSeverity) {
         this(message, errorType, errorTag, errorSeverity, Collections.<String, String> emptyMap());
     }
 
     public UnexpectedElementException(final String message, final ErrorType errorType, final ErrorTag errorTag,
-                                        final ErrorSeverity errorSeverity, final Map<String, String> errorInfo){
+                                      final ErrorSeverity errorSeverity, final Map<String, String> errorInfo) {
         super(message,errorType,errorTag,errorSeverity,errorInfo);
     }
 }
index 50d7670780d57e3b31fca8a8381e156dbd73b327..582fd23e16e7576c4b4c0622216f4db6f505f10f 100644 (file)
@@ -7,12 +7,13 @@
  */
 package org.opendaylight.controller.netconf.util.exception;
 
-import org.opendaylight.controller.netconf.api.NetconfDocumentedException;
-
 import java.util.Collections;
 import java.util.Map;
 
+import org.opendaylight.controller.netconf.api.NetconfDocumentedException;
+
 public class UnexpectedNamespaceException extends NetconfDocumentedException {
+    private static final long serialVersionUID = 1L;
 
     public UnexpectedNamespaceException(final String message, final ErrorType errorType, final ErrorTag errorTag,
                                           final ErrorSeverity errorSeverity) {
index ccc80a7b71248758cc2ce9a3c00225a0dab3fc49..8f4590cbb112bb6315f0ba0059e8fea417d48c3f 100644 (file)
@@ -40,7 +40,7 @@ public class ChunkedFramingMechanismEncoder extends MessageToByteEncoder<ByteBuf
     }
 
     @Override
-    protected void encode(ChannelHandlerContext ctx, ByteBuf msg, ByteBuf out) throws Exception {
+    protected void encode(ChannelHandlerContext ctx, ByteBuf msg, ByteBuf out)  {
         while (msg.readableBytes() > chunkSize) {
             ByteBuf chunk = Unpooled.buffer(chunkSize);
             chunk.writeBytes(createChunkHeader(chunkSize));
index a3efe8a16bd0c541971e7a4c0ca172b83144d3d5..8df62a67020c9b05dcac72bb0d589f42bb7a9076 100644 (file)
@@ -16,7 +16,7 @@ import org.opendaylight.controller.netconf.util.messages.NetconfMessageConstants
 
 public class EOMFramingMechanismEncoder extends MessageToByteEncoder<ByteBuf> {
     @Override
-    protected void encode(ChannelHandlerContext ctx, ByteBuf msg, ByteBuf out) throws Exception {
+    protected void encode(ChannelHandlerContext ctx, ByteBuf msg, ByteBuf out) {
         out.writeBytes(msg);
         out.writeBytes(NetconfMessageConstants.END_OF_MESSAGE);
     }
index 1f7a32dc704ca2698112b0e5e9d90c9cdb503a87..bac83e49d3c463548589c48ae367d972ae818d6e 100644 (file)
@@ -15,11 +15,13 @@ import org.slf4j.LoggerFactory;
 import io.netty.buffer.ByteBuf;
 import io.netty.handler.codec.MessageToByteEncoder;
 
-public class FramingMechanismHandlerFactory {
+public final class FramingMechanismHandlerFactory {
 
     private static final Logger logger = LoggerFactory.getLogger(FramingMechanismHandlerFactory.class);
 
-    private FramingMechanismHandlerFactory() {}
+    private FramingMechanismHandlerFactory() {
+        // not called - private constructor for utility class
+    }
 
     public static MessageToByteEncoder<ByteBuf> createHandler(FramingMechanism framingMechanism) {
         logger.debug("{} framing mechanism was selected.", framingMechanism);
index 219e92c3f14053c805d1ac204132f92d62479948..9f9f4191f7641943fe768712b94c0ec2b3f409b7 100644 (file)
@@ -21,6 +21,8 @@ import io.netty.handler.codec.ByteToMessageDecoder;
 
 public class NetconfChunkAggregator extends ByteToMessageDecoder {
     private final static Logger logger = LoggerFactory.getLogger(NetconfChunkAggregator.class);
+    private static final String GOT_PARAM_WHILE_WAITING_FOR_PARAM = "Got byte {} while waiting for {}";
+    private static final String GOT_PARAM_WHILE_WAITING_FOR_PARAM_PARAM = "Got byte {} while waiting for {}-{}";
     public static final int DEFAULT_MAXIMUM_CHUNK_SIZE = 16 * 1024 * 1024;
 
     private static enum State {
@@ -40,17 +42,35 @@ public class NetconfChunkAggregator extends ByteToMessageDecoder {
     private long chunkSize;
     private CompositeByteBuf chunk;
 
+    private void checkNewLine(byte b,String errorMessage){
+        if (b != '\n') {
+            logger.debug(GOT_PARAM_WHILE_WAITING_FOR_PARAM, b, (byte)'\n');
+            throw new IllegalStateException(errorMessage);
+        }
+    }
+
+    private void checkHash(byte b,String errorMessage){
+        if (b != '#') {
+            logger.debug(GOT_PARAM_WHILE_WAITING_FOR_PARAM, b, (byte)'#');
+            throw new IllegalStateException(errorMessage);
+        }
+    }
+
+    private void checkChunkSize(){
+        if (chunkSize > maxChunkSize) {
+            logger.debug("Parsed chunk size {}, maximum allowed is {}", chunkSize, maxChunkSize);
+            throw new IllegalStateException("Maximum chunk size exceeded");
+        }
+
+    }
     @Override
-    protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception {
+    protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws IllegalStateException {
         while (in.isReadable()) {
             switch (state) {
             case HEADER_ONE:
             {
                 final byte b = in.readByte();
-                if (b != '\n') {
-                    logger.debug("Got byte {} while waiting for {}", b, (byte)'\n');
-                    throw new IllegalStateException("Malformed chunk header encountered (byte 0)");
-                }
+                checkNewLine(b, "Malformed chunk header encountered (byte 0)");
 
                 state = State.HEADER_TWO;
 
@@ -60,10 +80,7 @@ public class NetconfChunkAggregator extends ByteToMessageDecoder {
             case HEADER_TWO:
             {
                 final byte b = in.readByte();
-                if (b != '#') {
-                    logger.debug("Got byte {} while waiting for {}", b, (byte)'#');
-                    throw new IllegalStateException("Malformed chunk header encountered (byte 1)");
-                }
+                checkHash(b, "Malformed chunk header encountered (byte 1)");
 
                 state = State.HEADER_LENGTH_FIRST;
                 break;
@@ -84,17 +101,13 @@ public class NetconfChunkAggregator extends ByteToMessageDecoder {
                 }
 
                 if (b < '0' || b > '9') {
-                    logger.debug("Got byte {} while waiting for {}-{}", b, (byte)'0', (byte)'9');
+                    logger.debug(GOT_PARAM_WHILE_WAITING_FOR_PARAM_PARAM, b, (byte)'0', (byte)'9');
                     throw new IllegalStateException("Invalid chunk size encountered");
                 }
 
                 chunkSize *= 10;
                 chunkSize += b - '0';
-
-                if (chunkSize > maxChunkSize) {
-                    logger.debug("Parsed chunk size {}, maximum allowed is {}", chunkSize, maxChunkSize);
-                    throw new IllegalStateException("Maximum chunk size exceeded");
-                }
+                checkChunkSize();
                 break;
             }
             case DATA:
@@ -109,18 +122,13 @@ public class NetconfChunkAggregator extends ByteToMessageDecoder {
                     in.discardReadBytes();
                     return;
                 }
-
                 aggregateChunks(in.readBytes((int) chunkSize));
                 state = State.FOOTER_ONE;
                 break;
             case FOOTER_ONE:
             {
                 final byte b = in.readByte();
-                if (b != '\n') {
-                    logger.debug("Got byte {} while waiting for {}", b, (byte)'\n');
-                    throw new IllegalStateException("Malformed chunk footer encountered (byte 0)");
-                }
-
+                checkNewLine(b,"Malformed chunk footer encountered (byte 0)");
                 state = State.FOOTER_TWO;
                 chunkSize = 0;
                 break;
@@ -128,12 +136,7 @@ public class NetconfChunkAggregator extends ByteToMessageDecoder {
             case FOOTER_TWO:
             {
                 final byte b = in.readByte();
-
-                if (b != '#') {
-                    logger.debug("Got byte {} while waiting for {}", b, (byte)'#');
-                    throw new IllegalStateException("Malformed chunk footer encountered (byte 1)");
-                }
-
+                checkHash(b,"Malformed chunk footer encountered (byte 1)");
                 state = State.FOOTER_THREE;
                 break;
             }
@@ -144,28 +147,14 @@ public class NetconfChunkAggregator extends ByteToMessageDecoder {
                 // In this state, either header-of-new-chunk or message-end is expected
                 // Depends on the next character
 
-                if (isHeaderLengthFirst(b)) {
-                    // Extract header length#1 from new chunk
-                    chunkSize = processHeaderLengthFirst(b);
-                    // Proceed with next chunk processing
-                    state = State.HEADER_LENGTH_OTHER;
-                } else if (b == '#') {
-                    state = State.FOOTER_FOUR;
-                } else {
-                    logger.debug("Got byte {} while waiting for {} or {}-{}", b, (byte) '#', (byte) '1', (byte) '9');
-                    throw new IllegalStateException("Malformed chunk footer encountered (byte 2)");
-                }
+                extractNewChunkOrMessageEnd(b);
 
                 break;
             }
             case FOOTER_FOUR:
             {
                 final byte b = in.readByte();
-                if (b != '\n') {
-                    logger.debug("Got byte {} while waiting for {}", b, (byte)'\n');
-                    throw new IllegalStateException("Malformed chunk footer encountered (byte 3)");
-                }
-
+                checkNewLine(b,"Malformed chunk footer encountered (byte 3)");
                 state = State.HEADER_ONE;
                 out.add(chunk);
                 chunk = null;
@@ -177,6 +166,20 @@ public class NetconfChunkAggregator extends ByteToMessageDecoder {
         in.discardReadBytes();
     }
 
+    private void extractNewChunkOrMessageEnd(byte b) {
+        if (isHeaderLengthFirst(b)) {
+            // Extract header length#1 from new chunk
+            chunkSize = processHeaderLengthFirst(b);
+            // Proceed with next chunk processing
+            state = State.HEADER_LENGTH_OTHER;
+        } else if (b == '#') {
+            state = State.FOOTER_FOUR;
+        } else {
+            logger.debug(GOT_PARAM_WHILE_WAITING_FOR_PARAM_PARAM, b, (byte) '#', (byte) '1', (byte) '9');
+            throw new IllegalStateException("Malformed chunk footer encountered (byte 2)");
+        }
+    }
+
     private void initChunk() {
         chunk = Unpooled.compositeBuffer();
     }
@@ -189,8 +192,8 @@ public class NetconfChunkAggregator extends ByteToMessageDecoder {
     }
 
     private static int processHeaderLengthFirst(byte b) {
-        if (isHeaderLengthFirst(b) == false) {
-            logger.debug("Got byte {} while waiting for {}-{}", b, (byte)'1', (byte)'9');
+        if (!isHeaderLengthFirst(b)) {
+            logger.debug(GOT_PARAM_WHILE_WAITING_FOR_PARAM_PARAM, b, (byte)'1', (byte)'9');
             throw new IllegalStateException("Invalid chunk size encountered (byte 0)");
         }
 
index 9435e6ff732cad7904a8fc71caf6ed9ee194225a..8b1bb3601ddd3df4b2b033d4d3f697acab76d210 100644 (file)
@@ -24,7 +24,7 @@ public class NetconfEOMAggregator extends ByteToMessageDecoder {
     private final static Logger logger = LoggerFactory.getLogger(NetconfEOMAggregator.class);
 
     @Override
-    protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception {
+    protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) {
         int index = indexOfSequence(in, NetconfMessageConstants.END_OF_MESSAGE);
         if (index == -1) {
             logger.debug("Message is not complete, read again.");
index cbfbfe1c05a21ebb5db74b5973ce32fc90f86c98..ae330d67e68344e16d1904b7c1547caea73cadb8 100644 (file)
@@ -34,8 +34,6 @@ 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) {
@@ -50,9 +48,9 @@ public final class NetconfEXIToMessageDecoder extends ByteToMessageDecoder {
          * 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) {
+        // If empty Byte buffer is passed to r.parse, EOFException is thrown
+        if (in.isReadable() == false) {
             LOG.debug("No more content in incoming buffer.");
             return;
         }
@@ -69,7 +67,6 @@ public final class NetconfEXIToMessageDecoder extends ByteToMessageDecoder {
         final DOMResult domResult = new DOMResult();
         handler.setResult(domResult);
 
-
         try (final InputStream is = new ByteBufInputStream(in)) {
             r.parse(new InputSource(is));
         }
index c4808e0868d0f59b1378f5900b5151933edf696e..361d4fcee908018eac90a54844569ced70c22a21 100644 (file)
@@ -7,16 +7,20 @@
  */
 package org.opendaylight.controller.netconf.util.handler;
 
+import com.google.common.base.Preconditions;
+import com.google.common.collect.Lists;
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.ByteBufUtil;
 import io.netty.channel.ChannelHandlerContext;
 import io.netty.handler.codec.ByteToMessageDecoder;
 
 import java.io.ByteArrayInputStream;
+import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.util.Arrays;
 import java.util.List;
 
+import org.opendaylight.controller.netconf.api.NetconfDocumentedException;
 import org.opendaylight.controller.netconf.api.NetconfMessage;
 import org.opendaylight.controller.netconf.util.messages.NetconfHelloMessage;
 import org.opendaylight.controller.netconf.util.messages.NetconfHelloMessageAdditionalHeader;
@@ -28,12 +32,18 @@ import org.w3c.dom.Document;
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Charsets;
 import com.google.common.collect.ImmutableList;
+import org.xml.sax.SAXException;
 
 /**
  * Customized NetconfXMLToMessageDecoder that reads additional header with
  * session metadata from
  * {@link org.opendaylight.controller.netconf.util.messages.NetconfHelloMessage}
- * . Used by netconf server to retrieve information about session metadata.
+ *
+ *
+ * This handler should be replaced in pipeline by regular message handler as last step of negotiation.
+ * It serves as a message barrier and halts all non-hello netconf messages.
+ * Netconf messages after hello should be processed once the negotiation succeeded.
+ *
  */
 public final class NetconfXMLToHelloMessageDecoder extends ByteToMessageDecoder {
     private static final Logger LOG = LoggerFactory.getLogger(NetconfXMLToHelloMessageDecoder.class);
@@ -46,9 +56,15 @@ public final class NetconfXMLToHelloMessageDecoder extends ByteToMessageDecoder
             new byte[] { '\r', '\n', '[' },
             new byte[] { '\n', '[' });
 
+    // State variables do not have to by synchronized
+    // Netty uses always the same (1) thread per pipeline
+    // We use instance of this per pipeline
+    private List<NetconfMessage> nonHelloMessages = Lists.newArrayList();
+    private boolean helloReceived = false;
+
     @Override
     @VisibleForTesting
-    public void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception {
+    public void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws IOException, SAXException, NetconfDocumentedException {
         if (in.readableBytes() == 0) {
             LOG.debug("No more content in incoming buffer.");
             return;
@@ -76,18 +92,39 @@ public final class NetconfXMLToHelloMessageDecoder extends ByteToMessageDecoder
 
             Document doc = XmlUtil.readXmlToDocument(new ByteArrayInputStream(bytes));
 
-            final NetconfMessage message;
-            if (additionalHeader != null) {
-                message = new NetconfHelloMessage(doc, NetconfHelloMessageAdditionalHeader.fromString(additionalHeader));
+            final NetconfMessage message = getNetconfMessage(additionalHeader, doc);
+            if (message instanceof NetconfHelloMessage) {
+                Preconditions.checkState(helloReceived == false,
+                        "Multiple hello messages received, unexpected hello: %s",
+                        XmlUtil.toString(message.getDocument()));
+                out.add(message);
+                helloReceived = true;
+            // Non hello message, suspend the message and insert into cache
             } else {
-                message = new NetconfHelloMessage(doc);
+                Preconditions.checkState(helloReceived, "Hello message not received, instead received: %s",
+                        XmlUtil.toString(message.getDocument()));
+                LOG.debug("Netconf message received during negotiation, caching {}",
+                        XmlUtil.toString(message.getDocument()));
+                nonHelloMessages.add(message);
             }
-            out.add(message);
         } finally {
             in.discardReadBytes();
         }
     }
 
+    private NetconfMessage getNetconfMessage(final String additionalHeader, final Document doc) throws NetconfDocumentedException {
+        NetconfMessage msg = new NetconfMessage(doc);
+        if(NetconfHelloMessage.isHelloMessage(msg)) {
+            if (additionalHeader != null) {
+                return new NetconfHelloMessage(doc, NetconfHelloMessageAdditionalHeader.fromString(additionalHeader));
+            } else {
+                return new NetconfHelloMessage(doc);
+            }
+        }
+
+        return msg;
+    }
+
     private int getAdditionalHeaderEndIndex(byte[] bytes) {
         for (byte[] possibleEnd : POSSIBLE_ENDS) {
             int idx = findByteSequence(bytes, possibleEnd);
@@ -152,4 +189,10 @@ public final class NetconfXMLToHelloMessageDecoder extends ByteToMessageDecoder
         return Charsets.UTF_8.decode(ByteBuffer.wrap(bytes)).toString();
     }
 
+    /**
+     * @return Collection of NetconfMessages that were not hello, but were received during negotiation
+     */
+    public Iterable<NetconfMessage> getPostHelloNetconfMessages() {
+        return nonHelloMessages;
+    }
 }
index 06a4dc7207204d573f5abb2cc28c32318fee891d..23f48b31d822ff2b4c10351c844718989ca3b7c2 100644 (file)
@@ -7,12 +7,6 @@
  */
 package org.opendaylight.controller.netconf.util.handler;
 
-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;
-
 import java.util.List;
 
 import org.opendaylight.controller.netconf.api.NetconfMessage;
@@ -22,12 +16,19 @@ import org.slf4j.LoggerFactory;
 
 import com.google.common.annotations.VisibleForTesting;
 
+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 NetconfXMLToMessageDecoder extends ByteToMessageDecoder {
     private static final Logger LOG = LoggerFactory.getLogger(NetconfXMLToMessageDecoder.class);
 
     @Override
     @VisibleForTesting
     public void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception {
+
         if (in.readableBytes() != 0) {
             LOG.trace("Received to decode: {}", ByteBufUtil.hexDump(in));
             out.add(new NetconfMessage(XmlUtil.readXmlToDocument(new ByteBufInputStream(in))));
index 4aa274c6df34f2f2e9d4151454c4b84f53a41bdb..c482e77735348833a3eeda204d51698af1f50071 100644 (file)
@@ -29,7 +29,7 @@ public class LoginPassword extends AuthenticationHandler {
     public void authenticate(Connection connection) throws IOException {
         boolean isAuthenticated = connection.authenticateWithPassword(username, password);
 
-        if (isAuthenticated == false) {
+        if (!isAuthenticated) {
             throw new IOException("Authentication failed.");
         }
     }
index 7beee649abfe0501e60850fda0db79dd96c7bb86..50f44054c16f9be42a300da8144ec3ce2866ea32 100644 (file)
@@ -58,8 +58,9 @@ public class SshClient {
     }
 
     public void close() {
-        for (SshSession session : openSessions.values())
+        for (SshSession session : openSessions.values()){
             closeSession(session);
+        }
 
         openSessions.clear();
 
index 6350dd154415b510515f919d94c88d06ecac5314..244bcc0041c963988aa8fc78c712767fc7c643c2 100644 (file)
@@ -64,7 +64,7 @@ public class SshClientAdapter implements Runnable {
                 }
             }
 
-            while (stopRequested.get() == false) {
+            while (!stopRequested.get()) {
                 byte[] readBuff = new byte[BUFFER_SIZE];
                 int c = stdOut.read(readBuff);
                 if (c == -1) {
@@ -82,7 +82,7 @@ public class SshClientAdapter implements Runnable {
             // Netty closed connection prematurely.
             // Just pass and move on.
         } catch (Exception e) {
-            throw new RuntimeException(e);
+            throw new IllegalStateException(e);
         } finally {
             sshClient.close();
 
index 313ea932413b63b36c5d20cc6cb1a9570205ab2a..b8f13699ba06d49876c6002fc27f297eceded04c 100644 (file)
@@ -12,7 +12,6 @@ import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
 import io.netty.channel.ChannelHandlerContext;
 import io.netty.channel.ChannelInboundHandler;
-
 import java.io.IOException;
 import java.io.InputStream;
 
@@ -60,7 +59,7 @@ public class ChannelInputStream extends InputStream implements ChannelInboundHan
                     lock.wait();
                 } catch (InterruptedException e) {
                     Thread.currentThread().interrupt();
-                    throw new RuntimeException(e);
+                    throw new IllegalStateException(e);
                 }
             }
             return this.bb.readByte() & 0xFF;
index 3fd25e814d697d37e607e1e0ade520db254e83a8..86b2ba1671478a022e30f7dd8c724b07c1d4d703 100644 (file)
@@ -8,17 +8,21 @@
 
 package org.opendaylight.controller.netconf.util.messages;
 
-import com.google.common.base.Optional;
-import com.google.common.collect.Sets;
-import org.opendaylight.controller.netconf.api.NetconfDocumentedException;
 import org.opendaylight.controller.netconf.api.NetconfMessage;
+
+import java.util.Set;
+
+import org.opendaylight.controller.netconf.api.NetconfDocumentedException;
+import org.opendaylight.controller.netconf.util.exception.MissingNameSpaceException;
 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 java.util.Set;
+import com.google.common.base.Optional;
+import com.google.common.base.Preconditions;
+import com.google.common.collect.Sets;
 
 /**
  * NetconfMessage that can carry additional header with session metadata. See {@link org.opendaylight.controller.netconf.util.messages.NetconfHelloMessageAdditionalHeader}
@@ -43,10 +47,10 @@ public final class NetconfHelloMessage extends NetconfMessage {
         return additionalHeader== null ? Optional.<NetconfHelloMessageAdditionalHeader>absent() : Optional.of(additionalHeader);
     }
 
-    private static void checkHelloMessage(Document doc) throws NetconfDocumentedException {
-        XmlElement.fromDomElementWithExpected(doc.getDocumentElement(), HELLO_TAG,
-                XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_NETCONF_BASE_1_0);
-
+    private static void checkHelloMessage(Document doc) {
+        Preconditions.checkArgument(isHelloMessage(doc),
+                "Hello message invalid format, should contain %s tag from namespace %s, but is: %s", HELLO_TAG,
+                XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_NETCONF_BASE_1_0, XmlUtil.toString(doc));
     }
 
     public static NetconfHelloMessage createClientHello(Iterable<String> capabilities,
@@ -81,4 +85,21 @@ public final class NetconfHelloMessage extends NetconfMessage {
         doc.getDocumentElement().appendChild(sessionIdElement);
         return new NetconfHelloMessage(doc);
     }
+
+    public static boolean isHelloMessage(final NetconfMessage msg) {
+        Document document = msg.getDocument();
+        return isHelloMessage(document);
+    }
+
+    private static boolean isHelloMessage(final Document document) {
+        XmlElement element = XmlElement.fromDomElement(document.getDocumentElement());
+        try {
+            return element.getName().equals(HELLO_TAG) &&
+                   element.hasNamespace() &&
+                   element.getNamespace().equals(XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_NETCONF_BASE_1_0);
+        } catch (MissingNameSpaceException e) {
+            // Cannot happen, since we check for hasNamespace
+            throw new IllegalStateException(e);
+        }
+    }
 }
index 8bd6b8865933d7191a063055834ce3fb98b0bbe4..5c2770a8c1f2387211f4cdcf1a1ef762ef8f11d8 100644 (file)
@@ -10,7 +10,9 @@ package org.opendaylight.controller.netconf.util.messages;
 
 import com.google.common.base.Charsets;
 
-public class NetconfMessageConstants {
+public final class NetconfMessageConstants {
+
+    private NetconfMessageConstants(){}
     /**
      * The NETCONF 1.0 old-style message separator. This is framing mechanism
      * is used by default.
@@ -26,4 +28,5 @@ public class NetconfMessageConstants {
     public static final int MAX_HEADER_LENGTH = 13;
 
     public static final byte[] END_OF_CHUNK = "\n##\n".getBytes(Charsets.UTF_8);
+
 }
index de2d6d7e0c354ada3bcf1fb4f1b630b186c34e3c..fdcaa2a5b8c98616385231d5c6c8c0f7e39c0adc 100644 (file)
@@ -10,6 +10,8 @@ package org.opendaylight.controller.netconf.util.messages;
 
 import com.google.common.base.Preconditions;
 import io.netty.channel.Channel;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.ChannelFutureListener;
 import org.opendaylight.controller.netconf.api.NetconfSession;
 import org.opendaylight.controller.netconf.api.NetconfDocumentedException;
 import org.opendaylight.controller.netconf.api.NetconfMessage;
@@ -38,13 +40,15 @@ public final class SendErrorExceptionUtil {
             final NetconfDocumentedException sendErrorException) {
         logger.trace("Sending error {}", sendErrorException.getMessage(), sendErrorException);
         final Document errorDocument = createDocument(sendErrorException);
-        session.sendMessage(new NetconfMessage(errorDocument));
+        ChannelFuture f = session.sendMessage(new NetconfMessage(errorDocument));
+        f.addListener(new SendErrorVerifyingListener(sendErrorException));
     }
 
     public static void sendErrorMessage(Channel channel, NetconfDocumentedException sendErrorException) {
         logger.trace("Sending error {}", sendErrorException.getMessage(), sendErrorException);
         final Document errorDocument = createDocument(sendErrorException);
-        channel.writeAndFlush(new NetconfMessage(errorDocument));
+        ChannelFuture f = channel.writeAndFlush(new NetconfMessage(errorDocument));
+        f.addListener(new SendErrorVerifyingListener(sendErrorException));
     }
 
     public static void sendErrorMessage(NetconfSession session, NetconfDocumentedException sendErrorException,
@@ -52,7 +56,8 @@ public final class SendErrorExceptionUtil {
         final Document errorDocument = createDocument(sendErrorException);
         logger.trace("Sending error {}", XmlUtil.toString(errorDocument));
         tryToCopyAttributes(incommingMessage.getDocument(), errorDocument, sendErrorException);
-        session.sendMessage(new NetconfMessage(errorDocument));
+        ChannelFuture f = session.sendMessage(new NetconfMessage(errorDocument));
+        f.addListener(new SendErrorVerifyingListener(sendErrorException));
     }
 
     private static void tryToCopyAttributes(final Document incommingDocument, final Document errorDocument,
@@ -112,7 +117,7 @@ public final class SendErrorExceptionUtil {
                 XPathConstants.NODE);
         errorSeverityNode.setTextContent(sendErrorException.getErrorSeverity().getTagValue());
 
-        if (sendErrorException.getErrorInfo() != null && sendErrorException.getErrorInfo().isEmpty() == false) {
+        if (sendErrorException.getErrorInfo() != null && !sendErrorException.getErrorInfo().isEmpty()) {
             /*
              * <error-info> <bad-attribute>message-id</bad-attribute>
              * <bad-element>rpc</bad-element> </error-info>
@@ -133,4 +138,20 @@ public final class SendErrorExceptionUtil {
         return errorDocument;
     }
 
+    /**
+     * Checks if netconf error was sent successfully.
+     */
+    private static final class SendErrorVerifyingListener implements ChannelFutureListener {
+        private final NetconfDocumentedException sendErrorException;
+
+        public SendErrorVerifyingListener(final NetconfDocumentedException sendErrorException) {
+            this.sendErrorException = sendErrorException;
+        }
+
+        @Override
+        public void operationComplete(final ChannelFuture channelFuture) throws Exception {
+            Preconditions.checkState(channelFuture.isSuccess(), "Unable to send exception {}", sendErrorException,
+                    channelFuture.cause());
+        }
+    }
 }
index 80eaa26de184ddc29993bd847d1c34b0e7becd09..f89df2ac7cc331908f64ed8d05b2dc826f4d7757 100644 (file)
@@ -9,12 +9,11 @@
 package org.opendaylight.controller.netconf.util.osgi;
 
 import com.google.common.base.Optional;
+import com.google.common.base.Strings;
+import java.net.InetSocketAddress;
 import org.osgi.framework.BundleContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-
-import java.net.InetSocketAddress;
-
 import static com.google.common.base.Preconditions.checkNotNull;
 
 public final class NetconfConfigUtil {
@@ -32,6 +31,8 @@ public final class NetconfConfigUtil {
     private static final String ADDRESS_SUFFIX_PROP = ".address";
     private static final String CLIENT_PROP = ".client";
     private static final String PRIVATE_KEY_PATH_PROP = ".pk.path";
+    private static final String SSH_DEFAULT_USER = ".default.user";
+    private static final String SSH_DEFAULT_PASSWORD = ".default.password";
 
     private static final String CONNECTION_TIMEOUT_MILLIS_PROP = "connectionTimeoutMillis";
     private static final long DEFAULT_TIMEOUT_MILLIS = 5000;
@@ -54,7 +55,7 @@ public final class NetconfConfigUtil {
 
         Optional<InetSocketAddress> inetSocketAddressOptional = extractSomeNetconfAddress(context, InfixProp.tcp, exceptionMessageIfNotFound, forClient);
 
-        if (inetSocketAddressOptional.isPresent() == false) {
+        if (!inetSocketAddressOptional.isPresent()) {
             throw new IllegalStateException("Netconf tcp address not found." + exceptionMessageIfNotFound);
         }
         InetSocketAddress inetSocketAddress = inetSocketAddressOptional.get();
@@ -72,6 +73,13 @@ public final class NetconfConfigUtil {
     public static String getPrivateKeyPath(BundleContext context){
         return getPropertyValue(context,PREFIX_PROP + InfixProp.ssh +PRIVATE_KEY_PATH_PROP);
     }
+    public static Optional<String> getSSHDefaultUser(BundleContext context){
+        return getOptionalPropertyValue(context,PREFIX_PROP + InfixProp.ssh +SSH_DEFAULT_USER);
+    }
+    public static Optional<String> getSSHDefaultPassword(BundleContext context){
+        return getOptionalPropertyValue(context,PREFIX_PROP + InfixProp.ssh +SSH_DEFAULT_PASSWORD);
+    }
+
     private static String getPropertyValue(BundleContext context, String propertyName){
         String propertyValue = context.getProperty(propertyName);
         if (propertyValue == null){
@@ -79,6 +87,13 @@ public final class NetconfConfigUtil {
         }
         return propertyValue;
     }
+    private static Optional<String> getOptionalPropertyValue(BundleContext context, String propertyName){
+        String propertyValue = context.getProperty(propertyName);
+        if (Strings.isNullOrEmpty(propertyValue)){
+            return Optional.absent();
+        }
+        return Optional.fromNullable(propertyValue);
+    }
     /**
      * @param context
      *            from which properties are being read.
index 17ea3740fca77cd6124daad71050de6383970dc5..66603fb6c2d60b90cf2e17c277e65420d3c0b8b1 100644 (file)
@@ -180,7 +180,7 @@ public final class XmlElement {
         final List<XmlElement> result = new ArrayList<>();
         for (int i = 0; i < childNodes.getLength(); i++) {
             Node item = childNodes.item(i);
-            if (item instanceof Element == false) {
+            if (!(item instanceof Element)) {
                 continue;
             }
             if (strat.accept((Element) item)) {
@@ -400,7 +400,7 @@ public final class XmlElement {
         } else {
             prefix = "";
         }
-        if (namespaces.containsKey(prefix) == false) {
+        if (!namespaces.containsKey(prefix)) {
             throw new IllegalArgumentException("Cannot find namespace for " + XmlUtil.toString(element) + ". Prefix from content is "
                     + prefix + ". Found namespaces " + namespaces);
         }
index 39a49544a576abe3bd65403c864aa1b4572fc898..708f17cadbc2a16dd639b53b386dd84e212d3d54 100644 (file)
@@ -46,7 +46,9 @@ public final class XmlNetconfConstants {
     // TODO duplicate
     public static final String RFC4741_TARGET_NAMESPACE = "urn:ietf:params:xml:ns:netconf:base:1.0";
     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_BASE_1_1 = "urn:ietf:params:xml:ns:netconf:base:1.1";
+    public static final String URN_IETF_PARAMS_NETCONF_BASE_1_0 = "urn:ietf:params:netconf:base:1.0";
+    public static final String URN_IETF_PARAMS_NETCONF_BASE_1_1 = "urn:ietf:params: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";
index d8907424f804f6d93262a38ddf107364a392cca1..1f81117ca383922ff246c9e10af36b708f84b26a 100644 (file)
@@ -8,12 +8,12 @@
 
 package org.opendaylight.controller.netconf.util.xml;
 
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.StringWriter;
+import com.google.common.base.Charsets;
+import com.google.common.base.Optional;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.xml.sax.SAXException;
 
 import javax.xml.XMLConstants;
 import javax.xml.namespace.QName;
@@ -23,7 +23,6 @@ import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.transform.OutputKeys;
 import javax.xml.transform.Source;
 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.DOMSource;
@@ -33,14 +32,12 @@ import javax.xml.validation.Schema;
 import javax.xml.validation.SchemaFactory;
 import javax.xml.xpath.XPathExpression;
 import javax.xml.xpath.XPathExpressionException;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.xml.sax.SAXException;
-
-import com.google.common.base.Charsets;
-import com.google.common.base.Optional;
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.StringWriter;
 
 public final class XmlUtil {
 
@@ -81,7 +78,7 @@ public final class XmlUtil {
         try {
             dBuilder = BUILDERFACTORY.newDocumentBuilder();
         } catch (ParserConfigurationException e) {
-            throw new RuntimeException("Failed to parse XML document", e);
+            throw new IllegalStateException("Failed to parse XML document", e);
         }
         Document doc = dBuilder.parse(xmlContent);
 
@@ -96,10 +93,9 @@ public final class XmlUtil {
     public static Document newDocument() {
         try {
             DocumentBuilder builder = BUILDERFACTORY.newDocumentBuilder();
-            Document document = builder.newDocument();
-            return document;
+            return builder.newDocument();
         } catch (ParserConfigurationException e) {
-            throw new RuntimeException("Failed to create document", e);
+            throw new IllegalStateException("Failed to create document", e);
         }
     }
 
@@ -153,8 +149,8 @@ public final class XmlUtil {
             transformer.transform(source, result);
 
             return result.getWriter().toString();
-        } catch (IllegalArgumentException | TransformerFactoryConfigurationError | TransformerException e) {
-            throw new RuntimeException("Unable to serialize xml element " + xml, e);
+        } catch (Exception |  TransformerFactoryConfigurationError e) {
+            throw new IllegalStateException("Unable to serialize xml element " + xml, e);
         }
     }
 
index 86ef75d45f8b4d5eaec418a25d1b248bada9eb11..50e84463f5651948f408ef703ce6ee2d93590330 100644 (file)
@@ -29,7 +29,6 @@
     <module>netconf-monitoring</module>
     <module>ietf-netconf-monitoring</module>
     <module>ietf-netconf-monitoring-extension</module>
-    <module>../../third-party/org.openexi</module>
   </modules>
 
   <dependencies>
index 9514ec1ed550bf7ac405a4478e6e2e3237729cbb..c8f1dd270d91ed7863806f1724c3ce3eda56ce8d 100644 (file)
@@ -40,7 +40,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>2.3.6</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index 4d491a51d20858032242121180eb9cca06cad411..998dd4488cdef15ddd68dab6c9ef86ad4a856790 100644 (file)
@@ -36,7 +36,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index d861e0a7c9601aab11c39e59a23725bfafea7074..ee83c9358093e6663a40749c4825020d0c09e499 100644 (file)
@@ -24,7 +24,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index dc481ce74a04f1ab4eea792e86beaaa6424afa37..c06f8b42156b3a596171ed7b87b5d9938c2327b4 100644 (file)
@@ -41,7 +41,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index 83699d2b4b3e79c5ae4f160a404d68a2d99f85e3..09c075735a6c3b7090de71554c6fdefc73ef34ec 100644 (file)
@@ -72,7 +72,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index 124f2d84e88e42d7f52e2f0d1a2970e2e6951bf3..cb21d7c1673b797913fb491af6374dbec955ddb5 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0"?>
 <enunciate label="full" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:noNamespaceSchemaLocation="http://enunciate.codehaus.org/schemas/enunciate-1.26.xsd">
+    xsi:noNamespaceSchemaLocation="http://enunciate.codehaus.org/schemas/enunciate-1.28.xsd">
 
   <services>
     <rest defaultRestSubcontext="/controller/nb/v2/connectionmanager"/>
index 7c17c74800d53d8ad1ada61934fdae6c8ce9e9ea..a0940e34284833673913654600ef50a81908b9b8 100644 (file)
@@ -42,7 +42,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index 9dcab30900a46e31716678390ed4b486c55968b3..c4e08ae897e767fe3dfc80d3a6242e8fa0377e89 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0"?>
 <enunciate label="full" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:noNamespaceSchemaLocation="http://enunciate.codehaus.org/schemas/enunciate-1.26.xsd">
+    xsi:noNamespaceSchemaLocation="http://enunciate.codehaus.org/schemas/enunciate-1.28.xsd">
   <services>
     <rest defaultRestSubcontext="/controller/nb/v2/containermanager"/>
   </services>
@@ -8,4 +8,4 @@
   <modules>
     <docs docsDir="rest" title="Container Manager REST API" includeExampleXml="true" includeExampleJson="true"/>
   </modules>
-</enunciate>
\ No newline at end of file
+</enunciate>
index 1d91ab590e754441e8f49723bd7688061bdff094..457b1bd6a40c714e8b7dbd7f94d837f07c51d8d4 100644 (file)
@@ -43,7 +43,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index 13a2d27c414d3fd3b1e7fe12c599aa5613d24efb..5382d541380082fb606d65d510f083d9c7e04b6c 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0"?>
 <enunciate label="full" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:noNamespaceSchemaLocation="http://enunciate.codehaus.org/schemas/enunciate-1.26.xsd">
+    xsi:noNamespaceSchemaLocation="http://enunciate.codehaus.org/schemas/enunciate-1.28.xsd">
 
   <services>
     <rest defaultRestSubcontext="/controller/nb/v2/controllermanager"/>
index 6c79f9d6e2c1f609e0ca538ed8cc3367b7ef288f..07d34cb6d4ee7e20ff48c387d8275687837c445e 100644 (file)
@@ -51,7 +51,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index 3d45257ce21a77e99b6939c6b729cc862b8ab881..cec5a93a9e04ac79f527f2b22299e75cfd21f60b 100644 (file)
@@ -11,15 +11,17 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
+
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlElementRef;
+import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlElementWrapper;
 import javax.xml.bind.annotation.XmlRootElement;
 
+import org.opendaylight.controller.sal.core.Property;
+
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
-import org.opendaylight.controller.sal.core.Property;
 
 /**
  * The class describes set of properties attached to a controller
@@ -29,12 +31,12 @@ import org.opendaylight.controller.sal.core.Property;
 @XmlAccessorType(XmlAccessType.NONE)
 public class ControllerProperties {
 
-    @XmlElementRef
-    @XmlElementWrapper
-    @JsonIgnore
     /**
      * Set to store the controller properties
      */
+    @XmlElement(name="property")
+    @XmlElementWrapper
+    @JsonIgnore
     private Set<Property> properties;
 
     // JAXB required constructor
index 3ac676907bae795ff14404db66cc77dbe5bf5c09..8a87876af3a790565622e59de821105742d1ea0e 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0"?>
 <enunciate label="full" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:noNamespaceSchemaLocation="http://enunciate.codehaus.org/schemas/enunciate-1.26.xsd">
+    xsi:noNamespaceSchemaLocation="http://enunciate.codehaus.org/schemas/enunciate-1.28.xsd">
 
   <services>
     <rest defaultRestSubcontext="/controller/nb/v2/flowprogrammer"/>
index 2281aa8e3c64096ee6d38e5d68fbc4c8d2c73fcb..205b68a91c9859055d51aa0d043b6ce42abd6dd9 100644 (file)
@@ -46,7 +46,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index df56dbae360654b8252502c19ae3d433a6f5a854..a8be00a3d358a0f480df6fcd2660ad4c09051f38 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0"?>
 <enunciate label="full" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:noNamespaceSchemaLocation="http://enunciate.codehaus.org/schemas/enunciate-1.26.xsd">
+    xsi:noNamespaceSchemaLocation="http://enunciate.codehaus.org/schemas/enunciate-1.28.xsd">
 
   <services>
     <rest defaultRestSubcontext="/controller/nb/v2/hosttracker"/>
index d8dee6211aadc23c0ad6c08a19d262ed9feb6e99..bf1b082cfef7eecb48f4c8861eebbd0b97b74e39 100644 (file)
@@ -46,7 +46,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index 33f204885d96cf7fdeaacea3f099f73b8a20c918..c7b9cfc9a06bf4a65223879e284ace31c6235d4a 100644 (file)
@@ -19,7 +19,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>2.4.0</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index ce9186eb33753f281b913f6757c4c484cf2c702e..c78243766ef9a18942fb28680a01ded1861d5b14 100644 (file)
@@ -1,13 +1,13 @@
 <?xml version="1.0"?>
 <enunciate label="full" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:noNamespaceSchemaLocation="http://enunciate.codehaus.org/schemas/enunciate-1.26.xsd">
+    xsi:noNamespaceSchemaLocation="http://enunciate.codehaus.org/schemas/enunciate-1.28.xsd">
 
   <services> </services>
 
   <modules>
     <!-- Disable doc generation -->
     <docs disabled="true"/>
-
+    <swagger disabled="true"/>
     <!-- Disable all the client generation tools -->
     <basic-app disabled="true" />
     <c disabled="true" />
index 6de347fdded0b541fd2c6cf01ec62131314c632b..ae8924feb6aaf79970c042b4a88af698e23e2bb7 100644 (file)
@@ -7,12 +7,6 @@
     <version>1.4.2-SNAPSHOT</version>
     <relativePath>../../commons/opendaylight</relativePath>
   </parent>
-  <scm>
-    <connection>scm:git:ssh://git.opendaylight.org:29418/controller.git</connection>
-    <developerConnection>scm:git:ssh://git.opendaylight.org:29418/controller.git</developerConnection>
-    <url>https://wiki.opendaylight.org/view/OpenDaylight_Controller:Main</url>
-    <tag>HEAD</tag>
-  </scm>
 
   <artifactId>northbound.client</artifactId>
   <version>0.0.1-SNAPSHOT</version>
     <docs.output.dir>${project.build.directory}/rest-api-docs</docs.output.dir>
     <java-client>${project.build.directory}/enunciate/build/java-client/full-client.jar</java-client>
     <java-client-sources>${project.build.directory}/enunciate/build/java-client/full-client-sources.jar</java-client-sources>
-    <json-client>${project.build.directory}/enunciate/build/java-client/full-json-client.jar</json-client>
-    <json-client-sources>${project.build.directory}/enunciate/build/java-client/full-json-client-sources.jar</json-client-sources>
   </properties>
 
+  <dependencies>
+    <dependency>
+      <groupId>org.codehaus.enunciate</groupId>
+      <artifactId>enunciate-core-annotations</artifactId>
+    </dependency>
+
+    <!-- add dependency on all northbound bundles -->
+    <dependency>
+      <groupId>org.opendaylight.controller</groupId>
+      <artifactId>connectionmanager.northbound</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.opendaylight.controller</groupId>
+      <artifactId>controllermanager.northbound</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.opendaylight.controller</groupId>
+      <artifactId>flowprogrammer.northbound</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.opendaylight.controller</groupId>
+      <artifactId>forwarding.staticrouting.northbound</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.opendaylight.controller</groupId>
+      <artifactId>hosttracker.northbound</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.opendaylight.controller</groupId>
+      <artifactId>networkconfig.bridgedomain.northbound</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.opendaylight.controller</groupId>
+      <artifactId>networkconfig.neutron.northbound</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.opendaylight.controller</groupId>
+      <artifactId>statistics.northbound</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.opendaylight.controller</groupId>
+      <artifactId>subnets.northbound</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.opendaylight.controller</groupId>
+      <artifactId>switchmanager.northbound</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.opendaylight.controller</groupId>
+      <artifactId>topology.northbound</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.opendaylight.controller</groupId>
+      <artifactId>usermanager.northbound</artifactId>
+    </dependency>
+  </dependencies>
+
   <build>
     <plugins>
-      <plugin>
-        <groupId>org.codehaus.enunciate</groupId>
-        <artifactId>maven-enunciate-plugin</artifactId>
-      </plugin>
 
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-antrun-plugin</artifactId>
-        <version>1.5</version>
-        <executions>
-          <execution>
-            <phase>package</phase>
-            <goals>
-              <goal>run</goal>
-            </goals>
-          </execution>
-        </executions>
         <configuration>
           <target>
-            <taskdef resource="net/sf/antcontrib/antcontrib.properties"
-                     classpathref="maven.plugin.classpath" />
+            <taskdef classpathref="maven.plugin.classpath" resource="net/sf/antcontrib/antcontrib.properties"></taskdef>
             <patternset id="rest.paths">
-              <include name="**/target/site/wsdocs/**"/>
-              <exclude name="**/java-client/**"/>
+              <include name="**/target/site/wsdocs/**"></include>
+              <exclude name="**/java-client/**"></exclude>
             </patternset>
 
-            <echo message="======== Assembling enunciate docs ========"/>
+            <echo message="======== Assembling enunciate docs ========"></echo>
             <!-- cleanup existing generated files -->
-            <delete dir="${docs.output.dir}"/>
-            <delete file="${docs.output.dir}.zip"/>
-            <mkdir dir="${docs.output.dir}"/>
+            <delete dir="${docs.output.dir}"></delete>
+            <delete file="${docs.output.dir}.zip"></delete>
+            <mkdir dir="${docs.output.dir}"></mkdir>
             <!-- copy enunciate docs to stage -->
             <copy todir="${docs.output.dir}">
               <fileset dir="${basedir}/../../..">
-                <patternset refid="rest.paths"/>
+                <patternset refid="rest.paths"></patternset>
               </fileset>
-              <mapper type="regexp"
-                      from="^(.*)/([^/]+)/target/site/wsdocs/(.*)$$"
-                      to="\2/\3"/>
+              <mapper from="^(.*)/([^/]+)/target/site/wsdocs/(.*)$$" to="\2/\3" type="regexp"></mapper>
             </copy>
+            <!-- Remove Swagger doc link from enunciate generated index.html -->
+            <replaceregexp byline="false" match="&lt;h2&gt;Swagger&lt;/h2&gt;${line.separator}\s*&lt;p&gt;${line.separator}.*${line.separator}\s*&lt;/p&gt;" replace="">
+              <fileset dir="${docs.output.dir}">
+                <include name="**/index.html"></include>
+              </fileset>
+            </replaceregexp>
             <!-- generate index.html -->
             <!-- append header -->
-            <echo file="${docs.output.dir}/index.html" append="true">
-              &lt;![CDATA[
+            <echo append="true" file="${docs.output.dir}/index.html">&lt;![CDATA[
               &lt;html&gt;
               &lt;head&gt;
               &lt;title&gt; OpenDaylight REST API Documentation &lt;/title&gt;
               &lt;h2&gt;OpenDaylight REST API Documentation&lt;/h2&gt;
               &lt;p&gt; OpenDaylight supports the following &lt;a href="http://en.wikipedia.org/wiki/Representational_State_Transfer"&gt;Representational State Transfer (REST)&lt;/a&gt; APIs: &lt;/p&gt;
               &lt;h4&gt;
-              ]]&gt;
-            </echo>
-            <dirset id="nbset" dir="${docs.output.dir}">
-              <include name="*"/>
+              ]]&gt;</echo>
+            <dirset dir="${docs.output.dir}" id="nbset">
+              <include name="*"></include>
             </dirset>
-            <pathconvert pathsep="&amp;#36;{line.separator}"
-                         property="nbs"
-                         refid="nbset"/>
-            <echo file="${docs.output.dir}/index.html"
-                  append="true"
-                  message="${nbs}"/>
-            <replaceregexp file="${docs.output.dir}/index.html"
-                           match="^\${docs.output.dir}/(.*)$"
-                           replace="&amp;lt;li&amp;gt;&amp;lt;a href=\1/index.html&amp;gt; \1 &amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;"
-                           byline="true"/>
+            <pathconvert pathsep="&amp;#36;{line.separator}" property="nbs" refid="nbset"></pathconvert>
+            <echo append="true" file="${docs.output.dir}/index.html" message="${nbs}"></echo>
+            <replaceregexp byline="true" file="${docs.output.dir}/index.html" match="^\${docs.output.dir}/(.*)$" replace="&amp;lt;li&amp;gt;&amp;lt;a href=\1/index.html&amp;gt; \1 &amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;"></replaceregexp>
 
             <!-- append footer -->
-            <echo file="${docs.output.dir}/index.html" append="true">
-              &lt;![CDATA[
+            <echo append="true" file="${docs.output.dir}/index.html">&lt;![CDATA[
               &lt;/h4&gt;
               &lt;i&gt;---&lt;/i&gt;
               &lt;/body&gt;
               &lt;/html&gt;
-              ]]&gt;
-            </echo>
+              ]]&gt;</echo>
             <!-- archive all the docs excluding whatever is not needed -->
-            <echo message="======== Archiving enunciate docs ========"/>
+            <echo message="======== Archiving enunciate docs ========"></echo>
             <zip destfile="${docs.output.dir}.zip">
-              <zipfileset dir="${docs.output.dir}"/>
+              <zipfileset dir="${docs.output.dir}"></zipfileset>
             </zip>
 
-            <echo message="======== Build successful ========"/>
-            <echo message="REST docs archive: ${docs.output.dir}.zip"/>
+            <echo message="======== Build successful ========"></echo>
+            <echo message="REST docs archive: ${docs.output.dir}.zip"></echo>
           </target>
         </configuration>
         <dependencies>
             <version>20020829</version>
           </dependency>
         </dependencies>
+        <executions>
+          <execution>
+            <goals>
+              <goal>run</goal>
+            </goals>
+            <phase>package</phase>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.codehaus.enunciate</groupId>
+        <artifactId>maven-enunciate-plugin</artifactId>
       </plugin>
 
       <plugin>
         <executions>
           <execution>
             <id>attach-artifacts</id>
-            <phase>package</phase>
             <goals>
               <goal>attach-artifact</goal>
             </goals>
+            <phase>package</phase>
             <configuration>
               <artifacts>
                 <artifact>
                   <type>jar</type>
                   <classifier>full-java-client-sources</classifier>
                 </artifact>
-                <artifact>
-                  <file>${json-client}</file>
-                  <type>jar</type>
-                  <classifier>full-json-client</classifier>
-                </artifact>
-                <artifact>
-                  <file>${json-client-sources}</file>
-                  <type>jar</type>
-                  <classifier>full-json-client-sources</classifier>
-                </artifact>
               </artifacts>
             </configuration>
           </execution>
       </plugin>
     </plugins>
   </build>
-  <dependencies>
-    <dependency>
-      <groupId>org.codehaus.enunciate</groupId>
-      <artifactId>enunciate-core-annotations</artifactId>
-    </dependency>
-
-    <!-- add dependency on all northbound bundles -->
-    <dependency>
-      <groupId>org.opendaylight.controller</groupId>
-      <artifactId>connectionmanager.northbound</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.opendaylight.controller</groupId>
-      <artifactId>controllermanager.northbound</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.opendaylight.controller</groupId>
-      <artifactId>flowprogrammer.northbound</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.opendaylight.controller</groupId>
-      <artifactId>hosttracker.northbound</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.opendaylight.controller</groupId>
-      <artifactId>networkconfig.bridgedomain.northbound</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.opendaylight.controller</groupId>
-      <artifactId>networkconfig.neutron.northbound</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.opendaylight.controller</groupId>
-      <artifactId>forwarding.staticrouting.northbound</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.opendaylight.controller</groupId>
-      <artifactId>statistics.northbound</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.opendaylight.controller</groupId>
-      <artifactId>subnets.northbound</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.opendaylight.controller</groupId>
-      <artifactId>switchmanager.northbound</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.opendaylight.controller</groupId>
-      <artifactId>topology.northbound</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.opendaylight.controller</groupId>
-      <artifactId>usermanager.northbound</artifactId>
-    </dependency>
-  </dependencies>
+  <scm>
+    <connection>scm:git:ssh://git.opendaylight.org:29418/controller.git</connection>
+    <developerConnection>scm:git:ssh://git.opendaylight.org:29418/controller.git</developerConnection>
+    <tag>HEAD</tag>
+    <url>https://wiki.opendaylight.org/view/OpenDaylight_Controller:Main</url>
+  </scm>
 </project>
index f984d4e8ed0e71d8c01a54c0a1528e13ff4ecb9c..62af41ab46964cd64445805f7b3f8e07aa8c93ad 100644 (file)
@@ -19,7 +19,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index f5a7ef12337d87de1e07d2f67e5959a5a5367d5e..1555743ea83916dcad4ad9f77db334726b1e7276 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0"?>
 <enunciate label="full" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:noNamespaceSchemaLocation="http://enunciate.codehaus.org/schemas/enunciate-1.26.xsd">
+    xsi:noNamespaceSchemaLocation="http://enunciate.codehaus.org/schemas/enunciate-1.28.xsd">
 
   <services>
     <rest defaultRestSubcontext="/controller/nb/v2/networkconfig/bridgedomain"/>
@@ -8,5 +8,5 @@
 
   <modules>
     <docs docsDir="rest" title="Bridge Domain Configuration REST API" includeExampleXml="true" includeExampleJson="true"/>
-  </modules>
+   </modules>
 </enunciate>
index e78035f00c0382a8fa54b5cfd52466d6605f8ec9..f11297808047edac9bf33663e434cdf1363e6fa9 100644 (file)
@@ -46,7 +46,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index b9e4f7ecc1008d3c04820e3e6458afe547a8073b..66160255f390ba29a88dd3a39881d568e1866d91 100644 (file)
@@ -1,12 +1,12 @@
-<?xml version="1.0"?>\r
-<enunciate label="full" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
-    xsi:noNamespaceSchemaLocation="http://enunciate.codehaus.org/schemas/enunciate-1.26.xsd">\r
-\r
-  <services>\r
-    <rest defaultRestSubcontext="/controller/nb/v2/neutron"/>\r
-  </services>\r
-\r
-  <modules>\r
-    <docs docsDir="rest" title="OpenStack Neutron REST API" includeExampleXml="false" includeExampleJson="true"/>\r
-  </modules>\r
-</enunciate>\r
+<?xml version="1.0"?>
+<enunciate label="full" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="http://enunciate.codehaus.org/schemas/enunciate-1.28.xsd">
+
+  <services>
+    <rest defaultRestSubcontext="/controller/nb/v2/neutron"/>
+  </services>
+
+  <modules>
+    <docs docsDir="rest" title="OpenStack Neutron REST API" includeExampleXml="false" includeExampleJson="true"/>
+   </modules>
+</enunciate>
index bc0ab2b78aac9248a79fbd4d344658091f598ed7..728316afabf940ed9ded1eca75ce47fe743e2d1b 100644 (file)
@@ -10,9 +10,6 @@
   <artifactId>networkconfig.neutron.northbound</artifactId>
   <version>0.4.2-SNAPSHOT</version>
   <packaging>bundle</packaging>
-  <properties>
-    <enunciate.version>1.26.2</enunciate.version>
-  </properties>
   <dependencies>
     <dependency>
       <groupId>com.sun.jersey</groupId>
@@ -57,7 +54,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>2.3.6</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
       <plugin>
         <groupId>org.codehaus.enunciate</groupId>
         <artifactId>maven-enunciate-plugin</artifactId>
-        <configuration>
-          <configFile>enunciate.xml</configFile>
-        </configuration>
-        <executions>
-          <execution>
-            <goals>
-              <goal>docs</goal>
-            </goals>
-          </execution>
-        </executions>
       </plugin>
     </plugins>
   </build>
index 402b6553718852daf6b4fb863a114939925ecfb4..4d2f1cb611f40cc4aa9167e6b34525ecd1c0a09e 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0"?>
 <enunciate label="full" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:noNamespaceSchemaLocation="http://enunciate.codehaus.org/schemas/enunciate-1.26.xsd">
+    xsi:noNamespaceSchemaLocation="http://enunciate.codehaus.org/schemas/enunciate-1.28.xsd">
 
   <services>
     <rest defaultRestSubcontext="/controller/nb/v2/staticroute"/>
index 0e496a420fc85fcfda578f0187779a5c16e535dc..dd2a2e6223bb5ab19d776fa71093ad70e89d2bc3 100644 (file)
@@ -42,7 +42,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index 63ae43975858f63284e2ad2ad51c0b532efb65be..c5f9140c76a398c5f35c01b7e958ce5faa1b800f 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0"?>
 <enunciate label="full" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:noNamespaceSchemaLocation="http://enunciate.codehaus.org/schemas/enunciate-1.26.xsd">
+    xsi:noNamespaceSchemaLocation="http://enunciate.codehaus.org/schemas/enunciate-1.28.xsd">
 
   <services>
     <rest defaultRestSubcontext="/controller/nb/v2/statistics"/>
index 5935db48934a7a32d8b0376bd1338d95310eda5b..76ce062424b32568f9838e8ab05476ace1201439 100644 (file)
@@ -42,7 +42,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index abdc40a174225cef3073fb45b5c19a7cfb462f43..e75daf94ee0ecb2559231fb207de2698405f6243 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0"?>
 <enunciate label="full" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:noNamespaceSchemaLocation="http://enunciate.codehaus.org/schemas/enunciate-1.26.xsd">
+    xsi:noNamespaceSchemaLocation="http://enunciate.codehaus.org/schemas/enunciate-1.28.xsd">
 
   <services>
     <rest defaultRestSubcontext="/controller/nb/v2/subnetservice"/>
index 7c68f41cadd33e689fed6c25498eaa06c05fa616..5aa2f7f202a00c30eff3937d0f7bb34efb76cf0c 100644 (file)
@@ -43,7 +43,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index 6f2dd4d0e76892dc566a55411ee6aea1ebcc47e5..3db309d46fa7b07932dc39eddc9acf8d6782734e 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0"?>
 <enunciate label="full" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:noNamespaceSchemaLocation="http://enunciate.codehaus.org/schemas/enunciate-1.26.xsd">
+    xsi:noNamespaceSchemaLocation="http://enunciate.codehaus.org/schemas/enunciate-1.28.xsd">
 
   <services>
     <rest defaultRestSubcontext="/controller/nb/v2/switchmanager"/>
index 8f54a28bda94336f9d84291363043d4360ca8463..590f0bb533dbf610990fb4082a10f8b220a86023 100644 (file)
@@ -43,7 +43,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index 00f0d4b0544fd7c474efae06550e0961ef08025c..bb3fc0cc036899705582315f06fbb288b40ba75d 100644 (file)
@@ -13,18 +13,19 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
+
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlElementRef;
 import javax.xml.bind.annotation.XmlElementWrapper;
 import javax.xml.bind.annotation.XmlRootElement;
 
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonProperty;
 import org.opendaylight.controller.sal.core.NodeConnector;
 import org.opendaylight.controller.sal.core.Property;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
 /**
  * The class describes set of properties attached to a node connector
  */
@@ -34,7 +35,8 @@ import org.opendaylight.controller.sal.core.Property;
 public class NodeConnectorProperties {
     @XmlElement
     private NodeConnector nodeconnector;
-    @XmlElementRef
+
+    @XmlElement(name="property")
     @XmlElementWrapper
     @JsonIgnore
     private Set<Property> properties;
index 51e96c49eaf4cd7ac39803c1bde77abe96c821cc..380d759ab7ff9185de1422ddfdb46319b085f883 100644 (file)
@@ -13,18 +13,19 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
+
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlElementRef;
 import javax.xml.bind.annotation.XmlElementWrapper;
 import javax.xml.bind.annotation.XmlRootElement;
 
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonProperty;
 import org.opendaylight.controller.sal.core.Node;
 import org.opendaylight.controller.sal.core.Property;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
 /**
  * The class describes set of properties attached to a node
  */
@@ -34,7 +35,8 @@ import org.opendaylight.controller.sal.core.Property;
 public class NodeProperties {
     @XmlElement
     private Node node;
-    @XmlElementRef
+
+    @XmlElement(name="property")
     @XmlElementWrapper
     @JsonIgnore
     private Set<Property> properties;
index fed0f68e3086b735d3ff66d284a6c7af5039aa33..b70ea740710e8ffc1d2e11e1005d2b7aa8ce7eae 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0"?>
 <enunciate label="full" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:noNamespaceSchemaLocation="http://enunciate.codehaus.org/schemas/enunciate-1.26.xsd">
+    xsi:noNamespaceSchemaLocation="http://enunciate.codehaus.org/schemas/enunciate-1.28.xsd">
 
   <services>
     <rest defaultRestSubcontext="/controller/nb/v2/topology"/>
index 838a15db98f768fd73659771861b550d5d968b5f..4a1142bb1813784fd7b5108a807ac9fde26bc6c5 100644 (file)
@@ -43,7 +43,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index 1d4a8a66eec478c963cd76f5cc14dffca76b8ddb..d43b9bc89335b058b2fe06bdce604be674a495f4 100644 (file)
@@ -13,24 +13,26 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
+
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlElementRef;
 import javax.xml.bind.annotation.XmlElementWrapper;
 import javax.xml.bind.annotation.XmlRootElement;
 
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonProperty;
 import org.opendaylight.controller.sal.core.Edge;
 import org.opendaylight.controller.sal.core.Property;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
 @XmlRootElement
 @XmlAccessorType(XmlAccessType.NONE)
 public class EdgeProperties {
     @XmlElement
     private Edge edge;
-    @XmlElementRef
+
+    @XmlElement(name="property")
     @XmlElementWrapper
     @JsonIgnore
     private Set<Property> properties;
index a0b95465398fb60c4491f34244ba437b489df19c..0386c759b2f61086dbf979830a06274ef336b27e 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0"?>
 <enunciate label="full" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:noNamespaceSchemaLocation="http://enunciate.codehaus.org/schemas/enunciate-1.26.xsd">
+    xsi:noNamespaceSchemaLocation="http://enunciate.codehaus.org/schemas/enunciate-1.28.xsd">
 
   <services>
     <rest defaultRestSubcontext="/controller/nb/v2/usermanager"/>
index 01e43085b6f8c3ce432a0a86748e213f6ab39326..c7ab2fa71201a44622d2ab3b2208a430b7e67af8 100644 (file)
@@ -39,7 +39,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index e47933548ae190ab225b2b51d939cb1ddcb457d0..a8fceec2bfc435f2a4d3d01332ed720f3f9b588a 100644 (file)
@@ -39,7 +39,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index fc760e49199c86721b8b424c9a59ad97b29a1b39..540c9afb2c01544eee6f3dc496d29846fe953a91 100644 (file)
@@ -26,7 +26,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index d923c452e616bc4c6aa01d0bf3ec9bbb7b314667..b691308e971cc269fd10338ad7f15e6cf369b58a 100644 (file)
@@ -47,7 +47,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index 070029f89169e245db71ec42534c7b77d3a3d66b..3ee239a0f4fd990a469b7a9de40187c294c6b27e 100644 (file)
@@ -39,7 +39,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index 2340a829fd658f48c4b59f8c5c156b9e4ec8c62e..b194f76a455d6d0aedce563cec5b3b28f4236192 100644 (file)
@@ -27,7 +27,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index e771f846ae44556748de643de08d65833822e01b..71506835978eb2591a33977fe108d4d781108673 100644 (file)
@@ -27,7 +27,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index d8a7d7beef7afea9a6e0461638d40601e692f500..88986dcdd0d405292d52dbdfebc54383d44ac161 100644 (file)
@@ -32,7 +32,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index ed3b39194791b99e1a373149aab353c4bd429c27..5b2269ae6d3cae45bba2461826bf5b1fdf3c5b73 100644 (file)
@@ -23,7 +23,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index 38944e63140ce32843c0db55a5608d2a3ca950a0..508c9bd3f5f98b66f61b484b6ec5d046b2db3da4 100644 (file)
@@ -27,7 +27,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index 4d8212209b51c87fee98a1c9c4d31ba34d0139a1..79390838919c54d40382cbf7047e2499f53977b9 100644 (file)
@@ -43,7 +43,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index ae48a3a45118533785f5c3175a68df107d9c7c0a..86e6a360dd50c67d38fc70cf4147bc328f3d4274 100644 (file)
@@ -164,7 +164,7 @@ public class Pool {
     public boolean removeVIP(String name){
         for(VIP vip: this.vips){
             if(vip.getName().equals(name)){
-                this.members.remove(vip);
+                this.vips.remove(vip);
                 return true;
             }
         }
index 9dd0f99be6782715deb325db3d70165601e0a44c..5854d5577fe007be058adc5db033c4746d220dc3 100644 (file)
@@ -43,7 +43,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index d65980e26c89cb0b24f196fd42f7069f9acf7a3e..1208506bd5fb9bc010aaf19889a0149656e6082d 100644 (file)
@@ -43,7 +43,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index 94e67247c8eaa44696f83d2950bea6650732f89a..a48d3317738fff283cf37d6eecbbb4cf96781ab4 100644 (file)
@@ -19,7 +19,10 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
+import java.util.Timer;
+import java.util.TimerTask;
 
 import org.opendaylight.controller.clustering.services.CacheConfigException;
 import org.opendaylight.controller.clustering.services.CacheExistException;
@@ -100,6 +103,97 @@ public class SimpleForwardingImpl implements IfNewHostNotify,
     private ISwitchManager switchManager;
     private IDataPacketService dataPacketService;
 
+    /**
+     * Ip packets that are punted may not have their destination known by hostTracker at the time it
+     * is presented to SimpleForwardingImpl. Instead of dropping the packet, we will keep it around
+     * for a 'little' while, to accommodate any transients. See bug 590 for more details.
+     */
+    private class PendingPacketData {
+        private final static byte MAX_AGE = 2;
+
+        public final IPv4 pkt;
+        public final NodeConnector incomingNodeConnector;
+        private byte age;
+
+        public PendingPacketData(IPv4 pkt, NodeConnector incomingNodeConnector) {
+            this.pkt = pkt;
+            this.incomingNodeConnector = incomingNodeConnector;
+            this.age = 0;
+        }
+        boolean bumpAgeAndCheckIfTooOld() { return ++age > MAX_AGE; }
+    }
+    private static final int MAX_PENDING_PACKET_DESTINATIONS = 64;
+    private ConcurrentMap<InetAddress, PendingPacketData> pendingPacketDestinations;
+    private Timer pendingPacketsAgerTimer;
+
+    private class PendingPacketsAgerTimerHandler extends TimerTask {
+        @Override
+        public void run() {
+            if (pendingPacketDestinations == null) {
+                return;
+            }
+            try {
+                Iterator<ConcurrentMap.Entry<InetAddress, PendingPacketData>> iterator =
+                        pendingPacketDestinations.entrySet().iterator();
+                while (iterator.hasNext()) {
+                    ConcurrentHashMap.Entry<InetAddress, PendingPacketData> entry = iterator.next();
+                    InetAddress dIP = entry.getKey();
+                    PendingPacketData pendingPacketData = entry.getValue();
+
+                    if (pendingPacketData.bumpAgeAndCheckIfTooOld()) {
+                        iterator.remove(); // safe to remove while iterating...
+                        log.debug("Pending packet for {} has been aged out", dIP);
+                    } else {
+                        /** Replace the entry for a key only if currently mapped to some value.
+                         * This will protect the concurrent map against a race where this thread
+                         * would be re-adding an entry that just got taken out.
+                         */
+                        pendingPacketDestinations.replace(dIP, pendingPacketData);
+                    }
+                }
+            } catch (IllegalStateException e) {
+                log.warn("IllegalStateException Received by PendingPacketsAgerTimerHandler from: {}",
+                        e.getMessage());
+            }
+        }
+    }
+
+    /**
+     * Add punted packet to pendingPackets
+     */
+    private void addToPendingPackets(InetAddress dIP, IPv4 pkt, NodeConnector incomingNodeConnector) {
+        if (pendingPacketDestinations.size() >= MAX_PENDING_PACKET_DESTINATIONS) {
+            log.info("Will not pend packet for {}: Too many destinations", dIP);
+            return;
+        }
+
+        /** TODO: The current implementation allows for up to 1 pending packet per InetAddress.
+         * This limitation is done for sake of simplicity. A potential enhancement could be to use a
+         * ConcurrentMultiMap instead of ConcurrentMap.
+         */
+        if (pendingPacketDestinations.containsKey(dIP)) {
+            log.trace("Will not pend packet for {}: Already have a packet pending", dIP);
+            return;
+        }
+
+        PendingPacketData pendingPacketData = new PendingPacketData(pkt, incomingNodeConnector);
+        pendingPacketDestinations.put(dIP, pendingPacketData);
+        log.debug("Pending packet for {}", dIP);
+    }
+
+    /**
+     * Send punted packet to given destination. This is invoked when there is a certain level of
+     * hope that the destination is known by hostTracker.
+     */
+    private void sendPendingPacket(InetAddress dIP) {
+        PendingPacketData pendingPacketData = pendingPacketDestinations.get(dIP);
+        if (pendingPacketData != null) {
+            handlePuntedIPPacket(pendingPacketData.pkt, pendingPacketData.incomingNodeConnector, false);
+            log.trace("Packet for {} is no longer pending", dIP);
+            pendingPacketDestinations.remove(dIP);
+        }
+    }
+
     /**
      * Return codes from the programming of the perHost rules in HW
      */
@@ -170,6 +264,15 @@ public class SimpleForwardingImpl implements IfNewHostNotify,
     public void startUp() {
         allocateCaches();
         retrieveCaches();
+        nonClusterObjectCreate();
+    }
+
+    public void nonClusterObjectCreate() {
+        pendingPacketDestinations = new ConcurrentHashMap<InetAddress, PendingPacketData>();
+
+        /* Pending Packets Ager Timer to go off every 6 seconds to implement pending packet aging */
+        pendingPacketsAgerTimer = new Timer();
+        pendingPacketsAgerTimer.schedule(new PendingPacketsAgerTimerHandler(), 6000, 6000);
     }
 
     /**
@@ -838,6 +941,9 @@ public class SimpleForwardingImpl implements IfNewHostNotify,
         Set<Node> switches = preparePerHostRules(host);
         if (switches != null) {
             installPerHostRules(host, switches);
+
+            // Green light for sending pending packet to this host. Safe to call if there are none.
+            sendPendingPacket(host.getNetworkAddress());
         }
     }
 
@@ -962,6 +1068,8 @@ public class SimpleForwardingImpl implements IfNewHostNotify,
      *
      */
     void stop() {
+        pendingPacketsAgerTimer.cancel();
+        pendingPacketDestinations.clear();
     }
 
     public void setSwitchManager(ISwitchManager switchManager) {
@@ -985,14 +1093,14 @@ public class SimpleForwardingImpl implements IfNewHostNotify,
             Object nextPak = formattedPak.getPayload();
             if (nextPak instanceof IPv4) {
                 log.trace("Handle punted IP packet: {}", formattedPak);
-                handlePuntedIPPacket((IPv4) nextPak, inPkt.getIncomingNodeConnector());
+                handlePuntedIPPacket((IPv4) nextPak, inPkt.getIncomingNodeConnector(), true);
             }
         }
         return PacketResult.IGNORED;
 
     }
 
-    private void handlePuntedIPPacket(IPv4 pkt, NodeConnector incomingNodeConnector) {
+    private void handlePuntedIPPacket(IPv4 pkt, NodeConnector incomingNodeConnector, boolean allowAddPending) {
         InetAddress dIP = NetUtils.getInetAddress(pkt.getDestinationAddress());
         if (dIP == null || hostTracker == null) {
             log.debug("Invalid param(s) in handlePuntedIPPacket.. DestIP: {}. hostTracker: {}", dIP, hostTracker);
@@ -1026,7 +1134,12 @@ public class SimpleForwardingImpl implements IfNewHostNotify,
                 rp.setOutgoingNodeConnector(nc);
                 this.dataPacketService.transmitDataPacket(rp);
             }
-
+        } else if (allowAddPending) {
+            // If we made it here, let's hang on to the punted packet, with hopes that its destination
+            // will become available soon.
+            addToPendingPackets(dIP, pkt, incomingNodeConnector);
+        } else {
+            log.warn("Dropping punted IP packet received at {} to Host {}", incomingNodeConnector, dIP);
         }
     }
 }
index 7ac2dbbe3145ac272d1d0f7f5c38086d6e924570..896e7184b223dda4455c7124d34f52bf2d8813da 100644 (file)
@@ -30,7 +30,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index bcc4f407f00723fddf73b7cc765c61eaa58aa5e7..aa9b88e1b2e19d18e1675095b4c20b08b8b3c873 100644 (file)
@@ -26,7 +26,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index 623c028a56197874c1f324f81c02e595fd536d30..10abb3d2516ff815da2d7c7cd1024970a413eaa2 100644 (file)
@@ -65,7 +65,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index 223bb889bc46386fcfef94fe94dcba2b0572a010..94ba0216cc1b848948c8bde003fba275c9dd8ccd 100644 (file)
@@ -47,7 +47,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index 542470acf15edecc1745dcc80efaa40353411ca9..a0718db48a1c4ae28128831336f3bd03978020ba 100644 (file)
@@ -66,7 +66,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index 07252b06f78dfb2a80a4c88d112f6b3f41fd5422..e95ab8095d08c8b3fcf80094fc958d0053b4d256 100644 (file)
@@ -115,6 +115,9 @@ public class SwitchManager implements ISwitchManager, IConfigurationContainerAwa
      * only subnet returned. As soon as a user-configured subnet is created this one will
      * vanish.
      */
+    private static final String DISABLE_DEFAULT_SUBNET_PROP = "switchmanager.disableDefaultSubnetGateway";
+    private static final String DISABLE_DEFAULT_SUBNET_PROP_VAL = System.getProperty(DISABLE_DEFAULT_SUBNET_PROP);
+    private static final boolean USE_DEFAULT_SUBNET_GW = !Boolean.valueOf(DISABLE_DEFAULT_SUBNET_PROP_VAL);
     protected static final SubnetConfig DEFAULT_SUBNETCONFIG;
     protected static final Subnet DEFAULT_SUBNET;
     protected static final String DEFAULT_SUBNET_NAME = "default (cannot be modifed)";
@@ -288,9 +291,9 @@ public class SwitchManager implements ISwitchManager, IConfigurationContainerAwa
     @Override
     public List<SubnetConfig> getSubnetsConfigList() {
         // if there are no subnets, return the default subnet
-        if(subnetsConfigList.size() == 0){
+        if (USE_DEFAULT_SUBNET_GW && subnetsConfigList.isEmpty()) {
             return Collections.singletonList(DEFAULT_SUBNETCONFIG);
-        }else{
+        } else {
             return new ArrayList<SubnetConfig>(subnetsConfigList.values());
         }
     }
@@ -298,9 +301,9 @@ public class SwitchManager implements ISwitchManager, IConfigurationContainerAwa
     @Override
     public SubnetConfig getSubnetConfig(String subnet) {
         // if there are no subnets, return the default subnet
-        if(subnetsConfigList.isEmpty() && subnet.equalsIgnoreCase(DEFAULT_SUBNET_NAME)){
+        if (USE_DEFAULT_SUBNET_GW && subnetsConfigList.isEmpty() && subnet.equalsIgnoreCase(DEFAULT_SUBNET_NAME)) {
             return DEFAULT_SUBNETCONFIG;
-        }else{
+        } else {
             return subnetsConfigList.get(subnet);
         }
     }
index 746135891ea5acf3b976ae64421dda9a393c4f07..196982b3610ee6f33f2afc8a4685a905780cdb26 100644 (file)
@@ -44,7 +44,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index ab2bb4fa12de2e807106d6dde5bd85f41519f918..c932a7cb31b201eb2a62246def052b428c47c6c2 100644 (file)
@@ -43,7 +43,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
@@ -67,7 +66,6 @@
               org.springframework.security.core.userdetails,
               javax.xml.bind.annotation</Import-Package>
             <Export-Package>org.opendaylight.controller.usermanager,</Export-Package>
-            <Bundle-Activator></Bundle-Activator>
           </instructions>
           <manifestLocation>${project.basedir}/META-INF</manifestLocation>
         </configuration>
index 58539ae698b884591fddcd7d4c23508d56f2e6ec..9567db0293dc29cb981b00184246f6cc430bc175 100644 (file)
@@ -55,7 +55,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index 8ec05a11023fdb0609e1277a3b09503fd59c34c4..890694642348f55e4856acd0a5c1c21dae1fab60 100644 (file)
@@ -50,7 +50,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index 718b6dfc506b475f0eb0064f852f849f7d1fb002..f62c6ac4d4f5169bfab268852c5f167159f16657 100644 (file)
@@ -42,7 +42,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index fc680a5493d081c7f7699111823f6ac56939e93a..fc04088961473353ac4df5731b7b8d423055be1e 100644 (file)
@@ -19,7 +19,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>2.4.0</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index 566c43b8c8a63263c1663a512fc2a2d35c554fca..2cc8e912c1fb2f59d2e66d1c3a349241a047b5ff 100644 (file)
@@ -3,7 +3,8 @@ webconsole.product.name = OpenDaylight Controller
 webconsole.product.url = http://www.opendaylight.org/
 webconsole.product.image = /res/imgs/odl/logo.png
 webconsole.favicon = /res/imgs/odl/favicon.ico
-
+#To disable web console authentication clear default username
+webconsole.username =
 # webconsole.vendor.name = Linux Foundation
 # webconsole.vendor.url = http://www.linuxfoundation.org/
 # webconsole.vendor.image = /res/imgs/vendor.png
index 441aab835e1d3cab4c3d0d511948cdfffa3ed2c5..6f0a0989b86865633bfcffd5175beee51c2afecf 100644 (file)
@@ -63,7 +63,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index fbd07fb4fdf18032704ae7f70d0b0ddf65d086d0..e65c19ff849abe33c0d0b08e6f97446c23758c1b 100644 (file)
@@ -51,7 +51,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
index 1c03f30aae26f7b04c7ca841149e23d0d4bf155a..b66889284d0c6d48f0b434a04fa6a8dc91045c3d 100644 (file)
@@ -46,7 +46,6 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>${bundle.plugin.version}</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>
diff --git a/pom.xml b/pom.xml
index 792c66dbda37292887bb54a03208df9e786e1404..3408c0513cb5229de9b4ae036263335a2fceb9b2 100644 (file)
--- a/pom.xml
+++ b/pom.xml
     <module>opendaylight/commons/opendaylight</module>
     <module>opendaylight/commons/parent</module>
     <module>opendaylight/commons/logback_settings</module>
+
+    <!-- Karaf Distribution 
+    <module>feature</module> -->
+    <module>opendaylight/dummy-console</module>
+    <module>opendaylight/distribution/opendaylight-karaf</module>
   </modules>
   <scm>
     <connection>scm:git:ssh://git.opendaylight.org:29418/controller.git</connection>
diff --git a/third-party/org.openexi/nagasena-rta/nagasena-rta-0000.0002.0038.0.jar b/third-party/org.openexi/nagasena-rta/nagasena-rta-0000.0002.0038.0.jar
deleted file mode 100644 (file)
index 1b6a027..0000000
Binary files a/third-party/org.openexi/nagasena-rta/nagasena-rta-0000.0002.0038.0.jar and /dev/null differ
diff --git a/third-party/org.openexi/nagasena-rta/pom.xml b/third-party/org.openexi/nagasena-rta/pom.xml
deleted file mode 100644 (file)
index 98da51a..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-<?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.0038.0-SNAPSHOT</version>
-    </parent>
-
-    <groupId>org.opendaylight.controller.thirdparty</groupId>
-    <artifactId>nagasena-rta</artifactId>
-    <packaging>bundle</packaging>
-
-    <properties>
-        <archive>nagasena-rta-0000.0002.0038.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.0038.0.jar b/third-party/org.openexi/nagasena/nagasena-0000.0002.0038.0.jar
deleted file mode 100644 (file)
index ffc28ea..0000000
Binary files a/third-party/org.openexi/nagasena/nagasena-0000.0002.0038.0.jar and /dev/null differ
diff --git a/third-party/org.openexi/nagasena/pom.xml b/third-party/org.openexi/nagasena/pom.xml
deleted file mode 100644 (file)
index a890431..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-<?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.0038.0-SNAPSHOT</version>
-    </parent>
-
-    <groupId>org.opendaylight.controller.thirdparty</groupId>
-    <artifactId>nagasena</artifactId>
-    <packaging>bundle</packaging>
-
-    <properties>
-        <archive>nagasena-0000.0002.0038.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
deleted file mode 100644 (file)
index 11f9ed5..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-<!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
deleted file mode 100644 (file)
index 8f32ae6..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-<!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
deleted file mode 100644 (file)
index 6c4e3d2..0000000
+++ /dev/null
@@ -1,553 +0,0 @@
-<!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
deleted file mode 100644 (file)
index 60ad3ed..0000000
+++ /dev/null
@@ -1,141 +0,0 @@
-<!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
deleted file mode 100644 (file)
index 81850ce..0000000
+++ /dev/null
@@ -1,214 +0,0 @@
-<!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
deleted file mode 100644 (file)
index 3fc6b29..0000000
+++ /dev/null
@@ -1,970 +0,0 @@
-<!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
deleted file mode 100644 (file)
index f8c172c..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-<!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
deleted file mode 100644 (file)
index 15bd150..0000000
+++ /dev/null
@@ -1,580 +0,0 @@
-<!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
deleted file mode 100644 (file)
index 7c90b7d..0000000
+++ /dev/null
@@ -1,218 +0,0 @@
-<!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
deleted file mode 100644 (file)
index db42f8f..0000000
+++ /dev/null
@@ -1,357 +0,0 @@
-<!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
deleted file mode 100644 (file)
index cd6ca90..0000000
+++ /dev/null
@@ -1,379 +0,0 @@
-<!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
deleted file mode 100644 (file)
index 27a32a0..0000000
+++ /dev/null
@@ -1,349 +0,0 @@
-<!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
deleted file mode 100644 (file)
index 27d78e0..0000000
+++ /dev/null
@@ -1,502 +0,0 @@
-<!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
deleted file mode 100644 (file)
index 396802f..0000000
+++ /dev/null
@@ -1,653 +0,0 @@
-<!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
deleted file mode 100644 (file)
index aaef0c4..0000000
+++ /dev/null
@@ -1,829 +0,0 @@
-<!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
deleted file mode 100644 (file)
index 7ea6e13..0000000
+++ /dev/null
@@ -1,528 +0,0 @@
-<!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
deleted file mode 100644 (file)
index 61485ec..0000000
+++ /dev/null
@@ -1,346 +0,0 @@
-<!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
deleted file mode 100644 (file)
index fcab610..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-<!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
deleted file mode 100644 (file)
index c4f3e1c..0000000
+++ /dev/null
@@ -1,235 +0,0 @@
-<!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
deleted file mode 100644 (file)
index 778ae7c..0000000
+++ /dev/null
@@ -1,166 +0,0 @@
-<!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
deleted file mode 100644 (file)
index 55b03fa..0000000
+++ /dev/null
@@ -1,362 +0,0 @@
-<!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
deleted file mode 100644 (file)
index 5eb44a3..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-<!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
deleted file mode 100644 (file)
index 3ae5291..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-<!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
deleted file mode 100644 (file)
index 5425149..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-<!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
deleted file mode 100644 (file)
index 0f9e531..0000000
+++ /dev/null
@@ -1,171 +0,0 @@
-<!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
deleted file mode 100644 (file)
index 7b7e75e..0000000
+++ /dev/null
@@ -1,259 +0,0 @@
-<!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
deleted file mode 100644 (file)
index 82b5128..0000000
+++ /dev/null
@@ -1,354 +0,0 @@
-<!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
deleted file mode 100644 (file)
index fe7bf70..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-<!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
deleted file mode 100644 (file)
index 42831b8..0000000
+++ /dev/null
@@ -1,205 +0,0 @@
-<!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
deleted file mode 100644 (file)
index b0cbe12..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-<!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
deleted file mode 100644 (file)
index 31406d3..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-<!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
deleted file mode 100644 (file)
index 957e54a..0000000
+++ /dev/null
@@ -1,219 +0,0 @@
-<!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
deleted file mode 100644 (file)
index 3bf180e..0000000
+++ /dev/null
@@ -1,163 +0,0 @@
-<!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
deleted file mode 100644 (file)
index b73a833..0000000
+++ /dev/null
@@ -1,267 +0,0 @@
-<!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
deleted file mode 100644 (file)
index 228aa75..0000000
+++ /dev/null
@@ -1,645 +0,0 @@
-<!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
deleted file mode 100644 (file)
index 7d392bb..0000000
+++ /dev/null
@@ -1,290 +0,0 @@
-<!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
deleted file mode 100644 (file)
index 15e2e7d..0000000
+++ /dev/null
@@ -1,245 +0,0 @@
-<!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
deleted file mode 100644 (file)
index b857aab..0000000
+++ /dev/null
@@ -1,735 +0,0 @@
-<!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
deleted file mode 100644 (file)
index 55e1e1f..0000000
+++ /dev/null
@@ -1,566 +0,0 @@
-<!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
deleted file mode 100644 (file)
index 22e45d6..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-<!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
deleted file mode 100644 (file)
index b0e7208..0000000
+++ /dev/null
@@ -1,224 +0,0 @@
-<!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
deleted file mode 100644 (file)
index f4184bf..0000000
+++ /dev/null
@@ -1,171 +0,0 @@
-<!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
deleted file mode 100644 (file)
index 022f5be..0000000
+++ /dev/null
@@ -1,486 +0,0 @@
-<!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
deleted file mode 100644 (file)
index f3c472e..0000000
+++ /dev/null
@@ -1,355 +0,0 @@
-<!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
deleted file mode 100644 (file)
index 2a932cc..0000000
+++ /dev/null
@@ -1,229 +0,0 @@
-<!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
deleted file mode 100644 (file)
index 4fdd831..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-<!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
deleted file mode 100644 (file)
index 53242f2..0000000
+++ /dev/null
@@ -1,195 +0,0 @@
-<!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
deleted file mode 100644 (file)
index dda7f62..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-<!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
deleted file mode 100644 (file)
index 7a95df8..0000000
+++ /dev/null
@@ -1,308 +0,0 @@
-<!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
deleted file mode 100644 (file)
index 48648e4..0000000
+++ /dev/null
@@ -1,268 +0,0 @@
-<!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
deleted file mode 100644 (file)
index 598f7db..0000000
+++ /dev/null
@@ -1,350 +0,0 @@
-<!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
deleted file mode 100644 (file)
index 6249b50..0000000
+++ /dev/null
@@ -1,264 +0,0 @@
-<!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
deleted file mode 100644 (file)
index cd12bdd..0000000
+++ /dev/null
@@ -1,241 +0,0 @@
-<!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
deleted file mode 100644 (file)
index 65600a9..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-<!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
deleted file mode 100644 (file)
index a35b92a..0000000
+++ /dev/null
@@ -1,222 +0,0 @@
-<!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
deleted file mode 100644 (file)
index 93d1752..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-<!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
deleted file mode 100644 (file)
index 045191d..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-<!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
deleted file mode 100644 (file)
index 1a299fd..0000000
+++ /dev/null
@@ -1,227 +0,0 @@
-<!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
deleted file mode 100644 (file)
index 8409fdb..0000000
+++ /dev/null
@@ -1,190 +0,0 @@
-<!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
deleted file mode 100644 (file)
index 746aadc..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-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
deleted file mode 100644 (file)
index c814867..0000000
Binary files a/third-party/org.openexi/nagasena/src/main/resources/doc/resources/inherit.gif and /dev/null 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
deleted file mode 100644 (file)
index c3688f5..0000000
+++ /dev/null
@@ -1,269 +0,0 @@
-<!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
deleted file mode 100644 (file)
index 14c3737..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-/* 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
deleted file mode 100644 (file)
index 6369b29..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-<?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.0038.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>
-