/** * Copyright (c) 2004 - 2011 Eike Stepper (Berlin, Germany) 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 * * Contributors: * Eike Stepper - initial API and implementation */ package org.eclipse.emf.cdo.tests.config; import org.eclipse.emf.cdo.spi.server.InternalRepository; import java.util.Map; /** * @author Eike Stepper */ public interface IRepositoryConfig extends IConfig { public static final String REPOSITORY_NAME = "repo1"; public Map getRepositoryProperties(); public InternalRepository getRepository(String name, boolean activate); public InternalRepository getRepository(String name); public void registerRepository(InternalRepository repository); public void setRestarting(boolean b); } ic/stylesheets/quicksilver.min.css?v1.4"/> Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndy Jury2018-06-27 19:55:23 +0000
committerAndy Jury2018-06-27 19:55:23 +0000
commit54332fc35de2dd9f5eededa861df6680be974509 (patch)
treea472dba5f1e492cec22364e99b8f4ad47f8a1cca
parent8507a8a82c12544aee8f68b6b7b5917a6bde1932 (diff)
parentf0822d2eb3119e7adfeb887df55546596f8d27c1 (diff)
downloadorg.eclipse.ote-OTE_MINIBUILD_134.tar.gz
org.eclipse.ote-OTE_MINIBUILD_134.tar.xz
org.eclipse.ote-OTE_MINIBUILD_134.zip
-rw-r--r--org.eclipse.osee.client.ote.feature/.pmd925
-rw-r--r--org.eclipse.osee.client.ote.feature/.project17
-rw-r--r--org.eclipse.osee.client.ote.feature/build.properties5
-rw-r--r--org.eclipse.osee.client.ote.feature/epl-v10.html328
-rw-r--r--org.eclipse.osee.client.ote.feature/feature.properties141
-rw-r--r--org.eclipse.osee.client.ote.feature/feature.xml240
-rw-r--r--org.eclipse.osee.client.ote.feature/license.html79
-rw-r--r--org.eclipse.osee.client.ote.feature/pom.xml17
-rw-r--r--org.eclipse.osee.client.ote.feature/sourceTemplateFeature/feature.properties144
-rw-r--r--org.eclipse.osee.client.ote.feature/sourceTemplateFeature/license.html79
-rw-r--r--org.eclipse.osee.framework.ui.workspacebundleloader.test/.project28
-rw-r--r--org.eclipse.osee.framework.ui.workspacebundleloader/.classpath7
-rw-r--r--org.eclipse.osee.framework.ui.workspacebundleloader/.pmd925
-rw-r--r--org.eclipse.osee.framework.ui.workspacebundleloader/.project28
-rw-r--r--org.eclipse.osee.framework.ui.workspacebundleloader/META-INF/MANIFEST.MF26
-rw-r--r--org.eclipse.osee.framework.ui.workspacebundleloader/build.properties5
-rw-r--r--org.eclipse.osee.framework.ui.workspacebundleloader/plugin.xml27
-rw-r--r--org.eclipse.osee.framework.ui.workspacebundleloader/pom.xml17
-rw-r--r--org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/BundleCollection.java81
-rw-r--r--org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/BundleInfoLite.java166
-rw-r--r--org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/EarlyStartup.java46
-rw-r--r--org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/FileChangeDetector.java81
-rw-r--r--org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/IJarChangeListener.java44
-rw-r--r--org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/JarChangeResourceListener.java176
-rw-r--r--org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/JarCollectionNature.java171
-rw-r--r--org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/SafeWorkspaceTracker.java152
-rw-r--r--org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/WorkspaceBundleLoadCoordinator.java649
-rw-r--r--org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/WorkspaceLoader.java24
-rw-r--r--org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/WorkspaceStarterNature.java31
-rw-r--r--org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/internal/Activator.java31
-rw-r--r--org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/internal/ManagedFolderArea.java113
-rw-r--r--org.eclipse.osee.logback.config/.classpath6
-rw-r--r--org.eclipse.osee.logback.config/.project28
-rw-r--r--org.eclipse.osee.logback.config/META-INF/MANIFEST.MF8
-rw-r--r--org.eclipse.osee.logback.config/build.properties3
-rw-r--r--org.eclipse.osee.logback.config/logback-test.xml29
-rw-r--r--org.eclipse.osee.logback.config/logback.xml23
-rw-r--r--org.eclipse.osee.logback.config/pom.xml17
-rw-r--r--org.eclipse.osee.logger.slf4j/.classpath7
-rw-r--r--org.eclipse.osee.logger.slf4j/.project33
-rw-r--r--org.eclipse.osee.logger.slf4j/META-INF/MANIFEST.MF15
-rw-r--r--org.eclipse.osee.logger.slf4j/OSGI-INF/log.impl.provider.xml9
-rw-r--r--org.eclipse.osee.logger.slf4j/OSGI-INF/log.service.reader.xml13
-rw-r--r--org.eclipse.osee.logger.slf4j/build.properties5
-rw-r--r--org.eclipse.osee.logger.slf4j/pom.xml34
-rw-r--r--org.eclipse.osee.logger.slf4j/src/org/eclipse/osee/logger/slf4j/internal/OsgiSlf4jLogger.java38
-rw-r--r--org.eclipse.osee.logger.slf4j/src/org/eclipse/osee/logger/slf4j/internal/Sfl4jLogImpl.java207
-rw-r--r--org.eclipse.osee.logger.slf4j/src/org/eclipse/osee/logger/slf4j/internal/Slf4jLogListener.java78
-rw-r--r--org.eclipse.osee.logger/.classpath7
-rw-r--r--org.eclipse.osee.logger/.project28
-rw-r--r--org.eclipse.osee.logger/META-INF/MANIFEST.MF8
-rw-r--r--org.eclipse.osee.logger/build.properties4
-rw-r--r--org.eclipse.osee.logger/pom.xml34
-rw-r--r--org.eclipse.osee.logger/src/org/eclipse/osee/logger/Log.java47
-rw-r--r--org.eclipse.osee.ote.client.msg/.classpath7
-rw-r--r--org.eclipse.osee.ote.client.msg/.pmd925
-rw-r--r--org.eclipse.osee.ote.client.msg/.project33
-rw-r--r--org.eclipse.osee.ote.client.msg/META-INF/MANIFEST.MF22
-rw-r--r--org.eclipse.osee.ote.client.msg/OSGI-INF/MessageSubscriptionServiceComponent.xml12
-rw-r--r--org.eclipse.osee.ote.client.msg/build.properties5
-rw-r--r--org.eclipse.osee.ote.client.msg/pom.xml35
-rw-r--r--org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/IOteMessageService.java38
-rw-r--r--org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/AbstractMessageListener.java52
-rw-r--r--org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/IMessageDbFactory.java21
-rw-r--r--org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/IMessageSubscription.java59
-rw-r--r--org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/ISubscriptionListener.java58
-rw-r--r--org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/db/AbstractMessageDataBase.java204
-rw-r--r--org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/db/MessageInstance.java140
-rw-r--r--org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/Activator.java82
-rw-r--r--org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/ChannelProcessor.java136
-rw-r--r--org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/MessageDatabase.java73
-rw-r--r--org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/MessageReference.java64
-rw-r--r--org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/MessageServiceSupport.java191
-rw-r--r--org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/MessageSubscription.java257
-rw-r--r--org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/MessageSubscriptionService.java371
-rw-r--r--org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/OteClientServiceTracker.java67
-rw-r--r--org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/SubscriptionHandler.java9
-rw-r--r--org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/UpdateDispatcher.java173
-rw-r--r--org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/state/AbstractSubscriptionState.java56
-rw-r--r--org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/state/ActivateState.java96
-rw-r--r--org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/state/ISubscriptionState.java47
-rw-r--r--org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/state/InactiveState.java104
-rw-r--r--org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/state/UnresolvedState.java112
-rw-r--r--org.eclipse.osee.ote.client/.classpath7
-rw-r--r--org.eclipse.osee.ote.client/.pmd925
-rw-r--r--org.eclipse.osee.ote.client/.project28
-rw-r--r--org.eclipse.osee.ote.client/META-INF/MANIFEST.MF71
-rw-r--r--org.eclipse.osee.ote.client/build.properties4
-rw-r--r--org.eclipse.osee.ote.client/pom.xml35
-rw-r--r--org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/Activator.java46
-rw-r--r--org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/ConnectionEvent.java78
-rw-r--r--org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/IEnvironmentConfigurer.java21
-rw-r--r--org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/IOteClientService.java110
-rw-r--r--org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/ITestConnectionListener.java35
-rw-r--r--org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/ITestEnvironmentAvailibilityListener.java33
-rw-r--r--org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/ITestEnvironmentFilter.java20
-rw-r--r--org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/JmsToJiniBridgeConnector.java192
-rw-r--r--org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/OteServiceProperties.java119
-rw-r--r--org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/SessionDelegate.java48
-rw-r--r--org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/TestSessionException.java28
-rw-r--r--org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/core/ClientSession.java220
-rw-r--r--org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/core/ConnectionServiceTracker.java83
-rw-r--r--org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/core/ListenerNotifier.java94
-rw-r--r--org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/core/TestClientServiceImpl.java378
-rw-r--r--org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/core/TestHostConnection.java93
-rw-r--r--org.eclipse.osee.ote.connection.jini/.classpath7
-rw-r--r--org.eclipse.osee.ote.connection.jini/.pmd925
-rw-r--r--org.eclipse.osee.ote.connection.jini/.project28
-rw-r--r--org.eclipse.osee.ote.connection.jini/META-INF/MANIFEST.MF18
-rw-r--r--org.eclipse.osee.ote.connection.jini/build.properties5
-rw-r--r--org.eclipse.osee.ote.connection.jini/plugin.xml11
-rw-r--r--org.eclipse.osee.ote.connection.jini/pom.xml35
-rw-r--r--org.eclipse.osee.ote.connection.jini/src/org/eclipse/osee/ote/connection/jini/Activator.java74
-rw-r--r--org.eclipse.osee.ote.connection.jini/src/org/eclipse/osee/ote/connection/jini/ConnectorContribution.java24
-rw-r--r--org.eclipse.osee.ote.connection.jini/src/org/eclipse/osee/ote/connection/jini/IJiniConnectorLink.java18
-rw-r--r--org.eclipse.osee.ote.connection.jini/src/org/eclipse/osee/ote/connection/jini/IJiniConnectorRegistrar.java28
-rw-r--r--org.eclipse.osee.ote.connection.jini/src/org/eclipse/osee/ote/connection/jini/JiniClientSideConnector.java68
-rw-r--r--org.eclipse.osee.ote.connection.jini/src/org/eclipse/osee/ote/connection/jini/JiniConnector.java152
-rw-r--r--org.eclipse.osee.ote.connection.jini/src/org/eclipse/osee/ote/connection/jini/JiniServiceSideConnector.java179
-rw-r--r--org.eclipse.osee.ote.connection.jini/src/org/eclipse/osee/ote/connection/jini/TestEntry.java38
-rw-r--r--org.eclipse.osee.ote.connection.jini/src/org/eclipse/osee/ote/connection/jini/util/LeaseRenewTask.java83
-rw-r--r--org.eclipse.osee.ote.connection.service.test/.classpath7
-rw-r--r--org.eclipse.osee.ote.connection.service.test/.pmd925
-rw-r--r--org.eclipse.osee.ote.connection.service.test/.project28
-rw-r--r--org.eclipse.osee.ote.connection.service.test/META-INF/MANIFEST.MF15
-rw-r--r--org.eclipse.osee.ote.connection.service.test/build.properties4
-rw-r--r--org.eclipse.osee.ote.connection.service.test/pom.xml31
-rw-r--r--org.eclipse.osee.ote.connection.service.test/src/org/eclipse/osee/ote/connection/service/test/Activator.java95
-rw-r--r--org.eclipse.osee.ote.connection.service.test/src/org/eclipse/osee/ote/connection/service/test/TestJiniService.java24
-rw-r--r--org.eclipse.osee.ote.connection.service/.classpath7
-rw-r--r--org.eclipse.osee.ote.connection.service/.pmd925
-rw-r--r--org.eclipse.osee.ote.connection.service/.project28
-rw-r--r--org.eclipse.osee.ote.connection.service/META-INF/MANIFEST.MF15
-rw-r--r--org.eclipse.osee.ote.connection.service/build.properties5
-rw-r--r--org.eclipse.osee.ote.connection.service/plugin.xml6
-rw-r--r--org.eclipse.osee.ote.connection.service/pom.xml35
-rw-r--r--org.eclipse.osee.ote.connection.service/schema/org.eclipse.osee.connection.service.ext.exsd102
-rw-r--r--org.eclipse.osee.ote.connection.service/src/org/eclipse/osee/connection/service/IConnectionService.java45
-rw-r--r--org.eclipse.osee.ote.connection.service/src/org/eclipse/osee/connection/service/IConnectorContributor.java16
-rw-r--r--org.eclipse.osee.ote.connection.service/src/org/eclipse/osee/connection/service/IConnectorFilter.java18
-rw-r--r--org.eclipse.osee.ote.connection.service/src/org/eclipse/osee/connection/service/IConnectorListener.java29
-rw-r--r--org.eclipse.osee.ote.connection.service/src/org/eclipse/osee/connection/service/IFileKey.java18
-rw-r--r--org.eclipse.osee.ote.connection.service/src/org/eclipse/osee/connection/service/IServiceConnector.java71
-rw-r--r--org.eclipse.osee.ote.connection.service/src/org/eclipse/osee/connection/service/IServicePropertyChangeListener.java20
-rw-r--r--org.eclipse.osee.ote.connection.service/src/org/eclipse/osee/connection/service/LocalConnector.java131
-rw-r--r--org.eclipse.osee.ote.connection.service/src/org/eclipse/osee/connection/service/LocalFileKey.java29
-rw-r--r--org.eclipse.osee.ote.connection.service/src/org/eclipse/osee/connection/service/internal/Activator.java69
-rw-r--r--org.eclipse.osee.ote.connection.service/src/org/eclipse/osee/connection/service/internal/ConnectionServiceImpl.java115
-rw-r--r--org.eclipse.osee.ote.connection.service/src/org/eclipse/osee/connection/service/internal/EventNotifier.java79
-rw-r--r--org.eclipse.osee.ote.container/.classpath7
-rw-r--r--org.eclipse.osee.ote.container/.pmd925
-rw-r--r--org.eclipse.osee.ote.container/.project28
-rw-r--r--org.eclipse.osee.ote.container/META-INF/MANIFEST.MF19
-rw-r--r--org.eclipse.osee.ote.container/build.properties5
-rw-r--r--org.eclipse.osee.ote.container/plugin.xml20
-rw-r--r--org.eclipse.osee.ote.container/pom.xml17
-rw-r--r--org.eclipse.osee.ote.container/src/org/eclipse/osee/ote/container/IUserLibListener.java20
-rw-r--r--org.eclipse.osee.ote.container/src/org/eclipse/osee/ote/container/JarChangeResourceListener.java158
-rw-r--r--org.eclipse.osee.ote.container/src/org/eclipse/osee/ote/container/LibraryChangeProvider.java62
-rw-r--r--org.eclipse.osee.ote.container/src/org/eclipse/osee/ote/container/OteClasspathContainer.java176
-rw-r--r--org.eclipse.osee.ote.container/src/org/eclipse/osee/ote/container/OteClasspathContainerInitializer.java33
-rw-r--r--org.eclipse.osee.ote.container/src/org/eclipse/osee/ote/container/OteContainerActivator.java82
-rw-r--r--org.eclipse.osee.ote.container/src/org/eclipse/osee/ote/container/OteContainerPage.java61
-rw-r--r--org.eclipse.osee.ote.core.test/.classpath7
-rw-r--r--org.eclipse.osee.ote.core.test/.project28
-rw-r--r--org.eclipse.osee.ote.core.test/META-INF/MANIFEST.MF13
-rw-r--r--org.eclipse.osee.ote.core.test/build.properties4
-rw-r--r--org.eclipse.osee.ote.core.test/data/loading.test1.jarbin0 -> 1167 bytes
-rw-r--r--org.eclipse.osee.ote.core.test/data/loading.test2.jarbin0 -> 1176 bytes
-rw-r--r--org.eclipse.osee.ote.core.test/data/loading.test3.jarbin0 -> 1182 bytes
-rw-r--r--org.eclipse.osee.ote.core.test/pom.xml17
-rw-r--r--org.eclipse.osee.ote.core.test/src/org/eclipse/osee/ote/OTEApiTest.java223
-rw-r--r--org.eclipse.osee.ote.core.test/src/org/eclipse/osee/ote/OTEStatusCallbackForTests.java37
-rw-r--r--org.eclipse.osee.ote.core.test/src/org/eclipse/osee/ote/core/XmlSupportTest.java36
-rw-r--r--org.eclipse.osee.ote.core.test/src/org/eclipse/osee/ote/core/environment/status/msg/SerializedMessageTest.java32
-rw-r--r--org.eclipse.osee.ote.core.test/src/org/eclipse/osee/ote/core/log/record/PropertyStoreRecordTest.java81
-rw-r--r--org.eclipse.osee.ote.core.test/src/org/eclipse/osee/ote/endpoint/OteUdpEndpointTest.java43
-rw-r--r--org.eclipse.osee.ote.core.test/src/org/eclipse/osee/ote/message/data/MemoryResourceTest.java43
-rw-r--r--org.eclipse.osee.ote.core.test/src/org/eclipse/osee/ote/message/elements/BiSci16ElementTest.java167
-rw-r--r--org.eclipse.osee.ote.core.test/src/org/eclipse/osee/ote/message/elements/CharElementTest.java80
-rw-r--r--org.eclipse.osee.ote.core.test/src/org/eclipse/osee/ote/message/elements/Float32ElementTest.java87
-rw-r--r--org.eclipse.osee.ote.core.test/src/org/eclipse/osee/ote/message/elements/Float64ElementTest.java88
-rw-r--r--org.eclipse.osee.ote.core.test/src/org/eclipse/osee/ote/message/elements/IntegerElementTest.java270
-rw-r--r--org.eclipse.osee.ote.core.test/src/org/eclipse/osee/ote/message/elements/LongIntegerElementTest.java224
-rw-r--r--org.eclipse.osee.ote.core.test/src/org/eclipse/osee/ote/message/elements/RecordMapTest.java50
-rw-r--r--org.eclipse.osee.ote.core.test/src/org/eclipse/osee/ote/message/elements/SignedInteger16ElementTest.java69
-rw-r--r--org.eclipse.osee.ote.core.test/src/org/eclipse/osee/ote/message/elements/StringElementTest.java190
-rw-r--r--org.eclipse.osee.ote.core.test/src/org/eclipse/osee/ote/message/mock/ISequenceHandle.java20
-rw-r--r--org.eclipse.osee.ote.core.test/src/org/eclipse/osee/ote/message/mock/SequenceHandle.java53
-rw-r--r--org.eclipse.osee.ote.core.test/src/org/eclipse/osee/ote/message/mock/TestEnum.java41
-rw-r--r--org.eclipse.osee.ote.core.test/src/org/eclipse/osee/ote/message/mock/TestMemType.java32
-rw-r--r--org.eclipse.osee.ote.core.test/src/org/eclipse/osee/ote/message/mock/TestMessage.java76
-rw-r--r--org.eclipse.osee.ote.core.test/src/org/eclipse/osee/ote/message/mock/TestMessageData.java44
-rw-r--r--org.eclipse.osee.ote.core.test/src/org/eclipse/osee/ote/message/mock/TestRecordElement.java22
-rw-r--r--org.eclipse.osee.ote.core.test/src/org/eclipse/osee/ote/message/mock/UnitTestAccessor.java668
-rw-r--r--org.eclipse.osee.ote.core.test/src/org/eclipse/osee/ote/message/mock/UnitTestSupport.java439
-rw-r--r--org.eclipse.osee.ote.core.test/src/org/eclipse/osee/ote/message/other/TestEnumElementOperations.java92
-rw-r--r--org.eclipse.osee.ote.core.test/src/org/eclipse/osee/ote/message/other/TestFloat32Operations.java57
-rw-r--r--org.eclipse.osee.ote.core.test/src/org/eclipse/osee/ote/message/other/TestIntegerOperations.java333
-rw-r--r--org.eclipse.osee.ote.core.test/src/org/eclipse/osee/ote/message/other/TestMessageOperations.java97
-rw-r--r--org.eclipse.osee.ote.core.test/src/org/eclipse/osee/ote/message/other/TestStringOperations.java95
-rw-r--r--org.eclipse.osee.ote.core/.classpath7
-rw-r--r--org.eclipse.osee.ote.core/.cvsignore1
-rw-r--r--org.eclipse.osee.ote.core/.pmd925
-rw-r--r--org.eclipse.osee.ote.core/.project33
-rw-r--r--org.eclipse.osee.ote.core/META-INF/MANIFEST.MF95
-rw-r--r--org.eclipse.osee.ote.core/OSGI-INF/StatusBoardComponent.xml8
-rw-r--r--org.eclipse.osee.ote.core/OSGI-INF/message.service.handler.xml6
-rw-r--r--org.eclipse.osee.ote.core/OSGI-INF/org.eclipse.osee.ote.io.xml6
-rw-r--r--org.eclipse.osee.ote.core/OSGI-INF/ote.api.component.xml14
-rw-r--r--org.eclipse.osee.ote.core/OSGI-INF/ote.endpoint.component.xml9
-rw-r--r--org.eclipse.osee.ote.core/OSGI-INF/ote.runtime.manager.xml8
-rw-r--r--org.eclipse.osee.ote.core/OSGI-INF/ote.server.runtime.cache.component.xml8
-rw-r--r--org.eclipse.osee.ote.core/OSGI-INF/ote.sessions.xml7
-rw-r--r--org.eclipse.osee.ote.core/OSGI-INF/oteapi.handler.xml7
-rw-r--r--org.eclipse.osee.ote.core/build.properties8
-rw-r--r--org.eclipse.osee.ote.core/images/laser_16_16.gifbin0 -> 1092 bytes
-rw-r--r--org.eclipse.osee.ote.core/plugin.xml30
-rw-r--r--org.eclipse.osee.ote.core/pom.xml35
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/Configuration.java31
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/ConfigurationItem.java47
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/ConfigurationStatus.java32
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/ConfigurationStatusCallback.java9
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/HostServerProperties.java20
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/NonRemoteUserSession.java98
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/OTEApi.java132
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/OTEException.java21
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/OTEServerRuntimeCache.java26
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/OTEStatusCallback.java18
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/OTETestEnvironmentClient.java388
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/OseeLogStatusCallback.java39
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/WaitForCompletion.java67
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/classserver/BundleResourceFinder.java34
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/classserver/ClassFinder.java34
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/classserver/ClassServer.java318
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/classserver/ClassServerPermissions.java50
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/classserver/FrameworkResourceFinder.java37
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/classserver/HeadlessClassServer.java88
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/classserver/PathResourceFinder.java255
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/classserver/ResourceFinder.java37
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/classserver/classserver.properties15
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/collections/ObjectPool.java32
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/collections/ObjectPoolConfiguration.java23
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/AbstractRemoteSession.java40
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/BaseUdpReceiveRunnable.java88
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/BundleInfo.java171
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/ConnectionRequestResult.java54
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/CopyOnWriteNoIteratorList.java128
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/ExecutionUnitException.java27
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/GCHelper.java118
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/IRemoteUserSession.java54
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/ITestClient.java22
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/IUserSession.java53
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/MethodFormatter.java158
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/OSEEPerson1_4.java71
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/OTESessionManager.java13
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/OseeTestThread.java167
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/OseeURLClassLoader.java77
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/OteBundleLocator.java26
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/OteLevel.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/OteProperties.java67
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/ReturnFormatter.java93
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/ReturnStatus.java37
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/ServerApplication.java23
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/ServiceUtility.java112
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/StandardShell.java94
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/TestCase.java461
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/TestException.java52
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/TestPointTally.java56
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/TestPrompt.java61
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/TestPromptImpl.java166
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/TestScript.java628
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/TestScriptLogFilter.java38
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/XmlSupport.java153
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/annotations/OteEventTopic.java22
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/annotations/OteProperty.java22
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/cmd/CommandId.java20
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/cmd/Name.java15
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/cmd/Namespace.java15
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/cmd/Source.java18
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/cmd/StringCommandId.java55
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/cmd/StringName.java37
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/cmd/StringNamespace.java36
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/cmd/UriSource.java41
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/enums/PromptResponseType.java32
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/enums/ScriptTypeEnum.java23
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/enums/SkynetTestTypes.java21
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/enums/SupportedScriptTypes.java36
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/AsynchRemoteJobs.java68
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/BundleConfigurationReport.java43
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/BundleDescription.java134
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/BundleResolveException.java38
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/ConsoleOutputJob.java34
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/EnvironmentTask.java105
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/IScriptCompleteEvent.java18
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/IScriptSetupEvent.java18
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/OteLogFile.java79
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/ReportDataControl.java77
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/ScriptControl.java81
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/TestEnvironment.java594
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/TestEnvironmentConfig.java46
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/TestEnvironmentInterface.java95
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/TestEnvironmentLogFilter.java40
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/TestServerMode.java47
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/TimerControl.java68
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/command/CommandDescription.java63
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/command/RunTestScriptDescription.java94
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/command/TestEnvironmentCommand.java49
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/config/ScriptVersionConfig.java167
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/config/TestScriptConfig.java61
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/config/TesterConfig.java65
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/console/ConsoleCommand.java75
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/console/ConsoleCommandManager.java57
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/console/ConsoleShell.java93
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/console/ICommandManager.java24
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/console/cmd/BenchmarkCommand.java104
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/console/cmd/HostCmd.java39
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/console/cmd/LastCmd.java34
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/console/cmd/ListSystemPropertiesCmd.java48
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/console/cmd/MemoryUsageCommand.java36
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/interfaces/BasicTimeout.java27
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/interfaces/IAssociatedObjectListener.java18
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/interfaces/ICancelTimer.java19
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/interfaces/IEnvironmentFactory.java37
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/interfaces/IExecutionUnitManagement.java34
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/interfaces/IHostTestEnvironment.java35
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/interfaces/IOTypeDefinition.java20
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/interfaces/IOTypeHandlerDefinition.java24
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/interfaces/IOutfileResults.java17
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/interfaces/IRemoteCommandConsole.java21
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/interfaces/IReportData.java24
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/interfaces/IRuntimeLibraryManager.java46
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/interfaces/IScriptCompleteListener.java20
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/interfaces/IScriptControl.java38
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/interfaces/IScriptInitializer.java21
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/interfaces/IServiceCommand.java19
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/interfaces/ITestEnvironment.java44
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/interfaces/ITestEnvironmentAccessor.java53
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/interfaces/ITestEnvironmentListener.java33
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/interfaces/ITestEnvironmentServiceConfig.java53
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/interfaces/ITestGroup.java33
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/interfaces/ITestLogger.java73
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/interfaces/ITestPoint.java29
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/interfaces/ITestStation.java35
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/interfaces/ITimeTypeControl.java23
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/interfaces/ITimeout.java17
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/interfaces/ITimerControl.java51
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/interfaces/OteUtil.java28
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/interfaces/RuntimeLibraryListener.java20
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/jini/EclipseConsolePrintStream.java234
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/jini/EclipseConsoleWriter.java72
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/jini/ITestEnvironmentCommandCallback.java37
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/jini/InputStreamConnection.java44
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/status/CommandAdded.java44
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/status/CommandEndedStatusEnum.java20
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/status/CommandRemoved.java53
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/status/CommandStatusEvent.java41
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/status/EnvironmentError.java41
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/status/ExceptionEvent.java33
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/status/IServiceStatusData.java18
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/status/IServiceStatusDataCommand.java21
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/status/IServiceStatusDataVisitor.java36
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/status/OTEStatusBoard.java46
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/status/SequentialCommandBegan.java42
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/status/SequentialCommandEnded.java50
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/status/StatusBoard.java244
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/status/StatusBoardRunnable.java26
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/status/TestComplete.java61
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/status/TestPointStatusBoardRunnable.java34
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/status/TestPointUpdate.java68
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/status/TestServerCommandComplete.java43
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/status/TestStart.java49
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/status/msg/CommandAddedMessage.java33
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/status/msg/CommandRemovedMessage.java34
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/status/msg/EnvErrorMessage.java34
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/status/msg/SequentialCommandBeganMessage.java34
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/status/msg/SequentialCommandEndedMessage.java34
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/status/msg/TestCompleteMessage.java34
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/status/msg/TestPointUpdateMessage.java33
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/status/msg/TestServerCommandCompleteMessage.java35
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/status/msg/TestStartMessage.java34
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/BaseCommandContextFactory.java22
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/BaseRunManager.java138
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/BaseTestLifecycleListenerProvider.java123
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/DestroyableService.java15
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/ICommandContextFactory.java21
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/IMethodResult.java23
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/IRunManager.java36
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/ITestLifecycleListener.java25
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/ITestLifecycleListenerProvider.java31
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/MethodResultImpl.java82
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/ResultBuilder.java51
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/ReturnCode.java20
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/adapter/TestLifecycleListenerAdapter.java44
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/command/BaseCommandManager.java54
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/command/BatchLog.java54
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/command/CommandCompleteListener.java18
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/command/ICommandHandle.java26
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/command/ICommandManager.java18
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/command/ITestCommandResult.java19
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/command/ITestContext.java24
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/command/ITestServerCommand.java29
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/command/RunTests.java256
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/command/RunTestsHandle.java64
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/command/RunTestsKeys.java29
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/command/TestCallableWrapper.java55
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/command/TestCommandComplete.java52
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/command/TestCommandResult.java43
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/command/TestCommandStatus.java17
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/event/BaseEvent.java65
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/event/BaseEventDataProvider.java23
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/event/IEventData.java23
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/event/IEventDataProvider.java20
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/prompt/AbstractInteractivePrompt.java101
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/prompt/AbstractRemotePrompt.java53
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/prompt/BlockingMessagePrompt.java68
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/prompt/IPassFailPromptResponse.java20
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/prompt/IPromptHandle.java23
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/prompt/IResumeResponse.java20
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/prompt/ISteppingPrompt.java22
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/prompt/IUserInputPromptResponse.java20
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/prompt/IYesNoPromptResponse.java17
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/prompt/InformationalPrompt.java57
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/prompt/NonBlockingMessagePrompt.java38
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/prompt/OfpDebugPrompt.java46
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/prompt/PassFailPromptImpl.java36
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/prompt/PassFailPromptResult.java36
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/prompt/ScriptPausePromptImpl.java36
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/prompt/ScriptSteppingPrompt.java43
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/prompt/UserInputPromptImpl.java37
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/prompt/YesNoPromptImpl.java34
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/prompt/YesNoPromptResult.java23
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/ElementHandlers.java67
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/IBaseSaxElementListener.java22
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/OteSaxHandler.java214
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/ProcessOutfileOverview.java127
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/Actual.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/AdditionalInfo.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/Argument.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/Attention.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/CheckGroup.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/CheckGroupData.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/CheckPoint.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/Config.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/ConfigData.java29
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/CurrentProcessor.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/Debug.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/ElapsedTime.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/Environment.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/ExecutedBy.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/ExecutionDate.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/Expected.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/Global.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/GroupName.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/Info.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/InfoData.java31
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/InfoGroup.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/InfoGroupData.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/Location.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/Message.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/MethodArguments.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/MethodName.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/Name.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/Notes.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/Number.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/NumberOfTransmissions.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/ObjectName.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/OfpErrorEntry.java31
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/OfpErrorEntryData.java58
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/OfpLoggingInfo.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/OteLog.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/OteLogData.java39
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/PropertyElementHandler.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/PropertyElementHandlerData.java24
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/PropertyStoreElementHandler.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/Qualification.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/QualificationData.java40
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/Requirement.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/Result.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/RetryGroup.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/RetryGroupData.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/ReturnValue.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/RuntimeVersions.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/ScriptInit.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/ScriptName.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/ScriptResult.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/ScriptVersion.java31
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/ScriptVersionData.java75
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/SoftKeyInfoGroup.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/SoftKeyInfoGroupData.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/Stacktrace.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/StacktraceData.java43
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/Summary.java32
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/SummaryData.java84
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/Support.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/SystemInfo.java34
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/SystemInfoData.java67
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/TestCase.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/TestEventElement.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/TestPoint.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/TestPointName.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/TestPointResults.java32
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/TestPointResultsData.java59
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/TestScript.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/ThrowableElement.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/Time.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/TimeSummary.java32
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/TimeSummaryData.java58
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/Tracability.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/Trace.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/TraceEnd.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/Type.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/User.java29
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/UserData.java49
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/Value.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/Version.java31
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/VersionData.java58
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/VersionInformation.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/saxparse/elements/Witnesses.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/testrun/BaseTestRunListenerDataProvider.java45
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/testrun/BaseTestRunListenerProvider.java131
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/testrun/BaseTestRunListenerProviderFactory.java25
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/testrun/BaseTestRunManager.java146
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/testrun/ITestFactory.java21
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/testrun/ITestResultCollector.java25
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/testrun/ITestResultCollectorFactory.java19
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/testrun/ITestRunListener.java25
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/testrun/ITestRunListenerDataProvider.java28
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/testrun/ITestRunListenerProvider.java31
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/testrun/ITestRunListenerProviderFactory.java17
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/testrun/ITestRunManager.java35
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/testrun/TestRunThread.java171
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/thread/OteThread.java23
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/thread/OteThreadFactory.java49
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/framework/thread/OteThreadManager.java53
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/internal/Activator.java145
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/internal/OTESessionManagerImpl.java60
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/internal/StatusBoardRegistrationHandler.java45
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/log/Env.java90
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/log/GCHelper.java221
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/log/ITestPointTally.java35
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/log/ScriptLogHandler.java193
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/log/TestLevel.java39
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/log/TestLogger.java323
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/log/record/AttentionRecord.java84
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/log/record/DebugRecord.java45
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/log/record/ErrorRecord.java98
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/log/record/InfoRecord.java40
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/log/record/ParentLogRecord.java39
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/log/record/PropertyStoreRecord.java69
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/log/record/RequirementRecord.java49
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/log/record/ScriptConfigRecord.java221
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/log/record/ScriptInitRecord.java85
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/log/record/ScriptResultRecord.java95
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/log/record/SevereRecord.java44
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/log/record/SupportRecord.java44
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/log/record/TestCaseRecord.java77
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/log/record/TestDescriptionRecord.java54
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/log/record/TestPointRecord.java214
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/log/record/TestRecord.java341
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/log/record/TraceRecord.java139
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/log/record/TraceRecordEnd.java104
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/log/record/WarningRecord.java43
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/log/record/json/LogRecordModule.java34
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/model/IModel.java35
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/model/IModelKeyFactory.java20
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/model/IModelListener.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/model/IModelManager.java55
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/model/IModelManagerRemote.java40
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/model/IRemoteModel.java20
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/model/ModelKey.java119
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/model/ModelState.java23
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/osgi/IServiceOperation.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/osgi/ServiceOperationExecutor.java105
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/test/shells/BashShell.java138
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/test/shells/TelnetShell.java339
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/test/tags/BaseTestTags.java75
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/test/tags/FunctionalTestTags.java36
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/testPoint/CheckGroup.java156
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/testPoint/CheckPoint.java156
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/testPoint/Operation.java55
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/testPoint/RetryGroup.java66
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/endpoint/AddressBuffer.java31
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/endpoint/EndpointDataProcessor.java11
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/endpoint/OteEndpointReceiveRunnable.java174
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/endpoint/OteEndpointSendRunnable.java147
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/endpoint/OteEndpointSender.java21
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/endpoint/OteEndpointUtil.java54
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/endpoint/OteUdpEndpoint.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/endpoint/OteUdpEndpointInlineSender.java70
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/endpoint/OteUdpEndpointReceiverImpl.java42
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/endpoint/OteUdpEndpointSender.java95
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/filetransfer/TcpFileTransfer.java282
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/filetransfer/TcpFileTransferHandle.java54
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/filetransfer/TransferProgressMonitor.java61
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/internal/AddressResponseListener.java44
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/internal/Configure.java58
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/internal/ConfigureAndResponseListener.java143
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/internal/ConnectionListener.java58
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/internal/DisconnectListener.java39
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/internal/DownloadConfiguration.java40
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/internal/GetPropertiesListener.java49
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/internal/OTEApiImpl.java278
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/internal/OTEBundleLoader.java331
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/internal/OTEFutureImpl.java64
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/internal/OTEServerRuntimeCacheImpl.java222
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/internal/OTESystemOutConnection.java91
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/internal/OTESystemOutputHandler.java87
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/internal/PhysicalTypesResponceListener.java42
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/internal/RecordCommandListener.java37
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/internal/RemoteMessageServiceHandler.java86
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/internal/RemoteOteApiHandler.java103
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/internal/RunTestListener.java110
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/internal/ServerShutdownListener.java69
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/internal/SetBatchModeListener.java28
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/internal/SetElementCommandListener.java37
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/internal/StopRecordCommandListener.java21
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/internal/SubscriptionCommandListener.java48
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/internal/TransferFileToClientListener.java54
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/internal/UnSubscribeCommandListener.java42
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/internal/ZeroizeElementCommandListener.java37
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/internal/endpoint/EndpointComponent.java148
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/internal/message/event/send/NotifyOnResponse.java88
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/internal/message/event/send/OteEventMessageFutureImpl.java143
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/internal/message/event/send/OteEventMessageFutureMultipleResponseImpl.java38
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/internal/message/event/send/OteEventMessageResponseFutureImpl.java54
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/internal/message/event/send/TimeoutRunnable.java57
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/ElementPath.java107
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/IInstrumentationRegistrationListener.java24
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/IMemSourceChangeListener.java20
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/IMessageDisposeListener.java20
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/IMessageHeader.java37
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/IMessageSendListener.java22
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/IMessageTestContext.java22
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/IOInstrumentationDB.java88
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/IOType.java5
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/IOteIO.java18
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/IPreScriptInstantiation.java18
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/Message.java1355
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/MessageDefinitionProvider.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/MessageEventLogger.java100
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/MessageListenerTrace.java232
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/MessageProviderVersion.java47
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/MessageSendPeriodTrace.java165
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/MessageSendTrace.java161
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/MessageSink.java35
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/MessageState.java59
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/MessageSystemException.java27
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/MessageSystemTestCase.java67
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/MessageSystemTestEnvironment.java128
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/MessageSystemTestScript.java127
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/MessageTimeTrace.java57
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/MessageTraceLogger.java12
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/MessageTraceOutput.java136
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/TimeEvent.java20
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/TimeTrace.java63
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/UniversalMessageListener.java20
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/commands/ChangeSubscription.java61
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/commands/RecordCommand.java102
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/commands/SetElementValue.java66
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/commands/SetMessageModeCmd.java81
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/commands/SubscribeToMessage.java64
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/commands/UnSubscribeToMessage.java63
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/commands/ZeroizeElement.java53
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/condition/AbstractCondition.java34
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/condition/AndCondition.java42
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/condition/ChangesCondition.java49
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/condition/ComparisonCondition.java55
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/condition/DifferenceCondition.java69
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/condition/EmptyStringCondition.java43
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/condition/EqualityOperation.java72
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/condition/EqualsCondition.java46
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/condition/ICondition.java19
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/condition/IDiscreteElementCondition.java16
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/condition/InRangeCondition.java64
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/condition/ListCondition.java67
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/condition/MultiMessageCondition.java271
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/condition/NotInRangeCondition.java43
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/condition/NumericEvaluator.java47
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/condition/OrCondition.java42
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/condition/PulseCondition.java59
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/condition/StringComparisonCondition.java55
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/condition/StringOperation.java88
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/condition/StringTrimCondition.java36
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/condition/TransitionCondition.java61
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/condition/TransmissionCountCondition.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/data/ByteArrayHolder.java43
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/data/DDSTypeSupport.java53
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/data/HeaderData.java41
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/data/IMessageDataVisitor.java18
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/data/MemoryResource.java511
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/data/MemoryResourceByteBuffer.java515
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/data/MessageData.java690
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/elements/ArrayElement.java92
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/elements/BiSci16Element.java224
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/elements/BooleanElement.java75
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/elements/CharElement.java611
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/elements/Dec32Element.java81
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/elements/DiscreteElement.java1473
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/elements/Element.java316
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/elements/EmptyEnum_Element.java135
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/elements/EnumeratedElement.java193
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/elements/FixedPointElement.java342
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/elements/Float32Element.java137
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/elements/Float64Element.java159
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/elements/IElementVisitor.java49
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/elements/IEnumValue.java17
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/elements/IRecordFactory.java18
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/elements/InaccessibleElement.java50
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/elements/IntegerElement.java233
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/elements/LongIntegerElement.java183
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/elements/MsgWaitResult.java36
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/elements/NonFilteredStringElement.java28
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/elements/NumericElement.java31
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/elements/RealElement.java107
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/elements/RecordElement.java159
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/elements/RecordMap.java137
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/elements/SignedInteger16Element.java205
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/elements/StringElement.java216
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/elements/nonmapping/NonMappingCharElement.java910
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/elements/nonmapping/NonMappingEmptyEnumElement.java348
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/elements/nonmapping/NonMappingEnumeratedElement.java381
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/elements/nonmapping/NonMappingFixedPointElement.java91
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/elements/nonmapping/NonMappingFloat32Element.java56
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/elements/nonmapping/NonMappingFloat64Element.java57
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/elements/nonmapping/NonMappingIntegerElement.java841
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/elements/nonmapping/NonMappingLongIntegerElement.java831
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/elements/nonmapping/NonMappingRecordElement.java52
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/elements/nonmapping/NonMappingSignedInteger16Element.java844
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/elements/nonmapping/NonMappingStringElement.java169
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/enums/DataType.java27
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/enums/EmptyEnum.java93
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/event/ADDRESS_TYPE.java83
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/event/FileAvailableRequest.java24
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/event/FileAvailableStatus.java27
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/event/MyObjectInputStream.java26
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/event/OteEventMessage.java76
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/event/OteEventMessageData.java48
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/event/OteEventMessageHeader.java112
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/event/OteEventMessageType.java35
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/event/OteEventMessageUtil.java149
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/event/SOCKET_ADDRESS_RECORD.java67
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/event/SerializedClassMessage.java75
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/event/send/OteEndpointSendEventMessage.java228
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/event/send/OteEventMessageCallable.java19
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/event/send/OteEventMessageFuture.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/event/send/OteEventMessageResponseCallable.java17
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/event/send/OteEventMessageResponseFuture.java19
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/event/send/OteSendEventMessage.java161
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/instrumentation/BaseIOInstrumentation.java77
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/instrumentation/IOInstrumentation.java27
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/interfaces/IMessageManager.java48
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/interfaces/IMessageRequestor.java30
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/interfaces/IMessageScheduleChangeListener.java24
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/interfaces/IMsgToolServiceClient.java28
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/interfaces/INamespace.java15
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/interfaces/IOSEEMessageReader.java24
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/interfaces/IOSEEMessageReaderListener.java20
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/interfaces/IOSEEMessageWriter.java26
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/interfaces/IOSEEMessageWriterListener.java20
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/interfaces/IRemoteMessageService.java64
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/interfaces/ITestAccessor.java25
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/interfaces/ITestEnvironmentMessageSystem.java29
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/interfaces/ITestEnvironmentMessageSystemAccessor.java26
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/interfaces/Namespace.java40
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/internal/MessageIoManagementStarter.java64
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/io/IMessageIoDriver.java22
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/io/IMessageIoManagementService.java25
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/io/MessageIoManagementService.java79
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/listener/IOSEEMessageListener.java24
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/listener/MessageSystemListener.java333
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/listener/SPEED.java19
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/log/record/MessageJarConfigrecord.java58
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/timer/AlarmClock.java45
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/timer/CycleCountDown.java66
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/timer/RealTime.java160
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/timer/SimulatedTime.java204
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/tool/IFileTransferHandle.java22
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/tool/IUdpTransferListener.java29
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/tool/MessageMode.java21
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/tool/SubscriptionDetails.java46
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/tool/SubscriptionKey.java51
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/tool/TransferConfig.java92
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/tool/UdpFileTransferHandler.java284
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/tool/rec/ElementEntryFactory.java145
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/tool/rec/IMessageEntryFactory.java20
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/tool/rec/MessageRecordConfig.java87
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/tool/rec/MessageRecorder.java115
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/tool/rec/RecUtil.java35
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/tool/rec/entry/ArrayElementEntry.java76
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/tool/rec/entry/BooleanElementEntry.java43
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/tool/rec/entry/CharElementEntry.java41
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/tool/rec/entry/EmptyEnumEntry.java42
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/tool/rec/entry/EnumeratedElementEntry.java49
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/tool/rec/entry/IElementEntry.java28
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/tool/rec/entry/IMessageEntry.java17
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/tool/rec/entry/IntegerElementEntry.java38
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/tool/rec/entry/LongIntegerElementEntry.java38
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/tool/rec/entry/RealElementEntry.java38
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/tool/rec/entry/RecordElementEntry.java64
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/tool/rec/entry/RecordMapEntry.java52
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/tool/rec/entry/SignedInteger16ElementEntry.java38
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/tool/rec/entry/StringElementEntry.java38
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/remote/messages/AVAILABLE_PHYSICAL_TYPES_REQ.java14
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/remote/messages/BooleanResponse.java19
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/remote/messages/ConfigurationAndResponse.java45
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/remote/messages/ConsoleInputMessage.java22
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/remote/messages/ConsoleMessage.java56
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/remote/messages/ConsoleOutputMessage.java24
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/remote/messages/DisconnectRemoteTestEnvironment.java19
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/remote/messages/GET_INET_ADDRESS_REQ.java19
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/remote/messages/GET_INET_ADDRESS_RESP.java20
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/remote/messages/JobStatus.java90
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/remote/messages/MESSAGE_META_DATA_STAT.java26
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/remote/messages/RECORDING_COMPLETE.java13
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/remote/messages/RequestHostEnvironmentProperties.java15
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/remote/messages/RequestRemoteTestEnvironment.java35
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/remote/messages/RunTestsCancel.java29
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/remote/messages/RunTestsGetCommandResultReq.java25
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/remote/messages/RunTestsGetCommandResultResp.java33
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/remote/messages/RunTestsIsCancelled.java26
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/remote/messages/RunTestsIsDone.java26
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/remote/messages/RunTestsSerialized.java34
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/remote/messages/SOCKET_ID.java83
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/remote/messages/STOP_RECORDING_CMD.java13
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/remote/messages/SerializedAvailablePhysicalTypesMessage.java34
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/remote/messages/SerializedConfigurationAndResponse.java32
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/remote/messages/SerializedConnectionRequestResult.java33
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/remote/messages/SerializedDisconnectRemoteTestEnvironment.java22
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/remote/messages/SerializedEnhancedProperties.java33
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/remote/messages/SerializedOTEJobStatus.java32
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/remote/messages/SerializedRecordCommandMessage.java33
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/remote/messages/SerializedRequestRemoteTestEnvironment.java24
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/remote/messages/SerializedSetElementMessage.java33
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/remote/messages/SerializedSubscribeToMessage.java33
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/remote/messages/SerializedSubscriptionDetailsMessage.java33
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/remote/messages/SerializedUnSubscribeMessage.java33
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/remote/messages/SerializedZeroizeElementMessage.java33
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/remote/messages/TestEnvironmentServerShutdown.java24
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/remote/messages/TestEnvironmentSetBatchMode.java24
-rw-r--r--org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/remote/messages/TestEnvironmentTransferFile.java27
-rw-r--r--org.eclipse.osee.ote.feature/.project17
-rw-r--r--org.eclipse.osee.ote.feature/build.properties4
-rw-r--r--org.eclipse.osee.ote.feature/feature.properties141
-rw-r--r--org.eclipse.osee.ote.feature/feature.xml28
-rw-r--r--org.eclipse.osee.ote.feature/license.html79
-rw-r--r--org.eclipse.osee.ote.feature/pom.xml13
-rw-r--r--org.eclipse.osee.ote.feature/sourceTemplateFeature/.gitkeep0
-rw-r--r--org.eclipse.osee.ote.help.ui.test/.classpath7
-rw-r--r--org.eclipse.osee.ote.help.ui.test/.project28
-rw-r--r--org.eclipse.osee.ote.help.ui.test/META-INF/MANIFEST.MF12
-rw-r--r--org.eclipse.osee.ote.help.ui.test/build.properties4
-rw-r--r--org.eclipse.osee.ote.help.ui.test/pom.xml30
-rw-r--r--org.eclipse.osee.ote.help.ui.test/src/org/eclipse/osee/ote/help/ui/HelpContextTest.java87
-rw-r--r--org.eclipse.osee.ote.help.ui.test/src/org/eclipse/osee/ote/help/ui/HelpTableOfContentTest.java63
-rw-r--r--org.eclipse.osee.ote.help.ui.test/src/org/eclipse/osee/ote/help/ui/OteHelpUiTestSuite.java23
-rw-r--r--org.eclipse.osee.ote.help.ui.test/src/org/eclipse/osee/ote/help/ui/util/ContextParser.java141
-rw-r--r--org.eclipse.osee.ote.help.ui.test/src/org/eclipse/osee/ote/help/ui/util/HelpTestUtil.java43
-rw-r--r--org.eclipse.osee.ote.help.ui.test/src/org/eclipse/osee/ote/help/ui/util/HtmlParser.java119
-rw-r--r--org.eclipse.osee.ote.help.ui.test/src/org/eclipse/osee/ote/help/ui/util/TocParser.java103
-rw-r--r--org.eclipse.osee.ote.help.ui/.classpath7
-rw-r--r--org.eclipse.osee.ote.help.ui/.gitignore1
-rw-r--r--org.eclipse.osee.ote.help.ui/.project28
-rw-r--r--org.eclipse.osee.ote.help.ui/.settings/org.eclipse.pde.prefs32
-rw-r--r--org.eclipse.osee.ote.help.ui/META-INF/MANIFEST.MF10
-rw-r--r--org.eclipse.osee.ote.help.ui/about.html27
-rw-r--r--org.eclipse.osee.ote.help.ui/build-helper.xml49
-rw-r--r--org.eclipse.osee.ote.help.ui/build.properties11
-rw-r--r--org.eclipse.osee.ote.help.ui/contexts/contexts.xml74
-rw-r--r--org.eclipse.osee.ote.help.ui/intro/overviewExtensionContent.xml13
-rw-r--r--org.eclipse.osee.ote.help.ui/intro/tutorialsExtensionContent.xml26
-rw-r--r--org.eclipse.osee.ote.help.ui/plugin.xml31
-rw-r--r--org.eclipse.osee.ote.help.ui/pom.xml106
-rw-r--r--org.eclipse.osee.ote.help.ui/src/org/eclipse/osee/ote/help/ui/OteHelpContext.java43
-rw-r--r--org.eclipse.osee.ote.io/.classpath7
-rw-r--r--org.eclipse.osee.ote.io/.project33
-rw-r--r--org.eclipse.osee.ote.io/META-INF/MANIFEST.MF14
-rw-r--r--org.eclipse.osee.ote.io/OSGI-INF/org.eclipse.osee.ote.io.xml8
-rw-r--r--org.eclipse.osee.ote.io/OSGI-INF/ote.server.folder.component.xml7
-rw-r--r--org.eclipse.osee.ote.io/build.properties5
-rw-r--r--org.eclipse.osee.ote.io/pom.xml35
-rw-r--r--org.eclipse.osee.ote.io/src/org/eclipse/osee/ote/io/OTEServerFolder.java107
-rw-r--r--org.eclipse.osee.ote.io/src/org/eclipse/osee/ote/io/SystemOutput.java7
-rw-r--r--org.eclipse.osee.ote.io/src/org/eclipse/osee/ote/io/SystemOutputListener.java15
-rw-r--r--org.eclipse.osee.ote.io/src/org/eclipse/osee/ote/io/internal/EarlyIORedirect.java77
-rw-r--r--org.eclipse.osee.ote.io/src/org/eclipse/osee/ote/io/internal/OTEFolderImpl.java327
-rw-r--r--org.eclipse.osee.ote.io/src/org/eclipse/osee/ote/io/internal/SpecializedInputStream.java76
-rw-r--r--org.eclipse.osee.ote.io/src/org/eclipse/osee/ote/io/internal/SpecializedOut.java23
-rw-r--r--org.eclipse.osee.ote.io/src/org/eclipse/osee/ote/io/internal/SpecializedOutputStream.java58
-rw-r--r--org.eclipse.osee.ote.io/src/org/eclipse/osee/ote/io/internal/SystemOutputImpl.java71
-rw-r--r--org.eclipse.osee.ote.io/src/org/eclipse/osee/ote/io/internal/SystemOutputListerImpl.java36
-rw-r--r--org.eclipse.osee.ote.jms/.classpath7
-rw-r--r--org.eclipse.osee.ote.jms/.project33
-rw-r--r--org.eclipse.osee.ote.jms/META-INF/MANIFEST.MF25
-rw-r--r--org.eclipse.osee.ote.jms/OSGI-INF/ote.endpoint.bridge.component.xml9
-rw-r--r--org.eclipse.osee.ote.jms/build.properties5
-rw-r--r--org.eclipse.osee.ote.jms/pom.xml35
-rw-r--r--org.eclipse.osee.ote.jms/src/org/eclipse/osee/ote/jms/bridge/EventToEndpoint.java45
-rw-r--r--org.eclipse.osee.ote.master.feature/.project17
-rw-r--r--org.eclipse.osee.ote.master.feature/build.properties1
-rw-r--r--org.eclipse.osee.ote.master.feature/feature.xml111
-rw-r--r--org.eclipse.osee.ote.master.feature/pom.xml13
-rw-r--r--org.eclipse.osee.ote.master.feature/sourceTemplateFeature/.gitkeep0
-rw-r--r--org.eclipse.osee.ote.master.product/.project11
-rw-r--r--org.eclipse.osee.ote.master.product/customize-product.xml103
-rw-r--r--org.eclipse.osee.ote.master.product/etc/ote.server.config.json8
-rw-r--r--org.eclipse.osee.ote.master.product/org.eclipse.osee.ote.master.product53
-rw-r--r--org.eclipse.osee.ote.master.product/pom.xml72
-rw-r--r--org.eclipse.osee.ote.master.rest.client/.classpath7
-rw-r--r--org.eclipse.osee.ote.master.rest.client/.project33
-rw-r--r--org.eclipse.osee.ote.master.rest.client/META-INF/MANIFEST.MF23
-rw-r--r--org.eclipse.osee.ote.master.rest.client/OSGI-INF/ote.master.rest.client.xml7
-rw-r--r--org.eclipse.osee.ote.master.rest.client/build.properties5
-rw-r--r--org.eclipse.osee.ote.master.rest.client/pom.xml35
-rw-r--r--org.eclipse.osee.ote.master.rest.client/src/org/eclipse/osee/ote/master/rest/client/OTEMasterServer.java12
-rw-r--r--org.eclipse.osee.ote.master.rest.client/src/org/eclipse/osee/ote/master/rest/client/OTEMasterServerAvailableNodes.java27
-rw-r--r--org.eclipse.osee.ote.master.rest.client/src/org/eclipse/osee/ote/master/rest/client/OTEMasterServerResult.java21
-rw-r--r--org.eclipse.osee.ote.master.rest.client/src/org/eclipse/osee/ote/master/rest/client/internal/AddServer.java50
-rw-r--r--org.eclipse.osee.ote.master.rest.client/src/org/eclipse/osee/ote/master/rest/client/internal/GetAvailableServers.java39
-rw-r--r--org.eclipse.osee.ote.master.rest.client/src/org/eclipse/osee/ote/master/rest/client/internal/HttpUtil.java24
-rw-r--r--org.eclipse.osee.ote.master.rest.client/src/org/eclipse/osee/ote/master/rest/client/internal/OTEMasterServerImpl.java63
-rw-r--r--org.eclipse.osee.ote.master.rest.client/src/org/eclipse/osee/ote/master/rest/client/internal/RemoveServer.java46
-rw-r--r--org.eclipse.osee.ote.master.rest.model/.classpath7
-rw-r--r--org.eclipse.osee.ote.master.rest.model/.project28
-rw-r--r--org.eclipse.osee.ote.master.rest.model/META-INF/MANIFEST.MF10
-rw-r--r--org.eclipse.osee.ote.master.rest.model/build.properties4
-rw-r--r--org.eclipse.osee.ote.master.rest.model/pom.xml35
-rw-r--r--org.eclipse.osee.ote.master.rest.model/src/org/eclipse/osee/ote/master/rest/model/OTEServer.java107
-rw-r--r--org.eclipse.osee.ote.master.rest.test/.classpath7
-rw-r--r--org.eclipse.osee.ote.master.rest.test/.project28
-rw-r--r--org.eclipse.osee.ote.master.rest.test/META-INF/MANIFEST.MF14
-rw-r--r--org.eclipse.osee.ote.master.rest.test/build.properties4
-rw-r--r--org.eclipse.osee.ote.master.rest.test/src/org/eclipse/osee/ote/master/rest/test/ClientAPITest.java120
-rw-r--r--org.eclipse.osee.ote.master.rest/.classpath7
-rw-r--r--org.eclipse.osee.ote.master.rest/.project33
-rw-r--r--org.eclipse.osee.ote.master.rest/META-INF/MANIFEST.MF15
-rw-r--r--org.eclipse.osee.ote.master.rest/OSGI-INF/ote.master.rest.application.xml8
-rw-r--r--org.eclipse.osee.ote.master.rest/build.properties6
-rw-r--r--org.eclipse.osee.ote.master.rest/plugin.xml33
-rw-r--r--org.eclipse.osee.ote.master.rest/pom.xml35
-rw-r--r--org.eclipse.osee.ote.master.rest/src/org/eclipse/osee/ote/master/rest/internal/OTEAvailableServersResource.java116
-rw-r--r--org.eclipse.osee.ote.master.rest/src/org/eclipse/osee/ote/master/rest/internal/OTEMasterApplication.java22
-rw-r--r--org.eclipse.osee.ote.master.rest/src/org/eclipse/osee/ote/master/rest/internal/OTERestApplication.java39
-rw-r--r--org.eclipse.osee.ote.master.rest/src/org/eclipse/osee/ote/master/rest/internal/Util.java63
-rw-r--r--org.eclipse.osee.ote.master.test/.classpath7
-rw-r--r--org.eclipse.osee.ote.master.test/.project28
-rw-r--r--org.eclipse.osee.ote.master.test/META-INF/MANIFEST.MF9
-rw-r--r--org.eclipse.osee.ote.master.test/build.properties4
-rw-r--r--org.eclipse.osee.ote.master.test/pom.xml35
-rw-r--r--org.eclipse.osee.ote.master.test/src/org/eclipse/osee/ote/master/internal/OTELookupImplTest.java177
-rw-r--r--org.eclipse.osee.ote.master/.classpath7
-rw-r--r--org.eclipse.osee.ote.master/.project33
-rw-r--r--org.eclipse.osee.ote.master/META-INF/MANIFEST.MF11
-rw-r--r--org.eclipse.osee.ote.master/OSGI-INF/ote.master.lookup.xml7
-rw-r--r--org.eclipse.osee.ote.master/build.properties5
-rw-r--r--org.eclipse.osee.ote.master/pom.xml35
-rw-r--r--org.eclipse.osee.ote.master/src/org/eclipse/osee/ote/master/OTELookup.java14
-rw-r--r--org.eclipse.osee.ote.master/src/org/eclipse/osee/ote/master/OTELookupServerEntry.java175
-rw-r--r--org.eclipse.osee.ote.master/src/org/eclipse/osee/ote/master/OTEServerType.java5
-rw-r--r--org.eclipse.osee.ote.master/src/org/eclipse/osee/ote/master/internal/LookupTimeoutMonitor.java42
-rw-r--r--org.eclipse.osee.ote.master/src/org/eclipse/osee/ote/master/internal/OTELookupImpl.java101
-rw-r--r--org.eclipse.osee.ote.messaging.dds/.classpath7
-rw-r--r--org.eclipse.osee.ote.messaging.dds/.pmd925
-rw-r--r--org.eclipse.osee.ote.messaging.dds/.project28
-rw-r--r--org.eclipse.osee.ote.messaging.dds/META-INF/MANIFEST.MF18
-rw-r--r--org.eclipse.osee.ote.messaging.dds/build.properties4
-rw-r--r--org.eclipse.osee.ote.messaging.dds/pom.xml35
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/Data.java55
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/DataSample.java63
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/DataStoreItem.java58
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/Duration.java49
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/IDestination.java18
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/IOteData.java29
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/ISource.java18
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/InstanceHandle.java24
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/InstanceStateKind.java39
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/Kind.java37
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/NotImplementedException.java30
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/ReturnCode.java65
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/SampleStateKind.java36
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/StatusKind.java50
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/Time.java64
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/ViewStateKind.java36
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/condition/Condition.java35
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/condition/GuardCondition.java33
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/condition/QueryCondition.java60
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/condition/ReadCondition.java68
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/condition/StatusCondition.java53
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/condition/WaitSet.java81
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/condition/package.html13
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/entity/DataReader.java625
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/entity/DataWriter.java376
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/entity/DomainEntity.java29
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/entity/DomainParticipant.java619
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/entity/DomainParticipantFactory.java151
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/entity/Entity.java148
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/entity/EntityFactory.java25
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/entity/PublicationBuiltinTopicData.java31
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/entity/Publisher.java388
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/entity/PublisherThread.java66
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/entity/SampleInfo.java296
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/entity/Subscriber.java337
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/entity/SubscriptionBuiltinTopicData.java31
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/entity/Topic.java226
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/entity/package.html13
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/listener/DataReaderListener.java73
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/listener/DataWriterListener.java57
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/listener/DomainParticipantListener.java37
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/listener/Listener.java22
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/listener/PublisherListener.java21
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/listener/SubscriberListener.java30
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/listener/TopicListener.java25
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/listener/package.html13
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/package.html13
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/qos/QosPolicy.java54
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/qos/package.html13
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/service/DomainId.java55
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/service/Key.java29
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/service/TopicDescription.java45
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/service/TypeRegistry.java86
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/service/TypeSignature.java109
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/service/TypeSupport.java83
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/service/package.html13
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/status/CountedStatus.java53
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/status/InconsistentTopicStatus.java29
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/status/LivelinessChangedStatus.java77
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/status/LivelinessLostStatus.java30
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/status/OfferedDeadlineMissedStatus.java43
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/status/OfferedIncompatibleQosStatus.java62
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/status/PublicationMatchStatus.java44
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/status/RequestedDeadlineMissedStatus.java43
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/status/RequestedIncompatibleQosStatus.java61
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/status/SampleLostStatus.java29
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/status/SampleRejectedStatus.java54
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/status/SampleRejectedStatusKind.java52
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/status/Status.java21
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/status/SubscriptionMatchStatus.java44
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/status/package.html13
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/test/Driver.java179
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/test/data/IntMessage.java24
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/test/data/IntMessageReader.java87
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/test/data/IntMessageTypeSupport.java42
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/test/data/IntMessageWriter.java36
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/test/data/IntegerData.java97
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/test/data/package.html13
-rw-r--r--org.eclipse.osee.ote.messaging.dds/src/org/eclipse/osee/ote/messaging/dds/test/package.html13
-rw-r--r--org.eclipse.osee.ote.p2/.project17
-rw-r--r--org.eclipse.osee.ote.p2/category.xml20
-rw-r--r--org.eclipse.osee.ote.p2/pom.xml93
-rw-r--r--org.eclipse.osee.ote.p2/version.xml71
-rw-r--r--org.eclipse.osee.ote.parent/.project11
-rw-r--r--org.eclipse.osee.ote.parent/build.sh2
-rw-r--r--org.eclipse.osee.ote.parent/buildLocal.sh3
-rw-r--r--org.eclipse.osee.ote.parent/pom.xml445
-rw-r--r--org.eclipse.osee.ote.properties/.classpath7
-rw-r--r--org.eclipse.osee.ote.properties/.project28
-rw-r--r--org.eclipse.osee.ote.properties/META-INF/MANIFEST.MF8
-rw-r--r--org.eclipse.osee.ote.properties/build.properties4
-rw-r--r--org.eclipse.osee.ote.properties/pom.xml35
-rw-r--r--org.eclipse.osee.ote.properties/src/org/eclipse/osee/ote/properties/OteProperties.java8
-rw-r--r--org.eclipse.osee.ote.properties/src/org/eclipse/osee/ote/properties/OtePropertiesCore.java130
-rw-r--r--org.eclipse.osee.ote.rest.client/.classpath7
-rw-r--r--org.eclipse.osee.ote.rest.client/.project33
-rw-r--r--org.eclipse.osee.ote.rest.client/META-INF/MANIFEST.MF30
-rw-r--r--org.eclipse.osee.ote.rest.client/OSGI-INF/ote.client.xml7
-rw-r--r--org.eclipse.osee.ote.rest.client/build.properties5
-rw-r--r--org.eclipse.osee.ote.rest.client/pom.xml35
-rw-r--r--org.eclipse.osee.ote.rest.client/src/org/eclipse/osee/ote/rest/client/BasicProgress.java55
-rw-r--r--org.eclipse.osee.ote.rest.client/src/org/eclipse/osee/ote/rest/client/ConfigurationStatusCallback.java12
-rw-r--r--org.eclipse.osee.ote.rest.client/src/org/eclipse/osee/ote/rest/client/GetFileProgress.java6
-rw-r--r--org.eclipse.osee.ote.rest.client/src/org/eclipse/osee/ote/rest/client/OTECacheItem.java31
-rw-r--r--org.eclipse.osee.ote.rest.client/src/org/eclipse/osee/ote/rest/client/OteClient.java31
-rw-r--r--org.eclipse.osee.ote.rest.client/src/org/eclipse/osee/ote/rest/client/Progress.java11
-rw-r--r--org.eclipse.osee.ote.rest.client/src/org/eclipse/osee/ote/rest/client/ProgressWithCancel.java9
-rw-r--r--org.eclipse.osee.ote.rest.client/src/org/eclipse/osee/ote/rest/client/internal/BaseClientCallable.java27
-rw-r--r--org.eclipse.osee.ote.rest.client/src/org/eclipse/osee/ote/rest/client/internal/ConfigureOteServer.java114
-rw-r--r--org.eclipse.osee.ote.rest.client/src/org/eclipse/osee/ote/rest/client/internal/GetOteServerFile.java51
-rw-r--r--org.eclipse.osee.ote.rest.client/src/org/eclipse/osee/ote/rest/client/internal/OteClientImpl.java86
-rw-r--r--org.eclipse.osee.ote.rest.client/src/org/eclipse/osee/ote/rest/client/internal/PrepareOteServerFile.java79
-rw-r--r--org.eclipse.osee.ote.rest.client/src/org/eclipse/osee/ote/rest/client/internal/RunTests.java108
-rw-r--r--org.eclipse.osee.ote.rest.model/.classpath7
-rw-r--r--org.eclipse.osee.ote.rest.model/.project28
-rw-r--r--org.eclipse.osee.ote.rest.model/META-INF/MANIFEST.MF14
-rw-r--r--org.eclipse.osee.ote.rest.model/build.properties4
-rw-r--r--org.eclipse.osee.ote.rest.model/pom.xml35
-rw-r--r--org.eclipse.osee.ote.rest.model/src/org/eclipse/osee/ote/rest/model/KeyValue.java62
-rw-r--r--org.eclipse.osee.ote.rest.model/src/org/eclipse/osee/ote/rest/model/OTEConfiguration.java94
-rw-r--r--org.eclipse.osee.ote.rest.model/src/org/eclipse/osee/ote/rest/model/OTEConfigurationIdentity.java38
-rw-r--r--org.eclipse.osee.ote.rest.model/src/org/eclipse/osee/ote/rest/model/OTEConfigurationItem.java99
-rw-r--r--org.eclipse.osee.ote.rest.model/src/org/eclipse/osee/ote/rest/model/OTEJobStatus.java91
-rw-r--r--org.eclipse.osee.ote.rest.model/src/org/eclipse/osee/ote/rest/model/OTETestRun.java62
-rw-r--r--org.eclipse.osee.ote.rest.model/src/org/eclipse/osee/ote/rest/model/Properties.java96
-rw-r--r--org.eclipse.osee.ote.rest/.classpath7
-rw-r--r--org.eclipse.osee.ote.rest/.project33
-rw-r--r--org.eclipse.osee.ote.rest/META-INF/MANIFEST.MF21
-rw-r--r--org.eclipse.osee.ote.rest/OSGI-INF/ote.configuration.store.xml9
-rw-r--r--org.eclipse.osee.ote.rest/OSGI-INF/ote.job.store.xml7
-rw-r--r--org.eclipse.osee.ote.rest/OSGI-INF/ote.rest.application.xml8
-rw-r--r--org.eclipse.osee.ote.rest/OSGI-INF/ote.run.tests.component.xml7
-rw-r--r--org.eclipse.osee.ote.rest/build.properties8
-rw-r--r--org.eclipse.osee.ote.rest/pom.xml35
-rw-r--r--org.eclipse.osee.ote.rest/src/org/eclipse/osee/ote/rest/internal/ConfigurationJobStatus.java101
-rw-r--r--org.eclipse.osee.ote.rest/src/org/eclipse/osee/ote/rest/internal/HTMLBuilder.java127
-rw-r--r--org.eclipse.osee.ote.rest/src/org/eclipse/osee/ote/rest/internal/OTEConfigItemSort.java14
-rw-r--r--org.eclipse.osee.ote.rest/src/org/eclipse/osee/ote/rest/internal/OTEStatusCallbackForRun.java44
-rw-r--r--org.eclipse.osee.ote.rest/src/org/eclipse/osee/ote/rest/internal/OteBatchResource.java203
-rw-r--r--org.eclipse.osee.ote.rest/src/org/eclipse/osee/ote/rest/internal/OteBatchesResource.java70
-rw-r--r--org.eclipse.osee.ote.rest/src/org/eclipse/osee/ote/rest/internal/OteConfigurationResource.java82
-rw-r--r--org.eclipse.osee.ote.rest/src/org/eclipse/osee/ote/rest/internal/OteConfigurationStore.java19
-rw-r--r--org.eclipse.osee.ote.rest/src/org/eclipse/osee/ote/rest/internal/OteConfigurationStoreImpl.java107
-rw-r--r--org.eclipse.osee.ote.rest/src/org/eclipse/osee/ote/rest/internal/OteFilesResource.java65
-rw-r--r--org.eclipse.osee.ote.rest/src/org/eclipse/osee/ote/rest/internal/OteJob.java13
-rw-r--r--org.eclipse.osee.ote.rest/src/org/eclipse/osee/ote/rest/internal/OteJobResource.java51
-rw-r--r--org.eclipse.osee.ote.rest/src/org/eclipse/osee/ote/rest/internal/OteJobStore.java16
-rw-r--r--org.eclipse.osee.ote.rest/src/org/eclipse/osee/ote/rest/internal/OteJobStoreImpl.java36
-rw-r--r--org.eclipse.osee.ote.rest/src/org/eclipse/osee/ote/rest/internal/OteJobsResource.java55
-rw-r--r--org.eclipse.osee.ote.rest/src/org/eclipse/osee/ote/rest/internal/OteRestApplication.java48
-rw-r--r--org.eclipse.osee.ote.rest/src/org/eclipse/osee/ote/rest/internal/OteRootResource.java95
-rw-r--r--org.eclipse.osee.ote.rest/src/org/eclipse/osee/ote/rest/internal/OteRunTestCommands.java9
-rw-r--r--org.eclipse.osee.ote.rest/src/org/eclipse/osee/ote/rest/internal/OteRunTestCommandsImpl.java28
-rw-r--r--org.eclipse.osee.ote.rest/src/org/eclipse/osee/ote/rest/internal/OteRunTestResource.java113
-rw-r--r--org.eclipse.osee.ote.rest/src/org/eclipse/osee/ote/rest/internal/OteRunTestResourceItem.java63
-rw-r--r--org.eclipse.osee.ote.rest/src/org/eclipse/osee/ote/rest/internal/ReverseAlphabeticalSort.java13
-rw-r--r--org.eclipse.osee.ote.rest/src/org/eclipse/osee/ote/rest/internal/TestResultSummary.java59
-rw-r--r--org.eclipse.osee.ote.rest/src/org/eclipse/osee/ote/rest/internal/TimeSort.java21
-rw-r--r--org.eclipse.osee.ote.rest/src/org/eclipse/osee/ote/rest/internal/TranslateUtil.java41
-rw-r--r--org.eclipse.osee.ote.rest/src/org/eclipse/osee/ote/rest/internal/ZIPGenerator.java57
-rw-r--r--org.eclipse.osee.ote.runtimeManager/.classpath7
-rw-r--r--org.eclipse.osee.ote.runtimeManager/.pmd925
-rw-r--r--org.eclipse.osee.ote.runtimeManager/.project28
-rw-r--r--org.eclipse.osee.ote.runtimeManager/META-INF/MANIFEST.MF33
-rw-r--r--org.eclipse.osee.ote.runtimeManager/build.properties5
-rw-r--r--org.eclipse.osee.ote.runtimeManager/plugin.xml47
-rw-r--r--org.eclipse.osee.ote.runtimeManager/pom.xml35
-rw-r--r--org.eclipse.osee.ote.runtimeManager/src/org/eclipse/osee/ote/runtimemanager/EarlyStartup.java41
-rw-r--r--org.eclipse.osee.ote.runtimeManager/src/org/eclipse/osee/ote/runtimemanager/JarListenerStub.java139
-rw-r--r--org.eclipse.osee.ote.runtimeManager/src/org/eclipse/osee/ote/runtimemanager/LibJarListener.java159
-rw-r--r--org.eclipse.osee.ote.runtimeManager/src/org/eclipse/osee/ote/runtimemanager/OteSystemLibsNature.java28
-rw-r--r--org.eclipse.osee.ote.runtimeManager/src/org/eclipse/osee/ote/runtimemanager/OteUserLibsNature.java28
-rw-r--r--org.eclipse.osee.ote.runtimeManager/src/org/eclipse/osee/ote/runtimemanager/PrecompiledListener.java151
-rw-r--r--org.eclipse.osee.ote.runtimeManager/src/org/eclipse/osee/ote/runtimemanager/RuntimeManager.java44
-rw-r--r--org.eclipse.osee.ote.runtimeManager/src/org/eclipse/osee/ote/runtimemanager/SafeWorkspaceTracker.java267
-rw-r--r--org.eclipse.osee.ote.runtimeManager/src/org/eclipse/osee/ote/runtimemanager/UserLibResourceFinder.java74
-rw-r--r--org.eclipse.osee.ote.runtimeManager/src/org/eclipse/osee/ote/runtimemanager/container/OteClasspathContainer.java199
-rw-r--r--org.eclipse.osee.ote.runtimeManager/src/org/eclipse/osee/ote/runtimemanager/container/OteClasspathContainerInitializer.java33
-rw-r--r--org.eclipse.osee.ote.runtimeManager/src/org/eclipse/osee/ote/runtimemanager/container/OteContainerPage.java61
-rw-r--r--org.eclipse.osee.ote.runtimeManager/src/org/eclipse/osee/ote/runtimemanager/internal/ProjectChangeResourceListener.java29
-rw-r--r--org.eclipse.osee.ote.runtimeManager/src/org/eclipse/osee/ote/runtimemanager/internal/RuntimeBundleServer.java75
-rw-r--r--org.eclipse.osee.ote.runtimeManager/src/org/eclipse/osee/ote/runtimemanager/internal/RuntimeLibResourceFinder.java53
-rw-r--r--org.eclipse.osee.ote.server.external.feature/.project17
-rw-r--r--org.eclipse.osee.ote.server.external.feature/build.properties1
-rw-r--r--org.eclipse.osee.ote.server.external.feature/feature.xml76
-rw-r--r--org.eclipse.osee.ote.server.external.feature/pom.xml36
-rw-r--r--org.eclipse.osee.ote.server.external.feature/sourceTemplateFeature/.gitkeep0
-rw-r--r--org.eclipse.osee.ote.server/.classpath7
-rw-r--r--org.eclipse.osee.ote.server/.pmd925
-rw-r--r--org.eclipse.osee.ote.server/.project33
-rw-r--r--org.eclipse.osee.ote.server/META-INF/MANIFEST.MF46
-rw-r--r--org.eclipse.osee.ote.server/OSGI-INF/ConsoleCmd.xml7
-rw-r--r--org.eclipse.osee.ote.server/OSGI-INF/ote.server.start.xml5
-rw-r--r--org.eclipse.osee.ote.server/OSGI-INF/ote.service.starter.xml12
-rw-r--r--org.eclipse.osee.ote.server/build.properties5
-rw-r--r--org.eclipse.osee.ote.server/pom.xml35
-rw-r--r--org.eclipse.osee.ote.server/src/org/eclipse/osee/ote/server/OteClose.java63
-rw-r--r--org.eclipse.osee.ote.server/src/org/eclipse/osee/ote/server/OteServiceStarter.java25
-rw-r--r--org.eclipse.osee.ote.server/src/org/eclipse/osee/ote/server/PropertyParamter.java57
-rw-r--r--org.eclipse.osee.ote.server/src/org/eclipse/osee/ote/server/RemoteShell.java56
-rw-r--r--org.eclipse.osee.ote.server/src/org/eclipse/osee/ote/server/TestEnvironmentFactory.java18
-rw-r--r--org.eclipse.osee.ote.server/src/org/eclipse/osee/ote/server/TestEnvironmentServiceConfigImpl.java81
-rw-r--r--org.eclipse.osee.ote.server/src/org/eclipse/osee/ote/server/internal/EnvironmentCreationParameter.java95
-rw-r--r--org.eclipse.osee.ote.server/src/org/eclipse/osee/ote/server/internal/OTEServerCreationComponent.java107
-rw-r--r--org.eclipse.osee.ote.server/src/org/eclipse/osee/ote/server/internal/OteService.java206
-rw-r--r--org.eclipse.osee.ote.server/src/org/eclipse/osee/ote/server/internal/OteServiceStarterImpl.java424
-rw-r--r--org.eclipse.osee.ote.server/src/org/eclipse/osee/ote/server/internal/RemoteTestEnvironment.java262
-rw-r--r--org.eclipse.osee.ote.ui.builder/.classpath7
-rw-r--r--org.eclipse.osee.ote.ui.builder/.project28
-rw-r--r--org.eclipse.osee.ote.ui.builder/META-INF/MANIFEST.MF17
-rw-r--r--org.eclipse.osee.ote.ui.builder/build.properties5
-rw-r--r--org.eclipse.osee.ote.ui.builder/plugin.xml57
-rw-r--r--org.eclipse.osee.ote.ui.builder/pom.xml35
-rw-r--r--org.eclipse.osee.ote.ui.builder/src/org/eclipse/osee/ote/ui/builder/Activator.java50
-rw-r--r--org.eclipse.osee.ote.ui.builder/src/org/eclipse/osee/ote/ui/builder/ArchiveBuilder.java93
-rw-r--r--org.eclipse.osee.ote.ui.builder/src/org/eclipse/osee/ote/ui/builder/JarPackager.java108
-rw-r--r--org.eclipse.osee.ote.ui.builder/src/org/eclipse/osee/ote/ui/builder/OTEBuilderPreferencePage.java65
-rw-r--r--org.eclipse.osee.ote.ui.builder/src/org/eclipse/osee/ote/ui/builder/OTEPackagingBuilder.java174
-rw-r--r--org.eclipse.osee.ote.ui.builder/src/org/eclipse/osee/ote/ui/builder/OTEPackagingNature.java81
-rw-r--r--org.eclipse.osee.ote.ui.builder/src/org/eclipse/osee/ote/ui/builder/ToggleNatureHandler.java130
-rw-r--r--org.eclipse.osee.ote.ui.markers/.classpath7
-rw-r--r--org.eclipse.osee.ote.ui.markers/.pmd925
-rw-r--r--org.eclipse.osee.ote.ui.markers/.project28
-rw-r--r--org.eclipse.osee.ote.ui.markers/META-INF/MANIFEST.MF21
-rw-r--r--org.eclipse.osee.ote.ui.markers/build.properties5
-rw-r--r--org.eclipse.osee.ote.ui.markers/plugin.xml31
-rw-r--r--org.eclipse.osee.ote.ui.markers/pom.xml35
-rw-r--r--org.eclipse.osee.ote.ui.markers/src/org/eclipse/osee/ote/ui/markers/CheckPointData.java55
-rw-r--r--org.eclipse.osee.ote.ui.markers/src/org/eclipse/osee/ote/ui/markers/CheckPointHelper.java65
-rw-r--r--org.eclipse.osee.ote.ui.markers/src/org/eclipse/osee/ote/ui/markers/ClearOteMarkerAction.java66
-rw-r--r--org.eclipse.osee.ote.ui.markers/src/org/eclipse/osee/ote/ui/markers/ClearOteMarkerActionView.java59
-rw-r--r--org.eclipse.osee.ote.ui.markers/src/org/eclipse/osee/ote/ui/markers/FileWatchList.java107
-rw-r--r--org.eclipse.osee.ote.ui.markers/src/org/eclipse/osee/ote/ui/markers/MarkerInfo.java44
-rw-r--r--org.eclipse.osee.ote.ui.markers/src/org/eclipse/osee/ote/ui/markers/MarkerPlugin.java122
-rw-r--r--org.eclipse.osee.ote.ui.markers/src/org/eclipse/osee/ote/ui/markers/OteMarkerHelper.java143
-rw-r--r--org.eclipse.osee.ote.ui.markers/src/org/eclipse/osee/ote/ui/markers/ProcessOutfileSax.java277
-rw-r--r--org.eclipse.osee.ote.ui.markers/src/org/eclipse/osee/ote/ui/markers/StackTraceCollection.java32
-rw-r--r--org.eclipse.osee.ote.ui.markers/src/org/eclipse/osee/ote/ui/markers/TestPointData.java57
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/.classpath7
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/.pmd925
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/.project33
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/META-INF/MANIFEST.MF55
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/build.properties7
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/add.gifbin0 -> 298 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/alert_obj.gifbin0 -> 146 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/binoculars.gifbin0 -> 964 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/check.gifbin0 -> 131 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/chkbox_disabled.gifbin0 -> 90 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/chkbox_enabled.gifbin0 -> 343 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/connected.gifbin0 -> 1312 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/connected_plug.gifbin0 -> 328 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/connected_sm.gifbin0 -> 1049 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/debugOutput.gifbin0 -> 683 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/debugOutput_sm.gifbin0 -> 617 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/delete.gifbin0 -> 163 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/disconnected_plug.gifbin0 -> 928 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/environment.gifbin0 -> 946 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/error.gifbin0 -> 84 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/error_stack.gifbin0 -> 603 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/file.gifbin0 -> 354 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/file_delete.gifbin0 -> 995 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/flatOutput.gifbin0 -> 680 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/flatOutput_sm.gifbin0 -> 616 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/fldr_obj.gifbin0 -> 916 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/glasses.gifbin0 -> 909 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/green_bug.gifbin0 -> 949 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/import_wiz.gifbin0 -> 327 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/light_bolt.gifbin0 -> 1049 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/loadConfig.gifbin0 -> 950 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/normalOutput.gifbin0 -> 684 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/normalOutput_sm.gifbin0 -> 611 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/ofp.gifbin0 -> 913 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/red_bug.gifbin0 -> 924 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/save_edit.gifbin0 -> 1039 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/saveas_edit.gifbin0 -> 982 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/scriptCancelled.gifbin0 -> 1797 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/scriptCancelled_sm.gifbin0 -> 1035 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/scriptCancelling.gifbin0 -> 2042 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/scriptCancelling_sm.gifbin0 -> 1033 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/scriptComplete.gifbin0 -> 2354 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/scriptComplete_sm.gifbin0 -> 1034 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/scriptInQueue.gifbin0 -> 1971 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/scriptInQueue_sm.gifbin0 -> 1034 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/scriptOutput.gifbin0 -> 1723 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/scriptOutput_sm.gifbin0 -> 1036 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/scriptReady.gifbin0 -> 1988 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/scriptReady_sm.gifbin0 -> 1035 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/scriptRunning.gifbin0 -> 676 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/sel_abort_stop.gifbin0 -> 190 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/sel_batch_abort_stop.gifbin0 -> 908 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/sel_run_exec.gifbin0 -> 987 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/showerr_tsk.gifbin0 -> 1005 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/test.gifbin0 -> 208 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/tm.gifbin0 -> 70 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/tmError.gifbin0 -> 96 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/tracability.gifbin0 -> 871 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/unsel_abort_stop.gifbin0 -> 137 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/unsel_batch_abort_stop.gifbin0 -> 153 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/images/unsel_run_exec.gifbin0 -> 968 bytes
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/plugin.xml89
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/pom.xml35
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/ITestManagerFactory.java37
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/OteTestManagerImage.java78
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/actions/AddToTestManagerEditorAction.java56
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/actions/AddToTestManagerPopupAction.java108
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/actions/TMBugAction.java32
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/configuration/ConfigFactory.java62
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/configuration/ConfigFileHandler.java54
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/configuration/ILoadConfig.java19
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/configuration/ISaveConfig.java24
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/configuration/LoadConfigurationOperation.java64
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/configuration/LoadWidget.java111
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/configuration/SaveWidget.java140
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/configuration/pages/LoadScriptPage.java162
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/configuration/pages/SaveScriptPage.java95
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/configuration/pages/ScriptPageConstants.java25
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/connection/ScriptManager.java227
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/connection/ScriptQueue.java42
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/connection/StatusBoardRecieveEvent.done41
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/connection/StatusBoardRecieveEvent.java34
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/connection/TestManagerServiceStatusDataVisitor.java353
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/connection/TestManagerStatusListener.java96
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/core/ITestManagerModel.java27
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/core/PageManager.java171
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/core/TestManagerEditor.java593
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/core/TestManagerEditorContributor.java103
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/core/TestManagerEditorInput.java186
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/core/TestManagerEditorInputFactory.java34
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/core/TestManagerInput.java151
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/internal/ServiceUtility.java54
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/internal/TestManagerPlugin.java95
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/jobs/ScriptRunJob.java150
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/jobs/StoreOutfileJob.java170
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/models/FileModel.java195
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/models/OutputModel.java112
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/models/OutputModelJob.done70
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/models/OutputModelJob.java62
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/models/ScriptModel.java168
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/operations/AddIFileToTestManager.java95
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/pages/AdvancedPage.java168
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/pages/HostPage.java99
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/pages/ScriptPage.java476
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/pages/StatusWindowWidget.java137
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/pages/TestManagerPage.java89
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/pages/contributions/ScriptExecutionContribution.java119
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/pages/contributions/TestManagerStorageKeys.java29
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/pages/scriptTable/ITaskListViewer.java34
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/pages/scriptTable/ScriptTableViewer.java528
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/pages/scriptTable/ScriptTask.java181
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/pages/scriptTable/ScriptTaskList.java121
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/pages/scriptTable/xscript/XScriptTable.java90
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/pages/scriptTable/xscript/XScriptTableContentProvider.java75
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/pages/scriptTable/xscript/XScriptTableFactory.java72
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/pages/scriptTable/xscript/XScriptTableLabelProvider.java125
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/panels/FileOrDirectorySelectionPanel.java160
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/panels/LoggingPanel.java137
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/panels/ScriptExecutionOptionsPanel.java100
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/preferences/TestManagerPreferencePage.java101
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/preferences/environment/EnvironmentPageDataViewer.java136
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/preferences/environment/EnvironmentPageEventHandler.java124
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/preferences/environment/EnvironmentPreferenceNode.java55
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/preferences/environment/EnvironmentPreferencePage.java331
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/util/ClassServerInst.java209
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/util/Dialogs.java26
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/util/EnvVariableDetailsDialog.java167
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/util/EnvVariableDetailsDialogHelper.java57
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/util/EnvVariableDialog.java125
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/util/EnvVariableDialogHelper.java56
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/util/OTEBuilderResourceFinder.java42
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/util/PluginUtil.java67
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/util/TestManagerSelectDialog.java70
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/util/WidgetFactory.java63
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/wizards/TestManagerNewWizard.java167
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/wizards/TestManagerNewWizardPage.java212
-rw-r--r--org.eclipse.osee.ote.ui.test.manager/support/output.xsd191
-rw-r--r--org.eclipse.osee.ote.ui/.classpath7
-rw-r--r--org.eclipse.osee.ote.ui/.pmd925
-rw-r--r--org.eclipse.osee.ote.ui/.project28
-rw-r--r--org.eclipse.osee.ote.ui/META-INF/MANIFEST.MF46
-rw-r--r--org.eclipse.osee.ote.ui/build.properties8
-rw-r--r--org.eclipse.osee.ote.ui/images/checkout.gifbin0 -> 577 bytes
-rw-r--r--org.eclipse.osee.ote.ui/images/connected_sm.gifbin0 -> 1049 bytes
-rw-r--r--org.eclipse.osee.ote.ui/images/welcome_item3.gifbin0 -> 124 bytes
-rw-r--r--org.eclipse.osee.ote.ui/plugin.xml75
-rw-r--r--org.eclipse.osee.ote.ui/pom.xml35
-rw-r--r--org.eclipse.osee.ote.ui/schema/WorkspaceSetup.exsd107
-rw-r--r--org.eclipse.osee.ote.ui/src/org/eclipse/osee/ote/ui/IOteConsoleService.java34
-rw-r--r--org.eclipse.osee.ote.ui/src/org/eclipse/osee/ote/ui/OteConsole.java78
-rw-r--r--org.eclipse.osee.ote.ui/src/org/eclipse/osee/ote/ui/OteConsoleWrapper.java270
-rw-r--r--org.eclipse.osee.ote.ui/src/org/eclipse/osee/ote/ui/OteImage.java41
-rw-r--r--org.eclipse.osee.ote.ui/src/org/eclipse/osee/ote/ui/OteRemoteConsole.java83
-rw-r--r--org.eclipse.osee.ote.ui/src/org/eclipse/osee/ote/ui/ProjectNatureTest.java50
-rw-r--r--org.eclipse.osee.ote.ui/src/org/eclipse/osee/ote/ui/RemoteConsoleLauncher.java55
-rw-r--r--org.eclipse.osee.ote.ui/src/org/eclipse/osee/ote/ui/TestPerspective.java77
-rw-r--r--org.eclipse.osee.ote.ui/src/org/eclipse/osee/ote/ui/internal/OteConsolePageParticipant.java90
-rw-r--r--org.eclipse.osee.ote.ui/src/org/eclipse/osee/ote/ui/internal/OteConsoleServiceImpl.java72
-rw-r--r--org.eclipse.osee.ote.ui/src/org/eclipse/osee/ote/ui/internal/OteServerConsole.java86
-rw-r--r--org.eclipse.osee.ote.ui/src/org/eclipse/osee/ote/ui/internal/TestCoreGuiPlugin.java171
-rw-r--r--org.eclipse.osee.ote.ui/src/org/eclipse/osee/ote/ui/internal/prefs/OteConsolePreferences.java43
-rw-r--r--org.eclipse.osee.ote.ui/src/org/eclipse/osee/ote/ui/internal/prefs/OteConsolePrefsUtil.java58
-rw-r--r--org.eclipse.osee.ote.ui/src/org/eclipse/osee/ote/ui/internal/wizard/OteConsolePrefsWizPage.java177
-rw-r--r--org.eclipse.osee.ote.ui/src/org/eclipse/osee/ote/ui/internal/wizard/OteConsolePrefsWizard.java48
-rw-r--r--org.eclipse.osee.ote.ui/src/org/eclipse/osee/ote/ui/navigate/OteNavigateView.java126
-rw-r--r--org.eclipse.osee.ote.ui/src/org/eclipse/osee/ote/ui/navigate/OteNavigateViewItems.java100
-rw-r--r--org.eclipse.osee.ote.ui/src/org/eclipse/osee/ote/ui/navigate/OteNavigateViewerSorter.java34
-rw-r--r--org.eclipse.osee.ote.version.git.test/.classpath7
-rw-r--r--org.eclipse.osee.ote.version.git.test/.project28
-rw-r--r--org.eclipse.osee.ote.version.git.test/META-INF/MANIFEST.MF9
-rw-r--r--org.eclipse.osee.ote.version.git.test/build.properties4
-rw-r--r--org.eclipse.osee.ote.version.git.test/pom.xml35
-rw-r--r--org.eclipse.osee.ote.version.git.test/src/org/eclipse/osee/ote/version/git/GitVersionTest.java153
-rw-r--r--org.eclipse.osee.ote.version.git/.classpath7
-rw-r--r--org.eclipse.osee.ote.version.git/.project33
-rw-r--r--org.eclipse.osee.ote.version.git/META-INF/MANIFEST.MF18
-rw-r--r--org.eclipse.osee.ote.version.git/OSGI-INF/GITFileVersionInformationComponent.xml7
-rw-r--r--org.eclipse.osee.ote.version.git/build.properties5
-rw-r--r--org.eclipse.osee.ote.version.git/pom.xml35
-rw-r--r--org.eclipse.osee.ote.version.git/src/org/eclipse/osee/ote/version/git/GitFileVersion.java66
-rw-r--r--org.eclipse.osee.ote.version.git/src/org/eclipse/osee/ote/version/git/GitVersion.java84
-rw-r--r--org.eclipse.osee.ote.version.git/src/org/eclipse/osee/ote/version/git/GitVersionBase.java63
-rw-r--r--org.eclipse.osee.ote.version.git/src/org/eclipse/osee/ote/version/git/GitVersionProvider.java35
-rw-r--r--org.eclipse.osee.ote.version.git/src/org/eclipse/osee/ote/version/git/GitVersions.java83
-rw-r--r--org.eclipse.osee.ote.version.svn/.classpath7
-rw-r--r--org.eclipse.osee.ote.version.svn/.project33
-rw-r--r--org.eclipse.osee.ote.version.svn/META-INF/MANIFEST.MF19
-rw-r--r--org.eclipse.osee.ote.version.svn/OSGI-INF/svnFileVersionInformationComponent.xml8
-rw-r--r--org.eclipse.osee.ote.version.svn/build.properties6
-rw-r--r--org.eclipse.osee.ote.version.svn/pom.xml35
-rw-r--r--org.eclipse.osee.ote.version.svn/src/org/eclipse/osee/ote/version/svn/ScriptToProject.java82
-rw-r--r--org.eclipse.osee.ote.version.svn/src/org/eclipse/osee/ote/version/svn/SvnFileVersion.java65
-rw-r--r--org.eclipse.osee.ote.version.svn/src/org/eclipse/osee/ote/version/svn/SvnVersionProvider.java66
-rw-r--r--org.eclipse.osee.ote.version/.classpath7
-rw-r--r--org.eclipse.osee.ote.version/.project33
-rw-r--r--org.eclipse.osee.ote.version/META-INF/MANIFEST.MF10
-rw-r--r--org.eclipse.osee.ote.version/OSGI-INF/FileVersionInformationComponent.xml8
-rw-r--r--org.eclipse.osee.ote.version/build.properties5
-rw-r--r--org.eclipse.osee.ote.version/pom.xml35
-rw-r--r--org.eclipse.osee.ote.version/src/org/eclipse/osee/ote/version/FileVersion.java20
-rw-r--r--org.eclipse.osee.ote.version/src/org/eclipse/osee/ote/version/FileVersionInformation.java21
-rw-r--r--org.eclipse.osee.ote.version/src/org/eclipse/osee/ote/version/FileVersionInformationProvider.java19
-rw-r--r--org.eclipse.osee.ote.version/src/org/eclipse/osee/ote/version/internal/DefaultFileVersion.java67
-rw-r--r--org.eclipse.osee.ote.version/src/org/eclipse/osee/ote/version/internal/FileVersionInformationImpl.java56
-rw-r--r--org.eclipse.ote.bytemessage.test/.classpath2
-rw-r--r--org.eclipse.ote.bytemessage.test/.settings/org.eclipse.jdt.core.prefs6
-rw-r--r--org.eclipse.ote.bytemessage/.classpath2
-rw-r--r--org.eclipse.ote.bytemessage/.settings/org.eclipse.jdt.core.prefs6
-rw-r--r--org.eclipse.ote.io.test/.settings/org.eclipse.jdt.core.prefs6
-rw-r--r--org.eclipse.ote.io/.classpath2
-rw-r--r--org.eclipse.ote.io/.settings/org.eclipse.jdt.core.prefs6
-rw-r--r--org.eclipse.ote.mavenbuild/pom.xml8
-rw-r--r--org.eclipse.ote.message.lookup/.settings/org.eclipse.jdt.core.prefs6
-rw-r--r--org.eclipse.ote.services.core/.settings/org.eclipse.jdt.core.prefs6
-rw-r--r--org.eclipse.ote.statemachine.test/.settings/org.eclipse.jdt.core.prefs6
-rw-r--r--org.eclipse.ote.statemachine/.settings/org.eclipse.jdt.core.prefs6
-rw-r--r--org.eclipse.ote.ui.message.search/.settings/org.eclipse.jdt.core.prefs6
-rw-r--r--org.eclipse.ote.util/.settings/org.eclipse.jdt.core.prefs6
1423 files changed, 109296 insertions, 37 deletions
diff --git a/org.eclipse.osee.client.ote.feature/.pmd b/org.eclipse.osee.client.ote.feature/.pmd
new file mode 100644
index 000000000..c7b0a9fb3
--- /dev/null
+++ b/org.eclipse.osee.client.ote.feature/.pmd
@@ -0,0 +1,925 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<pmd>
+ <useProjectRuleSet>false</useProjectRuleSet>
+ <ruleSetFile>.ruleset</ruleSetFile>
+ <rules>
+ <rule>
+ <name>LooseCoupling</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CloneMethodMustImplementCloneable</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedImports</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SignatureDeclareThrowsException</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>IfStmtsMustUseBraces</name>
+ <ruleset>Braces Rules</ruleset>
+ </rule>
+ <rule>
+ <name>WhileLoopsMustUseBraces</name>
+ <ruleset>Braces Rules</ruleset>
+ </rule>
+ <rule>
+ <name>IfElseStmtsMustUseBraces</name>
+ <ruleset>Braces Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ForLoopsMustUseBraces</name>
+ <ruleset>Braces Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseSingleton</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SimplifyBooleanReturns</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SimplifyBooleanExpressions</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SwitchStmtsShouldHaveDefault</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidDeeplyNestedIfStmts</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidReassigningParameters</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SwitchDensity</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ConstructorCallsOverridableMethod</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AccessorClassGeneration</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>FinalFieldCouldBeStatic</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CloseResource</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NonStaticInitializer</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DefaultLabelNotLastInSwitchStmt</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NonCaseLabelInSwitchStatement</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>OptimizableToArrayCall</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>BadComparison</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EqualsNull</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ConfusingTernary</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>InstantiationToGetClass</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>IdempotentOperations</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SimpleDateFormatNeedsLocale</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ImmutableField</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseLocaleWithCaseConversions</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidProtectedFieldInFinalClass</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AssignmentToNonFinalStatic</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MissingStaticMethodInNonInstantiatableClass</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidSynchronizedAtMethodLevel</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MissingBreakInSwitch</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseNotifyAllInsteadOfNotify</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidInstanceofChecksInCatchClause</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AbstractClassWithoutAbstractMethod</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SimplifyConditional</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CompareObjectsWithEquals</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>PositionLiteralsFirstInComparisons</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryLocalBeforeReturn</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NonThreadSafeSingleton</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UncommentedEmptyMethod</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UncommentedEmptyConstructor</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidConstantsInterface</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnsynchronizedStaticDateFormatter</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>PreserveStackTrace</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseCollectionIsEmpty</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ClassWithOnlyPrivateConstructorsShouldBeFinal</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyMethodInAbstractClassShouldBeAbstract</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SingularField</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ReturnEmptyArrayRatherThanNull</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AbstractClassWithoutAnyMethod</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>TooFewBranchesForASwitchStatement</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidCatchingThrowable</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SignatureDeclareThrowsException</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ExceptionAsFlowControl</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidCatchingNPE</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidThrowingRawExceptionTypes</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidThrowingNullPointerException</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidRethrowingException</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DoNotExtendJavaLangError</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DoNotThrowExceptionInFinally</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidThrowingNewInstanceOfSameException</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedPrivateField</name>
+ <ruleset>Unused Code Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedLocalVariable</name>
+ <ruleset>Unused Code Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedPrivateMethod</name>
+ <ruleset>Unused Code Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedFormalParameter</name>
+ <ruleset>Unused Code Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MoreThanOneLogger</name>
+ <ruleset>Java Logging Rules</ruleset>
+ </rule>
+ <rule>
+ <name>LoggerIsNotStaticFinal</name>
+ <ruleset>Java Logging Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SystemPrintln</name>
+ <ruleset>Java Logging Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidPrintStackTrace</name>
+ <ruleset>Java Logging Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidDuplicateLiterals</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>StringInstantiation</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>StringToString</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>InefficientStringBuffering</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryCaseChange</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseStringBufferLength</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AppendCharacterWithChar</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ConsecutiveLiteralAppends</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseIndexOfChar</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>InefficientEmptyStringCheck</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>InsufficientStringBufferDeclaration</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UselessStringValueOf</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>StringBufferInstantiationWithChar</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseEqualsToCompareStrings</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidStringBufferField</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ReplaceVectorWithList</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ReplaceHashtableWithMap</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ReplaceEnumerationWithIterator</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidEnumAsIdentifier</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidAssertAsIdentifier</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>IntegerInstantiation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ByteInstantiation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ShortInstantiation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>LongInstantiation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnit4TestShouldUseBeforeAnnotation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnit4TestShouldUseAfterAnnotation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnit4TestShouldUseTestAnnotation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnit4SuitesShouldUseSuiteAnnotation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnitUseExpected</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseProperClassLoader</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MDBAndSessionBeanNamingConvention</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>RemoteSessionInterfaceNamingConvention</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>LocalInterfaceSessionNamingConvention</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>LocalHomeNamingConvention</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>RemoteInterfaceNamingConvention</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DoNotCallSystemExit</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>StaticEJBFieldShouldBeFinal</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DoNotUseThreads</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidInstantiatingObjectsInLoops</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseArrayListInsteadOfVector</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SimplifyStartsWith</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseStringBufferForStringAppends</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseArraysAsList</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidArrayLoops</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryWrapperObjectCreation</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AddEmptyString</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyCatchBlock</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyIfStmt</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyWhileStmt</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyTryBlock</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyFinallyBlock</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptySwitchStatements</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JumbledIncrementer</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ForLoopShouldBeWhileLoop</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryConversionTemporary</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>OverrideBothEqualsAndHashcode</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DoubleCheckedLocking</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ReturnFromFinallyBlock</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptySynchronizedBlock</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryReturn</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyStaticInitializer</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnconditionalIfStatement</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyStatementNotInLoop</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>BooleanInstantiation</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryFinalModifier</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CollapsibleIfStatements</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UselessOverridingMethod</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ClassCastExceptionWithToArray</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidDecimalLiteralsInBigDecimalConstructor</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UselessOperationOnImmutable</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MisplacedNullCheck</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedNullCheckInEquals</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidThreadGroup</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>BrokenNullCheck</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>BigIntegerInstantiation</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidUsingOctalValues</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidUsingHardCodedIP</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CheckResultSet</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidMultipleUnaryOperators</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyInitializer</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MethodReturnsInternalArray</name>
+ <ruleset>Security Code Guidelines</ruleset>
+ </rule>
+ <rule>
+ <name>ArrayIsStoredDirectly</name>
+ <ruleset>Security Code Guidelines</ruleset>
+ </rule>
+ <rule>
+ <name>CouplingBetweenObjects</name>
+ <ruleset>Coupling Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ExcessiveImports</name>
+ <ruleset>Coupling Rules</ruleset>
+ </rule>
+ <rule>
+ <name>LooseCoupling</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DuplicateImports</name>
+ <ruleset>Import Statement Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DontImportJavaLang</name>
+ <ruleset>Import Statement Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedImports</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ImportFromSamePackage</name>
+ <ruleset>Import Statement Rules</ruleset>
+ </rule>
+ <rule>
+ <name>TooManyStaticImports</name>
+ <ruleset>Import Statement Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnitStaticSuite</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnitSpelling</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnitAssertionsShouldIncludeMessage</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnitTestsShouldIncludeAssert</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>TestClassWithoutTestCases</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryBooleanAssertion</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseAssertEqualsInsteadOfAssertTrue</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseAssertSameInsteadOfAssertTrue</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseAssertNullInsteadOfAssertTrue</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SimplifyBooleanAssertion</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryConstructor</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NullAssignment</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedModifier</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AssignmentInOperand</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AtLeastOneConstructor</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DontImportSun</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SuspiciousOctalEscape</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CallSuperInConstructor</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryParentheses</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DefaultPackage</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>BooleanInversion</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DataflowAnomalyAnalysis</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidFinalLocalVariable</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidUsingShortType</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidUsingVolatile</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidUsingNativeCode</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidAccessibilityAlteration</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DoNotCallGarbageCollectionExplicitly</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MethodNamingConventions</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ClassNamingConventions</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AbstractNaming</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidDollarSigns</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MethodWithSameNameAsEnclosingClass</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SuspiciousHashcodeMethodName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SuspiciousConstantFieldName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SuspiciousEqualsMethodName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidFieldNameMatchingTypeName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidFieldNameMatchingMethodName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NoPackage</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>PackageCase</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MisleadingVariableName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>BooleanGetMethodName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NPathComplexity</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ExcessiveMethodLength</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ExcessiveParameterList</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ExcessiveClassLength</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CyclomaticComplexity</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ExcessivePublicCount</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>TooManyFields</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NcssMethodCount</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NcssTypeCount</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NcssConstructorCount</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>TooManyMethods</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyFinalizer</name>
+ <ruleset>Finalizer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>FinalizeOnlyCallsSuperFinalize</name>
+ <ruleset>Finalizer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>FinalizeOverloaded</name>
+ <ruleset>Finalizer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>FinalizeDoesNotCallSuperFinalize</name>
+ <ruleset>Finalizer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>FinalizeShouldBeProtected</name>
+ <ruleset>Finalizer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidCallingFinalize</name>
+ <ruleset>Finalizer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseCorrectExceptionLogging</name>
+ <ruleset>Jakarta Commons Logging Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ProperLogger</name>
+ <ruleset>Jakarta Commons Logging Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MissingSerialVersionUID</name>
+ <ruleset>JavaBean Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ProperCloneImplementation</name>
+ <ruleset>Clone Implementation Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CloneThrowsCloneNotSupportedException</name>
+ <ruleset>Clone Implementation Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CloneMethodMustImplementCloneable</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ </rules>
+ <includeDerivedFiles>false</includeDerivedFiles>
+ <violationsAsErrors>true</violationsAsErrors>
+</pmd>
diff --git a/org.eclipse.osee.client.ote.feature/.project b/org.eclipse.osee.client.ote.feature/.project
new file mode 100644
index 000000000..08dc78ffe
--- /dev/null
+++ b/org.eclipse.osee.client.ote.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.osee.client.ote.feature</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.pde.FeatureBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.FeatureNature</nature>
+ </natures>
+</projectDescription>
diff --git a/org.eclipse.osee.client.ote.feature/build.properties b/org.eclipse.osee.client.ote.feature/build.properties
new file mode 100644
index 000000000..f55cce2d2
--- /dev/null
+++ b/org.eclipse.osee.client.ote.feature/build.properties
@@ -0,0 +1,5 @@
+bin.includes = feature.xml,\
+ epl-v10.html,\
+ feature.properties,\
+ license.html
+generate.feature@org.eclipse.osee.client.ote.feature.source = org.eclipse.osee.client.ote.feature \ No newline at end of file
diff --git a/org.eclipse.osee.client.ote.feature/epl-v10.html b/org.eclipse.osee.client.ote.feature/epl-v10.html
new file mode 100644
index 000000000..ed4b19665
--- /dev/null
+++ b/org.eclipse.osee.client.ote.feature/epl-v10.html
@@ -0,0 +1,328 @@
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 9">
+<meta name=Originator content="Microsoft Word 9">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+ <o:Revision>2</o:Revision>
+ <o:TotalTime>3</o:TotalTime>
+ <o:Created>2004-03-05T23:03:00Z</o:Created>
+ <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
+ <o:Pages>4</o:Pages>
+ <o:Words>1626</o:Words>
+ <o:Characters>9270</o:Characters>
+ <o:Lines>77</o:Lines>
+ <o:Paragraphs>18</o:Paragraphs>
+ <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
+ <o:Version>9.4402</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+ <w:TrackRevisions/>
+ </w:WordDocument>
+</xml><![endif]-->
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+ {font-family:Tahoma;
+ panose-1:2 11 6 4 3 5 4 4 2 4;
+ mso-font-charset:0;
+ mso-generic-font-family:swiss;
+ mso-font-pitch:variable;
+ mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+ {mso-style-parent:"";
+ margin:0in;
+ margin-bottom:.0001pt;
+ mso-pagination:widow-orphan;
+ font-size:12.0pt;
+ font-family:"Times New Roman";
+ mso-fareast-font-family:"Times New Roman";}
+p
+ {margin-right:0in;
+ mso-margin-top-alt:auto;
+ mso-margin-bottom-alt:auto;
+ margin-left:0in;
+ mso-pagination:widow-orphan;
+ font-size:12.0pt;
+ font-family:"Times New Roman";
+ mso-fareast-font-family:"Times New Roman";}
+p.BalloonText, li.BalloonText, div.BalloonText
+ {mso-style-name:"Balloon Text";
+ margin:0in;
+ margin-bottom:.0001pt;
+ mso-pagination:widow-orphan;
+ font-size:8.0pt;
+ font-family:Tahoma;
+ mso-fareast-font-family:"Times New Roman";}
+@page Section1
+ {size:8.5in 11.0in;
+ margin:1.0in 1.25in 1.0in 1.25in;
+ mso-header-margin:.5in;
+ mso-footer-margin:.5in;
+ mso-paper-source:0;}
+div.Section1
+ {page:Section1;}
+-->
+</style>
+</head>
+
+<body lang=EN-US style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), 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 OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
+
+</div>
+
+</body>
+
+</html> \ No newline at end of file
diff --git a/org.eclipse.osee.client.ote.feature/feature.properties b/org.eclipse.osee.client.ote.feature/feature.properties
new file mode 100644
index 000000000..aea943865
--- /dev/null
+++ b/org.eclipse.osee.client.ote.feature/feature.properties
@@ -0,0 +1,141 @@
+###############################################################################
+# Copyright (c) 2004, 2007 Boeing 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
+#
+# Contributors:
+# Boeing - initial API and implementation
+###############################################################################
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=Eclipse OSEE Test Environment Feature (Incubation)
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse.org
+
+# "description" property - description of the feature
+description=Open System Engineering Environment - Test Environment
+
+# "copyright" property - text of the "Feature Update Copyright"
+copyright=\
+Copyright (c) 2004, 2009 Boeing and others.\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html\n\
+\n\
+Contributors:\n\
+ Boeing - initial API and implementation\n
+################ end of copyright property ####################################
+
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+ECLIPSE FOUNDATION SOFTWARE USER AGREEMENT\n\
+March 17, 2005\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the Eclipse Foundation\n\
+is provided to you under the terms and conditions of the Eclipse Public\n\
+License Version 1.0 ("EPL"). A copy of the EPL is provided with this\n\
+Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse.org CVS\n\
+repository ("Repository") in CVS modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+ - Content may be structured and packaged into modules to facilitate delivering,\n\
+ extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+ plug-in fragments ("Fragments"), and features ("Features").\n\
+ - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java? ARchive)\n\
+ in a directory named "plugins".\n\
+ - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+ Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+ Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+ numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+ - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+ named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+Features may also include other Features ("Included Features"). Files named\n\
+"feature.xml" may contain a list of the names and version numbers of\n\
+Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+ - The top-level (root) directory\n\
+ - Plug-in and Fragment directories\n\
+ - Inside Plug-ins and Fragments packaged as JARs\n\
+ - Sub-directories of the directory named "src" of certain Plug-ins\n\
+ - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Eclipse Update Manager, you must agree to a license ("Feature Update\n\
+License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties". Such Abouts,\n\
+Feature Licenses and Feature Update Licenses contain the terms and\n\
+conditions (or references to such terms and conditions) that govern your\n\
+use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+ - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+ - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+ - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+ - IBM Public License 1.0 (available at http://oss.software.ibm.com/developerworks/opensource/license10.html)\n\
+ - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
+ - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use,\n\
+and re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/org.eclipse.osee.client.ote.feature/feature.xml b/org.eclipse.osee.client.ote.feature/feature.xml
new file mode 100644
index 000000000..44cb6edad
--- /dev/null
+++ b/org.eclipse.osee.client.ote.feature/feature.xml
@@ -0,0 +1,240 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+ id="org.eclipse.osee.client.ote.feature"
+ label="%featureName"
+ version="0.25.3.qualifier"
+ provider-name="%providerName">
+
+ <description>
+ %description
+ </description>
+
+ <copyright>
+ %copyright
+ </copyright>
+
+ <license url="%licenseURL">
+ %license
+ </license>
+
+ <requires>
+ <import plugin="org.eclipse.osee.framework.jdk.core"/>
+ <import plugin="org.eclipse.core.runtime"/>
+ <import plugin="org.apache.commons.net"/>
+ <import plugin="org.eclipse.osee.framework.logging"/>
+ <import plugin="net.jini" version="2.1.0" match="greaterOrEqual"/>
+ <import plugin="org.eclipse.osgi"/>
+ <import plugin="org.apache.xerces"/>
+ <import plugin="org.eclipse.osee.framework.core"/>
+ <import plugin="org.eclipse.osee.framework.plugin.core"/>
+ <import plugin="org.eclipse.osgi.services"/>
+ <import plugin="org.eclipse.ui" version="3.5.1" match="greaterOrEqual"/>
+ <import plugin="org.eclipse.core.resources"/>
+ <import plugin="org.eclipse.core.jobs"/>
+ <import plugin="org.eclipse.jface"/>
+ <import plugin="org.eclipse.osee.framework.ui.plugin"/>
+ <import plugin="org.eclipse.osee.framework.ui.swt"/>
+ <import plugin="org.eclipse.swt"/>
+ <import plugin="org.eclipse.ui.editors"/>
+ <import plugin="org.eclipse.ui.ide"/>
+ <import plugin="org.eclipse.ui.workbench.texteditor"/>
+ <import plugin="org.eclipse.jface.text"/>
+ <import plugin="org.eclipse.nebula.widgets.xviewer"/>
+ <import plugin="org.eclipse.osee.framework.ui.ws"/>
+ <import plugin="org.eclipse.jdt.core"/>
+ <import plugin="org.eclipse.osee.framework.jini"/>
+ <import plugin="org.eclipse.jdt.ui"/>
+ <import plugin="org.eclipse.ui.workbench"/>
+ <import plugin="jms.libraries"/>
+ <import plugin="org.apache.felix.gogo.runtime"/>
+ <import plugin="org.eclipse.jgit"/>
+ <import plugin="org.eclipse.team.svn.core"/>
+ <import plugin="javax.servlet"/>
+ <import plugin="javax.ws.rs" version="2.0.0" match="greaterOrEqual"/>
+ <import plugin="org.apache.commons.lang"/>
+ <import plugin="org.eclipse.core.net"/>
+ <import plugin="org.apache.cxf.core"/>
+ <import plugin="org.apache.cxf.jaxrs.client"/>
+ <import plugin="org.apache.cxf.jaxrs.frontend"/>
+ <import plugin="org.apache.cxf.jaxrs.model.wadl"/>
+ <import plugin="org.apache.cxf.jaxrs.provider"/>
+ <import plugin="org.apache.cxf.rs.security.oauth2"/>
+ <import plugin="org.apache.cxf.transport.http"/>
+ <import plugin="org.apache.aries.blueprint"/>
+ <import plugin="org.apache.aries.blueprint.annotation"/>
+ <import plugin="org.apache.aries.proxy"/>
+ <import plugin="org.apache.aries.quiesce"/>
+ <import plugin="org.apache.aries.util"/>
+ <import plugin="org.osgi.service.blueprint"/>
+ <import plugin="javax.wsdl"/>
+ <import plugin="javax.validation" version="1.1.0" match="greaterOrEqual"/>
+ <import plugin="javax.annotation" version="1.2.0" match="greaterOrEqual"/>
+ <import plugin="org.codehaus.jackson.core"/>
+ <import plugin="org.codehaus.jackson.jaxrs"/>
+ <import plugin="org.codehaus.jackson.mapper"/>
+ <import plugin="org.codehaus.jackson.xc"/>
+ <import plugin="com.sun.xml.fastinfoset"/>
+ </requires>
+
+ <plugin
+ id="org.eclipse.osee.ote.core"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.osee.ote.messaging.dds"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.osee.ote.ui"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.osee.ote.ui.test.manager"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.osee.ote.ui.markers"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.osee.ote.client"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.osee.ote.connection.jini"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.osee.ote.connection.service"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.osee.ote.client.msg"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.osee.ote.runtimeManager"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.osee.framework.ui.workspacebundleloader"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.osee.ote.server"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.osee.ote.jms"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.osee.ote.version"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.osee.ote.version.git"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.osee.ote.version.svn"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.osee.ote.rest.client"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.osee.ote.rest.model"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.osee.ote.master.rest.client"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.osee.ote.master.rest.model"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.osee.ote.ui.builder"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.osee.ote.io"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.osee.ote.properties"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+</feature>
diff --git a/org.eclipse.osee.client.ote.feature/license.html b/org.eclipse.osee.client.ote.feature/license.html
new file mode 100644
index 000000000..c6af966b6
--- /dev/null
+++ b/org.eclipse.osee.client.ote.feature/license.html
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<title>Eclipse.org Software User Agreement</title>
+</head>
+
+<body lang="EN-US" link=blue vlink=purple>
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>March 17, 2005</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+ (COLLECTIVELY &quot;CONTENT&quot;). USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+ CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+ OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+ NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+ CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+ (&quot;EPL&quot;). A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+ For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse.org CVS repository (&quot;Repository&quot;) in CVS
+ modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+ <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content. Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+ <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+ <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material. Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;. Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+ and/or Fragments associated with that Feature.</li>
+ <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;). Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+ <li>The top-level (root) directory</li>
+ <li>Plug-in and Fragment directories</li>
+ <li>Inside Plug-ins and Fragments packaged as JARs</li>
+ <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+ <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Eclipse Update Manager, you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process. If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them. Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS. SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+ <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+ <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+ <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+ <li>IBM Public License 1.0 (available at <a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>)</li>
+ <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+ <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+ another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+ possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<small>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.</small>
+</body>
+</html>
diff --git a/org.eclipse.osee.client.ote.feature/pom.xml b/org.eclipse.osee.client.ote.feature/pom.xml
new file mode 100644
index 000000000..9c66205be
--- /dev/null
+++ b/org.eclipse.osee.client.ote.feature/pom.xml
@@ -0,0 +1,17 @@
+<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.eclipse.osee</groupId>
+ <artifactId>org.eclipse.osee.ote.parent</artifactId>
+ <version>0.25.3-SNAPSHOT</version>
+ <relativePath>../org.eclipse.osee.ote.parent</relativePath>
+ </parent>
+
+ <artifactId>org.eclipse.osee.client.ote.feature</artifactId>
+ <packaging>eclipse-feature</packaging>
+ <name>OSEE OTE Feature (Incubation)</name>
+
+</project> \ No newline at end of file
diff --git a/org.eclipse.osee.client.ote.feature/sourceTemplateFeature/feature.properties b/org.eclipse.osee.client.ote.feature/sourceTemplateFeature/feature.properties
new file mode 100644
index 000000000..f6cd6d473
--- /dev/null
+++ b/org.eclipse.osee.client.ote.feature/sourceTemplateFeature/feature.properties
@@ -0,0 +1,144 @@
+###############################################################################
+# Copyright (c) 2004, 2007 Boeing 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
+#
+# Contributors:
+# Boeing - initial API and implementation
+###############################################################################
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=Eclipse OSEE Test Environment Feature Source (Incubation)
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse.org
+
+# "updateSiteName" property - label for the update site
+updateSiteName=OSEE Update Site
+
+# "description" property - description of the feature
+description=Open System Engineering Environment
+
+# "copyright" property - text of the "Feature Update Copyright"
+copyright=\
+Copyright (c) 2004, 2009 Boeing and others.\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html\n\
+\n\
+Contributors:\n\
+ Boeing - initial API and implementation\n
+################ end of copyright property ####################################
+
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+ECLIPSE FOUNDATION SOFTWARE USER AGREEMENT\n\
+March 17, 2005\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the Eclipse Foundation\n\
+is provided to you under the terms and conditions of the Eclipse Public\n\
+License Version 1.0 ("EPL"). A copy of the EPL is provided with this\n\
+Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse.org CVS\n\
+repository ("Repository") in CVS modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+ - Content may be structured and packaged into modules to facilitate delivering,\n\
+ extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+ plug-in fragments ("Fragments"), and features ("Features").\n\
+ - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java? ARchive)\n\
+ in a directory named "plugins".\n\
+ - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+ Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+ Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+ numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+ - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+ named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+Features may also include other Features ("Included Features"). Files named\n\
+"feature.xml" may contain a list of the names and version numbers of\n\
+Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+ - The top-level (root) directory\n\
+ - Plug-in and Fragment directories\n\
+ - Inside Plug-ins and Fragments packaged as JARs\n\
+ - Sub-directories of the directory named "src" of certain Plug-ins\n\
+ - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Eclipse Update Manager, you must agree to a license ("Feature Update\n\
+License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties". Such Abouts,\n\
+Feature Licenses and Feature Update Licenses contain the terms and\n\
+conditions (or references to such terms and conditions) that govern your\n\
+use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+ - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+ - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+ - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+ - IBM Public License 1.0 (available at http://oss.software.ibm.com/developerworks/opensource/license10.html)\n\
+ - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
+ - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use,\n\
+and re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/org.eclipse.osee.client.ote.feature/sourceTemplateFeature/license.html b/org.eclipse.osee.client.ote.feature/sourceTemplateFeature/license.html
new file mode 100644
index 000000000..c6af966b6
--- /dev/null
+++ b/org.eclipse.osee.client.ote.feature/sourceTemplateFeature/license.html
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<title>Eclipse.org Software User Agreement</title>
+</head>
+
+<body lang="EN-US" link=blue vlink=purple>
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>March 17, 2005</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+ (COLLECTIVELY &quot;CONTENT&quot;). USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+ CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+ OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+ NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+ CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+ (&quot;EPL&quot;). A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+ For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse.org CVS repository (&quot;Repository&quot;) in CVS
+ modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+ <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content. Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+ <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+ <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material. Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;. Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+ and/or Fragments associated with that Feature.</li>
+ <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;). Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+ <li>The top-level (root) directory</li>
+ <li>Plug-in and Fragment directories</li>
+ <li>Inside Plug-ins and Fragments packaged as JARs</li>
+ <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+ <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Eclipse Update Manager, you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process. If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them. Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS. SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+ <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+ <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+ <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+ <li>IBM Public License 1.0 (available at <a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>)</li>
+ <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+ <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+ another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+ possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<small>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.</small>
+</body>
+</html>
diff --git a/org.eclipse.osee.framework.ui.workspacebundleloader.test/.project b/org.eclipse.osee.framework.ui.workspacebundleloader.test/.project
new file mode 100644
index 000000000..7fc7fc7ad
--- /dev/null
+++ b/org.eclipse.osee.framework.ui.workspacebundleloader.test/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.osee.framework.ui.workspacebundleloader.test</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/org.eclipse.osee.framework.ui.workspacebundleloader/.classpath b/org.eclipse.osee.framework.ui.workspacebundleloader/.classpath
new file mode 100644
index 000000000..1fa3e6803
--- /dev/null
+++ b/org.eclipse.osee.framework.ui.workspacebundleloader/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.osee.framework.ui.workspacebundleloader/.pmd b/org.eclipse.osee.framework.ui.workspacebundleloader/.pmd
new file mode 100644
index 000000000..c7b0a9fb3
--- /dev/null
+++ b/org.eclipse.osee.framework.ui.workspacebundleloader/.pmd
@@ -0,0 +1,925 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<pmd>
+ <useProjectRuleSet>false</useProjectRuleSet>
+ <ruleSetFile>.ruleset</ruleSetFile>
+ <rules>
+ <rule>
+ <name>LooseCoupling</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CloneMethodMustImplementCloneable</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedImports</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SignatureDeclareThrowsException</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>IfStmtsMustUseBraces</name>
+ <ruleset>Braces Rules</ruleset>
+ </rule>
+ <rule>
+ <name>WhileLoopsMustUseBraces</name>
+ <ruleset>Braces Rules</ruleset>
+ </rule>
+ <rule>
+ <name>IfElseStmtsMustUseBraces</name>
+ <ruleset>Braces Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ForLoopsMustUseBraces</name>
+ <ruleset>Braces Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseSingleton</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SimplifyBooleanReturns</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SimplifyBooleanExpressions</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SwitchStmtsShouldHaveDefault</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidDeeplyNestedIfStmts</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidReassigningParameters</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SwitchDensity</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ConstructorCallsOverridableMethod</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AccessorClassGeneration</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>FinalFieldCouldBeStatic</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CloseResource</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NonStaticInitializer</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DefaultLabelNotLastInSwitchStmt</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NonCaseLabelInSwitchStatement</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>OptimizableToArrayCall</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>BadComparison</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EqualsNull</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ConfusingTernary</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>InstantiationToGetClass</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>IdempotentOperations</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SimpleDateFormatNeedsLocale</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ImmutableField</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseLocaleWithCaseConversions</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidProtectedFieldInFinalClass</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AssignmentToNonFinalStatic</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MissingStaticMethodInNonInstantiatableClass</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidSynchronizedAtMethodLevel</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MissingBreakInSwitch</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseNotifyAllInsteadOfNotify</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidInstanceofChecksInCatchClause</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AbstractClassWithoutAbstractMethod</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SimplifyConditional</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CompareObjectsWithEquals</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>PositionLiteralsFirstInComparisons</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryLocalBeforeReturn</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NonThreadSafeSingleton</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UncommentedEmptyMethod</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UncommentedEmptyConstructor</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidConstantsInterface</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnsynchronizedStaticDateFormatter</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>PreserveStackTrace</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseCollectionIsEmpty</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ClassWithOnlyPrivateConstructorsShouldBeFinal</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyMethodInAbstractClassShouldBeAbstract</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SingularField</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ReturnEmptyArrayRatherThanNull</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AbstractClassWithoutAnyMethod</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>TooFewBranchesForASwitchStatement</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidCatchingThrowable</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SignatureDeclareThrowsException</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ExceptionAsFlowControl</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidCatchingNPE</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidThrowingRawExceptionTypes</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidThrowingNullPointerException</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidRethrowingException</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DoNotExtendJavaLangError</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DoNotThrowExceptionInFinally</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidThrowingNewInstanceOfSameException</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedPrivateField</name>
+ <ruleset>Unused Code Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedLocalVariable</name>
+ <ruleset>Unused Code Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedPrivateMethod</name>
+ <ruleset>Unused Code Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedFormalParameter</name>
+ <ruleset>Unused Code Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MoreThanOneLogger</name>
+ <ruleset>Java Logging Rules</ruleset>
+ </rule>
+ <rule>
+ <name>LoggerIsNotStaticFinal</name>
+ <ruleset>Java Logging Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SystemPrintln</name>
+ <ruleset>Java Logging Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidPrintStackTrace</name>
+ <ruleset>Java Logging Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidDuplicateLiterals</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>StringInstantiation</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>StringToString</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>InefficientStringBuffering</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryCaseChange</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseStringBufferLength</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AppendCharacterWithChar</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ConsecutiveLiteralAppends</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseIndexOfChar</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>InefficientEmptyStringCheck</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>InsufficientStringBufferDeclaration</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UselessStringValueOf</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>StringBufferInstantiationWithChar</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseEqualsToCompareStrings</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidStringBufferField</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ReplaceVectorWithList</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ReplaceHashtableWithMap</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ReplaceEnumerationWithIterator</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidEnumAsIdentifier</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidAssertAsIdentifier</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>IntegerInstantiation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ByteInstantiation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ShortInstantiation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>LongInstantiation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnit4TestShouldUseBeforeAnnotation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnit4TestShouldUseAfterAnnotation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnit4TestShouldUseTestAnnotation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnit4SuitesShouldUseSuiteAnnotation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnitUseExpected</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseProperClassLoader</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MDBAndSessionBeanNamingConvention</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>RemoteSessionInterfaceNamingConvention</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>LocalInterfaceSessionNamingConvention</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>LocalHomeNamingConvention</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>RemoteInterfaceNamingConvention</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DoNotCallSystemExit</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>StaticEJBFieldShouldBeFinal</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DoNotUseThreads</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidInstantiatingObjectsInLoops</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseArrayListInsteadOfVector</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SimplifyStartsWith</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseStringBufferForStringAppends</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseArraysAsList</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidArrayLoops</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryWrapperObjectCreation</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AddEmptyString</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyCatchBlock</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyIfStmt</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyWhileStmt</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyTryBlock</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyFinallyBlock</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptySwitchStatements</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JumbledIncrementer</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ForLoopShouldBeWhileLoop</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryConversionTemporary</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>OverrideBothEqualsAndHashcode</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DoubleCheckedLocking</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ReturnFromFinallyBlock</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptySynchronizedBlock</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryReturn</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyStaticInitializer</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnconditionalIfStatement</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyStatementNotInLoop</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>BooleanInstantiation</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryFinalModifier</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CollapsibleIfStatements</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UselessOverridingMethod</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ClassCastExceptionWithToArray</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidDecimalLiteralsInBigDecimalConstructor</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UselessOperationOnImmutable</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MisplacedNullCheck</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedNullCheckInEquals</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidThreadGroup</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>BrokenNullCheck</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>BigIntegerInstantiation</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidUsingOctalValues</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidUsingHardCodedIP</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CheckResultSet</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidMultipleUnaryOperators</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyInitializer</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MethodReturnsInternalArray</name>
+ <ruleset>Security Code Guidelines</ruleset>
+ </rule>
+ <rule>
+ <name>ArrayIsStoredDirectly</name>
+ <ruleset>Security Code Guidelines</ruleset>
+ </rule>
+ <rule>
+ <name>CouplingBetweenObjects</name>
+ <ruleset>Coupling Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ExcessiveImports</name>
+ <ruleset>Coupling Rules</ruleset>
+ </rule>
+ <rule>
+ <name>LooseCoupling</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DuplicateImports</name>
+ <ruleset>Import Statement Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DontImportJavaLang</name>
+ <ruleset>Import Statement Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedImports</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ImportFromSamePackage</name>
+ <ruleset>Import Statement Rules</ruleset>
+ </rule>
+ <rule>
+ <name>TooManyStaticImports</name>
+ <ruleset>Import Statement Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnitStaticSuite</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnitSpelling</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnitAssertionsShouldIncludeMessage</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnitTestsShouldIncludeAssert</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>TestClassWithoutTestCases</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryBooleanAssertion</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseAssertEqualsInsteadOfAssertTrue</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseAssertSameInsteadOfAssertTrue</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseAssertNullInsteadOfAssertTrue</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SimplifyBooleanAssertion</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryConstructor</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NullAssignment</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedModifier</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AssignmentInOperand</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AtLeastOneConstructor</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DontImportSun</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SuspiciousOctalEscape</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CallSuperInConstructor</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryParentheses</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DefaultPackage</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>BooleanInversion</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DataflowAnomalyAnalysis</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidFinalLocalVariable</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidUsingShortType</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidUsingVolatile</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidUsingNativeCode</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidAccessibilityAlteration</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DoNotCallGarbageCollectionExplicitly</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MethodNamingConventions</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ClassNamingConventions</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AbstractNaming</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidDollarSigns</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MethodWithSameNameAsEnclosingClass</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SuspiciousHashcodeMethodName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SuspiciousConstantFieldName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SuspiciousEqualsMethodName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidFieldNameMatchingTypeName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidFieldNameMatchingMethodName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NoPackage</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>PackageCase</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MisleadingVariableName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>BooleanGetMethodName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NPathComplexity</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ExcessiveMethodLength</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ExcessiveParameterList</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ExcessiveClassLength</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CyclomaticComplexity</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ExcessivePublicCount</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>TooManyFields</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NcssMethodCount</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NcssTypeCount</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NcssConstructorCount</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>TooManyMethods</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyFinalizer</name>
+ <ruleset>Finalizer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>FinalizeOnlyCallsSuperFinalize</name>
+ <ruleset>Finalizer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>FinalizeOverloaded</name>
+ <ruleset>Finalizer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>FinalizeDoesNotCallSuperFinalize</name>
+ <ruleset>Finalizer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>FinalizeShouldBeProtected</name>
+ <ruleset>Finalizer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidCallingFinalize</name>
+ <ruleset>Finalizer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseCorrectExceptionLogging</name>
+ <ruleset>Jakarta Commons Logging Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ProperLogger</name>
+ <ruleset>Jakarta Commons Logging Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MissingSerialVersionUID</name>
+ <ruleset>JavaBean Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ProperCloneImplementation</name>
+ <ruleset>Clone Implementation Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CloneThrowsCloneNotSupportedException</name>
+ <ruleset>Clone Implementation Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CloneMethodMustImplementCloneable</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ </rules>
+ <includeDerivedFiles>false</includeDerivedFiles>
+ <violationsAsErrors>true</violationsAsErrors>
+</pmd>
diff --git a/org.eclipse.osee.framework.ui.workspacebundleloader/.project b/org.eclipse.osee.framework.ui.workspacebundleloader/.project
new file mode 100644
index 000000000..25afc8e84
--- /dev/null
+++ b/org.eclipse.osee.framework.ui.workspacebundleloader/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.osee.framework.ui.workspacebundleloader</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/org.eclipse.osee.framework.ui.workspacebundleloader/META-INF/MANIFEST.MF b/org.eclipse.osee.framework.ui.workspacebundleloader/META-INF/MANIFEST.MF
new file mode 100644
index 000000000..84e9a50fc
--- /dev/null
+++ b/org.eclipse.osee.framework.ui.workspacebundleloader/META-INF/MANIFEST.MF
@@ -0,0 +1,26 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Workspacebundlelodaer Plug-in
+Bundle-SymbolicName: org.eclipse.osee.framework.ui.workspacebundleloader;singleton:=true
+Bundle-Version: 0.25.3.qualifier
+Bundle-Activator: org.eclipse.osee.framework.ui.workspacebundleloader.internal.Activator
+Bundle-Vendor: Eclipse Open System Engineering Environment
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Import-Package: org.eclipse.core.resources,
+ org.eclipse.core.runtime,
+ org.eclipse.core.runtime.jobs,
+ org.eclipse.osee.framework.core.operation,
+ org.eclipse.osee.framework.jdk.core.util,
+ org.eclipse.osee.framework.logging,
+ org.eclipse.osee.framework.plugin.core.util,
+ org.eclipse.osee.framework.ui.plugin.util,
+ org.eclipse.osee.framework.ui.plugin.workspace,
+ org.eclipse.osee.framework.ui.swt,
+ org.eclipse.swt.widgets,
+ org.eclipse.ui,
+ org.eclipse.ui.views,
+ org.osgi.framework,
+ org.osgi.util.tracker
+Bundle-ActivationPolicy: lazy
+Export-Package: org.eclipse.osee.framework.ui.workspacebundleloader
+Require-Bundle: org.eclipse.osgi
diff --git a/org.eclipse.osee.framework.ui.workspacebundleloader/build.properties b/org.eclipse.osee.framework.ui.workspacebundleloader/build.properties
new file mode 100644
index 000000000..e9863e281
--- /dev/null
+++ b/org.eclipse.osee.framework.ui.workspacebundleloader/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ plugin.xml
diff --git a/org.eclipse.osee.framework.ui.workspacebundleloader/plugin.xml b/org.eclipse.osee.framework.ui.workspacebundleloader/plugin.xml
new file mode 100644
index 000000000..65c9e06c1
--- /dev/null
+++ b/org.eclipse.osee.framework.ui.workspacebundleloader/plugin.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+
+ <extension
+ id="WorkspaceStarterNature"
+ name="Workspace Starter Nature"
+ point="org.eclipse.core.resources.natures">
+ <runtime>
+ <run
+ class="org.eclipse.osee.framework.ui.workspacebundleloader.WorkspaceStarterNature">
+ <parameter
+ name="org.eclipse.osee.benchWorkspaceStarter.parameter1"
+ value="org.eclipse.osee.benchWorkspaceStarter.parameter1">
+ </parameter>
+ </run>
+ </runtime>
+ </extension>
+
+
+ <extension
+ point="org.eclipse.ui.startup">
+ <startup
+ class="org.eclipse.osee.framework.ui.workspacebundleloader.EarlyStartup">
+ </startup>
+ </extension>
+</plugin>
diff --git a/org.eclipse.osee.framework.ui.workspacebundleloader/pom.xml b/org.eclipse.osee.framework.ui.workspacebundleloader/pom.xml
new file mode 100644
index 000000000..195fecf58
--- /dev/null
+++ b/org.eclipse.osee.framework.ui.workspacebundleloader/pom.xml
@@ -0,0 +1,17 @@
+<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.eclipse.osee</groupId>
+ <artifactId>org.eclipse.osee.ote.parent</artifactId>
+ <version>0.25.3-SNAPSHOT</version>
+ <relativePath>../org.eclipse.osee.ote.parent</relativePath>
+ </parent>
+
+ <artifactId>org.eclipse.osee.framework.ui.workspacebundleloader</artifactId>
+ <packaging>eclipse-plugin</packaging>
+ <name>OSEE UI Workspace Bundle Loader (Incubation)</name>
+
+</project>
diff --git a/org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/BundleCollection.java b/org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/BundleCollection.java
new file mode 100644
index 000000000..98d730447
--- /dev/null
+++ b/org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/BundleCollection.java
@@ -0,0 +1,81 @@
+/*******************************************************************************
+ * Copyright (c) 2013 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.workspacebundleloader;
+
+import java.io.File;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+
+public class BundleCollection {
+
+ Map<String, List<BundleInfoLite>> bundleByName = new HashMap<>();
+ Map<URL, BundleInfoLite> bundleByURL = new HashMap<>();
+
+ public BundleCollection(){
+
+ }
+
+ public void add(BundleInfoLite bundle){
+ List<BundleInfoLite> bundles = bundleByName.get(bundle.getSymbolicName());
+ if(bundles == null){
+ bundles = new ArrayList<>();
+ bundleByName.put(bundle.getSymbolicName(), bundles);
+ }
+ bundles.add(bundle);
+ bundleByURL.put(bundle.getSystemLocation(), bundle);
+ }
+
+ public List<BundleInfoLite> getByBundleName(String name){
+ return bundleByName.get(name);
+ }
+
+ public BundleInfoLite getByURL(URL url){
+ return bundleByURL.get(url);
+ }
+
+ public List<BundleInfoLite> getInstalledBundles() {
+ List<BundleInfoLite> bundles = new ArrayList<>();
+ for(BundleInfoLite info: bundleByURL.values()){
+ if(info.isInstalled()){
+ bundles.add(info);
+ }
+ }
+ return bundles;
+ }
+
+ public List<BundleInfoLite> getLatestBundles() {
+ List<BundleInfoLite> latest = new ArrayList<>();
+ for(List<BundleInfoLite> infolist:this.bundleByName.values()){
+ if(infolist.size() == 1){
+ latest.add(infolist.get(0));
+ } else {
+ long lastModified = 0;
+ BundleInfoLite newest = null;
+ for(BundleInfoLite lite:infolist){
+ long newLastModified = new File(lite.getSystemLocation().getFile()).lastModified();
+ if(newLastModified > lastModified){
+ lastModified = newLastModified;
+ newest = lite;
+ }
+ }
+ latest.add(newest);
+ }
+ }
+ return latest;
+ }
+
+
+
+}
diff --git a/org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/BundleInfoLite.java b/org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/BundleInfoLite.java
new file mode 100644
index 000000000..9da280223
--- /dev/null
+++ b/org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/BundleInfoLite.java
@@ -0,0 +1,166 @@
+/*******************************************************************************
+ * Copyright (c) 2013 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.workspacebundleloader;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.security.NoSuchAlgorithmException;
+import java.util.jar.JarFile;
+import java.util.jar.Manifest;
+import java.util.logging.Level;
+
+import org.eclipse.osee.framework.jdk.core.util.ChecksumUtil;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.BundleException;
+
+public class BundleInfoLite {
+
+ private final String symbolicName;
+ private final String version;
+ private final URL systemLocation;
+ private final File file;
+ private final Manifest manifest;
+ private byte[] md5Digest;
+ private Bundle bundle;
+
+
+ public BundleInfoLite(URL systemLocation) throws IOException {
+ File tmpFile;
+ try {
+ tmpFile = new File(systemLocation.toURI());
+ } catch (URISyntaxException ex) {
+ tmpFile = new File(systemLocation.getPath());
+ }
+ this.file = tmpFile;
+
+ JarFile jarFile = new JarFile(file);
+ this.manifest = jarFile.getManifest();
+ this.symbolicName = generateBundleName(manifest);
+ this.version = manifest.getMainAttributes().getValue("Bundle-Version");
+
+ this.systemLocation = systemLocation;
+ this.md5Digest = null;
+ }
+
+ /**
+ * @return the name of the bundle
+ */
+ private String generateBundleName(Manifest jarManifest) {
+ String nameEntry = jarManifest.getMainAttributes().getValue("Bundle-SymbolicName");
+ if(nameEntry == null){
+ return "unknown";
+ }
+ // Sometimes there's a semicolon then extra info - ignore this
+ int index = nameEntry.indexOf(';');
+ if (index != -1) {
+ nameEntry = nameEntry.substring(0, index);
+ }
+
+ return nameEntry;
+ }
+
+ /**
+ * @return the symbolicName
+ */
+ public String getSymbolicName() {
+ return symbolicName;
+ }
+
+ /**
+ * @return the version
+ */
+ public String getVersion() {
+ return version;
+ }
+
+ /**
+ * @return the location
+ */
+ public URL getSystemLocation() {
+ return systemLocation;
+ }
+
+ @Override
+ public String toString() {
+ return getSymbolicName() + ":" + getVersion();
+ }
+
+ /**
+ * @return the md5Digest
+ */
+ public byte[] getMd5Digest() {
+ // Do lazy calculation of this since it can be costly
+ // and does not get read for all bundle info's
+ if (md5Digest == null) {
+ try {
+ InputStream in = systemLocation.openStream();
+
+ md5Digest = ChecksumUtil.createChecksum(in, "MD5");
+
+ in.close();
+ } catch (NoSuchAlgorithmException ex) {
+ throw new IllegalStateException("Always expect MD5 to be available", ex);
+ } catch (IOException ex) {
+ throw new IllegalStateException("Always expect local jar file to be available", ex);
+ }
+ }
+ return md5Digest;
+ }
+
+ public void install(BundleContext context) throws BundleException, IOException{
+ bundle = context.installBundle("reference:" + this.getSystemLocation().toExternalForm());
+ }
+
+ public Bundle uninstall() throws BundleException{
+ if(isInstalled()){
+ bundle.uninstall();
+ }
+ return bundle;
+ }
+
+ public boolean isInstalled() {
+ if(bundle == null){
+ return false;
+ } else {
+ int state = bundle.getState();
+ return state != Bundle.UNINSTALLED;
+ }
+ }
+
+ public boolean isStarted() {
+ if(isInstalled()){
+ int state = bundle.getState();
+ return state == Bundle.ACTIVE || state == Bundle.STARTING;
+ } else {
+ return false;
+ }
+ }
+
+ public void start(BundleContext context) throws BundleException{
+ if(bundle == null){
+ for(Bundle findit:context.getBundles()){
+ if(findit.getSymbolicName().equals(getSymbolicName())){
+ findit.start();
+ return;
+ }
+ }
+ OseeLog.log(BundleInfoLite.class, Level.WARNING, String.format("Tried to start bundle [%s] that is not installed.", getSymbolicName()));
+ } else if (bundle.getState() == Bundle.INSTALLED || bundle.getState() == Bundle.RESOLVED){
+ bundle.start();
+ }
+ }
+
+}
diff --git a/org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/EarlyStartup.java b/org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/EarlyStartup.java
new file mode 100644
index 000000000..27397add3
--- /dev/null
+++ b/org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/EarlyStartup.java
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.workspacebundleloader;
+
+import java.util.logging.Level;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.ui.swt.Displays;
+import org.eclipse.osee.framework.ui.workspacebundleloader.internal.Activator;
+import org.eclipse.ui.IStartup;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleException;
+
+/**
+ * @author Andrew M. Finkbeiner
+ */
+public class EarlyStartup implements IStartup {
+
+ private SafeWorkspaceTracker workspaceTracker;
+
+ @Override
+ public void earlyStartup() {
+ Displays.ensureInDisplayThread(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ Bundle bundle = Platform.getBundle("org.eclipse.osee.framework.ui.workspacebundleloader");
+ bundle.start();
+ workspaceTracker = new SafeWorkspaceTracker(bundle.getBundleContext());
+ workspaceTracker.open(true);
+ } catch (BundleException ex) {
+ OseeLog.log(Activator.class, Level.SEVERE, ex);
+ }
+ }
+ });
+
+ }
+}
diff --git a/org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/FileChangeDetector.java b/org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/FileChangeDetector.java
new file mode 100644
index 000000000..976ebf786
--- /dev/null
+++ b/org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/FileChangeDetector.java
@@ -0,0 +1,81 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.workspacebundleloader;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.security.NoSuchAlgorithmException;
+import java.util.Arrays;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.logging.Level;
+import org.eclipse.osee.framework.jdk.core.util.ChecksumUtil;
+import org.eclipse.osee.framework.logging.OseeLog;
+
+/**
+ * @author Andrew M. Finkbeiner
+ */
+public class FileChangeDetector {
+
+ private final ConcurrentHashMap<URL, byte[]> bundleNameToMd5Map;
+
+ public FileChangeDetector() {
+ bundleNameToMd5Map = new ConcurrentHashMap<>();
+ }
+
+ public boolean isChanged(URL url) {
+ byte[] digest = getMd5Checksum(url);
+ if (bundleNameToMd5Map.containsKey(url)) {
+ // check for bundle binary equality
+ if (!Arrays.equals(bundleNameToMd5Map.get(url), digest)) {
+ bundleNameToMd5Map.put(url, digest);
+ return true;
+ } else {
+ return false;
+ }
+ } else {
+ bundleNameToMd5Map.put(url, digest);
+ return true;
+ }
+ }
+
+ private byte[] getMd5Checksum(URL url) {
+ InputStream in = null;
+ byte[] digest = new byte[0];
+ try {
+ in = url.openStream();
+ digest = ChecksumUtil.createChecksum(url.openStream(), "MD5");
+ } catch (IOException ex) {
+ OseeLog.log(FileChangeDetector.class, Level.SEVERE, ex);
+ } catch (NoSuchAlgorithmException ex) {
+ OseeLog.log(FileChangeDetector.class, Level.SEVERE, ex);
+ } finally {
+ if (in != null) {
+ try {
+ in.close();
+ } catch (IOException ex) {
+ OseeLog.log(FileChangeDetector.class, Level.SEVERE, ex);
+ }
+ }
+ }
+ return digest;
+ }
+
+ public boolean remove(URL url) {
+ bundleNameToMd5Map.remove(url);
+ return true;
+ }
+
+ public void clear() {
+ bundleNameToMd5Map.clear();
+ }
+
+}
diff --git a/org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/IJarChangeListener.java b/org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/IJarChangeListener.java
new file mode 100644
index 000000000..db159468a
--- /dev/null
+++ b/org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/IJarChangeListener.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.workspacebundleloader;
+
+import java.net.URL;
+
+/**
+ * @author Robert A. Fisher
+ */
+public interface IJarChangeListener<T extends JarCollectionNature> {
+
+ /**
+ * Called for each addition of bundle
+ */
+ public void handleBundleAdded(URL url);
+
+ /**
+ * Called for each change of bundle
+ */
+ public void handleBundleChanged(URL url);
+
+ /**
+ * Called for each removal of bundle
+ */
+ public void handleBundleRemoved(URL url);
+
+ /**
+ * Called after all add/change/remove methods have been invoked for a given delta.
+ */
+ public void handlePostChange();
+
+ /**
+ * Called just before a project with the nature is closed
+ */
+ public void handleNatureClosed(T nature);
+}
diff --git a/org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/JarChangeResourceListener.java b/org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/JarChangeResourceListener.java
new file mode 100644
index 000000000..910ffab61
--- /dev/null
+++ b/org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/JarChangeResourceListener.java
@@ -0,0 +1,176 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.workspacebundleloader;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IProjectNature;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+
+/**
+ * Handler for IResourceChangeEvent.POST_CHANGE and IResourceChangeEvent.PRE_CLOSE events for projects with a given
+ * nature ID that extends JarCollectionNature. POST_CHANGE events against the jars in projects with the nature, and
+ * close events on the projects with the nature are detected and offered to an IJarChangeListener.
+ *
+ * @author Robert A. Fisher
+ */
+public class JarChangeResourceListener<T extends JarCollectionNature> implements IResourceChangeListener {
+ private final String natureId;
+ private final IJarChangeListener<T> listener;
+
+ public JarChangeResourceListener(String natureId, IJarChangeListener<T> listener) {
+ if (natureId == null) {
+ throw new IllegalArgumentException("natureId must not be null");
+ }
+ if (listener == null) {
+ throw new IllegalArgumentException("listener must not be null");
+ }
+ this.natureId = natureId;
+ this.listener = listener;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public void resourceChanged(IResourceChangeEvent event) {
+ try {
+ if (event.getType() == IResourceChangeEvent.POST_CHANGE) {
+ handleChangeEvent(event);
+ } else if (event.getType() == IResourceChangeEvent.PRE_CLOSE) {
+ IResource resource = event.getResource();
+ if (resource != null && resource instanceof IProject) {
+ IProject project = (IProject) resource;
+
+ IProjectNature nature = project.getNature(natureId);
+ if (nature != null) {
+ listener.handleNatureClosed((T) nature);
+ }
+ }
+ }
+ } catch (CoreException ex) {
+ } catch (MalformedURLException ex) {
+ }
+ }
+
+ private void handleChangeEvent(IResourceChangeEvent event) throws CoreException, MalformedURLException {
+ IResourceDelta rootDelta = event.getDelta();
+ if (rootDelta != null) {
+ boolean triggered = false;
+ for (IResourceDelta child : rootDelta.getAffectedChildren()) {
+ IResource resource = child.getResource();
+ if (resource != null && resource instanceof IProject) {
+ IProject project = (IProject) resource;
+
+ IProjectNature nature = project.getNature(natureId);
+ if (nature != null) {
+ JarCollectionNature starterNature = (JarCollectionNature) nature;
+ IPath[] paths = starterNature.getProjectRelativeBundlePaths();
+ for (IPath path : paths) {
+ IResourceDelta pluginDelta = child.findMember(path);
+ if (pluginDelta != null && isModifyingChange(pluginDelta)) {
+ handlePluginChanges(project.getLocation().removeLastSegments(1),
+ pluginDelta.getAffectedChildren());
+ triggered = true;
+ }
+ }
+ }
+ }
+ }
+
+ if (triggered) {
+ listener.handlePostChange();
+ }
+ }
+ }
+
+ private boolean isModifyingChange(IResourceDelta pluginDelta) {
+ boolean synch = (pluginDelta.getFlags() & IResourceDelta.SYNC) != 0;
+ // boolean content = (pluginDelta.getFlags() & IResourceDelta.CONTENT) != 0;
+ // boolean REPLACED = (pluginDelta.getFlags() & IResourceDelta.REPLACED) != 0;
+ // boolean MARKERS = (pluginDelta.getFlags() & IResourceDelta.MARKERS) != 0;
+ // boolean TYPE = (pluginDelta.getFlags() & IResourceDelta.TYPE) != 0;
+ // boolean MOVED_FROM = (pluginDelta.getFlags() & IResourceDelta.MOVED_FROM) != 0;
+ // boolean MOVED_TO = (pluginDelta.getFlags() & IResourceDelta.MOVED_TO) != 0;
+ // boolean OPEN = (pluginDelta.getFlags() & IResourceDelta.OPEN) != 0;
+ // boolean ENCODING = (pluginDelta.getFlags() & IResourceDelta.ENCODING) != 0;
+ // boolean DESCRIPTION = (pluginDelta.getFlags() & IResourceDelta.DESCRIPTION) != 0;
+
+ // boolean ADDED = (pluginDelta.getKind() & IResourceDelta.ADDED) != 0;
+ // boolean CHANGED = (pluginDelta.getKind() & IResourceDelta.CHANGED) != 0;
+ // boolean ADDED_PHANTOM = (pluginDelta.getKind() & IResourceDelta.ADDED_PHANTOM) != 0;
+ // boolean REMOVED_PHANTOM = (pluginDelta.getKind() & IResourceDelta.REMOVED_PHANTOM) != 0;
+ return !synch;
+ }
+
+ protected void handlePluginChanges(IPath workspacePath, IResourceDelta[] affectedChildren) throws MalformedURLException {
+ for (IResourceDelta affectedPluginDelta : affectedChildren) {
+ URL url = workspacePath.append(affectedPluginDelta.getFullPath()).toFile().toURI().toURL();
+ if (affectedPluginDelta.getFullPath().getFileExtension().equals("jar")) {
+ try {
+ switch (affectedPluginDelta.getKind()) {
+ case IResourceDelta.ADDED:
+ listener.handleBundleAdded(url);
+ break;
+ case IResourceDelta.CHANGED:
+ listener.handleBundleChanged(url);
+ break;
+ case IResourceDelta.REMOVED:
+ listener.handleBundleRemoved(url);
+ break;
+
+ default:
+ System.err.println("Do not expect change kind of " + generateKindString(affectedPluginDelta.getKind()));
+ }
+ } catch (RuntimeException ex) {
+ ex.printStackTrace();
+ throw ex;
+ }
+ }
+ }
+ }
+
+ private String generateKindString(int kind) {
+ switch (kind) {
+ case IResourceDelta.ADDED:
+ return "Added";
+ case IResourceDelta.CHANGED:
+ return "Changed";
+ case IResourceDelta.REMOVED:
+ return "Removed";
+ default:
+ return "Unexpected Kind: " + kind;
+ }
+ }
+
+ protected String generateEventString(int type) {
+ switch (type) {
+ case IResourceChangeEvent.POST_BUILD:
+ return "Post Build";
+ case IResourceChangeEvent.POST_CHANGE:
+ return "Post Change";
+ case IResourceChangeEvent.PRE_BUILD:
+ return "Pre Build";
+ case IResourceChangeEvent.PRE_CLOSE:
+ return "Pre Close";
+ case IResourceChangeEvent.PRE_DELETE:
+ return "Pre Delete";
+ case IResourceChangeEvent.PRE_REFRESH:
+ return "Pre Refresh";
+ default:
+ return "Unknown Code: " + type;
+ }
+ }
+}
diff --git a/org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/JarCollectionNature.java b/org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/JarCollectionNature.java
new file mode 100644
index 000000000..e6b694f5b
--- /dev/null
+++ b/org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/JarCollectionNature.java
@@ -0,0 +1,171 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.workspacebundleloader;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FilenameFilter;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.jar.Attributes;
+import java.util.jar.Attributes.Name;
+import java.util.jar.Manifest;
+import java.util.logging.Level;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IProjectNature;
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.osee.framework.logging.OseeLog;
+
+/**
+ * @author Robert A. Fisher
+ */
+public class JarCollectionNature implements IProjectNature {
+
+ private final Name BUNDLE_PATH_ATTRIBUTE;
+ private boolean isClosing;
+
+ protected IProject project;
+
+ /**
+ * @param BUNDLE_PATH_ATTRIBUTE the name of the attribute in the MANIFEST.MF to look at when looking for the path to
+ * the jars being provided.
+ */
+ public JarCollectionNature(String BUNDLE_PATH_ATTRIBUTE) {
+ super();
+ this.BUNDLE_PATH_ATTRIBUTE = new Name(BUNDLE_PATH_ATTRIBUTE);
+ this.isClosing = false;
+ }
+
+ /**
+ * @return the isClosing
+ */
+ public boolean isClosing() {
+ return isClosing;
+ }
+
+ /**
+ * @param isClosing the isClosing to set
+ */
+ public void setClosing(boolean isClosing) {
+ this.isClosing = isClosing;
+ }
+
+ @Override
+ public void configure() {
+ }
+
+ @Override
+ public void deconfigure() {
+ }
+
+ @Override
+ public IProject getProject() {
+ return project;
+ }
+
+ @Override
+ public void setProject(IProject project) {
+ this.project = project;
+ }
+
+ public Collection<URL> getBundles() {
+ Collection<URL> urls = new ArrayList<>();
+
+ if (isClosing) {
+ return urls;
+ }
+
+ IPath[] paths = getProjectRelativeBundlePaths();
+ for (IPath path : paths) {
+ IPath pluginsPath = project.getLocation().append(path);
+ File pluginDir = pluginsPath.toFile();
+ File[] jars = pluginDir.listFiles(new FilenameFilter() {
+ @Override
+ public boolean accept(File dir, String name) {
+ return name.endsWith(".jar");
+ }
+ });
+
+ if (jars != null) {
+ for (File jar : jars) {
+ try {
+ urls.add(jar.toURI().toURL());
+ } catch (MalformedURLException ex) {
+ OseeLog.log(JarCollectionNature.class, Level.SEVERE, ex);
+ }
+ }
+ }
+ }
+ return urls;
+ }
+
+ public IPath[] getProjectRelativeBundlePaths() {
+ Manifest manifest = getManifestFile();
+ Path[] paths;
+ Attributes mainAttributes = manifest.getMainAttributes();
+ String pathString;
+ if (mainAttributes.containsKey(BUNDLE_PATH_ATTRIBUTE)) {
+ pathString = mainAttributes.getValue(BUNDLE_PATH_ATTRIBUTE);
+ String[] tempPaths = pathString.split(",");
+ paths = new Path[tempPaths.length];
+ for (int i = 0; i < paths.length; i++) {
+ paths[i] = new Path(tempPaths[i].trim());
+ }
+ } else {
+ paths = new Path[1];
+ paths[0] = new Path("plugins");
+ }
+ return paths;
+ }
+
+ private Manifest getManifestFile() {
+ try {
+ File manifestFile = project.getLocation().append("META-INF").append("MANIFEST.MF").toFile();
+ if (manifestFile.exists()) {
+ return new Manifest(new FileInputStream(manifestFile));
+ } else {
+ return null;
+ }
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ return null;
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ protected static <T extends JarCollectionNature> Collection<T> getWorkspaceProjects(String natureId, Class<T> clazz) throws CoreException {
+ IWorkspace workspace = ResourcesPlugin.getWorkspace();
+ IWorkspaceRoot workspaceRoot = workspace.getRoot();
+ IProject[] projects = workspaceRoot.getProjects();
+
+ Collection<T> natures = new LinkedList<>();
+
+ for (IProject project : projects) {
+ if (project.isOpen()) {
+ IProjectNature nature = project.getNature(natureId);
+ if (nature != null) {
+ JarCollectionNature jarNature = (JarCollectionNature) nature;
+ natures.add((T) jarNature);
+ }
+ }
+ }
+
+ return natures;
+ }
+} \ No newline at end of file
diff --git a/org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/SafeWorkspaceTracker.java b/org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/SafeWorkspaceTracker.java
new file mode 100644
index 000000000..d966ce83f
--- /dev/null
+++ b/org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/SafeWorkspaceTracker.java
@@ -0,0 +1,152 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.workspacebundleloader;
+
+import java.io.File;
+import java.net.URL;
+import java.util.logging.Level;
+
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.core.operation.AbstractOperation;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.plugin.core.util.Jobs;
+import org.eclipse.osee.framework.plugin.core.util.OseeData;
+import org.eclipse.osee.framework.ui.plugin.workspace.SafeWorkspaceAccess;
+import org.eclipse.osee.framework.ui.workspacebundleloader.internal.Activator;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchListener;
+import org.eclipse.ui.PlatformUI;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+import org.osgi.util.tracker.ServiceTracker;
+
+/**
+ * @author Andrew M. Finkbeiner
+ */
+public class SafeWorkspaceTracker extends ServiceTracker implements IJarChangeListener<WorkspaceStarterNature>, WorkspaceLoader, IWorkbenchListener {
+
+ private JarChangeResourceListener<WorkspaceStarterNature> workspaceListener;
+ private SafeWorkspaceAccess service;
+ private final WorkspaceBundleLoadCoordinator bundleCoordinator;
+
+ public SafeWorkspaceTracker(BundleContext context) {
+ super(context, SafeWorkspaceAccess.class.getName(), null);
+ bundleCoordinator = new WorkspaceBundleLoadCoordinator(new File(OseeData.getPath().toFile(), "loadedbundles"));
+ context.registerService(WorkspaceLoader.class.getName(), this, null);
+ PlatformUI.getWorkbench().addWorkbenchListener(this);
+ }
+
+ @Override
+ public Object addingService(ServiceReference reference) {
+ service = (SafeWorkspaceAccess) context.getService(reference);
+ setupWorkspaceBundleLoadingAfterBenchStartup();
+ return super.addingService(reference);
+ }
+
+ void setupWorkspaceBundleLoadingAfterBenchStartup() {
+ Jobs.runInJob(new PrecompileStartup("Loading Precompiled Libraries", Activator.BUNDLE_ID), false);
+ }
+
+ private class PrecompileStartup extends AbstractOperation {
+ public PrecompileStartup(String operationName, String pluginId) {
+ super(operationName, pluginId);
+ }
+
+ @Override
+ protected void doWork(IProgressMonitor monitor) throws Exception {
+ IWorkspace workspace = service.getWorkspace();
+ workspaceListener =
+ new JarChangeResourceListener<WorkspaceStarterNature>(WorkspaceStarterNature.NATURE_ID,
+ SafeWorkspaceTracker.this);
+ try {
+ loadBundles(monitor);
+ } catch (CoreException ex) {
+ OseeLog.log(Activator.class, Level.SEVERE, ex);
+ }
+ workspace.addResourceChangeListener(workspaceListener);
+
+ }
+ }
+
+ @Override
+ public synchronized void close() {
+ IWorkspace workspace = service.getWorkspace();
+ workspace.removeResourceChangeListener(workspaceListener);
+ super.close();
+ }
+
+ @Override
+ public void handleBundleAdded(URL url) {
+ String urlString = url.toString();
+ bundleCoordinator.addBundleToCheck(urlString);
+ }
+
+ @Override
+ public void handleBundleChanged(URL url) {
+ String urlString = url.toString();
+ bundleCoordinator.addBundleToCheck(urlString);
+ }
+
+ @Override
+ public void handleBundleRemoved(URL url) {
+ String urlString = url.toString();
+ bundleCoordinator.addBundleToCheck(urlString);
+ }
+
+ @Override
+ public void handlePostChange() {
+ }
+
+ @Override
+ public void handleNatureClosed(WorkspaceStarterNature nature) {
+ for (URL url : nature.getBundles()) {
+ handleBundleRemoved(url);
+ }
+ }
+
+ @Override
+ public void loadBundles(IProgressMonitor monitor) throws CoreException {
+ for (WorkspaceStarterNature starterNature : WorkspaceStarterNature.getWorkspaceProjects()) {
+ for (URL url : starterNature.getBundles()) {
+ try {
+ handleBundleAdded(url);
+ } catch (Exception ex) {
+ OseeLog.log(SafeWorkspaceTracker.class, Level.INFO, ex);
+ ex.printStackTrace();
+ }
+ }
+ }
+ bundleCoordinator.updateBundles(monitor);
+ bundleCoordinator.installLatestBundles(monitor);
+ }
+
+ @Override
+ public void unloadBundles() {
+ bundleCoordinator.uninstallBundles();
+ }
+
+ @Override
+ public boolean preShutdown(IWorkbench workbench, boolean forced) {
+ try{
+ bundleCoordinator.uninstallBundles();
+ } catch (Throwable th){
+ th.printStackTrace();
+ }
+ return true;
+ }
+
+ @Override
+ public void postShutdown(IWorkbench workbench) {
+ }
+
+}
diff --git a/org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/WorkspaceBundleLoadCoordinator.java b/org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/WorkspaceBundleLoadCoordinator.java
new file mode 100644
index 000000000..70b35f2fe
--- /dev/null
+++ b/org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/WorkspaceBundleLoadCoordinator.java
@@ -0,0 +1,649 @@
+/*******************************************************************************
+ * Copyright (c) 2013 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.workspacebundleloader;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.nio.channels.FileChannel;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.logging.Level;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.osee.framework.core.operation.AbstractOperation;
+import org.eclipse.osee.framework.core.operation.Operations;
+import org.eclipse.osee.framework.jdk.core.util.Lib;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.plugin.core.util.OseeData;
+import org.eclipse.osee.framework.ui.workspacebundleloader.internal.Activator;
+import org.eclipse.osee.framework.ui.workspacebundleloader.internal.ManagedFolderArea;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.IPerspectiveDescriptor;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.IViewReference;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.WorkbenchException;
+import org.eclipse.ui.XMLMemento;
+import org.eclipse.ui.views.IViewDescriptor;
+import org.eclipse.ui.views.IViewRegistry;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.BundleException;
+import org.osgi.framework.FrameworkEvent;
+import org.osgi.framework.FrameworkListener;
+import org.osgi.framework.FrameworkUtil;
+import org.osgi.framework.wiring.FrameworkWiring;
+
+public class WorkspaceBundleLoadCoordinator {
+
+ private static final String TAG_VIEW = "view";
+ private static final String TAG_PERSPECTIVE = "perspective";
+ private static final String TAG_OTE_PRECOMPILED = "OTEPrecompiled";
+ private static final String OTE_MEMENTO = "OTEMemento";
+
+ private ManagedFolderArea managedFolderArea;
+ private Set<String> bundlesToCheck;
+ private BundleCollection managedArea = new BundleCollection();
+ private FrameworkWiring wiring;
+
+ public WorkspaceBundleLoadCoordinator(File temporaryBundleLocationFolder) {
+ bundlesToCheck = new HashSet<>();
+ this.managedFolderArea = new ManagedFolderArea(temporaryBundleLocationFolder);
+ managedFolderArea.initialize();
+ this.wiring = getFrameworkWiring();
+
+ Thread th = new Thread(new Runnable() {
+ @Override
+ public void run() {
+ int lastSize = 0;
+ boolean extraWait = false;
+ while(true){
+ try {
+ if(extraWait){
+ Thread.sleep(15000);
+ extraWait = false;
+ } else {
+ Thread.sleep(5000);
+ }
+ } catch (InterruptedException e) {
+ }
+ if(lastSize == bundlesToCheck.size()){
+ if(lastSize != 0){
+ if(bundlesToCheck.size() > 0){
+ lastSize = 0;
+ Operations.executeAsJob(new RefreshWorkspaceBundles(), false);
+ try {
+ Thread.sleep(1000*60); //give time to load so we don't get called twice
+ } catch (InterruptedException e) {
+ }
+ }
+ }
+ } else {
+ if(bundlesToCheck.size() - lastSize > 5){
+ extraWait = true;//big import allow for extra time for file imports
+ }
+ lastSize = bundlesToCheck.size();
+ }
+ }
+ }
+ });
+ th.setName("OTE BundleLoad Check");
+ th.setDaemon(true);
+ th.start();
+ }
+
+ private FrameworkWiring getFrameworkWiring() {
+ FrameworkWiring frameworkWiring = null;
+ Bundle bundle = FrameworkUtil.getBundle(getClass());
+ for(Bundle findit:bundle.getBundleContext().getBundles()){
+ frameworkWiring = findit.adapt(FrameworkWiring.class);
+ if(frameworkWiring != null){
+ break;
+ }
+ }
+ return frameworkWiring;
+ }
+
+
+
+ private class RefreshWorkspaceBundles extends AbstractOperation {
+
+ public RefreshWorkspaceBundles() {
+ super("Update Precompiled", Activator.BUNDLE_ID);
+ }
+
+ @Override
+ protected void doWork(IProgressMonitor monitor) throws Exception {
+ updateBundles(monitor);
+ installLatestBundles(monitor);
+ }
+
+ }
+
+ public void saveAndCloseViews(){
+ PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable(){
+ @Override
+ public void run() {
+ saveAndCloseManagedViews(determineManagedViews(), true);
+ }
+ });
+ }
+
+ private void closeUpdatedViews(final List<BundleInfoLite> uninstallList){
+ PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable(){
+ @Override
+ public void run() {
+ saveAndCloseManagedViews(determineManagedViews(uninstallList), true);
+ }
+ });
+ }
+
+
+
+ public synchronized void uninstallBundles(){
+ if(managedArea.getInstalledBundles().size() > 0){
+ saveAndCloseViews();
+ for(BundleInfoLite info:managedArea.getInstalledBundles()){
+ try {
+ info.uninstall();
+ } catch (BundleException e) {
+ OseeLog.log(WorkspaceBundleLoadCoordinator.class, Level.WARNING, e);
+ }
+ }
+ if(wiring != null){
+ wiring.refreshBundles(null);
+ }
+ IWorkbench workbench = PlatformUI.getWorkbench();
+ if (workbench != null && workbench.getActiveWorkbenchWindow() != null){
+ IViewRegistry registry = workbench.getViewRegistry();
+ forceViewRegistryReload(workbench, registry);
+ }
+ waitForViewsToBeRegistered(null);
+ }
+ }
+
+
+ private void saveAndCloseManagedViews(Set<String> managedViewIds, boolean save) {
+
+ IWorkbench workbench = PlatformUI.getWorkbench();
+ if (managedArea.getInstalledBundles().size() > 0 && workbench != null){
+ IWorkbenchPage page = null;
+ if(PlatformUI.getWorkbench().getActiveWorkbenchWindow() == null){
+ IWorkbenchWindow[] windows = workbench.getWorkbenchWindows();
+ for(IWorkbenchWindow win :windows){
+ page = win.getActivePage();
+ if(page != null){
+ break;
+ }
+ }
+ } else {
+ page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+ }
+ if(page == null){
+ return;
+ }
+ IPerspectiveDescriptor originalPerspective = page.getPerspective();
+ XMLMemento memento = XMLMemento.createWriteRoot(TAG_OTE_PRECOMPILED);
+ //find the view in other perspectives
+ IPerspectiveDescriptor[] pd = page.getOpenPerspectives();
+ for (int i = 0; i < pd.length; i++) {
+ try {
+ page.setPerspective(pd[i]);
+ } catch (Exception ex) {
+ // Ignore, this can get an NPE in Eclipse, see bug 4454
+ }
+ IMemento perspectiveMemento = null;
+ try{
+ perspectiveMemento = memento.createChild(TAG_PERSPECTIVE);
+ perspectiveMemento.putString("id", pd[i].getId());
+ } catch (Exception ex){
+ //Ignore, the perspective id is invalid xml
+ }
+ IViewReference[] activeReferences = page.getViewReferences();
+ for (IViewReference viewReference : activeReferences) {
+ int index = viewReference.getId().indexOf(":");
+ String id = null;
+ if(index>0){
+ id = viewReference.getId().substring(0, index);
+ } else {
+ id = viewReference.getId();
+ }
+ if (managedViewIds.contains(id)){
+ if(perspectiveMemento != null){
+ try{
+ IMemento viewMemento = perspectiveMemento.createChild(TAG_VIEW);
+ viewMemento.putString("id", id);
+ String secondaryId = viewReference.getSecondaryId();
+ if(secondaryId != null){
+ viewMemento.putString("secondId", secondaryId);
+ }
+ IWorkbenchPart part = viewReference.getPart(false);
+ if(part instanceof IViewPart){
+ IViewPart viewPart = (IViewPart)part;
+ viewPart.saveState(viewMemento);
+ }
+ } catch (Exception ex){
+ //Ignore, we failed during view save
+ }
+ }
+ try{
+ page.hideView(viewReference);
+ } catch (Throwable th){
+ }
+ }
+ }
+ }
+ if(save){
+ saveMementoToFile(memento);
+ }
+ page.setPerspective(originalPerspective);
+ }
+ }
+
+ private Set<String> determineManagedViews() {
+ return determineManagedViews(null);
+ }
+
+ private Set<String> determineManagedViews(List<BundleInfoLite> uninstallList){
+ Set<String> managedViewIds = new HashSet<>();
+ IExtensionRegistry extensionRegistry = Platform.getExtensionRegistry();
+ IExtensionPoint extensionPoint = extensionRegistry.getExtensionPoint("org.eclipse.ui.views");
+ IExtension[] extensions = extensionPoint.getExtensions();
+ for(IExtension ex:extensions){
+ String name = ex.getContributor().getName();
+ if(managedArea.getByBundleName(name) != null){
+ IConfigurationElement[] elements = ex.getConfigurationElements();
+ for(IConfigurationElement el:elements){
+ if(el.getName().equals(TAG_VIEW)){
+ String id = el.getAttribute("id");
+ if(id != null){
+ if(uninstallList != null){
+ for(BundleInfoLite infoLite:uninstallList){
+ if(name.equals(infoLite.getSymbolicName())){
+ managedViewIds.add(id);
+ break;
+ }
+ }
+ } else {
+ managedViewIds.add(id);
+ }
+ }
+ }
+ }
+ }
+ }
+ return managedViewIds;
+ }
+
+ private boolean saveMementoToFile(XMLMemento memento) {
+ File stateFile = OseeData.getFile(OTE_MEMENTO);
+ if (stateFile == null) {
+ return false;
+ }
+ try {
+ FileOutputStream stream = new FileOutputStream(stateFile);
+ OutputStreamWriter writer = new OutputStreamWriter(stream, "utf-8"); //$NON-NLS-1$
+ memento.save(writer);
+ writer.close();
+ } catch (IOException e) {
+ stateFile.delete();
+ return false;
+ }
+ return true;
+ }
+
+ public static void copyFile(File source, File destination) throws IOException {
+ final FileChannel in = new FileInputStream(source).getChannel();
+ try {
+ final FileChannel out;
+ if (destination.isDirectory()) {
+ out = new FileOutputStream(new File(destination, source.getName())).getChannel();
+ } else {
+ if (destination.exists()) {
+ destination.delete(); // to work around some file permission problems
+ }
+ out = new FileOutputStream(destination).getChannel();
+ }
+ try {
+ long position = 0;
+ long size = in.size();
+ while (position < size) {
+ position += in.transferTo(position, size, out);
+ }
+ } finally {
+ Lib.close(out);
+ }
+ } finally {
+ Lib.close(in);
+ }
+ }
+
+
+
+ private List<BundleInfoLite> determineDeltasBetweenBundlesToLoad() {
+ List<BundleInfoLite> bundlesToOperateOn = new ArrayList<>();
+ for(String urlString:bundlesToCheck){
+ try {
+ URL newURL;
+ try{
+ newURL = new URL(urlString);
+ } catch(MalformedURLException ex){
+ newURL = new File(urlString).toURI().toURL();
+ }
+
+ BundleInfoLite bundleInfo = new BundleInfoLite(newURL);
+ List<BundleInfoLite> bundleList = managedArea.getByBundleName(bundleInfo.getSymbolicName());
+ if(bundleList == null){
+ bundlesToOperateOn.add(bundleInfo);
+ } else {
+ boolean newBundle=true;
+ if(bundleList != null && bundleList.size() > 0){
+ byte[] digest1 = bundleInfo.getMd5Digest();
+ for(BundleInfoLite bundle:bundleList){
+ byte[] digest2 = bundle.getMd5Digest();
+ if (Arrays.equals(digest1, digest2)) {
+ newBundle = false;
+ new File(bundle.getSystemLocation().getFile()).setLastModified(System.currentTimeMillis());
+ }
+ }
+ }
+ if(newBundle){
+ bundlesToOperateOn.add(bundleInfo);
+ }
+ }
+ } catch (MalformedURLException e) {
+ OseeLog.log(WorkspaceBundleLoadCoordinator.class, Level.WARNING, e);
+ } catch (IOException e) {
+ OseeLog.log(WorkspaceBundleLoadCoordinator.class, Level.WARNING, e);
+ }
+ }
+ bundlesToCheck.clear();
+ return bundlesToOperateOn;
+ }
+
+ public synchronized void addBundleToCheck(String urlString){
+ this.bundlesToCheck.add(urlString);
+ }
+
+ public synchronized void updateBundles(IProgressMonitor monitor){
+ List<BundleInfoLite> deltas = determineDeltasBetweenBundlesToLoad();
+ monitor.worked(Operations.calculateWork(Operations.TASK_WORK_RESOLUTION, 0.15));
+ List<BundleInfoLite> bundlesToAdd = managedFolderArea.copyDeltasToManagedFolder(deltas);
+ monitor.worked(Operations.calculateWork(Operations.TASK_WORK_RESOLUTION, 0.30));
+ for(BundleInfoLite bundle:bundlesToAdd){
+ managedArea.add(bundle);
+ }
+ monitor.worked(Operations.calculateWork(Operations.TASK_WORK_RESOLUTION, 0.05));
+ }
+
+ public synchronized void installLatestBundles(final IProgressMonitor subMonitor){
+ final List<BundleInfoLite> bundles = managedArea.getLatestBundles();
+ Collection<Bundle> bundlesToRefresh = new ArrayList<>();
+ List<BundleInfoLite> uninstallListAll = new ArrayList<>();
+ for(BundleInfoLite info:bundles){
+ if(!info.isInstalled()){
+ List<BundleInfoLite> uninstallList = managedArea.getByBundleName(info.getSymbolicName());
+ if(uninstallList.size() > 1){
+ for(BundleInfoLite toUninstall:uninstallList){
+ if(toUninstall.isInstalled()){
+ uninstallListAll.add(toUninstall);
+ }
+ }
+ }
+ }
+ }
+
+ closeUpdatedViews(uninstallListAll);
+ for(BundleInfoLite toUninstall:uninstallListAll){
+ try {
+ Bundle bundle = toUninstall.uninstall();
+ bundlesToRefresh.add(bundle);
+ } catch (BundleException e) {
+ OseeLog.log(WorkspaceBundleLoadCoordinator.class, Level.WARNING, e);
+ }
+ }
+
+ if(wiring != null && bundlesToRefresh.size() > 0){
+ final Object waitForLoad = new Object();
+ wiring.refreshBundles(bundlesToRefresh, new FrameworkListener(){
+ @Override
+ public void frameworkEvent(FrameworkEvent event) {
+ if(FrameworkEvent.PACKAGES_REFRESHED == event.getType()){
+ startBundles(bundles, subMonitor);
+ waitForViewsToBeRegistered(subMonitor);
+ PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable(){
+ @Override
+ public void run() {
+ restoreStateFromMemento(subMonitor);
+ }
+ });
+ synchronized (waitForLoad) {
+ waitForLoad.notifyAll();
+ }
+ }
+ }
+ });
+ synchronized (waitForLoad) {
+ try {
+ waitForLoad.wait(20000);
+ } catch (InterruptedException e) {
+ }
+ }
+ } else {
+ startBundles(bundles, subMonitor);
+ waitForViewsToBeRegistered(subMonitor);
+ PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable(){
+ @Override
+ public void run() {
+ restoreStateFromMemento(subMonitor);
+ }
+ });
+ }
+ }
+
+ private boolean waitForViewsToBeRegistered(IProgressMonitor monitor){
+ if(monitor != null)
+ monitor.setTaskName("Waiting for views to register.");
+ for(int i = 0; i < 10; i++){
+ if(monitor != null)
+ monitor.worked(1);
+ CheckViewsRegistered check = new CheckViewsRegistered();
+ PlatformUI.getWorkbench().getDisplay().syncExec(check);
+ if(check.isLoaded()){
+ return true;
+ } else {
+ try {
+ Thread.sleep(5000);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ return false;
+ }
+
+ private class CheckViewsRegistered implements Runnable {
+
+ private volatile boolean isLoaded = false;
+
+ @Override
+ public void run() {
+ IWorkbench workbench = PlatformUI.getWorkbench();
+ if (managedArea.getInstalledBundles().size() > 0 && workbench != null && workbench.getActiveWorkbenchWindow() != null){
+ IViewRegistry registry = workbench.getViewRegistry();
+ forceViewRegistryReload(workbench, registry);
+ Set<String> managedViews = determineManagedViews();
+ for(String viewId:managedViews){
+ try{
+ IViewDescriptor desc = registry.find(viewId);
+ if(desc == null){
+ return;
+ }
+ } catch (Exception ex){
+ return;
+ }
+ }
+ isLoaded = true;
+ } else { //no workspace bundles to load, so don't wait
+ isLoaded = true;
+ }
+
+ }
+
+ public boolean isLoaded(){
+ return isLoaded;
+ }
+ }
+
+ @SuppressWarnings({ "rawtypes" })
+ private void forceViewRegistryReload(IWorkbench workbench, IViewRegistry registry){
+ try{
+ Field field1 = registry.getClass().getDeclaredField("descriptors");
+ Field field2 = registry.getClass().getDeclaredField("stickyDescriptors");
+ Field field3 = registry.getClass().getDeclaredField("categories");
+
+ field1.setAccessible(true);
+ field2.setAccessible(true);
+ field3.setAccessible(true);
+
+ ((Map)field1.get(registry)).clear();
+ ((List)field2.get(registry)).clear();
+ ((Map)field3.get(registry)).clear();
+
+ field1.setAccessible(false);
+ field2.setAccessible(false);
+ field3.setAccessible(false);
+
+ Method[] methods = registry.getClass().getDeclaredMethods();
+ Method method = null;
+ for(Method m:methods){
+ if(m.getName().equals("postConstruct")){
+ method = m;
+ break;
+ }
+ }
+ if(method != null){
+ boolean access = method.isAccessible();
+ method.setAccessible(true);
+ try{
+ method.invoke(registry);
+ } finally {
+ method.setAccessible(access);
+ }
+ }
+ } catch (Throwable th){
+ OseeLog.log(this.getClass(), Level.SEVERE, th);
+ }
+ }
+
+
+ private void restoreStateFromMemento(IProgressMonitor restore) {
+ File mementoFile = OseeData.getFile(OTE_MEMENTO);
+ if(mementoFile.exists()){
+ try {
+ IWorkbench workbench = PlatformUI.getWorkbench();
+ if (managedArea.getInstalledBundles().size() > 0 && workbench != null && workbench.getActiveWorkbenchWindow() != null){
+ IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+ IPerspectiveDescriptor originalPerspective = page.getPerspective();
+ IPerspectiveDescriptor[] pds = page.getOpenPerspectives();
+
+ XMLMemento memento = XMLMemento.createReadRoot(new FileReader(mementoFile));
+ IMemento[] perspectives = memento.getChildren(TAG_PERSPECTIVE);
+ if(perspectives != null){
+ for(IMemento perspective:perspectives){
+ IMemento[] views = perspective.getChildren(TAG_VIEW);
+ if(views != null && views.length > 0){
+ String perspectiveId = perspective.getString("id");
+ for(IPerspectiveDescriptor pd:pds){
+ if(pd.getId().equals(perspectiveId)){
+ page.setPerspective(pd);
+ for(IMemento view:views){
+ String viewId = view.getString("id");
+ String secondId = view.getString("secondId");
+ if(viewId != null){
+ //show view
+ try {
+ page.showView(viewId, secondId, IWorkbenchPage.VIEW_ACTIVATE);
+ } catch (PartInitException ex) {
+ System.err.println("COULD NOT FIND " + viewId + ", with ID # = " + secondId);
+ ex.printStackTrace();
+ }
+ }
+ }
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ page.setPerspective(originalPerspective);
+ }
+
+ } catch (WorkbenchException e) {
+ e.printStackTrace();
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ private void startBundles(Collection<BundleInfoLite> bundles, IProgressMonitor subMonitor){
+ BundleContext context = FrameworkUtil.getBundle(this.getClass()).getBundleContext();
+ subMonitor.setTaskName("Installing Bundles");
+ double workPercentage = 0.50 / (bundles.size()*2);
+ int workAmount = Operations.calculateWork(Operations.TASK_WORK_RESOLUTION, workPercentage);
+ for(BundleInfoLite info:bundles){
+ if(!info.isInstalled()){
+ try {
+ info.install(context);
+ } catch (BundleException e) {
+ } catch (IOException e) {
+ }
+ }
+ subMonitor.worked(workAmount*2);
+ }
+ for(BundleInfoLite info:bundles){
+ if(!info.isStarted()){
+ try {
+ info.start(context);
+ } catch (BundleException e) {
+ }
+ }
+ subMonitor.worked(workAmount);
+ }
+ }
+
+}
diff --git a/org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/WorkspaceLoader.java b/org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/WorkspaceLoader.java
new file mode 100644
index 000000000..3bebf605b
--- /dev/null
+++ b/org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/WorkspaceLoader.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.workspacebundleloader;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.osgi.framework.BundleException;
+
+/**
+ * @author Andrew M. Finkbeiner
+ */
+public interface WorkspaceLoader {
+ public void loadBundles(IProgressMonitor monitor) throws CoreException, BundleException;
+
+ public void unloadBundles();
+}
diff --git a/org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/WorkspaceStarterNature.java b/org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/WorkspaceStarterNature.java
new file mode 100644
index 000000000..eeb2cd220
--- /dev/null
+++ b/org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/WorkspaceStarterNature.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.workspacebundleloader;
+
+import java.util.Collection;
+import org.eclipse.core.runtime.CoreException;
+
+/**
+ * @author Robert A. Fisher
+ * @author Andrew M. Finkbeiner
+ */
+public class WorkspaceStarterNature extends JarCollectionNature {
+ public static final String NATURE_ID = "org.eclipse.osee.framework.ui.workspacebundleloader.WorkspaceStarterNature";
+ static final String BUNDLE_PATH_ATTRIBUTE = "WorkspaceBundlePath";
+
+ public WorkspaceStarterNature() {
+ super(BUNDLE_PATH_ATTRIBUTE);
+ }
+
+ public static Collection<WorkspaceStarterNature> getWorkspaceProjects() throws CoreException {
+ return getWorkspaceProjects(NATURE_ID, WorkspaceStarterNature.class);
+ }
+}
diff --git a/org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/internal/Activator.java b/org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/internal/Activator.java
new file mode 100644
index 000000000..ed427d42b
--- /dev/null
+++ b/org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/internal/Activator.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.workspacebundleloader.internal;
+
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class Activator implements BundleActivator {
+
+ public static final String BUNDLE_ID = "org.eclipse.osee.framework.ui.workspacebundleloader";
+
+ @Override
+ public void start(BundleContext context) throws Exception {
+ }
+
+ @Override
+ public void stop(BundleContext context) throws Exception {
+ }
+
+}
diff --git a/org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/internal/ManagedFolderArea.java b/org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/internal/ManagedFolderArea.java
new file mode 100644
index 000000000..5e0c83ab5
--- /dev/null
+++ b/org.eclipse.osee.framework.ui.workspacebundleloader/src/org/eclipse/osee/framework/ui/workspacebundleloader/internal/ManagedFolderArea.java
@@ -0,0 +1,113 @@
+package org.eclipse.osee.framework.ui.workspacebundleloader.internal;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.nio.channels.FileChannel;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.Level;
+
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.ui.workspacebundleloader.BundleInfoLite;
+import org.eclipse.osee.framework.ui.workspacebundleloader.WorkspaceBundleLoadCoordinator;
+
+public class ManagedFolderArea {
+
+ private File bundleLocationFolder;
+
+ public ManagedFolderArea(File temporaryBundleLocationFolder) {
+ this.bundleLocationFolder = temporaryBundleLocationFolder;
+ }
+
+ public void initialize(){
+ bundleLocationFolder = setupTemporaryBundle(this.bundleLocationFolder);
+ }
+
+ private File setupTemporaryBundle(final File folder){
+ File folderToReturn = folder;
+ if(!folderToReturn.exists()){
+ if(!folderToReturn.mkdirs()){
+ folderToReturn = makeTempFolder();
+ }
+ } else if(folderToReturn.exists() && !folderToReturn.isDirectory()){
+ folderToReturn = makeTempFolder();
+ } else if(folderToReturn.exists()){
+ cleanOutDirectory(folderToReturn);
+ }
+ return folderToReturn;
+ }
+
+ /**
+ * should be a flat list of folders with the symbolic name of the bundle and then a version for each jar underneath each folder.
+ * @param folderToReturn
+ */
+ private void cleanOutDirectory(File folderRoot) {
+ File[] symbolicNameFolders = folderRoot.listFiles();
+ for(File folder:symbolicNameFolders){
+ if(folder.isDirectory()){
+ for(File file :folder.listFiles()){
+ file.delete();
+ }
+ folder.delete();
+ }
+ }
+ }
+
+ private File makeTempFolder(){
+ File folder = new File(System.getProperty("java.io.tmpdir"));
+ File oteFolder = new File(folder, "otebundleload");
+ if(!oteFolder.exists()){
+ oteFolder.mkdirs();
+ }
+ return oteFolder;
+ }
+
+ public List<BundleInfoLite> copyDeltasToManagedFolder(List<BundleInfoLite> copies) {
+ List<BundleInfoLite> bundlesAdded = new ArrayList<>();
+ for(BundleInfoLite info: copies){
+ File folder = new File(bundleLocationFolder, info.getSymbolicName());
+ folder.mkdirs();
+ File newFile = new File(folder, info.getVersion() + ".jar");
+ if(newFile.exists()){
+ newFile.delete();
+ }
+ FileChannel out = null;
+ FileChannel in = null;
+ try {
+ out = new FileOutputStream(newFile).getChannel();
+ String path = info.getSystemLocation().toURI().getPath();
+ in = new FileInputStream(new File(path)).getChannel();
+
+ long position = 0;
+ long size = in.size();
+ while (position < size) {
+ position += in.transferTo(position, size, out);
+ }
+ BundleInfoLite newBundle = new BundleInfoLite(newFile.toURI().toURL());
+ bundlesAdded.add(newBundle);
+ } catch (IOException e) {
+ OseeLog.log(WorkspaceBundleLoadCoordinator.class, Level.WARNING, e);
+ } catch (URISyntaxException e) {
+ OseeLog.log(WorkspaceBundleLoadCoordinator.class, Level.WARNING, e);
+ } finally {
+ try {
+ if(in != null){
+ in.close();
+ }
+ } catch (IOException e) {
+ }
+ try {
+ if(out != null){
+ out.close();
+ }
+ } catch (IOException e) {
+ }
+ }
+ }
+ return bundlesAdded;
+ }
+
+}
diff --git a/org.eclipse.osee.logback.config/.classpath b/org.eclipse.osee.logback.config/.classpath
new file mode 100644
index 000000000..acad1c227
--- /dev/null
+++ b/org.eclipse.osee.logback.config/.classpath
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.osee.logback.config/.project b/org.eclipse.osee.logback.config/.project
new file mode 100644
index 000000000..8e304fde6
--- /dev/null
+++ b/org.eclipse.osee.logback.config/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.osee.logback.config</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/org.eclipse.osee.logback.config/META-INF/MANIFEST.MF b/org.eclipse.osee.logback.config/META-INF/MANIFEST.MF
new file mode 100644
index 000000000..204c7f707
--- /dev/null
+++ b/org.eclipse.osee.logback.config/META-INF/MANIFEST.MF
@@ -0,0 +1,8 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: OSEE Logback Config (Incubation)
+Bundle-SymbolicName: org.eclipse.osee.logback.config
+Bundle-Version: 0.25.3.qualifier
+Bundle-Vendor: Eclipse Open System Engineering Environment
+Fragment-Host: ch.qos.logback.classic;bundle-version="0.9.27"
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/org.eclipse.osee.logback.config/build.properties b/org.eclipse.osee.logback.config/build.properties
new file mode 100644
index 000000000..72bcc2a17
--- /dev/null
+++ b/org.eclipse.osee.logback.config/build.properties
@@ -0,0 +1,3 @@
+bin.includes = META-INF/,\
+ .,\
+ logback.xml
diff --git a/org.eclipse.osee.logback.config/logback-test.xml b/org.eclipse.osee.logback.config/logback-test.xml
new file mode 100644
index 000000000..f0425fbcd
--- /dev/null
+++ b/org.eclipse.osee.logback.config/logback-test.xml
@@ -0,0 +1,29 @@
+<configuration debug="true">
+ <!-- See documentation at http://logback.qos.ch/manual/joran.html -->
+
+ <!-- To select this configuration add -Dlogback.configurationFile=logback-dev.xml -->
+ <!-- Set attribute debug="true" to configuration xml element to trace logback configuration -->
+
+ <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+ <!-- encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
+ <encoder>
+ <pattern>%-40(%d{HH:mm:ss.SSS} [%-25.25logger{26}] %-5level) - %msg%n</pattern>
+ <outputPatternAsHeader>true</outputPatternAsHeader>
+ </encoder>
+ </appender>
+
+ <!-- Configure OSEE log messages -->
+ <logger name="org.eclipse.osee.jdbc" level="TRACE" />
+
+ <logger name="org.eclipse.osee.orcs.db" level="TRACE" />
+ <logger name="org.eclipse.osee.database" level="TRACE" />
+ <!-- <logger name="org.eclipse.osee.orcs.core" level="TRACE" /> -->
+ <logger name="org.eclipse.osee.framework.core.server" level="INFO" />
+
+ <!-- <logger name="org.apache.cxf" level="INFO" /> -->
+ <!-- <logger name="org.eclipse.osee.hsqldb" level="DEBUG" /> -->
+
+ <root level="WARN">
+ <appender-ref ref="STDOUT" />
+ </root>
+</configuration> \ No newline at end of file
diff --git a/org.eclipse.osee.logback.config/logback.xml b/org.eclipse.osee.logback.config/logback.xml
new file mode 100644
index 000000000..dff7317bb
--- /dev/null
+++ b/org.eclipse.osee.logback.config/logback.xml
@@ -0,0 +1,23 @@
+<configuration debug="true">
+ <!-- See documentation at http://logback.qos.ch/manual/joran.html -->
+
+ <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+ <!-- encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder
+ by default -->
+ <encoder>
+ <pattern>%-50(%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%-25.25logger{26}] %-5level) - %msg%n</pattern>
+ <outputPatternAsHeader>true</outputPatternAsHeader>
+ </encoder>
+ </appender>
+
+ <!-- Configure OSEE log messages -->
+ <logger name="org.eclipse.osee" level="WARN" />
+ <logger name="org.eclipse.osee.framework.core.server" level="INFO" />
+
+ <!-- <logger name="org.eclipse.osee.orcs.db" level="DEBUG" /> -->
+ <!-- <logger name="org.apache.cxf" level="INFO" />-->
+
+ <root level="WARN">
+ <appender-ref ref="STDOUT" />
+ </root>
+</configuration> \ No newline at end of file
diff --git a/org.eclipse.osee.logback.config/pom.xml b/org.eclipse.osee.logback.config/pom.xml
new file mode 100644
index 000000000..0ed3c10b1
--- /dev/null
+++ b/org.eclipse.osee.logback.config/pom.xml
@@ -0,0 +1,17 @@
+<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.eclipse.osee</groupId>
+ <artifactId>org.eclipse.osee.x.server.parent</artifactId>
+ <version>0.25.3-SNAPSHOT</version>
+ <relativePath>../../plugins/org.eclipse.osee.x.server.parent</relativePath>
+ </parent>
+
+ <artifactId>org.eclipse.osee.logback.config</artifactId>
+ <packaging>eclipse-plugin</packaging>
+ <name>OSEE Logback Config - (Incubation)</name>
+
+</project> \ No newline at end of file
diff --git a/org.eclipse.osee.logger.slf4j/.classpath b/org.eclipse.osee.logger.slf4j/.classpath
new file mode 100644
index 000000000..1fa3e6803
--- /dev/null
+++ b/org.eclipse.osee.logger.slf4j/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.osee.logger.slf4j/.project b/org.eclipse.osee.logger.slf4j/.project
new file mode 100644
index 000000000..af3299e9f
--- /dev/null
+++ b/org.eclipse.osee.logger.slf4j/.project
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.osee.logger.slf4j</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ds.core.builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/org.eclipse.osee.logger.slf4j/META-INF/MANIFEST.MF b/org.eclipse.osee.logger.slf4j/META-INF/MANIFEST.MF
new file mode 100644
index 000000000..1081f5b85
--- /dev/null
+++ b/org.eclipse.osee.logger.slf4j/META-INF/MANIFEST.MF
@@ -0,0 +1,15 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Osee Logger Slf4j (Incubation)
+Bundle-SymbolicName: org.eclipse.osee.logger.slf4j
+Bundle-Version: 0.25.3.qualifier
+Import-Package: org.eclipse.osee.framework.jdk.core.util,
+ org.eclipse.osee.logger,
+ org.osgi.framework,
+ org.osgi.service.component,
+ org.osgi.service.log,
+ org.slf4j
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Service-Component: OSGI-INF/*.xml
+Bundle-Vendor: Eclipse Open System Engineering Environment
+Bundle-ActivationPolicy: lazy
diff --git a/org.eclipse.osee.logger.slf4j/OSGI-INF/log.impl.provider.xml b/org.eclipse.osee.logger.slf4j/OSGI-INF/log.impl.provider.xml
new file mode 100644
index 000000000..72fdbd6c4
--- /dev/null
+++ b/org.eclipse.osee.logger.slf4j/OSGI-INF/log.impl.provider.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" activate="start" deactivate="stop" immediate="false" name="org.eclipse.osee.logger.slf4j.internal.Sfl4jLogImpl">
+ <implementation class="org.eclipse.osee.logger.slf4j.internal.Sfl4jLogImpl"/>
+
+ <service servicefactory="true">
+ <provide interface="org.eclipse.osee.logger.Log"/>
+ </service>
+
+</scr:component>
diff --git a/org.eclipse.osee.logger.slf4j/OSGI-INF/log.service.reader.xml b/org.eclipse.osee.logger.slf4j/OSGI-INF/log.service.reader.xml
new file mode 100644
index 000000000..065107400
--- /dev/null
+++ b/org.eclipse.osee.logger.slf4j/OSGI-INF/log.service.reader.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" enabled="true" immediate="true" name="org.eclipse.osee.logger.slf4j.internal.OsgiSlf4jLogger">
+ <implementation class="org.eclipse.osee.logger.slf4j.internal.OsgiSlf4jLogger"/>
+
+ <reference bind="setLoggingService"
+ cardinality="1..1"
+ interface="org.osgi.service.log.LogReaderService"
+ name="LogReaderService"
+ policy="static"
+ target="(objectClass=org.osgi.service.log.LogReaderService)"/>
+
+
+</scr:component>
diff --git a/org.eclipse.osee.logger.slf4j/build.properties b/org.eclipse.osee.logger.slf4j/build.properties
new file mode 100644
index 000000000..c58ea2178
--- /dev/null
+++ b/org.eclipse.osee.logger.slf4j/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ OSGI-INF/
diff --git a/org.eclipse.osee.logger.slf4j/pom.xml b/org.eclipse.osee.logger.slf4j/pom.xml
new file mode 100644
index 000000000..e8b9a8af1
--- /dev/null
+++ b/org.eclipse.osee.logger.slf4j/pom.xml
@@ -0,0 +1,34 @@
+<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.eclipse.osee</groupId>
+ <artifactId>org.eclipse.osee.x.core.parent</artifactId>
+ <version>0.25.3-SNAPSHOT</version>
+ <relativePath>../../plugins/org.eclipse.osee.x.core.parent</relativePath>
+ </parent>
+
+ <artifactId>org.eclipse.osee.logger.slf4j</artifactId>
+ <packaging>eclipse-plugin</packaging>
+ <name>OSEE Logger SLF4J - (Incubation)</name>
+
+ <build>
+ <!-- workaround for https://issues.sonatype.org/browse/TYCHO-168 -->
+ <resources>
+ <resource>
+ <directory>src</directory>
+ <excludes>
+ <exclude>**/*.java</exclude>
+ </excludes>
+ </resource>
+ </resources>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-source-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </build>
+</project> \ No newline at end of file
diff --git a/org.eclipse.osee.logger.slf4j/src/org/eclipse/osee/logger/slf4j/internal/OsgiSlf4jLogger.java b/org.eclipse.osee.logger.slf4j/src/org/eclipse/osee/logger/slf4j/internal/OsgiSlf4jLogger.java
new file mode 100644
index 000000000..e37ebdb34
--- /dev/null
+++ b/org.eclipse.osee.logger.slf4j/src/org/eclipse/osee/logger/slf4j/internal/OsgiSlf4jLogger.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.logger.slf4j.internal;
+
+import org.osgi.service.log.LogListener;
+import org.osgi.service.log.LogReaderService;
+
+/**
+ * @author Roberto E. Escobar
+ */
+public class OsgiSlf4jLogger {
+
+ private LogListener listener;
+ private LogReaderService logService;
+
+ public void setLoggingService(LogReaderService logService) {
+ this.logService = logService;
+ }
+
+ public synchronized void activate() {
+ listener = new Slf4jLogListener();
+ logService.addLogListener(listener);
+ }
+
+ public synchronized void deactivate() {
+ logService.removeLogListener(listener);
+ listener = null;
+ logService = null;
+ }
+}
diff --git a/org.eclipse.osee.logger.slf4j/src/org/eclipse/osee/logger/slf4j/internal/Sfl4jLogImpl.java b/org.eclipse.osee.logger.slf4j/src/org/eclipse/osee/logger/slf4j/internal/Sfl4jLogImpl.java
new file mode 100644
index 000000000..2795e86a6
--- /dev/null
+++ b/org.eclipse.osee.logger.slf4j/src/org/eclipse/osee/logger/slf4j/internal/Sfl4jLogImpl.java
@@ -0,0 +1,207 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.logger.slf4j.internal;
+
+import org.eclipse.osee.logger.Log;
+import org.osgi.framework.Bundle;
+import org.osgi.service.component.ComponentContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.slf4j.Marker;
+import org.slf4j.MarkerFactory;
+
+/**
+ * @author Roberto E. Escobar
+ */
+public class Sfl4jLogImpl implements Log {
+
+ private static final int LOG_ERROR = 1;
+ private static final int LOG_WARNING = 2;
+ private static final int LOG_INFO = 3;
+ private static final int LOG_DEBUG = 4;
+ private static final int LOG_TRACE = 5;
+
+ private Logger logger;
+ private Marker marker;
+
+ public void start(ComponentContext context) {
+ if (logger == null) {
+ Bundle usingBundle = context.getUsingBundle();
+ String symbolicName = null;
+ if (usingBundle != null) {
+ symbolicName = usingBundle.getSymbolicName();
+ } else {
+ symbolicName = "Osee Log";
+ }
+ logger = LoggerFactory.getLogger(symbolicName);
+ marker = MarkerFactory.getMarker(symbolicName);
+ debug("Logger setup for [%s]", logger.getName());
+ }
+ }
+
+ public void stop() {
+ logger = null;
+ marker = null;
+ }
+
+ private Logger getLogger() {
+ return logger;
+ }
+
+ @Override
+ public boolean isTraceEnabled() {
+ return isEnabled(LOG_TRACE);
+ }
+
+ @Override
+ public void trace(String format, Object... args) {
+ trace(null, format, args);
+ }
+
+ @Override
+ public void trace(Throwable th, String format, Object... args) {
+ logHelper(LOG_TRACE, th, format, args);
+ }
+
+ @Override
+ public boolean isDebugEnabled() {
+ return isEnabled(LOG_DEBUG);
+ }
+
+ @Override
+ public void debug(String format, Object... args) {
+ debug(null, format, args);
+ }
+
+ @Override
+ public void debug(Throwable th, String format, Object... args) {
+ logHelper(LOG_DEBUG, th, format, args);
+ }
+
+ @Override
+ public boolean isInfoEnabled() {
+ return isEnabled(LOG_INFO);
+ }
+
+ @Override
+ public void info(String format, Object... args) {
+ info(null, format, args);
+ }
+
+ @Override
+ public void info(Throwable th, String format, Object... args) {
+ logHelper(LOG_INFO, th, format, args);
+ }
+
+ @Override
+ public boolean isWarnEnabled() {
+ return isEnabled(LOG_WARNING);
+ }
+
+ @Override
+ public void warn(String format, Object... args) {
+ warn(null, format, args);
+ }
+
+ @Override
+ public void warn(Throwable th, String format, Object... args) {
+ logHelper(LOG_WARNING, th, format, args);
+ }
+
+ @Override
+ public boolean isErrorEnabled() {
+ return isEnabled(LOG_ERROR);
+ }
+
+ @Override
+ public void error(String format, Object... args) {
+ error(null, format, args);
+ }
+
+ @Override
+ public void error(Throwable th, String format, Object... args) {
+ logHelper(LOG_ERROR, th, format, args);
+ }
+
+ private boolean isEnabled(int level) {
+ boolean result = false;
+ final Logger logger = getLogger();
+ if (logger != null) {
+ switch (level) {
+ case LOG_DEBUG:
+ result = logger.isDebugEnabled();
+ break;
+ case LOG_ERROR:
+ result = logger.isErrorEnabled();
+ break;
+ case LOG_WARNING:
+ result = logger.isWarnEnabled();
+ break;
+ case LOG_INFO:
+ result = logger.isInfoEnabled();
+ break;
+ default:
+ result = logger.isTraceEnabled();
+ break;
+ }
+ }
+ return result;
+ }
+
+ private void logHelper(int level, Throwable th, String format, Object... args) {
+ logHelper(null, level, th, format, args);
+ }
+
+ private void logHelper(Object context, int level, Throwable th, String format, Object... args) {
+ final Logger logger = getLogger();
+ if (isEnabled(level)) {
+ String message = safeFormat(format, args);
+ if (message != null) {
+ switch (level) {
+ case LOG_DEBUG:
+ logger.debug(marker, message, th);
+ break;
+ case LOG_ERROR:
+ logger.error(marker, message, th);
+ break;
+ case LOG_WARNING:
+ logger.warn(marker, message, th);
+ break;
+ case LOG_INFO:
+ logger.info(marker, message, th);
+ break;
+ default:
+ logger.trace(marker, message, th);
+ break;
+ }
+ }
+ }
+ }
+
+ private static String safeFormat(String message, Object... args) {
+ String toReturn;
+ try {
+ toReturn = String.format(message, args);
+ } catch (RuntimeException ex) {
+ StringBuilder builder = new StringBuilder();
+ builder.append("Log message could not be formatted:");
+ builder.append(message);
+ builder.append(" with the following arguments [");
+ builder.append(org.eclipse.osee.framework.jdk.core.util.Collections.toString(",", args));
+ builder.append("]. Cause [");
+ builder.append(ex.toString());
+ builder.append("]");
+ toReturn = builder.toString();
+ }
+ return toReturn;
+ }
+
+}
diff --git a/org.eclipse.osee.logger.slf4j/src/org/eclipse/osee/logger/slf4j/internal/Slf4jLogListener.java b/org.eclipse.osee.logger.slf4j/src/org/eclipse/osee/logger/slf4j/internal/Slf4jLogListener.java
new file mode 100644
index 000000000..8b72c7c68
--- /dev/null
+++ b/org.eclipse.osee.logger.slf4j/src/org/eclipse/osee/logger/slf4j/internal/Slf4jLogListener.java
@@ -0,0 +1,78 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.logger.slf4j.internal;
+
+import org.osgi.service.log.LogEntry;
+import org.osgi.service.log.LogListener;
+import org.osgi.service.log.LogService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.slf4j.Marker;
+import org.slf4j.MarkerFactory;
+
+/**
+ * @author Roberto E. Escobar
+ */
+public class Slf4jLogListener implements LogListener {
+ private static final Logger logger = LoggerFactory.getLogger(Slf4jLogListener.class);
+ private static final String[] remapMessages = new String[] {"Bundle Event", "Service Event"};
+
+ @Override
+ public void logged(LogEntry entry) {
+ try {
+ String symbolicName = entry.getBundle().getSymbolicName();
+ Logger logger = LoggerFactory.getLogger(symbolicName);
+ Marker marker = MarkerFactory.getMarker(symbolicName);
+ logLogEntry(logger, entry.getLevel(), marker, entry.getMessage(), entry.getException());
+ } catch (Exception ex) {
+ logger.error("Error during log listening", ex);
+ }
+ }
+
+ private void logLogEntry(Logger logger, int level, Marker marker, String message, Throwable throwable) {
+ int theLevel = level;
+ if (throwable == null || isOSGIMessage(message)) {
+ theLevel = LogService.LOG_DEBUG;
+ }
+ String originalName = Thread.currentThread().getName();
+ try {
+ Thread.currentThread().setName("Osgi Log Service");
+ switch (theLevel) {
+ case LogService.LOG_DEBUG:
+ logger.debug(marker, message, throwable);
+ break;
+ case LogService.LOG_ERROR:
+ logger.error(marker, message, throwable);
+ break;
+ case LogService.LOG_WARNING:
+ logger.warn(marker, message, throwable);
+ break;
+ case LogService.LOG_INFO:
+ logger.info(marker, message, throwable);
+ break;
+ default:
+ logger.trace(marker, message, throwable);
+ break;
+ }
+ } finally {
+ Thread.currentThread().setName(originalName);
+ }
+ }
+
+ private boolean isOSGIMessage(String message) {
+ for (String toCheck : remapMessages) {
+ if (message.startsWith(toCheck)) {
+ return true;
+ }
+ }
+ return false;
+ }
+} \ No newline at end of file
diff --git a/org.eclipse.osee.logger/.classpath b/org.eclipse.osee.logger/.classpath
new file mode 100644
index 000000000..1fa3e6803
--- /dev/null
+++ b/org.eclipse.osee.logger/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.osee.logger/.project b/org.eclipse.osee.logger/.project
new file mode 100644
index 000000000..d629e9ffb
--- /dev/null
+++ b/org.eclipse.osee.logger/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.osee.logger</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/org.eclipse.osee.logger/META-INF/MANIFEST.MF b/org.eclipse.osee.logger/META-INF/MANIFEST.MF
new file mode 100644
index 000000000..b297e49c6
--- /dev/null
+++ b/org.eclipse.osee.logger/META-INF/MANIFEST.MF
@@ -0,0 +1,8 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Osee Logger (Incubation)
+Bundle-SymbolicName: org.eclipse.osee.logger
+Bundle-Version: 0.25.3.qualifier
+Bundle-Vendor: Eclipse Open System Engineering Environment
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Export-Package: org.eclipse.osee.logger
diff --git a/org.eclipse.osee.logger/build.properties b/org.eclipse.osee.logger/build.properties
new file mode 100644
index 000000000..34d2e4d2d
--- /dev/null
+++ b/org.eclipse.osee.logger/build.properties
@@ -0,0 +1,4 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .
diff --git a/org.eclipse.osee.logger/pom.xml b/org.eclipse.osee.logger/pom.xml
new file mode 100644
index 000000000..f29c1723e
--- /dev/null
+++ b/org.eclipse.osee.logger/pom.xml
@@ -0,0 +1,34 @@
+<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.eclipse.osee</groupId>
+ <artifactId>org.eclipse.osee.x.core.parent</artifactId>
+ <version>0.25.3-SNAPSHOT</version>
+ <relativePath>../../plugins/org.eclipse.osee.x.core.parent</relativePath>
+ </parent>
+
+ <artifactId>org.eclipse.osee.logger</artifactId>
+ <packaging>eclipse-plugin</packaging>
+ <name>OSEE Logger - (Incubation)</name>
+
+ <build>
+ <!-- workaround for https://issues.sonatype.org/browse/TYCHO-168 -->
+ <resources>
+ <resource>
+ <directory>src</directory>
+ <excludes>
+ <exclude>**/*.java</exclude>
+ </excludes>
+ </resource>
+ </resources>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-source-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </build>
+</project> \ No newline at end of file
diff --git a/org.eclipse.osee.logger/src/org/eclipse/osee/logger/Log.java b/org.eclipse.osee.logger/src/org/eclipse/osee/logger/Log.java
new file mode 100644
index 000000000..8ff212409
--- /dev/null
+++ b/org.eclipse.osee.logger/src/org/eclipse/osee/logger/Log.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.logger;
+
+/**
+ * @author Roberto E. Escobar
+ */
+public interface Log {
+
+ boolean isTraceEnabled();
+
+ void trace(String format, Object... args);
+
+ void trace(Throwable th, String format, Object... args);
+
+ boolean isDebugEnabled();
+
+ void debug(String format, Object... args);
+
+ void debug(Throwable th, String format, Object... args);
+
+ boolean isInfoEnabled();
+
+ void info(String format, Object... args);
+
+ void info(Throwable th, String format, Object... args);
+
+ boolean isWarnEnabled();
+
+ void warn(String format, Object... args);
+
+ void warn(Throwable th, String format, Object... args);
+
+ boolean isErrorEnabled();
+
+ void error(String format, Object... args);
+
+ void error(Throwable th, String format, Object... args);
+}
diff --git a/org.eclipse.osee.ote.client.msg/.classpath b/org.eclipse.osee.ote.client.msg/.classpath
new file mode 100644
index 000000000..1fa3e6803
--- /dev/null
+++ b/org.eclipse.osee.ote.client.msg/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.osee.ote.client.msg/.pmd b/org.eclipse.osee.ote.client.msg/.pmd
new file mode 100644
index 000000000..c7b0a9fb3
--- /dev/null
+++ b/org.eclipse.osee.ote.client.msg/.pmd
@@ -0,0 +1,925 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<pmd>
+ <useProjectRuleSet>false</useProjectRuleSet>
+ <ruleSetFile>.ruleset</ruleSetFile>
+ <rules>
+ <rule>
+ <name>LooseCoupling</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CloneMethodMustImplementCloneable</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedImports</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SignatureDeclareThrowsException</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>IfStmtsMustUseBraces</name>
+ <ruleset>Braces Rules</ruleset>
+ </rule>
+ <rule>
+ <name>WhileLoopsMustUseBraces</name>
+ <ruleset>Braces Rules</ruleset>
+ </rule>
+ <rule>
+ <name>IfElseStmtsMustUseBraces</name>
+ <ruleset>Braces Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ForLoopsMustUseBraces</name>
+ <ruleset>Braces Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseSingleton</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SimplifyBooleanReturns</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SimplifyBooleanExpressions</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SwitchStmtsShouldHaveDefault</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidDeeplyNestedIfStmts</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidReassigningParameters</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SwitchDensity</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ConstructorCallsOverridableMethod</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AccessorClassGeneration</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>FinalFieldCouldBeStatic</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CloseResource</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NonStaticInitializer</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DefaultLabelNotLastInSwitchStmt</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NonCaseLabelInSwitchStatement</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>OptimizableToArrayCall</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>BadComparison</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EqualsNull</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ConfusingTernary</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>InstantiationToGetClass</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>IdempotentOperations</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SimpleDateFormatNeedsLocale</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ImmutableField</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseLocaleWithCaseConversions</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidProtectedFieldInFinalClass</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AssignmentToNonFinalStatic</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MissingStaticMethodInNonInstantiatableClass</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidSynchronizedAtMethodLevel</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MissingBreakInSwitch</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseNotifyAllInsteadOfNotify</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidInstanceofChecksInCatchClause</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AbstractClassWithoutAbstractMethod</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SimplifyConditional</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CompareObjectsWithEquals</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>PositionLiteralsFirstInComparisons</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryLocalBeforeReturn</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NonThreadSafeSingleton</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UncommentedEmptyMethod</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UncommentedEmptyConstructor</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidConstantsInterface</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnsynchronizedStaticDateFormatter</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>PreserveStackTrace</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseCollectionIsEmpty</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ClassWithOnlyPrivateConstructorsShouldBeFinal</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyMethodInAbstractClassShouldBeAbstract</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SingularField</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ReturnEmptyArrayRatherThanNull</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AbstractClassWithoutAnyMethod</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>TooFewBranchesForASwitchStatement</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidCatchingThrowable</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SignatureDeclareThrowsException</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ExceptionAsFlowControl</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidCatchingNPE</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidThrowingRawExceptionTypes</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidThrowingNullPointerException</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidRethrowingException</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DoNotExtendJavaLangError</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DoNotThrowExceptionInFinally</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidThrowingNewInstanceOfSameException</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedPrivateField</name>
+ <ruleset>Unused Code Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedLocalVariable</name>
+ <ruleset>Unused Code Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedPrivateMethod</name>
+ <ruleset>Unused Code Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedFormalParameter</name>
+ <ruleset>Unused Code Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MoreThanOneLogger</name>
+ <ruleset>Java Logging Rules</ruleset>
+ </rule>
+ <rule>
+ <name>LoggerIsNotStaticFinal</name>
+ <ruleset>Java Logging Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SystemPrintln</name>
+ <ruleset>Java Logging Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidPrintStackTrace</name>
+ <ruleset>Java Logging Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidDuplicateLiterals</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>StringInstantiation</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>StringToString</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>InefficientStringBuffering</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryCaseChange</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseStringBufferLength</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AppendCharacterWithChar</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ConsecutiveLiteralAppends</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseIndexOfChar</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>InefficientEmptyStringCheck</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>InsufficientStringBufferDeclaration</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UselessStringValueOf</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>StringBufferInstantiationWithChar</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseEqualsToCompareStrings</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidStringBufferField</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ReplaceVectorWithList</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ReplaceHashtableWithMap</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ReplaceEnumerationWithIterator</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidEnumAsIdentifier</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidAssertAsIdentifier</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>IntegerInstantiation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ByteInstantiation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ShortInstantiation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>LongInstantiation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnit4TestShouldUseBeforeAnnotation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnit4TestShouldUseAfterAnnotation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnit4TestShouldUseTestAnnotation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnit4SuitesShouldUseSuiteAnnotation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnitUseExpected</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseProperClassLoader</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MDBAndSessionBeanNamingConvention</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>RemoteSessionInterfaceNamingConvention</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>LocalInterfaceSessionNamingConvention</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>LocalHomeNamingConvention</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>RemoteInterfaceNamingConvention</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DoNotCallSystemExit</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>StaticEJBFieldShouldBeFinal</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DoNotUseThreads</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidInstantiatingObjectsInLoops</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseArrayListInsteadOfVector</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SimplifyStartsWith</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseStringBufferForStringAppends</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseArraysAsList</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidArrayLoops</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryWrapperObjectCreation</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AddEmptyString</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyCatchBlock</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyIfStmt</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyWhileStmt</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyTryBlock</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyFinallyBlock</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptySwitchStatements</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JumbledIncrementer</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ForLoopShouldBeWhileLoop</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryConversionTemporary</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>OverrideBothEqualsAndHashcode</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DoubleCheckedLocking</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ReturnFromFinallyBlock</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptySynchronizedBlock</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryReturn</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyStaticInitializer</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnconditionalIfStatement</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyStatementNotInLoop</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>BooleanInstantiation</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryFinalModifier</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CollapsibleIfStatements</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UselessOverridingMethod</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ClassCastExceptionWithToArray</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidDecimalLiteralsInBigDecimalConstructor</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UselessOperationOnImmutable</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MisplacedNullCheck</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedNullCheckInEquals</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidThreadGroup</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>BrokenNullCheck</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>BigIntegerInstantiation</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidUsingOctalValues</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidUsingHardCodedIP</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CheckResultSet</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidMultipleUnaryOperators</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyInitializer</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MethodReturnsInternalArray</name>
+ <ruleset>Security Code Guidelines</ruleset>
+ </rule>
+ <rule>
+ <name>ArrayIsStoredDirectly</name>
+ <ruleset>Security Code Guidelines</ruleset>
+ </rule>
+ <rule>
+ <name>CouplingBetweenObjects</name>
+ <ruleset>Coupling Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ExcessiveImports</name>
+ <ruleset>Coupling Rules</ruleset>
+ </rule>
+ <rule>
+ <name>LooseCoupling</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DuplicateImports</name>
+ <ruleset>Import Statement Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DontImportJavaLang</name>
+ <ruleset>Import Statement Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedImports</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ImportFromSamePackage</name>
+ <ruleset>Import Statement Rules</ruleset>
+ </rule>
+ <rule>
+ <name>TooManyStaticImports</name>
+ <ruleset>Import Statement Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnitStaticSuite</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnitSpelling</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnitAssertionsShouldIncludeMessage</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnitTestsShouldIncludeAssert</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>TestClassWithoutTestCases</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryBooleanAssertion</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseAssertEqualsInsteadOfAssertTrue</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseAssertSameInsteadOfAssertTrue</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseAssertNullInsteadOfAssertTrue</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SimplifyBooleanAssertion</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryConstructor</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NullAssignment</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedModifier</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AssignmentInOperand</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AtLeastOneConstructor</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DontImportSun</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SuspiciousOctalEscape</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CallSuperInConstructor</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryParentheses</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DefaultPackage</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>BooleanInversion</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DataflowAnomalyAnalysis</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidFinalLocalVariable</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidUsingShortType</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidUsingVolatile</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidUsingNativeCode</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidAccessibilityAlteration</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DoNotCallGarbageCollectionExplicitly</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MethodNamingConventions</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ClassNamingConventions</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AbstractNaming</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidDollarSigns</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MethodWithSameNameAsEnclosingClass</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SuspiciousHashcodeMethodName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SuspiciousConstantFieldName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SuspiciousEqualsMethodName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidFieldNameMatchingTypeName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidFieldNameMatchingMethodName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NoPackage</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>PackageCase</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MisleadingVariableName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>BooleanGetMethodName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NPathComplexity</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ExcessiveMethodLength</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ExcessiveParameterList</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ExcessiveClassLength</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CyclomaticComplexity</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ExcessivePublicCount</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>TooManyFields</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NcssMethodCount</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NcssTypeCount</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NcssConstructorCount</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>TooManyMethods</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyFinalizer</name>
+ <ruleset>Finalizer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>FinalizeOnlyCallsSuperFinalize</name>
+ <ruleset>Finalizer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>FinalizeOverloaded</name>
+ <ruleset>Finalizer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>FinalizeDoesNotCallSuperFinalize</name>
+ <ruleset>Finalizer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>FinalizeShouldBeProtected</name>
+ <ruleset>Finalizer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidCallingFinalize</name>
+ <ruleset>Finalizer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseCorrectExceptionLogging</name>
+ <ruleset>Jakarta Commons Logging Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ProperLogger</name>
+ <ruleset>Jakarta Commons Logging Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MissingSerialVersionUID</name>
+ <ruleset>JavaBean Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ProperCloneImplementation</name>
+ <ruleset>Clone Implementation Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CloneThrowsCloneNotSupportedException</name>
+ <ruleset>Clone Implementation Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CloneMethodMustImplementCloneable</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ </rules>
+ <includeDerivedFiles>false</includeDerivedFiles>
+ <violationsAsErrors>true</violationsAsErrors>
+</pmd>
diff --git a/org.eclipse.osee.ote.client.msg/.project b/org.eclipse.osee.ote.client.msg/.project
new file mode 100644
index 000000000..f678ca87b
--- /dev/null
+++ b/org.eclipse.osee.ote.client.msg/.project
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.osee.ote.client.msg</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ds.core.builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/org.eclipse.osee.ote.client.msg/META-INF/MANIFEST.MF b/org.eclipse.osee.ote.client.msg/META-INF/MANIFEST.MF
new file mode 100644
index 000000000..0c530f75f
--- /dev/null
+++ b/org.eclipse.osee.ote.client.msg/META-INF/MANIFEST.MF
@@ -0,0 +1,22 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Msg Plug-in (Incubation)
+Bundle-SymbolicName: org.eclipse.osee.ote.client.msg;singleton:=true
+Bundle-Version: 0.25.3.qualifier
+Bundle-Activator: org.eclipse.osee.ote.client.msg.core.internal.Activator
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.osee.framework.logging,
+ org.eclipse.osee.ote.core,
+ org.eclipse.osee.ote.client,
+ org.eclipse.osee.ote.connection.service,
+ org.eclipse.osee.framework.jdk.core,
+ org.eclipse.osee.ote.messaging.dds,
+ org.eclipse.osee.framework.plugin.core
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Export-Package: org.eclipse.osee.ote.client.msg,
+ org.eclipse.osee.ote.client.msg.core,
+ org.eclipse.osee.ote.client.msg.core.db
+Bundle-Vendor: Eclipse Open System Engineering Environment
+Service-Component: OSGI-INF/*.xml
+Import-Package: org.osgi.service.event
diff --git a/org.eclipse.osee.ote.client.msg/OSGI-INF/MessageSubscriptionServiceComponent.xml b/org.eclipse.osee.ote.client.msg/OSGI-INF/MessageSubscriptionServiceComponent.xml
new file mode 100644
index 000000000..948f5371d
--- /dev/null
+++ b/org.eclipse.osee.ote.client.msg/OSGI-INF/MessageSubscriptionServiceComponent.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" activate="start" deactivate="stop" name="org.eclipse.osee.ote.client.msg">
+ <implementation class="org.eclipse.osee.ote.client.msg.core.internal.MessageSubscriptionService"/>
+ <reference bind="addMessageDefinitionProvider" cardinality="0..n" interface="org.eclipse.osee.ote.message.MessageDefinitionProvider" name="MessageDefinitionProvider" policy="dynamic" unbind="removeMessageDefinitionProvider"/>
+ <reference bind="bindOteClientService" cardinality="1..1" interface="org.eclipse.osee.ote.service.IOteClientService" name="IOteClientService" policy="static" unbind="unbindOteClientService"/>
+ <service>
+ <provide interface="org.eclipse.osee.ote.client.msg.IOteMessageService"/>
+ <provide interface="org.eclipse.osee.ote.message.interfaces.IMsgToolServiceClient"/>
+ <provide interface="org.osgi.service.event.EventHandler"/>
+ </service>
+ <property name="event.topics" type="String" value="ote/message/recordingComplete"/>
+</scr:component>
diff --git a/org.eclipse.osee.ote.client.msg/build.properties b/org.eclipse.osee.ote.client.msg/build.properties
new file mode 100644
index 000000000..6210e849b
--- /dev/null
+++ b/org.eclipse.osee.ote.client.msg/build.properties
@@ -0,0 +1,5 @@
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ OSGI-INF/
+source.. = src/
diff --git a/org.eclipse.osee.ote.client.msg/pom.xml b/org.eclipse.osee.ote.client.msg/pom.xml
new file mode 100644
index 000000000..fe2ba6e5e
--- /dev/null
+++ b/org.eclipse.osee.ote.client.msg/pom.xml
@@ -0,0 +1,35 @@
+<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.eclipse.osee</groupId>
+ <artifactId>org.eclipse.osee.ote.parent</artifactId>
+ <version>0.25.3-SNAPSHOT</version>
+ <relativePath>../org.eclipse.osee.ote.parent</relativePath>
+ </parent>
+
+ <artifactId>org.eclipse.osee.ote.client.msg</artifactId>
+ <packaging>eclipse-plugin</packaging>
+ <name>OTE Client Message (Incubation)</name>
+
+ <build>
+ <!-- workaround for https://issues.sonatype.org/browse/TYCHO-168 -->
+ <resources>
+ <resource>
+ <directory>src</directory>
+ <excludes>
+ <exclude>**/*.java</exclude>
+ </excludes>
+ </resource>
+ </resources>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-source-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </build>
+
+</project> \ No newline at end of file
diff --git a/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/IOteMessageService.java b/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/IOteMessageService.java
new file mode 100644
index 000000000..8ba1114b9
--- /dev/null
+++ b/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/IOteMessageService.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ote.client.msg;
+
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.List;
+
+import org.eclipse.osee.ote.client.msg.core.IMessageSubscription;
+import org.eclipse.osee.ote.message.commands.RecordCommand;
+import org.eclipse.osee.ote.message.enums.DataType;
+import org.eclipse.osee.ote.message.tool.IFileTransferHandle;
+import org.eclipse.osee.ote.message.tool.MessageMode;
+
+/**
+ * @author Ken J. Aguilar
+ */
+public interface IOteMessageService {
+ IMessageSubscription subscribe(String name);
+
+ IMessageSubscription subscribe(String name, MessageMode mode);
+
+ IMessageSubscription subscribe(String name, DataType dataType, MessageMode mode);
+
+ IMessageSubscription subscribe(String name, String dataType, MessageMode mode);
+
+ IFileTransferHandle startRecording(String fileName, List<RecordCommand.MessageRecordDetails> list) throws FileNotFoundException, IOException;
+
+ void stopRecording() throws Exception;
+}
diff --git a/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/AbstractMessageListener.java b/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/AbstractMessageListener.java
new file mode 100644
index 000000000..bfbc1c187
--- /dev/null
+++ b/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/AbstractMessageListener.java
@@ -0,0 +1,52 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ote.client.msg.core;
+
+import org.eclipse.osee.ote.message.MessageSystemException;
+import org.eclipse.osee.ote.message.listener.IOSEEMessageListener;
+
+/**
+ * @author Ken J. Aguilar
+ */
+public abstract class AbstractMessageListener implements ISubscriptionListener, IOSEEMessageListener {
+
+ private final IMessageSubscription subscription;
+
+ protected AbstractMessageListener(IMessageSubscription subscription) {
+ this.subscription = subscription;
+ }
+
+ @Override
+ public void subscriptionCanceled(IMessageSubscription subscription) {
+ if (subscription.isResolved()) {
+ subscription.getMessage().removeListener(this);
+ }
+ }
+
+ @Override
+ public void subscriptionResolved(IMessageSubscription subscription) {
+ if (subscription.isResolved()) {
+ subscription.getMessage().addListener(this);
+ }
+ }
+
+ @Override
+ public void subscriptionUnresolved(IMessageSubscription subscription) {
+ }
+
+ @Override
+ public void onInitListener() throws MessageSystemException {
+ }
+
+ public IMessageSubscription getSubscription() {
+ return subscription;
+ }
+}
diff --git a/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/IMessageDbFactory.java b/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/IMessageDbFactory.java
new file mode 100644
index 000000000..d6954f6f9
--- /dev/null
+++ b/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/IMessageDbFactory.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ote.client.msg.core;
+
+import org.eclipse.osee.ote.client.msg.core.db.AbstractMessageDataBase;
+
+/**
+ * @author Ken J. Aguilar
+ */
+public interface IMessageDbFactory {
+
+ AbstractMessageDataBase createMessageDataBase();
+}
diff --git a/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/IMessageSubscription.java b/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/IMessageSubscription.java
new file mode 100644
index 000000000..cfd34421a
--- /dev/null
+++ b/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/IMessageSubscription.java
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ote.client.msg.core;
+
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.osee.ote.message.Message;
+import org.eclipse.osee.ote.message.enums.DataType;
+import org.eclipse.osee.ote.message.tool.MessageMode;
+
+/**
+ * @author Ken J. Aguilar
+ */
+public interface IMessageSubscription {
+ Message getMessage();
+
+ void cancel();
+
+ String getMessageClassName();
+
+ MessageMode getMessageMode();
+
+ DataType getMemType();
+
+ /**
+ * returns whether or not the subscription has been activated. A subscription is considered activated if and only if
+ * a proper connection to a test server has been established and a successful registration of the subscription is
+ * made. A subscription is not bound to any instance of a test server. A subscription is honored even when switching
+ * between different test servers.
+ */
+ boolean isActive();
+
+ boolean isResolved();
+
+ void changeMemType(DataType type);
+
+ void send() throws Exception;
+
+ void setElementValue(List<Object> path, String value) throws Exception;
+ void setElementValueNoSend(List<Object> path, String value) throws Exception;
+ void zeroize(List<Object> path) throws Exception;
+
+ void changeMessageMode(MessageMode mode);
+
+ Set<DataType> getAvailableTypes();
+
+ boolean addSubscriptionListener(ISubscriptionListener listener);
+
+ boolean removeSubscriptionListener(ISubscriptionListener listener);
+}
diff --git a/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/ISubscriptionListener.java b/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/ISubscriptionListener.java
new file mode 100644
index 000000000..1d3afd64b
--- /dev/null
+++ b/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/ISubscriptionListener.java
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ote.client.msg.core;
+
+import org.eclipse.osee.ote.message.Message;
+
+/**
+ * @author Ken J. Aguilar
+ */
+public interface ISubscriptionListener {
+ /**
+ * called when a subscription can no longer be fulfilled by the message service. this occurs when runtime libraries
+ * are changed and the message does not exist. Can be called when a message exist in the libraries but is not
+ * supported by the test environment. all references and event listeners must be removed
+ */
+ void subscriptionInvalidated(IMessageSubscription subscription);
+
+ /**
+ * called upon a successful acquisition of a {@link Message} instance. At this point, no message traffic is being
+ * transmitted but operations on the message are allowed. Subclasses should register any event listeners on
+ * {@link Message} upon this method being invoked.
+ */
+ void subscriptionResolved(IMessageSubscription subscription);
+
+ /**
+ * called when the message library has been unloaded. The subscription will still be honored by the system and can be
+ * reactivated upon a reload of a library assuming the library has a definition for the message. Subclasses should
+ * <B>must no longer reference</B> the ({@link Message} related to the subscription. Subclasses do not need to
+ * de-register any event listeners since all listeners will be cleared. The message is still in a valid state during
+ * this method invocation but not after.
+ */
+ void subscriptionUnresolved(IMessageSubscription subscription);
+
+ /**
+ * called upon successful registration with the test server. Message traffic is now possible
+ */
+ void subscriptionActivated(IMessageSubscription subscription);
+
+ /**
+ * called when the {@link IMessageSubscription#cancel()} method is called. Any references and event listeners must be
+ * removed.
+ */
+ void subscriptionCanceled(IMessageSubscription subscription);
+
+ /**
+ * called when the subscription is resolved but a connected environment does not support this type of message. The
+ * message can still be referenced but no updates will be delivered.
+ */
+ void subscriptionNotSupported(IMessageSubscription subscription);
+}
diff --git a/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/db/AbstractMessageDataBase.java b/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/db/AbstractMessageDataBase.java
new file mode 100644
index 000000000..da18e02e2
--- /dev/null
+++ b/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/db/AbstractMessageDataBase.java
@@ -0,0 +1,204 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ote.client.msg.core.db;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.Executor;
+import java.util.concurrent.Executors;
+import java.util.logging.Level;
+
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.plugin.core.util.ExportClassLoader;
+import org.eclipse.osee.ote.client.msg.core.internal.MessageReference;
+import org.eclipse.osee.ote.message.Message;
+import org.eclipse.osee.ote.message.data.MessageData;
+import org.eclipse.osee.ote.message.enums.DataType;
+import org.eclipse.osee.ote.message.interfaces.IMsgToolServiceClient;
+import org.eclipse.osee.ote.message.tool.MessageMode;
+import org.eclipse.osee.ote.messaging.dds.entity.DataReader;
+import org.eclipse.osee.ote.messaging.dds.entity.EntityFactory;
+
+/**
+ * @author Ken J. Aguilar
+ */
+public abstract class AbstractMessageDataBase {
+
+ private final HashMap<MessageReference, MessageInstance> referenceToMsgMap =
+ new HashMap<MessageReference, MessageInstance>();
+ private final ConcurrentHashMap<Integer, MessageInstance> idToMsgMap =
+ new ConcurrentHashMap<Integer, MessageInstance>();
+
+ private Executor worker = Executors.newSingleThreadExecutor();
+
+ private IMsgToolServiceClient client;
+ private volatile boolean connected = false;
+ private final DataReader reader = new DataReader(null, null, true, null, new EntityFactory() {
+
+ @Override
+ public boolean isEnabled() {
+ return true;
+ }
+
+ });
+
+ protected AbstractMessageDataBase(IMsgToolServiceClient service) {
+ client = service;
+ }
+
+ public MessageInstance findInstance(String name, MessageMode mode, DataType type) {
+ MessageReference reference = new MessageReference(type, mode, name);
+ return referenceToMsgMap.get(reference);
+ }
+
+ public MessageInstance acquireInstance(String name) throws Exception {
+ return acquireInstance(name, MessageMode.READER, (DataType) null);
+ }
+
+ public MessageInstance acquireInstance(String name, MessageMode mode, DataType type) throws Exception {
+ if (type == null) {
+ Class<? extends Message> msgClass = ExportClassLoader.getInstance().loadClass(name).asSubclass(Message.class);
+
+ type = msgClass.newInstance().getDefaultMessageData().getType();
+ }
+ MessageReference reference = new MessageReference(type, mode, name);
+ MessageInstance instance = referenceToMsgMap.get(reference);
+ if (instance == null) {
+ Class<? extends Message> msgClass = ExportClassLoader.getInstance().loadClass(name).asSubclass(Message.class);
+ Message msg = createMessage(msgClass);
+ for (ArrayList<MessageData> dataList : (Collection<ArrayList<MessageData>>) msg.getAllData()) {
+ for (MessageData data : dataList) {
+ data.setReader(reader);
+ }
+ }
+ msg.setMemSource(type);
+ instance = new MessageInstance(msg, mode, type);
+ referenceToMsgMap.put(reference, instance);
+ }
+ instance.incrementReferenceCount();
+ if (connected && !instance.isAttached()) {
+ doInstanceAttach(instance);
+ }
+ return instance;
+ }
+
+ public MessageInstance acquireInstance(String name, MessageMode mode, String dataType) throws Exception {
+ Class<? extends Message> msgClass = ExportClassLoader.getInstance().loadClass(name).asSubclass(Message.class);
+ Message msg = msgClass.newInstance();
+
+ //Set<DataType> available = msg.getAvailableMemTypes();
+ Set<DataType> available = msg.getAssociatedMessages().keySet();
+ DataType requestDataType = msg.getDefaultMessageData().getType();
+ for (DataType type : available) {
+ if (type.name().equals(dataType)) {
+ requestDataType = type;
+ break;
+ }
+
+ }
+ MessageReference reference = new MessageReference(requestDataType, mode, name);
+ MessageInstance instance = referenceToMsgMap.get(reference);
+ if (instance == null) {
+ msg = createMessage(msgClass);
+ msg.setMemSource(requestDataType);
+ for (ArrayList<MessageData> dataList : (Collection<ArrayList<MessageData>>) msg.getAllData()) {
+ for (MessageData data : dataList) {
+ data.setReader(reader);
+ }
+ }
+ instance = new MessageInstance(msg, mode, requestDataType);
+ referenceToMsgMap.put(reference, instance);
+ }
+ instance.incrementReferenceCount();
+ if (connected && !instance.isAttached()) {
+ doInstanceAttach(instance);
+ }
+ return instance;
+ }
+
+
+ public void releaseInstance(MessageInstance instance) throws Exception {
+ instance.decrementReferenceCount();
+ if (!instance.hasReferences()) {
+ if (instance.isAttached()) {
+ doInstanceDetach(instance);
+ }
+ MessageReference reference =
+ new MessageReference(instance.getType(), instance.getMode(), instance.getMessage().getClass().getName());
+ referenceToMsgMap.remove(reference);
+ destroyMessage(instance.getMessage());
+ }
+
+ }
+
+ protected abstract Message createMessage(Class<? extends Message> msgClass) throws Exception;
+
+ protected abstract void destroyMessage(Message message) throws Exception;
+
+ public void attachToService(IMsgToolServiceClient client) {
+ connected = true;
+ this.client = client;
+ for (MessageInstance instance : referenceToMsgMap.values()) {
+ try {
+ doInstanceAttach(instance);
+ } catch (Exception e) {
+ OseeLog.log(AbstractMessageDataBase.class, Level.SEVERE,
+ "could not attach instance for " + instance.toString(), e);
+ }
+ }
+ }
+
+ public void detachService() {
+ for (MessageInstance instance : referenceToMsgMap.values()) {
+ doInstanceDetach(instance);
+ }
+ connected = false;
+ this.client = null;
+ }
+
+ public MessageInstance findById(int id) {
+ return idToMsgMap.get(id);
+ }
+
+ private boolean doInstanceAttach(MessageInstance instance) throws Exception {
+ worker.execute(new Runnable() {
+ @Override
+ public void run() {
+ Integer id;
+ try {
+ id = instance.attachToService(client);
+ if (id != null) {
+ idToMsgMap.put(id, instance);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ });
+ return true;
+ }
+
+ private void doInstanceDetach(MessageInstance instance) {
+ try {
+ Integer id = instance.getId();
+ if (id != null) {
+ idToMsgMap.remove(id);
+ }
+ instance.detachService(client);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+}
diff --git a/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/db/MessageInstance.java b/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/db/MessageInstance.java
new file mode 100644
index 000000000..4800f403a
--- /dev/null
+++ b/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/db/MessageInstance.java
@@ -0,0 +1,140 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ote.client.msg.core.db;
+
+import java.net.InetSocketAddress;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.eclipse.osee.ote.client.msg.core.internal.MessageServiceSupport;
+import org.eclipse.osee.ote.message.Message;
+import org.eclipse.osee.ote.message.commands.SubscribeToMessage;
+import org.eclipse.osee.ote.message.commands.UnSubscribeToMessage;
+import org.eclipse.osee.ote.message.enums.DataType;
+import org.eclipse.osee.ote.message.interfaces.IMsgToolServiceClient;
+import org.eclipse.osee.ote.message.tool.MessageMode;
+import org.eclipse.osee.ote.message.tool.SubscriptionDetails;
+import org.eclipse.osee.ote.message.tool.SubscriptionKey;
+
+/**
+ * @author Ken J. Aguilar
+ */
+public class MessageInstance {
+
+ private final DataType type;
+ private final MessageMode mode;
+ private final Message msg;
+ private SubscriptionKey serverSubscriptionKey = null;
+ private int refcount = 0;
+ private boolean supported = true;
+ private volatile boolean connected = false;
+ private HashSet<DataType> availableTypes = new HashSet<>();
+
+ public MessageInstance(Message msg, MessageMode mode, DataType type) {
+ this.msg = msg;
+ this.mode = mode;
+ this.type = type;
+ }
+
+ public Message getMessage() {
+ return msg;
+ }
+
+ public SubscriptionKey getServerSubscriptionKey() {
+ return serverSubscriptionKey;
+ }
+
+ public void setServerSubscriptionKey(SubscriptionKey serverSubscriptionKey) {
+ this.serverSubscriptionKey = serverSubscriptionKey;
+ }
+
+ public boolean isAttached() {
+ return serverSubscriptionKey != null;
+ }
+
+ public Integer attachToService(IMsgToolServiceClient client) throws Exception {
+ InetSocketAddress address = client.getAddressByType(msg.getClass().getName(), type);
+ SubscriptionDetails details;
+ if(address == null){
+ details = null;
+ } else {
+ details = MessageServiceSupport.subscribeToMessage(new SubscribeToMessage(msg.getClass().getName(), type, mode,
+ client.getAddressByType(msg.getClass().getName(), type), client.getTestSessionKey()));
+
+ }
+ if (details == null) {
+ supported = false;
+ return null;
+ }
+ supported = true;
+ msg.setData(details.getCurrentData());
+ connected = true;
+ //determine types for message
+ Set<? extends DataType> envSet = MessageServiceSupport.getAvailablePhysicalTypes();
+ Set<DataType> available = msg.getAssociatedMessages().keySet();
+ for(DataType type : available.toArray(new DataType[available.size()])){
+ if(envSet.contains(type)){
+ availableTypes.add(type);
+ }
+ }
+
+ serverSubscriptionKey = details.getKey();
+ return serverSubscriptionKey.getId();
+ }
+
+ public void detachService(IMsgToolServiceClient client) throws Exception {
+ if (supported) {
+ MessageServiceSupport.unsubscribeToMessage(new UnSubscribeToMessage(msg.getClass().getName(), mode, type,
+ client.getAddressByType(msg.getClass().getName(), type)));
+ }
+ availableTypes.clear();
+ connected = false;
+ serverSubscriptionKey = null;
+ }
+
+ public Integer getId() {
+ return serverSubscriptionKey != null ? serverSubscriptionKey.getId() : null;
+ }
+
+ public void incrementReferenceCount() {
+ refcount++;
+ }
+
+ public void decrementReferenceCount() {
+ refcount--;
+ }
+
+ public boolean hasReferences() {
+ return refcount > 0;
+ }
+
+ public DataType getType() {
+ return type;
+ }
+
+ public MessageMode getMode() {
+ return mode;
+ }
+
+ public Set<DataType> getAvailableTypes() {
+ return availableTypes;
+ }
+
+ public boolean isSupported() {
+ return supported;
+ }
+
+ @Override
+ public String toString() {
+ return String.format("Message Instance(type=%s, mode=%s, ref=%d, supported=%b)", type.name(), mode.name(),
+ refcount, supported);
+ }
+}
diff --git a/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/Activator.java b/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/Activator.java
new file mode 100644
index 000000000..80c312030
--- /dev/null
+++ b/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/Activator.java
@@ -0,0 +1,82 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ote.client.msg.core.internal;
+
+import org.eclipse.core.runtime.Plugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends Plugin {
+
+ // The plug-in ID
+ public static final String PLUGIN_ID = "org.eclipse.ote.client.msg";
+
+ // The shared instance
+ private static Activator plugin;
+
+ private BundleContext context;
+
+// private OteClientServiceTracker tracker;
+
+ /**
+ * The constructor
+ */
+ public Activator() {
+ }
+
+ @Override
+ public void start(BundleContext context) throws Exception {
+ super.start(context);
+ this.context = context;
+ plugin = this;
+
+// ExtensionDefinedObjects<IMessageDbFactory> definedObjects =
+// new ExtensionDefinedObjects<IMessageDbFactory>("org.eclipse.osee.ote.client.msg.dBFactory", "DatabaseFactory",
+// "className");
+// try {
+// List<IMessageDbFactory> providers = definedObjects.getObjects();
+// if (!providers.isEmpty()) {
+// tracker = new OteClientServiceTracker(providers.get(0));
+// tracker.open(true);
+// } else {
+// OseeLog.log(Activator.class, Level.WARNING,
+// "No message database factory (IMessageDbFactory) found. Message Subscription Service not started");
+// }
+// } catch (Exception ex) {
+// OseeLog.log(Activator.class, Level.SEVERE, "failed to process message database factory extensions", ex);
+// }
+
+ }
+
+ @Override
+ public void stop(BundleContext context) throws Exception {
+ plugin = null;
+// tracker.close();
+ super.stop(context);
+ this.context = null;
+ }
+
+ /**
+ * Returns the shared instance
+ *
+ * @return the shared instance
+ */
+ public static Activator getDefault() {
+ return plugin;
+ }
+
+ BundleContext getBundleContext() {
+ return context;
+ }
+
+}
diff --git a/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/ChannelProcessor.java b/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/ChannelProcessor.java
new file mode 100644
index 000000000..a09f096ff
--- /dev/null
+++ b/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/ChannelProcessor.java
@@ -0,0 +1,136 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ote.client.msg.core.internal;
+
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.nio.channels.ReadableByteChannel;
+import java.util.Arrays;
+import java.util.concurrent.ArrayBlockingQueue;
+import java.util.concurrent.ExecutorService;
+import java.util.logging.Level;
+
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.ote.client.msg.core.db.AbstractMessageDataBase;
+import org.eclipse.osee.ote.client.msg.core.db.MessageInstance;
+import org.eclipse.osee.ote.message.data.MessageData;
+import org.eclipse.osee.ote.message.enums.DataType;
+
+/**
+ * Handles processing of updates from a channel. The channel processor maintains an internal queue whose max size
+ * dictates the maximum number of concurrent updates. All updates are submitted to the given thread pool for execution.
+ *
+ * @author Ken J. Aguilar
+ */
+final public class ChannelProcessor {
+ private final ArrayBlockingQueue<Task> queue;
+ private final ExecutorService threadPool;
+ private final AbstractMessageDataBase msgDb;
+ private final DataType memType;
+
+ /**
+ * A task allows each channel to have multiple updates processed concurrently. Each task has its own buffers.
+ *
+ * @author Ken J. Aguilar
+ */
+ private final class Task implements Runnable {
+ private final ByteBuffer buffer;
+
+ public Task(ByteBuffer buffer) {
+ this.buffer = buffer;
+ }
+
+ public void prepTask(ReadableByteChannel channel) throws IOException {
+ buffer.clear();
+ // read the data from the channel into the buffer
+ channel.read(buffer);
+ buffer.flip();
+ }
+
+ @Override
+ public void run() {
+ try {
+ final int id = buffer.getInt();
+ final long time = buffer.getLong();
+ final MessageInstance instance = msgDb.findById(id);
+ if (instance != null) {
+ onUpdate(instance, buffer, time);
+ }
+ // return to the queue
+ queue.put(this);
+ } catch (InterruptedException e) {
+ // do nothing
+ } catch (Exception ex) {
+ OseeLog.log(Activator.class, Level.SEVERE, "failed to process message update", ex);
+ }
+ }
+ }
+
+ public ChannelProcessor(int depth, int bufferSize, ExecutorService threadPool, AbstractMessageDataBase msgDb, DataType memType) {
+ this.queue = new ArrayBlockingQueue<>(depth);
+ try {
+ // fill the queue with pre-allocated tasks
+ for (int i = 0; i < depth; i++) {
+ queue.put(new Task(ByteBuffer.allocateDirect(bufferSize)));
+ }
+ } catch (InterruptedException ex) {
+ throw new Error("should never happen", ex);
+ }
+ this.threadPool = threadPool;
+ this.msgDb = msgDb;
+ this.memType = memType;
+ }
+
+ public final void process(final ReadableByteChannel channel) throws InterruptedException, IOException {
+ // get a free task
+ final Task task = queue.take();
+
+ // prep the task
+ task.prepTask(channel);
+
+ // the task is now ready for execution, submit it to the thread pool
+ threadPool.submit(task);
+ }
+
+ /**
+ * called when there is data to be processed from a channel. Can be called by one or more threads for the same data
+ * concurrently to so implementors need to be thread safe
+ */
+ protected void onUpdate(MessageInstance instance, ByteBuffer buffer, long time) {
+ MessageData msgData = instance.getMessage().getActiveDataSource(memType);
+ if (msgData != null) {
+ msgData.setTime(time);
+ byte[] data = msgData.getMem().getData();
+ int remaining = buffer.remaining();
+ if (data.length < remaining) {
+ OseeLog.logf(Activator.class, Level.WARNING,
+ "Message [%s] changed it's backing data size from [%d] to [%d].", instance.getMessage().getName(),
+ data.length, remaining);
+ data = new byte[remaining];
+ buffer.get(data, 0, remaining);
+ msgData.setNewBackingBuffer(data);
+ msgData.incrementActivityCount();
+ msgData.notifyListeners();
+ return;
+ }
+
+ if (remaining < data.length) {
+ Arrays.fill(data, remaining, data.length, (byte) 0);
+ // msg.getActiveDataSource().setCurrentLength(remaining);
+ }
+ buffer.get(data, 0, remaining);
+ msgData.setCurrentLength(remaining);
+ msgData.incrementActivityCount();
+ msgData.notifyListeners();
+ }
+ }
+
+}
diff --git a/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/MessageDatabase.java b/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/MessageDatabase.java
new file mode 100644
index 000000000..0bc23d357
--- /dev/null
+++ b/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/MessageDatabase.java
@@ -0,0 +1,73 @@
+/*******************************************************************************
+ * Copyright (c) 2013 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ote.client.msg.core.internal;
+
+import java.util.LinkedList;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+import org.eclipse.osee.ote.client.msg.core.db.AbstractMessageDataBase;
+import org.eclipse.osee.ote.client.msg.core.db.MessageInstance;
+import org.eclipse.osee.ote.message.Message;
+import org.eclipse.osee.ote.message.data.MessageData;
+import org.eclipse.osee.ote.message.enums.DataType;
+import org.eclipse.osee.ote.message.interfaces.IMsgToolServiceClient;
+import org.eclipse.osee.ote.message.tool.MessageMode;
+
+/**
+ * @author Ken J. Aguilar
+ */
+public class MessageDatabase extends AbstractMessageDataBase {
+
+ public MessageDatabase(IMsgToolServiceClient service) {
+ super(service);
+ }
+
+ @Override
+ protected Message createMessage(Class<? extends Message> msgClass) throws Exception {
+ Message msg = msgClass.newInstance();
+ LinkedList<MessageData> source = new LinkedList<>();
+ Map<DataType, Class<? extends Message>[]> messages = msg.getAssociatedMessages();
+ Set<Entry<DataType, Class<? extends Message>[]>> entrySet = messages.entrySet();
+ for (Entry<DataType, Class<? extends Message>[]> entry : entrySet) {
+ for (Class<? extends Message> clazz : entry.getValue()) {
+ MessageInstance instance = acquireInstance(clazz.getName());
+ Message newMsg = instance.getMessage();
+ source.add(newMsg.getActiveDataSource());
+ msg.addMessageTypeAssociation(entry.getKey(), newMsg);
+ }
+ }
+ if (!source.isEmpty()) {
+ msg.addMessageDataSource(source);
+ }
+ return msg;
+ }
+
+ @Override
+ protected void destroyMessage(Message message) throws Exception {
+ try {
+ Map<DataType, Class<? extends Message>[]> messages = message.getAssociatedMessages();
+ Set<Entry<DataType, Class<? extends Message>[]>> entrySet = messages.entrySet();
+ for (Entry<DataType, Class<? extends Message>[]> entry : entrySet) {
+ for (Class<? extends Message> clazz : entry.getValue()) {
+ MessageInstance instance = findInstance(clazz.getName(), MessageMode.READER, entry.getKey());
+ if (instance != null) {
+ releaseInstance(instance);
+ }
+ }
+ }
+ } finally {
+ message.destroy();
+ }
+ }
+
+}
diff --git a/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/MessageReference.java b/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/MessageReference.java
new file mode 100644
index 000000000..5f78dfcdf
--- /dev/null
+++ b/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/MessageReference.java
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ote.client.msg.core.internal;
+
+import org.eclipse.osee.ote.message.Message;
+import org.eclipse.osee.ote.message.enums.DataType;
+import org.eclipse.osee.ote.message.tool.MessageMode;
+
+/**
+ * @author Ken J. Aguilar
+ */
+public class MessageReference {
+
+ private final DataType type;
+ private final MessageMode mode;
+ private final String msgClassName;
+
+ public MessageReference(DataType type, MessageMode mode, String msgClassName) {
+ this.type = type;
+ this.mode = mode;
+ this.msgClassName = msgClassName;
+ }
+
+ public MessageReference(Message msg) {
+ this.type = msg.getDefaultMessageData().getType();
+ this.mode = MessageMode.READER;
+ this.msgClassName = msg.getMessageName();
+ }
+
+ public String getMsgClass() {
+ return msgClassName;
+ }
+
+ public DataType getType() {
+ return type;
+ }
+
+ public MessageMode getMode() {
+ return mode;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj == null) {
+ return false;
+ }
+ MessageReference otherRef = (MessageReference) obj;
+ return msgClassName.equals(otherRef.msgClassName) && type == otherRef.type && mode == otherRef.mode;
+ }
+
+ @Override
+ public int hashCode() {
+ return msgClassName.hashCode() ^ mode.hashCode() ^ type.hashCode();
+ }
+
+}
diff --git a/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/MessageServiceSupport.java b/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/MessageServiceSupport.java
new file mode 100644
index 000000000..325afa785
--- /dev/null
+++ b/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/MessageServiceSupport.java
@@ -0,0 +1,191 @@
+package org.eclipse.osee.ote.client.msg.core.internal;
+
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.net.UnknownHostException;
+import java.util.Set;
+import java.util.concurrent.Executor;
+import java.util.concurrent.Executors;
+
+import org.eclipse.osee.ote.OTEException;
+import org.eclipse.osee.ote.core.ServiceUtility;
+import org.eclipse.osee.ote.message.commands.RecordCommand;
+import org.eclipse.osee.ote.message.commands.SetElementValue;
+import org.eclipse.osee.ote.message.commands.SubscribeToMessage;
+import org.eclipse.osee.ote.message.commands.UnSubscribeToMessage;
+import org.eclipse.osee.ote.message.commands.ZeroizeElement;
+import org.eclipse.osee.ote.message.enums.DataType;
+import org.eclipse.osee.ote.message.event.OteEventMessageUtil;
+import org.eclipse.osee.ote.message.event.send.OteSendEventMessage;
+import org.eclipse.osee.ote.message.tool.SubscriptionDetails;
+import org.eclipse.osee.ote.remote.messages.AVAILABLE_PHYSICAL_TYPES_REQ;
+import org.eclipse.osee.ote.remote.messages.GET_INET_ADDRESS_REQ;
+import org.eclipse.osee.ote.remote.messages.GET_INET_ADDRESS_RESP;
+import org.eclipse.osee.ote.remote.messages.SOCKET_ID;
+import org.eclipse.osee.ote.remote.messages.STOP_RECORDING_CMD;
+import org.eclipse.osee.ote.remote.messages.SerializedAvailablePhysicalTypesMessage;
+import org.eclipse.osee.ote.remote.messages.SerializedRecordCommandMessage;
+import org.eclipse.osee.ote.remote.messages.SerializedSetElementMessage;
+import org.eclipse.osee.ote.remote.messages.SerializedSubscribeToMessage;
+import org.eclipse.osee.ote.remote.messages.SerializedSubscriptionDetailsMessage;
+import org.eclipse.osee.ote.remote.messages.SerializedUnSubscribeMessage;
+import org.eclipse.osee.ote.remote.messages.SerializedZeroizeElementMessage;
+import org.osgi.service.event.EventAdmin;
+
+public class MessageServiceSupport {
+
+ private static EventAdmin admin;
+ private static OteSendEventMessage send;
+ private static Executor worker = Executors.newSingleThreadExecutor();
+
+ private static EventAdmin getEventAdmin(){
+ if(admin == null){
+ admin = ServiceUtility.getService(EventAdmin.class);
+ }
+ return admin;
+ }
+
+ private static OteSendEventMessage get(){
+ if(send == null){
+ send = new OteSendEventMessage(getEventAdmin());
+ }
+ return send;
+ }
+
+ /**
+ * @deprecated use {@link #subscribeToMessage(SubscribeToMessage, SubscriptionHandler)}
+ * @param subscribeToMessage
+ * @return
+ */
+ @Deprecated
+ public static SubscriptionDetails subscribeToMessage(SubscribeToMessage subscribeToMessage) {
+ SerializedSubscriptionDetailsMessage resp = new SerializedSubscriptionDetailsMessage();
+ try{
+ SerializedSubscribeToMessage cmd = new SerializedSubscribeToMessage(subscribeToMessage);
+ resp = get().synchSendAndResponse(resp, cmd, 10000);
+ if(resp == null){
+ throw new OTEException("Timed out waiting for message response");
+ }
+ SubscriptionDetails details = resp.getObject();
+ return details;
+ } catch (IOException ex){
+ throw new OTEException("Serialization Error", ex);
+ } catch (ClassNotFoundException e) {
+ throw new OTEException("Serialization Error", e);
+ }
+ }
+
+ /**
+ * Subscribes to a message and notifies the user in a callback so that we do not block any UI threads.
+ *
+ * @param subscribeToMessage
+ * @param handler
+ */
+ public static void subscribeToMessage(SubscribeToMessage subscribeToMessage, SubscriptionHandler handler) {
+ worker.execute(new Runnable(){
+ @Override
+ public void run() {
+ SerializedSubscriptionDetailsMessage resp = new SerializedSubscriptionDetailsMessage();
+ try{
+ SerializedSubscribeToMessage cmd = new SerializedSubscribeToMessage(subscribeToMessage);
+ resp = get().synchSendAndResponse(resp, cmd, 10000);
+ if(resp == null){
+ throw new OTEException("Timed out waiting for message response");
+ }
+ SubscriptionDetails details = resp.getObject();
+ handler.onSubscriptionComplete(details);
+ } catch (IOException ex){
+ throw new OTEException("Serialization Error", ex);
+ } catch (ClassNotFoundException e) {
+ throw new OTEException("Serialization Error", e);
+ }
+ }
+
+ });
+
+ }
+
+ public static void unsubscribeToMessage(UnSubscribeToMessage unSubscribeToMessage) {
+ SerializedUnSubscribeMessage cmd;
+ try {
+ cmd = new SerializedUnSubscribeMessage(unSubscribeToMessage);
+ OteEventMessageUtil.postEvent(cmd);
+ } catch (IOException e) {
+ throw new OTEException("Serialization Error", e);
+ }
+ }
+
+ public static Set<? extends DataType> getAvailablePhysicalTypes() throws OTEException {
+ AVAILABLE_PHYSICAL_TYPES_REQ req = new AVAILABLE_PHYSICAL_TYPES_REQ();
+ try{
+ SerializedAvailablePhysicalTypesMessage types = new SerializedAvailablePhysicalTypesMessage();
+ types = get().synchSendAndResponse(types, req, 10000);
+ if(types == null){
+ throw new OTEException("Timed out waiting for message response");
+ }
+ return types.getObject();
+ } catch (IOException ex){
+ throw new OTEException("Serialization Error", ex);
+ } catch (ClassNotFoundException e) {
+ throw new OTEException("Serialization Error", e);
+ }
+ }
+
+ public static InetSocketAddress getMsgUpdateSocketAddress() throws OTEException {
+ return getCommonAddress(SOCKET_ID.MSG_UPDATES);
+ }
+
+ public static InetSocketAddress getRecorderSocketAddress() throws OTEException {
+ return getCommonAddress(SOCKET_ID.RECORDER);
+ }
+
+ private static InetSocketAddress getCommonAddress(SOCKET_ID id){
+ GET_INET_ADDRESS_REQ req = new GET_INET_ADDRESS_REQ();
+ req.SOCKET_ID.setValue(id);
+ GET_INET_ADDRESS_RESP resp = get().synchSendAndResponse(GET_INET_ADDRESS_RESP.class, GET_INET_ADDRESS_RESP.TOPIC, req, 10000);//todo retry?
+ InetSocketAddress address;
+ if(resp == null){
+ throw new OTEException("Timed out waiting for message response");
+ } else {
+ try {
+ address = new InetSocketAddress(resp.ADDRESS.getAddress(), resp.ADDRESS.getPort());
+ } catch (UnknownHostException e) {
+ throw new OTEException(e);
+ }
+ }
+ return address;
+ }
+
+ public static void startRecording(RecordCommand cmd) {
+ try {
+ SerializedRecordCommandMessage msg = new SerializedRecordCommandMessage(cmd);
+ OteEventMessageUtil.postEvent(msg);
+ } catch (IOException e) {
+ throw new OTEException("Error starting recording", e);
+ }
+ }
+
+ public static void stopRecording() {
+ STOP_RECORDING_CMD cmd = new STOP_RECORDING_CMD();
+ OteEventMessageUtil.postEvent(cmd);
+ }
+
+ public static void setElementValue(SetElementValue cmd) {
+ try {
+ SerializedSetElementMessage msg = new SerializedSetElementMessage(cmd);
+ OteEventMessageUtil.postEvent(msg);
+ } catch (IOException e) {
+ throw new OTEException(e);
+ }
+ }
+
+ public static void zeroizeElement(ZeroizeElement cmd) {
+ try {
+ SerializedZeroizeElementMessage msg = new SerializedZeroizeElementMessage(cmd);
+ OteEventMessageUtil.postEvent(msg);
+ } catch (IOException e) {
+ throw new OTEException(e);
+ }
+ }
+
+}
diff --git a/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/MessageSubscription.java b/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/MessageSubscription.java
new file mode 100644
index 000000000..8b5793973
--- /dev/null
+++ b/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/MessageSubscription.java
@@ -0,0 +1,257 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ote.client.msg.core.internal;
+
+import java.util.List;
+import java.util.Set;
+import java.util.concurrent.CopyOnWriteArraySet;
+
+import org.eclipse.osee.ote.client.msg.core.IMessageSubscription;
+import org.eclipse.osee.ote.client.msg.core.ISubscriptionListener;
+import org.eclipse.osee.ote.client.msg.core.db.AbstractMessageDataBase;
+import org.eclipse.osee.ote.client.msg.core.internal.state.ISubscriptionState;
+import org.eclipse.osee.ote.client.msg.core.internal.state.UnresolvedState;
+import org.eclipse.osee.ote.message.Message;
+import org.eclipse.osee.ote.message.commands.SetElementValue;
+import org.eclipse.osee.ote.message.commands.ZeroizeElement;
+import org.eclipse.osee.ote.message.enums.DataType;
+import org.eclipse.osee.ote.message.tool.MessageMode;
+
+/**
+ * @author Ken J. Aguilar
+ */
+public class MessageSubscription implements IMessageSubscription {
+
+ private ISubscriptionState currentState = null;
+ private final MessageSubscriptionService msgService;
+ private final CopyOnWriteArraySet<ISubscriptionListener> listeners = new CopyOnWriteArraySet<>();
+
+ private String requestedDataType;
+
+
+ /**
+ * creates a subscription with no reference to a message
+ */
+ public MessageSubscription(MessageSubscriptionService msgService) {
+ this.msgService = msgService;
+ }
+
+ public synchronized void bind(String name) {
+ bind(name, (DataType)null, MessageMode.READER);
+ }
+
+ public synchronized void bind(String name, DataType type, MessageMode mode) {
+ currentState = new UnresolvedState(name, this, type, mode);
+ }
+
+ public synchronized void bind(String name, String type, MessageMode mode) {
+ requestedDataType = type;
+ currentState = new UnresolvedState(name, this, null, mode);
+ }
+
+ @Override
+ public synchronized boolean isActive() {
+ return currentState != null ? currentState.isActive() : false;
+ }
+
+ @Override
+ public synchronized boolean isResolved() {
+ return currentState != null ? currentState.isResolved() : false;
+ }
+
+ @Override
+ public synchronized DataType getMemType() {
+ return currentState.getMemType();
+ }
+
+ @Override
+ public synchronized MessageMode getMessageMode() {
+ return currentState.getMode();
+ }
+
+ @Override
+ public synchronized String getMessageClassName() {
+ return currentState.getMsgClassName();
+ }
+
+ @Override
+ public synchronized Message getMessage() {
+ return currentState.getMessage();
+ }
+
+ public synchronized void attachMessageDb(AbstractMessageDataBase msgDb) {
+ currentState = currentState.onMessageDbFound(msgDb);
+ }
+
+ public synchronized void detachMessageDb(AbstractMessageDataBase msgDb) {
+ currentState = currentState.onMessageDbClosing(msgDb);
+ }
+
+ public synchronized void attachService() {
+ currentState = currentState.onActivated();
+ }
+
+ public synchronized void detachService() {
+ currentState = currentState.onDeactivated();
+ }
+
+ private void doCancel() {
+ if (currentState != null) {
+ currentState.onCanceled();
+ currentState = null;
+ }
+ }
+
+ @Override
+ public synchronized Set<DataType> getAvailableTypes() {
+ return currentState.getAvailableTypes();
+ }
+
+ @Override
+ public synchronized void changeMessageMode(MessageMode mode) {
+ if (mode == getMessageMode()) {
+ return;
+ }
+ String name = getMessageClassName();
+ DataType type = getMemType();
+ notifyCanceled();
+ doCancel();
+ bind(name, type, mode);
+ progressState();
+ }
+
+ @Override
+ public synchronized void cancel() {
+ if (currentState == null) {
+ return;
+ }
+ try {
+ notifyCanceled();
+ } finally {
+ doCancel();
+ msgService.removeSubscription(this);
+ }
+ }
+
+ @Override
+ public synchronized void changeMemType(DataType type) {
+ if (type == getMemType()) {
+ return;
+ }
+ String name = getMessageClassName();
+ MessageMode mode = getMessageMode();
+ doCancel();
+ bind(name, type, mode);
+ progressState();
+ }
+
+ private void progressState() {
+ if (msgService.getMsgDatabase() != null) {
+ attachMessageDb(msgService.getMsgDatabase());
+ if(msgService.isConnected()){
+ attachService();
+ }
+ }
+ }
+
+ @Override
+ public void setElementValue(List<Object> path, String value) throws Exception {
+ final SetElementValue cmd = new SetElementValue(getMessageClassName(), getMemType(), path, value, true);
+ MessageServiceSupport.setElementValue(cmd);
+ }
+
+ @Override
+ public void setElementValueNoSend(List<Object> path, String value)
+ throws Exception {
+ final SetElementValue cmd = new SetElementValue(getMessageClassName(), getMemType(), path, value, false);
+ MessageServiceSupport.setElementValue(cmd);
+ }
+
+ @Override
+ public void send() throws Exception {
+ final SetElementValue cmd = new SetElementValue(getMessageClassName(), getMemType(), null, null, true);
+ MessageServiceSupport.setElementValue(cmd);
+ }
+
+ @Override
+ public void zeroize(List<Object> path) throws Exception {
+ final ZeroizeElement cmd = new ZeroizeElement(getMessageClassName(), getMemType(), path);
+ MessageServiceSupport.zeroizeElement(cmd);
+ }
+
+ public void notifyCanceled() {
+ for (ISubscriptionListener listener : listeners) {
+ listener.subscriptionCanceled(MessageSubscription.this);
+ }
+ }
+
+ public void notifyActivated() {
+ for (ISubscriptionListener listener : listeners) {
+ listener.subscriptionActivated(MessageSubscription.this);
+ }
+ }
+
+ public void notifyInvalidated() {
+ for (ISubscriptionListener listener : listeners) {
+ listener.subscriptionInvalidated(MessageSubscription.this);
+ }
+ }
+
+ public void notifyResolved() {
+ for (ISubscriptionListener listener : listeners) {
+ listener.subscriptionResolved(MessageSubscription.this);
+ }
+ }
+
+ public void notifyUnresolved() {
+ for (ISubscriptionListener listener : listeners) {
+ listener.subscriptionUnresolved(MessageSubscription.this);
+ }
+ }
+
+ @Override
+ public synchronized boolean addSubscriptionListener(ISubscriptionListener listener) {
+ boolean result = listeners.add(listener);
+ if (currentState == null) {
+ listener.subscriptionCanceled(this);
+ } else {
+ if (msgService.getMsgDatabase() != null) {
+ // a database is available
+ if (currentState.isResolved()) {
+ listener.subscriptionResolved(this);
+ } else {
+ listener.subscriptionInvalidated(this);
+ }
+ if (currentState.isActive()) {
+ listener.subscriptionActivated(this);
+ }
+ }
+
+ }
+
+ return result;
+ }
+
+ @Override
+ public boolean removeSubscriptionListener(ISubscriptionListener listener) {
+ return listeners.remove(listener);
+ }
+
+ public String getRequestedDataType() {
+ return requestedDataType;
+ }
+
+ public void setRequestedDataType(String requestedDataType) {
+ this.requestedDataType = requestedDataType;
+ }
+
+
+}
diff --git a/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/MessageSubscriptionService.java b/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/MessageSubscriptionService.java
new file mode 100644
index 000000000..8b2018ffc
--- /dev/null
+++ b/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/MessageSubscriptionService.java
@@ -0,0 +1,371 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ote.client.msg.core.internal;
+
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.net.InetAddress;
+import java.net.InetSocketAddress;
+import java.nio.channels.DatagramChannel;
+import java.rmi.RemoteException;
+import java.util.List;
+import java.util.Set;
+import java.util.UUID;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ThreadFactory;
+import java.util.concurrent.TimeUnit;
+import java.util.logging.Level;
+
+import org.eclipse.osee.connection.service.IServiceConnector;
+import org.eclipse.osee.framework.jdk.core.util.network.PortUtil;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.plugin.core.util.ExportClassLoader;
+import org.eclipse.osee.ote.client.msg.IOteMessageService;
+import org.eclipse.osee.ote.client.msg.core.IMessageSubscription;
+import org.eclipse.osee.ote.client.msg.core.db.AbstractMessageDataBase;
+import org.eclipse.osee.ote.message.Message;
+import org.eclipse.osee.ote.message.MessageDefinitionProvider;
+import org.eclipse.osee.ote.message.commands.RecordCommand;
+import org.eclipse.osee.ote.message.commands.RecordCommand.MessageRecordDetails;
+import org.eclipse.osee.ote.message.enums.DataType;
+import org.eclipse.osee.ote.message.interfaces.IMsgToolServiceClient;
+import org.eclipse.osee.ote.message.interfaces.ITestEnvironmentMessageSystem;
+import org.eclipse.osee.ote.message.tool.IFileTransferHandle;
+import org.eclipse.osee.ote.message.tool.MessageMode;
+import org.eclipse.osee.ote.message.tool.TransferConfig;
+import org.eclipse.osee.ote.message.tool.UdpFileTransferHandler;
+import org.eclipse.osee.ote.remote.messages.RECORDING_COMPLETE;
+import org.eclipse.osee.ote.service.ConnectionEvent;
+import org.eclipse.osee.ote.service.IOteClientService;
+import org.eclipse.osee.ote.service.ITestConnectionListener;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.FrameworkUtil;
+import org.osgi.service.event.Event;
+import org.osgi.service.event.EventHandler;
+
+/**
+ * @author Ken J. Aguilar
+ */
+public class MessageSubscriptionService implements IOteMessageService, ITestConnectionListener, IMsgToolServiceClient, EventHandler {
+
+ /** * Static Fields ** */
+ private static final int MAX_CONCURRENT_WORKER_THREADS = Math.min(Runtime.getRuntime().availableProcessors() + 1, 4);
+
+ private final InetAddress localAddress;
+ private final List<MessageSubscription> subscriptions = new CopyOnWriteArrayList<>();
+ private volatile AbstractMessageDataBase msgDatabase;
+ private UdpFileTransferHandler fileTransferHandler;
+ private volatile boolean connected = false;
+
+ private final ExecutorService threadPool = Executors.newFixedThreadPool(MAX_CONCURRENT_WORKER_THREADS,
+ new ThreadFactory() {
+ private final ThreadGroup group =
+ new ThreadGroup(Thread.currentThread().getThreadGroup(), "Msg Watch Workers");
+ private int count = 1;
+
+ @Override
+ public Thread newThread(Runnable arg0) {
+ Thread thread = new Thread(group, arg0, "Msg Watch Wrkr - " + count++);
+ thread.setDaemon(false);
+ return thread;
+ }
+ });
+
+ /**
+ * Monitors a set of channels for message updates and dispatches the updates to worker threads
+ */
+ private UpdateDispatcher dispatcher = null;
+// private volatile IRemoteMessageService service;
+
+ private volatile IOteClientService clientService;
+
+ public void start(){
+ clientService.addConnectionListener(this);
+ }
+
+ public void stop(){
+ clientService.removeConnectionListener(this);
+ }
+
+ public void bindOteClientService(IOteClientService clientService){
+ this.clientService = clientService;
+ }
+
+ public void unbindOteClientService(IOteClientService clientService){
+ this.clientService = null;
+ }
+
+ public MessageSubscriptionService() throws IOException {
+ localAddress = InetAddress.getLocalHost();
+ msgDatabase = new MessageDatabase(this);
+ OseeLog.log(Activator.class, Level.INFO,
+ "OTE client message service started on: " + localAddress.getHostAddress());
+ }
+
+ @Override
+ public synchronized IMessageSubscription subscribe(String name) {
+ MessageSubscription subscription = new MessageSubscription(this);
+ subscription.bind(name);
+ if (msgDatabase != null) {
+ subscription.attachMessageDb(msgDatabase);
+ if(connected){
+ subscription.attachService();
+ }
+ }
+ subscriptions.add(subscription);
+ return subscription;
+ }
+
+ @Override
+ public IMessageSubscription subscribe(String name, MessageMode mode) {
+ return subscribe(name, (DataType)null, mode);
+ }
+
+ @Override
+ public IMessageSubscription subscribe(String name, DataType dataType,
+ MessageMode mode) {
+ MessageSubscription subscription = new MessageSubscription(this);
+ subscription.bind(name, dataType, mode);
+ if (msgDatabase != null) {
+ subscription.attachMessageDb(msgDatabase);
+ if(connected){
+ subscription.attachService();
+ }
+ }
+ subscriptions.add(subscription);
+ return subscription;
+ }
+
+ @Override
+ public IMessageSubscription subscribe(String name, String dataType,
+ MessageMode mode) {
+ MessageSubscription subscription = new MessageSubscription(this);
+ subscription.bind(name, dataType, mode);
+ if (msgDatabase != null) {
+ subscription.attachMessageDb(msgDatabase);
+ if(connected) {
+ subscription.attachService();
+ }
+ }
+ subscriptions.add(subscription);
+ return subscription;
+ }
+
+ /**
+ * Shuts down the client message service. All worker threads will be terminated and all IO resources will be closed.
+ */
+ public void shutdown() {
+ OseeLog.log(MessageSubscriptionService.class, Level.INFO, "shutting down subscription service");
+ clientService.removeConnectionListener(this);
+ shutdownDispatcher();
+ threadPool.shutdown();
+ try {
+ threadPool.awaitTermination(5, TimeUnit.SECONDS);
+ } catch (InterruptedException ex1) {
+ OseeLog.log(Activator.class, Level.WARNING, ex1.toString(), ex1);
+ }
+ }
+
+ @Override
+ public synchronized void onConnectionLost(IServiceConnector connector) {
+ OseeLog.log(Activator.class, Level.INFO, "connection lost: ote client message service halted");
+ shutdownDispatcher();
+ msgDatabase.detachService();
+ for (MessageSubscription subscription : subscriptions) {
+ subscription.detachService();
+ }
+ connected = false;
+ }
+
+ @Override
+ public synchronized void onPostConnect(ConnectionEvent event) {
+ assert msgDatabase != null;
+ connected = true;
+ OseeLog.log(Activator.class, Level.INFO, "connecting OTE client message service");
+ if (event.getEnvironment() instanceof ITestEnvironmentMessageSystem) {
+ ITestEnvironmentMessageSystem env = (ITestEnvironmentMessageSystem) event.getEnvironment();
+ try{
+ dispatcher = new UpdateDispatcher(MessageServiceSupport.getMsgUpdateSocketAddress());
+ try {
+ createProccessors();
+ } catch (Exception e) {
+ OseeLog.log(MessageSubscriptionService.class, Level.SEVERE, "failed to create update processors", e);
+ return;
+ }
+
+ msgDatabase.attachToService(this);
+ for (MessageSubscription subscription : subscriptions) {
+ subscription.attachService();
+ }
+ dispatcher.start();
+ } catch (IOException ex){
+ OseeLog.log(MessageSubscriptionService.class, Level.SEVERE, "failed to create update processors", ex);
+ }
+ }
+ }
+
+ private void createProccessors() throws IOException {
+ Set<? extends DataType> availableTypes = MessageServiceSupport.getAvailablePhysicalTypes();
+
+ for (DataType type : availableTypes) {
+ final ChannelProcessor handler =
+ new ChannelProcessor(1, type.getToolingBufferSize(), threadPool, msgDatabase, type);
+ dispatcher.addChannel(localAddress, 0, type, handler);
+ }
+ }
+
+ private void shutdownDispatcher() {
+ if (dispatcher != null && dispatcher.isRunning()) {
+ try {
+ dispatcher.close();
+ } catch (Throwable ex) {
+ OseeLog.log(MessageSubscriptionService.class, Level.WARNING, "exception while closing down dispatcher", ex);
+ } finally {
+ dispatcher = null;
+ }
+ }
+ }
+
+ @Override
+ public synchronized void onPreDisconnect(ConnectionEvent event) {
+ msgDatabase.detachService();
+ for (MessageSubscription subscription : subscriptions) {
+ subscription.detachService();
+ }
+ shutdownDispatcher();
+ connected = false;
+ }
+
+ @Override
+ public void changeIsScheduled(String msgName, boolean isScheduled) throws RemoteException {
+
+ }
+
+ @Override
+ public void changeRate(String msgName, double rate) throws RemoteException {
+
+ }
+
+ @Override
+ public InetSocketAddress getAddressByType(String messageName, DataType dataType) throws RemoteException {
+ if(dispatcher == null){
+ return null;
+ }
+ final DatagramChannel channel = dispatcher.getChannel(dataType);
+ if(channel == null){
+ return null;
+ }
+ return new InetSocketAddress(localAddress, channel.socket().getLocalPort());
+ }
+
+ @Override
+ public UUID getTestSessionKey() throws RemoteException {
+ return clientService.getSessionKey();
+ }
+
+ public void addMessageDefinitionProvider(MessageDefinitionProvider provider){
+ for (MessageSubscription subscription : subscriptions) {
+ if(!subscription.isResolved()){
+ subscription.attachMessageDb(msgDatabase);
+ }
+ }
+ }
+
+ public void removeMessageDefinitionProvider(MessageDefinitionProvider provider){
+ for (MessageSubscription subscription : subscriptions) {
+ if(subscription.isResolved()){
+ Class<? extends Message> msg = null;
+ Bundle hostBundle = null;
+ try {
+ msg = ExportClassLoader.getInstance().loadClass(subscription.getMessageClassName()).asSubclass(Message.class);
+ hostBundle = FrameworkUtil.getBundle(msg.getClass());
+ } catch (ClassNotFoundException e) {
+ } finally{
+ if(msg == null || hostBundle == null){
+ subscription.detachMessageDb(msgDatabase);
+ }
+ }
+ }
+ }
+ }
+
+ @Override
+ public synchronized IFileTransferHandle startRecording(String fileName, List<MessageRecordDetails> list) throws FileNotFoundException, IOException {
+ if(!connected){
+ throw new IllegalStateException("can't record: not connected to test server");
+ }
+ if (fileTransferHandler == null) {
+ fileTransferHandler = new UdpFileTransferHandler();
+ fileTransferHandler.start();
+ }
+ int port = PortUtil.getInstance().getValidPort();
+ // get the address of the socket the message recorder is going to write
+ // data to
+ InetSocketAddress recorderOutputAddress = MessageServiceSupport.getRecorderSocketAddress();
+
+ // setup a transfer from a socket to a file
+ TransferConfig config =
+ new TransferConfig(fileName, recorderOutputAddress, new InetSocketAddress(InetAddress.getLocalHost(), port),
+ TransferConfig.Direction.SOCKET_TO_FILE, 128000);
+ IFileTransferHandle handle = fileTransferHandler.registerTransfer(config);
+
+ // send the command to start recording
+ RecordCommand cmd =
+ new RecordCommand(this.getTestSessionKey(), new InetSocketAddress(InetAddress.getLocalHost(), port), list);
+ MessageServiceSupport.startRecording(cmd);
+ OseeLog.log(
+ Activator.class,
+ Level.INFO,
+ "recording started with " + list.size() + " entries, recorder output socket=" + recorderOutputAddress.toString());
+ return handle;
+ }
+
+ @Override
+ public synchronized void stopRecording() throws RemoteException, IOException {
+ MessageServiceSupport.stopRecording();
+ }
+
+ /* (non-Javadoc)
+ * @see org.osgi.service.event.EventHandler#handleEvent(org.osgi.service.event.Event)
+ */
+ @Override
+ public void handleEvent(Event event) {
+ if(event.getTopic().equals(RECORDING_COMPLETE.TOPIC)) {
+
+ if (fileTransferHandler != null && fileTransferHandler.hasActiveTransfers()) {
+ try {
+ fileTransferHandler.stopAllTransfers();
+ }
+ catch (IOException ex) {
+ System.err.println(ex.getMessage());
+ ex.printStackTrace(System.err);
+ }
+ }
+ fileTransferHandler = null;
+ }
+
+ }
+
+ public AbstractMessageDataBase getMsgDatabase() {
+ return msgDatabase;
+ }
+
+ public void removeSubscription(MessageSubscription subscription) {
+ subscriptions.remove(subscription);
+ }
+
+ public boolean isConnected() {
+ return connected;
+ }
+
+}
diff --git a/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/OteClientServiceTracker.java b/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/OteClientServiceTracker.java
new file mode 100644
index 000000000..b7843101c
--- /dev/null
+++ b/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/OteClientServiceTracker.java
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ote.client.msg.core.internal;
+
+import org.eclipse.osee.ote.client.msg.core.IMessageDbFactory;
+import org.eclipse.osee.ote.service.IOteClientService;
+import org.osgi.framework.ServiceReference;
+import org.osgi.framework.ServiceRegistration;
+import org.osgi.util.tracker.ServiceTracker;
+
+public class OteClientServiceTracker extends ServiceTracker {
+
+ private final IMessageDbFactory factory;
+
+ private MessageSubscriptionService messageSubscriptionService;
+
+ private ServiceRegistration registration;
+
+ OteClientServiceTracker(IMessageDbFactory factory) {
+ super(Activator.getDefault().getBundleContext(), IOteClientService.class.getName(), null);
+ this.factory = factory;
+ }
+
+ @Override
+ public Object addingService(ServiceReference reference) {
+ IOteClientService service = (IOteClientService) super.addingService(reference);
+// try {
+// messageSubscriptionService = new MessageSubscriptionService(service, factory);
+// registration = context.registerService(IOteMessageService.class.getName(), messageSubscriptionService, null);
+// } catch (IOException e) {
+// OseeLog.log(OteClientServiceTracker.class, Level.SEVERE, "could not start Message Service", e);
+// }
+ return service;
+ }
+
+ @Override
+ public void removedService(ServiceReference reference, Object service) {
+ shutdownMessageService();
+ super.removedService(reference, service);
+ }
+
+ private void shutdownMessageService() {
+ if (registration != null) {
+ registration.unregister();
+ registration = null;
+ }
+ if (messageSubscriptionService != null) {
+ messageSubscriptionService.shutdown();
+ messageSubscriptionService = null;
+ }
+ }
+
+ @Override
+ public void close() {
+ shutdownMessageService();
+ super.close();
+ }
+
+}
diff --git a/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/SubscriptionHandler.java b/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/SubscriptionHandler.java
new file mode 100644
index 000000000..a9ddc6440
--- /dev/null
+++ b/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/SubscriptionHandler.java
@@ -0,0 +1,9 @@
+package org.eclipse.osee.ote.client.msg.core.internal;
+
+import org.eclipse.osee.ote.message.tool.SubscriptionDetails;
+
+public interface SubscriptionHandler {
+
+ void onSubscriptionComplete(SubscriptionDetails details);
+
+}
diff --git a/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/UpdateDispatcher.java b/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/UpdateDispatcher.java
new file mode 100644
index 000000000..489dda19b
--- /dev/null
+++ b/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/UpdateDispatcher.java
@@ -0,0 +1,173 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ote.client.msg.core.internal;
+
+import java.io.IOException;
+import java.net.InetAddress;
+import java.net.InetSocketAddress;
+import java.nio.channels.DatagramChannel;
+import java.nio.channels.SelectionKey;
+import java.nio.channels.Selector;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+import java.util.logging.Level;
+
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.ote.message.enums.DataType;
+
+/**
+ * A thread that listens for activity on a set of channels and then dispatches any recieved UDP packets to the
+ * appropriate worker threads
+ *
+ * @author Ken J. Aguilar
+ */
+public final class UpdateDispatcher {
+ private static final int RECEIVE_BUFFER_SIZE = 1024 * 512;
+
+ /** * Class Instance Fields ** */
+ private final Map<DataType, DatagramChannel> channelMap = new HashMap<>();
+
+ private final InetSocketAddress remoteAddress;
+ private final Object gate = new Object();
+ private final Selector channelSelector;
+ private volatile boolean running = false;
+
+ private final Runnable runner = new Runnable() {
+
+ @Override
+ public void run() {
+
+ running = true;
+ try {
+ while (running) {
+ /* check to see if something has interrupted this thread */
+ if (Thread.interrupted()) {
+ OseeLog.log(Activator.class, Level.FINE, "Channel Listener Thread interrupted");
+ running = false;
+ } else {
+ /*
+ * wait for channel activity on all channels registered with this selector
+ */
+ final int readyCount = channelSelector.select();
+ if (readyCount != 0) {
+ /* get the set of readable channels */
+ final Set<SelectionKey> readyChannels = channelSelector.selectedKeys();
+
+ /* iterate through the set of readable channels */
+ final Iterator<SelectionKey> keys = readyChannels.iterator();
+ while (keys.hasNext()) {
+ final SelectionKey key = keys.next();
+ /* make sure the channel is still valid */
+ if (key.isValid() && key.isReadable()) {
+ ((ChannelProcessor) key.attachment()).process((DatagramChannel) key.channel());
+ }
+ keys.remove();
+ }
+ }
+ synchronized (gate) {
+ /*
+ * do this to prevent the current thread from entering the channelSelector.select() method during
+ * registration of channels with the selector. Not doing this will cause deadlock
+ */
+ }
+ }
+ }
+ } catch (InterruptedException ie) {
+ /*
+ * something has interrupted us, most likely we need to shut down. Catching the exception clears the
+ * interrupted flag
+ */
+ OseeLog.log(Activator.class, Level.INFO, "Channel Listener Interrupted... Shutting down");
+ } catch (IOException ioe) {
+ OseeLog.log(Activator.class, Level.INFO,
+ "IOException occurred in channel listening thread... shutting down ", ioe);
+ } catch (Throwable t) {
+ OseeLog.log(Activator.class, Level.SEVERE,
+ "Unusual exception occurred in channel listening thread... shutting down ", t);
+ }
+ running = false;
+ OseeLog.log(Activator.class, Level.INFO, "Channel Listener thread has terminated");
+ }
+
+ };
+
+ private final Thread thread = new Thread(runner, "Message Update Dispatcher Thread");
+
+ public UpdateDispatcher(InetSocketAddress remoteAddress) throws IOException {
+ this.remoteAddress = remoteAddress;
+ thread.setDaemon(false);
+ channelSelector = Selector.open();
+ }
+
+ public void start() {
+ thread.start();
+ }
+
+ public boolean isRunning() {
+ return running;
+ }
+
+ public DatagramChannel getChannel(DataType type) {
+ return channelMap.get(type);
+ }
+
+ public SelectionKey addChannel(InetAddress localAddress, int port, DataType type, ChannelProcessor processor) throws IOException {
+ final DatagramChannel channel = DatagramChannel.open();
+ channel.configureBlocking(false);
+ channel.socket().bind(new InetSocketAddress(localAddress, port));
+ if (channel.socket().getReceiveBufferSize() < RECEIVE_BUFFER_SIZE) {
+ channel.socket().setReceiveBufferSize(RECEIVE_BUFFER_SIZE);
+ }
+ channel.connect(remoteAddress);
+ if (channelMap.put(type, channel) != null) {
+ OseeLog.log(UpdateDispatcher.class, Level.WARNING, "A previous channel was replaced");
+ }
+ synchronized (gate) {
+ channelSelector.wakeup();
+ return channel.register(channelSelector, SelectionKey.OP_READ, processor);
+ }
+ }
+
+ /**
+ * terminates this thread in a graceful manner and attempts to release resources
+ */
+ public void close() {
+ thread.interrupt();
+ try {
+ thread.join();
+ } catch (InterruptedException ex) {
+ OseeLog.log(Activator.class, Level.WARNING, "Interrupted while joining", ex);
+ } finally {
+ OseeLog.log(Activator.class, Level.INFO, "clearing pool");
+ /* release IO resources */
+ try {
+ channelSelector.close();
+ } catch (Exception ex) {
+ OseeLog.log(Activator.class, Level.WARNING, "Exception closing selector", ex);
+ } finally {
+ for (final DataType type : channelMap.keySet()) {
+ try {
+ final DatagramChannel channel = channelMap.get(type);
+ if (channel != null) {
+ channel.close();
+ }
+
+ } catch (Throwable ex) {
+ OseeLog.log(Activator.class, Level.WARNING, "could not close channel for " + type, ex);
+ }
+ }
+ channelMap.clear();
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/state/AbstractSubscriptionState.java b/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/state/AbstractSubscriptionState.java
new file mode 100644
index 000000000..45fe82b32
--- /dev/null
+++ b/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/state/AbstractSubscriptionState.java
@@ -0,0 +1,56 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ote.client.msg.core.internal.state;
+
+import org.eclipse.osee.ote.client.msg.core.internal.MessageSubscription;
+import org.eclipse.osee.ote.message.enums.DataType;
+import org.eclipse.osee.ote.message.tool.MessageMode;
+
+/**
+ * @author Ken J. Aguilar
+ */
+public abstract class AbstractSubscriptionState implements ISubscriptionState {
+
+ private final DataType type;
+ private final MessageMode mode;
+ private final MessageSubscription subscription;
+
+ protected AbstractSubscriptionState(MessageSubscription subscription, DataType type, MessageMode mode) {
+ this.subscription = subscription;
+ this.type = type;
+ this.mode = mode;
+ }
+
+ protected AbstractSubscriptionState(AbstractSubscriptionState otherState) {
+ this.subscription = otherState.getSubscription();
+ this.type = otherState.getMemType();
+ this.mode = otherState.getMode();
+ }
+
+ @Override
+ public DataType getMemType() {
+ return type;
+ }
+
+ @Override
+ public MessageMode getMode() {
+ return mode;
+ }
+
+ protected MessageSubscription getSubscription() {
+ return subscription;
+ }
+
+ @Override
+ public void onCanceled() {
+ }
+
+}
diff --git a/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/state/ActivateState.java b/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/state/ActivateState.java
new file mode 100644
index 000000000..a5939b695
--- /dev/null
+++ b/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/state/ActivateState.java
@@ -0,0 +1,96 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ote.client.msg.core.internal.state;
+
+import java.util.Set;
+import java.util.logging.Level;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.ote.client.msg.core.db.AbstractMessageDataBase;
+import org.eclipse.osee.ote.client.msg.core.db.MessageInstance;
+import org.eclipse.osee.ote.message.Message;
+import org.eclipse.osee.ote.message.enums.DataType;
+
+/**
+ * @author Ken J. Aguilar
+ */
+public class ActivateState extends AbstractSubscriptionState {
+
+ private final MessageInstance instance;
+ private final AbstractMessageDataBase msgDb;
+
+ public ActivateState(MessageInstance instance, AbstractMessageDataBase msgDb, AbstractSubscriptionState otherState) {
+ super(otherState);
+ this.instance = instance;
+ this.msgDb = msgDb;
+ }
+
+ @Override
+ public Message getMessage() {
+ return instance.getMessage();
+ }
+
+ @Override
+ public String getMsgClassName() {
+ return instance.getMessage().getClass().getName();
+ }
+
+ @Override
+ public ISubscriptionState onMessageDbClosing(AbstractMessageDataBase msgDb) {
+ getSubscription().notifyUnresolved();
+ try {
+ msgDb.releaseInstance(instance);
+ } catch (Exception e) {
+ OseeLog.log(ActivateState.class, Level.SEVERE, "problem releasing instance of " + getMsgClassName());
+ }
+ return new UnresolvedState(getMsgClassName(), this);
+ }
+
+ @Override
+ public ISubscriptionState onMessageDbFound(AbstractMessageDataBase msgDB) {
+ throw new Error("Unexpected input for this state");
+ }
+
+ @Override
+ public ISubscriptionState onActivated() {
+ throw new Error("Unexpected input for this state");
+ }
+
+ @Override
+ public ISubscriptionState onDeactivated() {
+ return new InactiveState(instance, msgDb, this);
+ }
+
+ @Override
+ public void onCanceled() {
+ super.onCanceled();
+ try {
+ msgDb.releaseInstance(instance);
+ } catch (Exception e) {
+ OseeLog.log(ActivateState.class, Level.SEVERE, "problem releasing instance of " + getMsgClassName());
+ }
+ }
+
+ @Override
+ public Set<DataType> getAvailableTypes() {
+ return instance.getAvailableTypes();
+ }
+
+ @Override
+ public boolean isActive() {
+ return true;
+ }
+
+ @Override
+ public boolean isResolved() {
+ return true;
+ }
+
+}
diff --git a/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/state/ISubscriptionState.java b/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/state/ISubscriptionState.java
new file mode 100644
index 000000000..19b6a4358
--- /dev/null
+++ b/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/state/ISubscriptionState.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ote.client.msg.core.internal.state;
+
+import java.util.Set;
+import org.eclipse.osee.ote.client.msg.core.db.AbstractMessageDataBase;
+import org.eclipse.osee.ote.message.Message;
+import org.eclipse.osee.ote.message.enums.DataType;
+import org.eclipse.osee.ote.message.tool.MessageMode;
+
+/**
+ * @author Ken J. Aguilar
+ */
+public interface ISubscriptionState {
+ DataType getMemType();
+
+ MessageMode getMode();
+
+ String getMsgClassName();
+
+ Message getMessage();
+
+ Set<DataType> getAvailableTypes();
+
+ ISubscriptionState onMessageDbFound(AbstractMessageDataBase msgDB);
+
+ ISubscriptionState onMessageDbClosing(AbstractMessageDataBase msgDb);
+
+ ISubscriptionState onActivated();
+
+ ISubscriptionState onDeactivated();
+
+ void onCanceled();
+
+ boolean isActive();
+
+ boolean isResolved();
+
+}
diff --git a/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/state/InactiveState.java b/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/state/InactiveState.java
new file mode 100644
index 000000000..4f87f6dee
--- /dev/null
+++ b/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/state/InactiveState.java
@@ -0,0 +1,104 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ote.client.msg.core.internal.state;
+
+import java.util.HashSet;
+import java.util.Set;
+import java.util.logging.Level;
+
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.ote.client.msg.core.db.AbstractMessageDataBase;
+import org.eclipse.osee.ote.client.msg.core.db.MessageInstance;
+import org.eclipse.osee.ote.message.Message;
+import org.eclipse.osee.ote.message.enums.DataType;
+
+/**
+ * @author Ken J. Aguilar
+ */
+public class InactiveState extends AbstractSubscriptionState {
+
+ private final MessageInstance instance;
+ private final AbstractMessageDataBase msgDb;
+
+ public InactiveState(MessageInstance instance, AbstractMessageDataBase msgDb, AbstractSubscriptionState previousState) {
+ super(previousState);
+ this.instance = instance;
+ this.msgDb = msgDb;
+ }
+
+ @Override
+ public Message getMessage() {
+ return instance.getMessage();
+ }
+
+ @Override
+ public String getMsgClassName() {
+ return instance.getMessage().getClass().getName();
+ }
+
+ @Override
+ public ISubscriptionState onMessageDbFound(AbstractMessageDataBase msgDB) {
+ throw new Error("Unexpected input for this state");
+ }
+
+ @Override
+ public ISubscriptionState onMessageDbClosing(AbstractMessageDataBase msgDb) {
+ assert this.msgDb == msgDb;
+ getSubscription().notifyUnresolved();
+ try {
+ msgDb.releaseInstance(instance);
+ } catch (Exception e) {
+ OseeLog.log(ActivateState.class, Level.SEVERE, "problem releasing instance of " + getMsgClassName());
+ }
+ return new UnresolvedState(getMsgClassName(), this);
+ }
+
+ @Override
+ public void onCanceled() {
+ super.onCanceled();
+ try {
+ msgDb.releaseInstance(instance);
+ } catch (Exception e) {
+ OseeLog.log(ActivateState.class, Level.SEVERE, "problem releasing instance of " + getMsgClassName());
+ }
+ }
+
+ @Override
+ public ISubscriptionState onActivated() {
+ if (instance.isSupported()) {
+ getSubscription().notifyActivated();
+ return new ActivateState(instance, msgDb, this);
+ } else {
+ return this;
+ }
+
+ }
+
+ @Override
+ public ISubscriptionState onDeactivated() {
+ return this;
+ }
+
+ @Override
+ public Set<DataType> getAvailableTypes() {
+ return new HashSet<DataType>();
+ }
+
+ @Override
+ public boolean isActive() {
+ return false;
+ }
+
+ @Override
+ public boolean isResolved() {
+ return true;
+ }
+}
diff --git a/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/state/UnresolvedState.java b/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/state/UnresolvedState.java
new file mode 100644
index 000000000..dc99a6b3c
--- /dev/null
+++ b/org.eclipse.osee.ote.client.msg/src/org/eclipse/osee/ote/client/msg/core/internal/state/UnresolvedState.java
@@ -0,0 +1,112 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ote.client.msg.core.internal.state;
+
+import java.util.HashSet;
+import java.util.Set;
+import java.util.logging.Level;
+
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.ote.client.msg.core.db.AbstractMessageDataBase;
+import org.eclipse.osee.ote.client.msg.core.db.MessageInstance;
+import org.eclipse.osee.ote.client.msg.core.internal.MessageSubscription;
+import org.eclipse.osee.ote.message.Message;
+import org.eclipse.osee.ote.message.enums.DataType;
+import org.eclipse.osee.ote.message.tool.MessageMode;
+
+/**
+ * @author Ken J. Aguilar
+ */
+public class UnresolvedState extends AbstractSubscriptionState {
+
+ private DataType type;
+
+ private final String msgClassName;
+ private MessageInstance instance = null;
+
+ public UnresolvedState(String msgClassName, MessageSubscription subscription, DataType type, MessageMode mode) {
+ super(subscription, type, mode);
+ this.type = type;
+ this.msgClassName = msgClassName;
+ }
+
+ public UnresolvedState(String msgClassName, AbstractSubscriptionState previousState) {
+ super(previousState);
+ this.msgClassName = msgClassName;
+ }
+
+ @Override
+ public Message getMessage() {
+ return instance != null ? instance.getMessage() : null;
+ }
+
+ @Override
+ public String getMsgClassName() {
+ return msgClassName;
+ }
+
+ @Override
+ public ISubscriptionState onMessageDbFound(AbstractMessageDataBase msgDB) {
+ try {
+ DataType requestedType = getMemType();
+ if (requestedType == null && getSubscription().getRequestedDataType() != null) {
+ instance = msgDB.acquireInstance(msgClassName, getMode(), getSubscription().getRequestedDataType());
+ } else {
+ instance = msgDB.acquireInstance(msgClassName, getMode(), requestedType);
+ }
+
+ this.type = instance.getType();
+ getSubscription().notifyResolved();
+ return new InactiveState(instance, msgDB, this);
+ } catch (Exception e) {
+ // Yes we do need to log this
+ OseeLog.log(UnresolvedState.class, Level.SEVERE, "problems acquring instance for " + getMsgClassName());
+ getSubscription().notifyInvalidated();
+ return this;
+ }
+
+ }
+
+ @Override
+ public DataType getMemType() {
+ return type;
+ }
+
+ @Override
+ public ISubscriptionState onMessageDbClosing(AbstractMessageDataBase msgDb) {
+ return this;
+ }
+
+ @Override
+ public ISubscriptionState onActivated() {
+ return this;
+ }
+
+ @Override
+ public ISubscriptionState onDeactivated() {
+ return this;
+ }
+
+ @Override
+ public Set<DataType> getAvailableTypes() {
+ return new HashSet<DataType>();
+ }
+
+ @Override
+ public boolean isActive() {
+ return false;
+ }
+
+ @Override
+ public boolean isResolved() {
+ return instance != null;
+ }
+}
diff --git a/org.eclipse.osee.ote.client/.classpath b/org.eclipse.osee.ote.client/.classpath
new file mode 100644
index 000000000..1fa3e6803
--- /dev/null
+++ b/org.eclipse.osee.ote.client/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.osee.ote.client/.pmd b/org.eclipse.osee.ote.client/.pmd
new file mode 100644
index 000000000..c7b0a9fb3
--- /dev/null
+++ b/org.eclipse.osee.ote.client/.pmd
@@ -0,0 +1,925 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<pmd>
+ <useProjectRuleSet>false</useProjectRuleSet>
+ <ruleSetFile>.ruleset</ruleSetFile>
+ <rules>
+ <rule>
+ <name>LooseCoupling</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CloneMethodMustImplementCloneable</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedImports</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SignatureDeclareThrowsException</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>IfStmtsMustUseBraces</name>
+ <ruleset>Braces Rules</ruleset>
+ </rule>
+ <rule>
+ <name>WhileLoopsMustUseBraces</name>
+ <ruleset>Braces Rules</ruleset>
+ </rule>
+ <rule>
+ <name>IfElseStmtsMustUseBraces</name>
+ <ruleset>Braces Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ForLoopsMustUseBraces</name>
+ <ruleset>Braces Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseSingleton</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SimplifyBooleanReturns</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SimplifyBooleanExpressions</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SwitchStmtsShouldHaveDefault</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidDeeplyNestedIfStmts</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidReassigningParameters</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SwitchDensity</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ConstructorCallsOverridableMethod</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AccessorClassGeneration</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>FinalFieldCouldBeStatic</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CloseResource</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NonStaticInitializer</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DefaultLabelNotLastInSwitchStmt</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NonCaseLabelInSwitchStatement</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>OptimizableToArrayCall</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>BadComparison</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EqualsNull</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ConfusingTernary</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>InstantiationToGetClass</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>IdempotentOperations</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SimpleDateFormatNeedsLocale</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ImmutableField</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseLocaleWithCaseConversions</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidProtectedFieldInFinalClass</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AssignmentToNonFinalStatic</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MissingStaticMethodInNonInstantiatableClass</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidSynchronizedAtMethodLevel</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MissingBreakInSwitch</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseNotifyAllInsteadOfNotify</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidInstanceofChecksInCatchClause</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AbstractClassWithoutAbstractMethod</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SimplifyConditional</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CompareObjectsWithEquals</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>PositionLiteralsFirstInComparisons</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryLocalBeforeReturn</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NonThreadSafeSingleton</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UncommentedEmptyMethod</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UncommentedEmptyConstructor</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidConstantsInterface</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnsynchronizedStaticDateFormatter</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>PreserveStackTrace</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseCollectionIsEmpty</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ClassWithOnlyPrivateConstructorsShouldBeFinal</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyMethodInAbstractClassShouldBeAbstract</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SingularField</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ReturnEmptyArrayRatherThanNull</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AbstractClassWithoutAnyMethod</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>TooFewBranchesForASwitchStatement</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidCatchingThrowable</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SignatureDeclareThrowsException</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ExceptionAsFlowControl</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidCatchingNPE</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidThrowingRawExceptionTypes</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidThrowingNullPointerException</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidRethrowingException</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DoNotExtendJavaLangError</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DoNotThrowExceptionInFinally</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidThrowingNewInstanceOfSameException</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedPrivateField</name>
+ <ruleset>Unused Code Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedLocalVariable</name>
+ <ruleset>Unused Code Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedPrivateMethod</name>
+ <ruleset>Unused Code Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedFormalParameter</name>
+ <ruleset>Unused Code Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MoreThanOneLogger</name>
+ <ruleset>Java Logging Rules</ruleset>
+ </rule>
+ <rule>
+ <name>LoggerIsNotStaticFinal</name>
+ <ruleset>Java Logging Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SystemPrintln</name>
+ <ruleset>Java Logging Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidPrintStackTrace</name>
+ <ruleset>Java Logging Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidDuplicateLiterals</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>StringInstantiation</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>StringToString</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>InefficientStringBuffering</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryCaseChange</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseStringBufferLength</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AppendCharacterWithChar</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ConsecutiveLiteralAppends</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseIndexOfChar</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>InefficientEmptyStringCheck</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>InsufficientStringBufferDeclaration</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UselessStringValueOf</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>StringBufferInstantiationWithChar</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseEqualsToCompareStrings</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidStringBufferField</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ReplaceVectorWithList</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ReplaceHashtableWithMap</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ReplaceEnumerationWithIterator</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidEnumAsIdentifier</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidAssertAsIdentifier</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>IntegerInstantiation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ByteInstantiation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ShortInstantiation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>LongInstantiation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnit4TestShouldUseBeforeAnnotation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnit4TestShouldUseAfterAnnotation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnit4TestShouldUseTestAnnotation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnit4SuitesShouldUseSuiteAnnotation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnitUseExpected</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseProperClassLoader</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MDBAndSessionBeanNamingConvention</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>RemoteSessionInterfaceNamingConvention</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>LocalInterfaceSessionNamingConvention</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>LocalHomeNamingConvention</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>RemoteInterfaceNamingConvention</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DoNotCallSystemExit</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>StaticEJBFieldShouldBeFinal</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DoNotUseThreads</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidInstantiatingObjectsInLoops</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseArrayListInsteadOfVector</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SimplifyStartsWith</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseStringBufferForStringAppends</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseArraysAsList</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidArrayLoops</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryWrapperObjectCreation</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AddEmptyString</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyCatchBlock</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyIfStmt</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyWhileStmt</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyTryBlock</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyFinallyBlock</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptySwitchStatements</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JumbledIncrementer</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ForLoopShouldBeWhileLoop</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryConversionTemporary</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>OverrideBothEqualsAndHashcode</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DoubleCheckedLocking</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ReturnFromFinallyBlock</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptySynchronizedBlock</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryReturn</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyStaticInitializer</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnconditionalIfStatement</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyStatementNotInLoop</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>BooleanInstantiation</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryFinalModifier</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CollapsibleIfStatements</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UselessOverridingMethod</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ClassCastExceptionWithToArray</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidDecimalLiteralsInBigDecimalConstructor</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UselessOperationOnImmutable</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MisplacedNullCheck</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedNullCheckInEquals</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidThreadGroup</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>BrokenNullCheck</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>BigIntegerInstantiation</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidUsingOctalValues</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidUsingHardCodedIP</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CheckResultSet</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidMultipleUnaryOperators</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyInitializer</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MethodReturnsInternalArray</name>
+ <ruleset>Security Code Guidelines</ruleset>
+ </rule>
+ <rule>
+ <name>ArrayIsStoredDirectly</name>
+ <ruleset>Security Code Guidelines</ruleset>
+ </rule>
+ <rule>
+ <name>CouplingBetweenObjects</name>
+ <ruleset>Coupling Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ExcessiveImports</name>
+ <ruleset>Coupling Rules</ruleset>
+ </rule>
+ <rule>
+ <name>LooseCoupling</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DuplicateImports</name>
+ <ruleset>Import Statement Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DontImportJavaLang</name>
+ <ruleset>Import Statement Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedImports</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ImportFromSamePackage</name>
+ <ruleset>Import Statement Rules</ruleset>
+ </rule>
+ <rule>
+ <name>TooManyStaticImports</name>
+ <ruleset>Import Statement Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnitStaticSuite</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnitSpelling</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnitAssertionsShouldIncludeMessage</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnitTestsShouldIncludeAssert</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>TestClassWithoutTestCases</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryBooleanAssertion</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseAssertEqualsInsteadOfAssertTrue</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseAssertSameInsteadOfAssertTrue</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseAssertNullInsteadOfAssertTrue</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SimplifyBooleanAssertion</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryConstructor</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NullAssignment</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedModifier</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AssignmentInOperand</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AtLeastOneConstructor</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DontImportSun</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SuspiciousOctalEscape</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CallSuperInConstructor</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryParentheses</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DefaultPackage</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>BooleanInversion</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DataflowAnomalyAnalysis</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidFinalLocalVariable</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidUsingShortType</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidUsingVolatile</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidUsingNativeCode</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidAccessibilityAlteration</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DoNotCallGarbageCollectionExplicitly</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MethodNamingConventions</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ClassNamingConventions</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AbstractNaming</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidDollarSigns</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MethodWithSameNameAsEnclosingClass</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SuspiciousHashcodeMethodName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SuspiciousConstantFieldName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SuspiciousEqualsMethodName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidFieldNameMatchingTypeName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidFieldNameMatchingMethodName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NoPackage</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>PackageCase</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MisleadingVariableName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>BooleanGetMethodName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NPathComplexity</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ExcessiveMethodLength</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ExcessiveParameterList</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ExcessiveClassLength</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CyclomaticComplexity</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ExcessivePublicCount</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>TooManyFields</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NcssMethodCount</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NcssTypeCount</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NcssConstructorCount</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>TooManyMethods</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyFinalizer</name>
+ <ruleset>Finalizer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>FinalizeOnlyCallsSuperFinalize</name>
+ <ruleset>Finalizer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>FinalizeOverloaded</name>
+ <ruleset>Finalizer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>FinalizeDoesNotCallSuperFinalize</name>
+ <ruleset>Finalizer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>FinalizeShouldBeProtected</name>
+ <ruleset>Finalizer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidCallingFinalize</name>
+ <ruleset>Finalizer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseCorrectExceptionLogging</name>
+ <ruleset>Jakarta Commons Logging Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ProperLogger</name>
+ <ruleset>Jakarta Commons Logging Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MissingSerialVersionUID</name>
+ <ruleset>JavaBean Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ProperCloneImplementation</name>
+ <ruleset>Clone Implementation Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CloneThrowsCloneNotSupportedException</name>
+ <ruleset>Clone Implementation Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CloneMethodMustImplementCloneable</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ </rules>
+ <includeDerivedFiles>false</includeDerivedFiles>
+ <violationsAsErrors>true</violationsAsErrors>
+</pmd>
diff --git a/org.eclipse.osee.ote.client/.project b/org.eclipse.osee.ote.client/.project
new file mode 100644
index 000000000..582419a17
--- /dev/null
+++ b/org.eclipse.osee.ote.client/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.osee.ote.client</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/org.eclipse.osee.ote.client/META-INF/MANIFEST.MF b/org.eclipse.osee.ote.client/META-INF/MANIFEST.MF
new file mode 100644
index 000000000..0668fa5d0
--- /dev/null
+++ b/org.eclipse.osee.ote.client/META-INF/MANIFEST.MF
@@ -0,0 +1,71 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: OTE Service (Incubation)
+Bundle-SymbolicName: org.eclipse.osee.ote.client;singleton:=true
+Bundle-Version: 0.25.3.qualifier
+Bundle-Activator: org.eclipse.osee.ote.service.Activator
+Bundle-Vendor: Eclipse Open System Engineering Environment
+Bundle-ActivationPolicy: lazy
+Import-Package: net.jini.activation,
+ net.jini.admin,
+ net.jini.config,
+ net.jini.constraint,
+ net.jini.core.constraint,
+ net.jini.core.discovery,
+ net.jini.core.entry,
+ net.jini.core.event,
+ net.jini.core.lease,
+ net.jini.core.lookup,
+ net.jini.core.transaction,
+ net.jini.core.transaction.server,
+ net.jini.discovery,
+ net.jini.entry,
+ net.jini.event,
+ net.jini.export,
+ net.jini.id,
+ net.jini.iiop,
+ net.jini.io,
+ net.jini.io.context,
+ net.jini.jeri,
+ net.jini.jeri.connection,
+ net.jini.jeri.http,
+ net.jini.jeri.kerberos,
+ net.jini.jeri.ssl,
+ net.jini.jeri.tcp,
+ net.jini.jrmp,
+ net.jini.lease,
+ net.jini.loader,
+ net.jini.loader.pref,
+ net.jini.lookup,
+ net.jini.lookup.entry,
+ net.jini.security,
+ net.jini.security.policy,
+ net.jini.security.proxytrust,
+ net.jini.space,
+ net.jini.url.file,
+ net.jini.url.httpmd,
+ net.jini.url.https,
+ org.eclipse.core.runtime,
+ org.eclipse.osee.connection.service,
+ org.eclipse.osee.framework.core.exception,
+ org.eclipse.osee.framework.jdk.core.type,
+ org.eclipse.osee.framework.jdk.core.util,
+ org.eclipse.osee.framework.plugin.core.util,
+ org.eclipse.osee.ote,
+ org.eclipse.osee.ote.connection.jini,
+ org.eclipse.osee.ote.core,
+ org.eclipse.osee.ote.core.enums,
+ org.eclipse.osee.ote.core.environment,
+ org.eclipse.osee.ote.core.environment.interfaces,
+ org.eclipse.osee.ote.core.environment.status,
+ org.eclipse.osee.ote.core.framework,
+ org.eclipse.osee.ote.core.framework.prompt,
+ org.eclipse.osee.ote.endpoint,
+ org.eclipse.osee.ote.message,
+ org.osgi.framework,
+ org.osgi.service.packageadmin,
+ org.osgi.util.tracker
+Export-Package: org.eclipse.osee.ote.service,
+ org.eclipse.osee.ote.service.core
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Require-Bundle: org.eclipse.osee.framework.logging
diff --git a/org.eclipse.osee.ote.client/build.properties b/org.eclipse.osee.ote.client/build.properties
new file mode 100644
index 000000000..34d2e4d2d
--- /dev/null
+++ b/org.eclipse.osee.ote.client/build.properties
@@ -0,0 +1,4 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .
diff --git a/org.eclipse.osee.ote.client/pom.xml b/org.eclipse.osee.ote.client/pom.xml
new file mode 100644
index 000000000..b2a0606fe
--- /dev/null
+++ b/org.eclipse.osee.ote.client/pom.xml
@@ -0,0 +1,35 @@
+<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.eclipse.osee</groupId>
+ <artifactId>org.eclipse.osee.ote.parent</artifactId>
+ <version>0.25.3-SNAPSHOT</version>
+ <relativePath>../org.eclipse.osee.ote.parent</relativePath>
+ </parent>
+
+ <artifactId>org.eclipse.osee.ote.client</artifactId>
+ <packaging>eclipse-plugin</packaging>
+ <name>OTE Client (Incubation)</name>
+
+ <build>
+ <!-- workaround for https://issues.sonatype.org/browse/TYCHO-168 -->
+ <resources>
+ <resource>
+ <directory>src</directory>
+ <excludes>
+ <exclude>**/*.java</exclude>
+ </excludes>
+ </resource>
+ </resources>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-source-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </build>
+
+</project> \ No newline at end of file
diff --git a/org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/Activator.java b/org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/Activator.java
new file mode 100644
index 000000000..9da6206e3
--- /dev/null
+++ b/org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/Activator.java
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ote.service;
+
+import java.util.logging.Level;
+
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.ote.service.core.ConnectionServiceTracker;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+
+public class Activator implements BundleActivator {
+
+ private ConnectionServiceTracker connectionServiceTracker;
+
+ @Override
+ public void start(BundleContext context) throws Exception {
+ connectionServiceTracker = new ConnectionServiceTracker(context);
+ connectionServiceTracker.open(true);
+ }
+
+ @Override
+ public void stop(BundleContext context) throws Exception {
+
+ // close the service tracker
+ connectionServiceTracker.close();
+ connectionServiceTracker = null;
+
+ }
+
+ public static void log(Level level, String message, Throwable t) {
+ OseeLog.log(Activator.class, level, message, t);
+ }
+
+ public static void log(Level level, String message) {
+ log(level, message, null);
+ }
+}
diff --git a/org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/ConnectionEvent.java b/org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/ConnectionEvent.java
new file mode 100644
index 000000000..f9f2f179e
--- /dev/null
+++ b/org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/ConnectionEvent.java
@@ -0,0 +1,78 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ote.service;
+
+import java.util.UUID;
+
+import org.eclipse.osee.connection.service.IServiceConnector;
+import org.eclipse.osee.ote.core.environment.interfaces.IHostTestEnvironment;
+import org.eclipse.osee.ote.core.environment.interfaces.ITestEnvironment;
+
+/**
+ * This event contains information regarding a change in connectivity between a client and a test host
+ *
+ * @author Ken J. Aguilar
+ */
+public final class ConnectionEvent {
+
+ private final ITestEnvironment environment;
+ private final IServiceConnector connector;
+ private final UUID sessionKey;
+ private final OteServiceProperties props;
+ private final IHostTestEnvironment hostTestEnvironment;
+
+ public ConnectionEvent(IHostTestEnvironment hostTestEnvironment, IServiceConnector connector, ITestEnvironment environment, UUID sessionKey) {
+ if (connector == null) {
+ throw new NullPointerException("connector cannot be null");
+ }
+ this.environment = environment;
+ this.connector = connector;
+ this.sessionKey = sessionKey;
+ this.hostTestEnvironment = hostTestEnvironment;
+ props = new OteServiceProperties(connector);
+ }
+
+ /**
+ * returns the test environment in which the connection event applies to
+ *
+ * @return the environment
+ */
+ public ITestEnvironment getEnvironment() {
+ return environment;
+ }
+
+ /**
+ * returns the {@link IServiceConnector} that provides the communication interface to the remote service
+ *
+ * @return the connector
+ */
+ public IServiceConnector getConnector() {
+ return connector;
+ }
+
+ /**
+ * gets the test environment session key
+ *
+ * @return the sessionKey
+ */
+ public UUID getSessionKey() {
+ return sessionKey;
+ }
+
+ public OteServiceProperties getProperties() {
+ return props;
+ }
+
+ public IHostTestEnvironment getHostEnvironment() {
+ return hostTestEnvironment;
+ }
+
+}
diff --git a/org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/IEnvironmentConfigurer.java b/org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/IEnvironmentConfigurer.java
new file mode 100644
index 000000000..5950b1611
--- /dev/null
+++ b/org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/IEnvironmentConfigurer.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ote.service;
+
+import org.eclipse.core.runtime.SubProgressMonitor;
+import org.eclipse.osee.ote.core.environment.interfaces.IHostTestEnvironment;
+
+/**
+ * @author Ken J. Aguilar
+ */
+public interface IEnvironmentConfigurer {
+ boolean configure(IHostTestEnvironment event, SubProgressMonitor subProgressMonitor) throws Exception;
+}
diff --git a/org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/IOteClientService.java b/org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/IOteClientService.java
new file mode 100644
index 000000000..d29a224c2
--- /dev/null
+++ b/org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/IOteClientService.java
@@ -0,0 +1,110 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ote.service;
+
+import java.net.InetAddress;
+import java.util.List;
+import java.util.UUID;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.connection.service.IServiceConnector;
+import org.eclipse.osee.ote.core.OSEEPerson1_4;
+import org.eclipse.osee.ote.core.environment.TestEnvironmentConfig;
+import org.eclipse.osee.ote.core.environment.interfaces.IHostTestEnvironment;
+import org.eclipse.osee.ote.core.environment.interfaces.ITestEnvironment;
+
+/**
+ * This service provides the means to find all available test servers and connect to them.
+ *
+ * @author Ken J. Aguilar
+ */
+public interface IOteClientService {
+ /**
+ * registers a {@link ITestEnvironmentAvailibilityListener} that will be notified whenever a test host changes its
+ * availability status. <BR>
+ * <B>NOTE: </B>The newly registered listener's
+ * {@link ITestEnvironmentAvailibilityListener#environmentAvailable(IHostTestEnvironment, org.eclipse.osee.connection.service.IServiceConnector, ServiceProperty)}
+ * method will be called immediately for each test host currently available
+ */
+ void addEnvironmentAvailibiltyListener(ITestEnvironmentAvailibilityListener listener);
+
+ void removeEnvironmentAvailibiltyListener(ITestEnvironmentAvailibilityListener listener);
+
+ /**
+ * adds the {@link ITestConnectionListener} that will be notified of connection events. <B>NOTE:</B> that if a
+ * connection has already been made prior to calling this method then the listener's
+ * {@link ITestConnectionListener#onPostConnect(ITestEnvironment)} method will be immediately called.
+ */
+ void addConnectionListener(ITestConnectionListener listener);
+
+ void removeConnectionListener(ITestConnectionListener listener);
+
+ /**
+ * sets the user that will logged into the OTE client service. A user must be set prior to connecting to an OTE test
+ * environment. If a connection is already established it will be broken prior to setting the new user.
+ */
+ void setUser(OSEEPerson1_4 user, InetAddress address) throws TestSessionException;
+
+ /**
+ * gets the current user as set by the {@link #setUser(OSEEPerson1_4, InetAddress)} method
+ *
+ * @return the current user or null if no user has been set
+ */
+ OSEEPerson1_4 getUser();
+
+ /**
+ * creates a connection to a test server. <B>NOTE: </B><I>A user must be logged in prior to calling this method.>/I>
+ * @param monitor
+ *
+ * @see #setUser(OSEEPerson1_4, InetAddress)
+ */
+ ConnectionEvent connect(IHostTestEnvironment env, IEnvironmentConfigurer configurer, TestEnvironmentConfig config, IProgressMonitor monitor) throws TestSessionException;
+
+ /**
+ * breaks the current connection to a test server. This will call the
+ * {@link ITestConnectionListener#onPreDisconnect(ConnectionEvent)} method for each registered
+ * {@link ITestConnectionListener} before the connection is actually broken.
+ */
+ void disconnect() throws TestSessionException;
+
+ /**
+ * gets the currently connected test environment
+ *
+ * @return returns the connected {@link ITestEnvironment} or null if no connection exists
+ */
+ ITestEnvironment getConnectedEnvironment();
+
+ /**
+ * returns the connector for the currently connected test environment
+ */
+ IServiceConnector getConnector();
+
+ IHostTestEnvironment getConnectedHost();
+
+ OteServiceProperties getProperties(IHostTestEnvironment testHost);
+
+ boolean isConnected();
+
+ /**
+ * sets a {@link SessionDelegate} who will handle certain aspects of the client session A successful call to
+ * {@link #setUser(OSEEPerson1_4, InetAddress)} must have occurred prior to calling this method.
+ */
+ void setSessionDelegate(SessionDelegate sessionDelegate);
+
+ /**
+ * returns a collection of all the {@link IHostTestEnvironment} that are currently available.
+ */
+ List<IServiceConnector> getAvailableTestHosts();
+
+ IServiceConnector getConnector(IHostTestEnvironment host);
+
+ UUID getSessionKey();
+}
diff --git a/org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/ITestConnectionListener.java b/org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/ITestConnectionListener.java
new file mode 100644
index 000000000..f3821493f
--- /dev/null
+++ b/org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/ITestConnectionListener.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ote.service;
+
+import org.eclipse.osee.connection.service.IServiceConnector;
+
+/**
+ * @author Ken J. Aguilar
+ */
+public interface ITestConnectionListener {
+
+ void onPostConnect(ConnectionEvent event);
+
+ /**
+ * the connection to the service is broken unexpectedly. The service is not considered valid and thus clients should
+ * not try to communicate in any way with the OTE server. Clients are free to modify any local state.
+ */
+ void onConnectionLost(IServiceConnector connector);
+
+ /**
+ * this method is called when a disconnect request is initiated by the client. The connector and the service are
+ * still valid. This allows clients to remove any listeners on the remote OTE server or set some state prior to the
+ * actual disconnect.
+ */
+ void onPreDisconnect(ConnectionEvent event);
+
+}
diff --git a/org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/ITestEnvironmentAvailibilityListener.java b/org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/ITestEnvironmentAvailibilityListener.java
new file mode 100644
index 000000000..20b557d9a
--- /dev/null
+++ b/org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/ITestEnvironmentAvailibilityListener.java
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ote.service;
+
+import org.eclipse.osee.connection.service.IServiceConnector;
+import org.eclipse.osee.ote.core.environment.interfaces.IHostTestEnvironment;
+
+/**
+ * This listener will be notified of test host availability events. Clients must register implementations of this
+ * listener by calling {@link IOteClientService#addEnvironmentAvailibiltyListener(ITestEnvironmentAvailibilityListener)}
+ *
+ * @author Ken J. Aguilar
+ */
+public interface ITestEnvironmentAvailibilityListener {
+
+ /**
+ * this method will be called when a {@link IHostTestEnvironment} becomes available for use.
+ */
+ void environmentAvailable(IServiceConnector connector, OteServiceProperties properties);
+
+ /**
+ * this method will be called whenever a {@link IHostTestEnvironment} becomes unavailable.
+ */
+ void environmentUnavailable(IServiceConnector connector, OteServiceProperties properties);
+}
diff --git a/org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/ITestEnvironmentFilter.java b/org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/ITestEnvironmentFilter.java
new file mode 100644
index 000000000..9d9241275
--- /dev/null
+++ b/org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/ITestEnvironmentFilter.java
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ote.service;
+
+import org.eclipse.osee.ote.core.environment.interfaces.IHostTestEnvironment;
+
+/**
+ * @author Ken J. Aguilar
+ */
+public interface ITestEnvironmentFilter {
+ boolean accept(IHostTestEnvironment env, OteServiceProperties properties);
+}
diff --git a/org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/JmsToJiniBridgeConnector.java b/org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/JmsToJiniBridgeConnector.java
new file mode 100644
index 000000000..3db200f25
--- /dev/null
+++ b/org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/JmsToJiniBridgeConnector.java
@@ -0,0 +1,192 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ote.service;
+
+import java.io.File;
+import java.io.Serializable;
+import java.net.URI;
+import java.net.UnknownHostException;
+import java.rmi.Remote;
+import java.rmi.RemoteException;
+import java.rmi.server.ExportException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import net.jini.export.Exporter;
+import net.jini.jeri.BasicILFactory;
+import net.jini.jeri.BasicJeriExporter;
+import net.jini.jeri.tcp.TcpServerEndpoint;
+
+import org.eclipse.osee.connection.service.IServiceConnector;
+import org.eclipse.osee.connection.service.IServicePropertyChangeListener;
+import org.eclipse.osee.framework.jdk.core.util.EnhancedProperties;
+import org.eclipse.osee.framework.jdk.core.util.Network;
+import org.eclipse.osee.framework.plugin.core.util.ExportClassLoader;
+import org.eclipse.osee.ote.core.environment.interfaces.IHostTestEnvironment;
+
+/**
+ * @author Andrew M. Finkbeiner
+ */
+public class JmsToJiniBridgeConnector implements IServiceConnector {
+ public static final String TYPE = "jmstojini";
+ private static final class ExportInfo {
+ private final Exporter exporter;
+ private final Object exportedObject;
+
+ private ExportInfo(Exporter exporter, Object exportedObject) {
+ this.exportedObject = exportedObject;
+ this.exporter = exporter;
+ }
+ }
+
+ private EnhancedProperties properties;
+ private final HashMap<Object, ExportInfo> exports = new HashMap<>();
+ private final ExportClassLoader exportClassLoader;
+ private final Object service;
+ private final List<IServicePropertyChangeListener> propertyChangeListeners =
+ new CopyOnWriteArrayList<IServicePropertyChangeListener>();
+ private final String uniqueServerId;
+ private boolean connected = false;
+
+ public JmsToJiniBridgeConnector(ExportClassLoader exportClassLoader, Object service, String id) {
+ this.uniqueServerId = id;
+ this.exportClassLoader = exportClassLoader;
+ this.service = service;
+ if (service instanceof IHostTestEnvironment) {
+ try {
+ this.properties = ((IHostTestEnvironment) service).getProperties();
+ } catch (RemoteException ex) {
+ this.properties = new EnhancedProperties();
+ ex.printStackTrace();
+ }
+ } else {
+ this.properties = new EnhancedProperties();
+ }
+ }
+
+ @Override
+ public Object export(Object callback) throws ExportException {
+ try {
+ Exporter exporter = createExporter();
+ Object exportedObject = exporter.export((Remote) callback);
+ exports.put(callback, new ExportInfo(exporter, exportedObject));
+ return exportedObject;
+ } catch (UnknownHostException e) {
+ throw new ExportException("failed to export", e);
+ }
+ }
+
+ @Override
+ public void unexport(Object callback) throws Exception {
+ ExportInfo info = exports.remove(callback);
+ if (info != null) {
+ info.exporter.unexport(false);
+ }
+ }
+
+ @Override
+ public Object findExport(Object callback) {
+ ExportInfo info = exports.get(callback);
+ if (info != null) {
+ return info.exportedObject;
+ }
+ return null;
+ }
+
+ @Override
+ public void stop() throws Exception {
+ for (ExportInfo info : exports.values()) {
+ info.exporter.unexport(false);
+ }
+ exports.clear();
+ }
+
+ private Exporter createExporter() throws UnknownHostException {
+ return new BasicJeriExporter(TcpServerEndpoint.getInstance(Network.getValidIP().getHostAddress(), 0),
+ new BasicILFactory(null, null, exportClassLoader), false, false);
+ }
+
+ @Override
+ public String getConnectorType() {
+ return TYPE;
+ }
+
+ @Override
+ public Serializable getProperty(String property, Serializable defaultValue) {
+ return properties.getProperty(property, defaultValue);
+ }
+
+ @Override
+ public Object getService() {
+ return service;
+ }
+
+ @Override
+ public boolean ping() {
+ if (getService() != null && getService() instanceof IHostTestEnvironment) {
+ try {
+ ((IHostTestEnvironment) getService()).getProperties();
+ return true;
+ } catch (Throwable th) {
+ return false;
+ }
+ }
+ return false;
+ }
+
+ @Override
+ public void addPropertyChangeListener(IServicePropertyChangeListener listener) {
+ propertyChangeListeners.add(listener);
+ }
+
+ @Override
+ public void removePropertyChangeListener(IServicePropertyChangeListener listener) {
+ propertyChangeListeners.remove(listener);
+ }
+
+ @Override
+ public void setProperty(String key, Serializable value) {
+ properties.setProperty(key, value);
+ for (IServicePropertyChangeListener listener : propertyChangeListeners) {
+ listener.propertyChanged(this, key, value);
+ }
+ }
+
+ @Override
+ public URI upload(File file) throws Exception {
+ return null;
+ }
+
+ @Override
+ public String getUniqueServerId() {
+ return uniqueServerId;
+ }
+
+ @Override
+ public EnhancedProperties getProperties() {
+ return properties;
+ }
+
+ @Override
+ public void init(Object service) throws UnknownHostException, ExportException {
+
+ }
+
+ public void setConnected(boolean connected){
+ this.connected = connected;
+ }
+
+ public boolean isConnected() {
+ return this.connected;
+ }
+
+}
diff --git a/org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/OteServiceProperties.java b/org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/OteServiceProperties.java
new file mode 100644
index 000000000..853d239aa
--- /dev/null
+++ b/org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/OteServiceProperties.java
@@ -0,0 +1,119 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ote.service;
+
+import java.io.Serializable;
+import org.eclipse.osee.connection.service.IServiceConnector;
+import org.eclipse.osee.framework.jdk.core.util.EnhancedProperties;
+
+/**
+ * @author Ken J. Aguilar
+ */
+public class OteServiceProperties {
+ private IServiceConnector connector;
+
+ private static final String NA = "N.A.";
+ private final boolean debug = false;
+
+ private EnhancedProperties properties;
+
+ public OteServiceProperties(IServiceConnector connector) {
+ this.connector = connector;
+ }
+
+ public OteServiceProperties(EnhancedProperties properties) {
+ this.properties = properties;
+ }
+
+ private String getLocalProperty(String name) {
+ if (connector != null) {
+ return (String) connector.getProperty(name, NA);
+ } else if (properties != null) {
+ return (String) properties.getProperty(name, NA);
+ }
+ return NA;
+ }
+
+ /**
+ * @return the name
+ */
+ public String getName() {
+ return getLocalProperty("name");
+ }
+
+ /**
+ * @return the station
+ */
+ public String getStation() {
+ return getLocalProperty("station");
+ }
+
+ /**
+ * @return the type
+ */
+ public String getType() {
+ return getLocalProperty("type");
+ }
+
+ /**
+ * @return the mode
+ */
+ public String getMode() {
+ return getLocalProperty("mode");
+ }
+
+ /**
+ * @return the version
+ */
+ public String getVersion() {
+ return getLocalProperty("version");
+ }
+
+ /**
+ * @return the group
+ */
+ public String getGroup() {
+ return getLocalProperty("groups");
+ }
+
+ /**
+ * @return the comment
+ */
+ public String getComment() {
+ return getLocalProperty("comment");
+ }
+
+ /**
+ * @return the dateStart
+ */
+ public String getDateStarted() {
+ return getLocalProperty("date").toString();
+ }
+
+ public String getUserList() {
+ return getLocalProperty("user_list").toString();
+ }
+
+ public void printStats() {
+ if (debug) {
+ System.out.printf("test service found:\n\tname: %s\n\tstation: %s\n\ttype: %s\n\tcomment: %s\n\t%s\n",
+ getName(), getStation(), getType(), getComment(), getGroup());
+ }
+ }
+
+ public Serializable getProperty(String name) {
+ return connector.getProperty(name, null);
+ }
+
+ public String getOwner() {
+ return (String) connector.getProperty("owner", NA);
+ }
+}
diff --git a/org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/SessionDelegate.java b/org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/SessionDelegate.java
new file mode 100644
index 000000000..f1980641d
--- /dev/null
+++ b/org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/SessionDelegate.java
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ote.service;
+
+import org.eclipse.osee.ote.core.environment.interfaces.IHostTestEnvironment;
+import org.eclipse.osee.ote.core.framework.prompt.IPassFailPromptResponse;
+import org.eclipse.osee.ote.core.framework.prompt.IResumeResponse;
+import org.eclipse.osee.ote.core.framework.prompt.IUserInputPromptResponse;
+import org.eclipse.osee.ote.core.framework.prompt.IYesNoPromptResponse;
+
+/**
+ * Test sessions will delegate responsibilities to sub classes of this interface.
+ *
+ * @author Ken J. Aguilar
+ */
+public interface SessionDelegate {
+ void handlePassFail(IPassFailPromptResponse prompt) throws Exception;
+
+ void handleYesNo(IYesNoPromptResponse prompt) throws Exception;
+
+ void handlePause(IResumeResponse prompt) throws Exception;
+
+ void handleInformationPrompt(String message) throws Exception;
+
+ void handleUserInput(final IUserInputPromptResponse prompt) throws Exception;
+
+ /**
+ * When connected to a {@link IHostTestEnvironment}, it is possible for the environment to request files from the
+ * client. This method will be called by the {@link IHostTestEnvironment} with a path that should make sense to the
+ * client.
+ *
+ * @return an array bytes that represent the content of the requested file
+ */
+ byte[] getFile(String path) throws Exception;
+
+ long getFileDate(String path) throws Exception;
+
+ void cancelPrompts() throws Exception;
+
+}
diff --git a/org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/TestSessionException.java b/org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/TestSessionException.java
new file mode 100644
index 000000000..9ba557e4c
--- /dev/null
+++ b/org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/TestSessionException.java
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ote.service;
+
+/**
+ * @author Ken J. Aguilar
+ */
+public class TestSessionException extends Exception {
+
+ private static final long serialVersionUID = -2013110839832896588L;
+
+ public TestSessionException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ public TestSessionException(String message) {
+ super(message);
+ }
+
+}
diff --git a/org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/core/ClientSession.java b/org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/core/ClientSession.java
new file mode 100644
index 000000000..c850a25d8
--- /dev/null
+++ b/org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/core/ClientSession.java
@@ -0,0 +1,220 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ote.service.core;
+
+import java.net.InetAddress;
+import java.rmi.RemoteException;
+import java.util.UUID;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.ReentrantLock;
+import java.util.logging.Level;
+
+import org.eclipse.osee.connection.service.IServiceConnector;
+import org.eclipse.osee.framework.logging.OseeLevel;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.plugin.core.util.ExportClassLoader;
+import org.eclipse.osee.ote.core.AbstractRemoteSession;
+import org.eclipse.osee.ote.core.ConnectionRequestResult;
+import org.eclipse.osee.ote.core.IRemoteUserSession;
+import org.eclipse.osee.ote.core.OSEEPerson1_4;
+import org.eclipse.osee.ote.core.environment.TestEnvironmentConfig;
+import org.eclipse.osee.ote.core.environment.interfaces.IHostTestEnvironment;
+import org.eclipse.osee.ote.core.framework.prompt.IPassFailPromptResponse;
+import org.eclipse.osee.ote.core.framework.prompt.IResumeResponse;
+import org.eclipse.osee.ote.core.framework.prompt.IUserInputPromptResponse;
+import org.eclipse.osee.ote.core.framework.prompt.IYesNoPromptResponse;
+import org.eclipse.osee.ote.service.Activator;
+import org.eclipse.osee.ote.service.SessionDelegate;
+
+/**
+ * @author Ken J. Aguilar
+ */
+public class ClientSession extends AbstractRemoteSession {
+ private static final int TIMEOUT = 1; // 1 minute timeout
+ private static final String LOCK_ERROR_MSG = "could not acquire lock";
+ private final InetAddress address;
+ private SessionDelegate sessionDelegate = null;
+ private final ReentrantLock lock = new ReentrantLock();
+// private final OteClientEndpointReceive receive;
+ private UUID id;
+
+ public ClientSession(OSEEPerson1_4 user, InetAddress address) {
+ super(user);
+ this.address = address;
+// this.receive = receive;
+ this.id = UUID.randomUUID();
+ Activator.log(Level.INFO,
+ String.format("Created OTE session for %s. Address=%s\n ", user.getName(), address.toString()));
+ }
+
+ @Override
+ public String getAddress() throws RemoteException {
+ return address.getHostAddress();
+ }
+
+ @Override
+ public byte[] getFile(String workspacePath) throws RemoteException {
+ if (sessionDelegate != null) {
+ try {
+ return sessionDelegate.getFile(workspacePath);
+ } catch (Exception ex) {
+ throw new RemoteException("failed to get the file " + workspacePath, ex);
+ }
+ }
+ throw new IllegalStateException("session delegate not set");
+ }
+
+ @Override
+ public long getFileDate(String workspacePath) throws RemoteException {
+ if (sessionDelegate != null) {
+ try {
+ return sessionDelegate.getFileDate(workspacePath);
+ } catch (Exception ex) {
+ throw new RemoteException("failed to get the file date" + workspacePath, ex);
+ }
+ }
+ throw new IllegalStateException("session delegate not set");
+ }
+
+ @Override
+ public boolean isAlive() throws RemoteException {
+ try {
+ if (lock.tryLock(TIMEOUT, TimeUnit.MINUTES)) {
+ try {
+ return true;
+ } finally {
+ lock.unlock();
+ }
+ }
+ return false;
+ } catch (InterruptedException ex) {
+ throw new RemoteException(LOCK_ERROR_MSG, ex);
+ }
+ }
+
+ @Override
+ public void initiateInformationalPrompt(String message) throws RemoteException {
+ assert sessionDelegate != null : "delegate is null";
+ try {
+ sessionDelegate.handleInformationPrompt(message);
+ } catch (Exception ex) {
+ System.out.println(message);
+ }
+ }
+
+ @Override
+ public void initiatePassFailPrompt(IPassFailPromptResponse prompt) throws RemoteException {
+ assert sessionDelegate != null : "delegate is null";
+ try {
+ sessionDelegate.handlePassFail(prompt);
+ } catch (Exception ex) {
+ throw new RemoteException("exception initiating prompt", ex);
+ }
+ }
+
+ @Override
+ public void initiateResumePrompt(IResumeResponse prompt) throws RemoteException {
+ assert sessionDelegate != null : "delegate is null";
+ try {
+ sessionDelegate.handlePause(prompt);
+ } catch (Exception ex) {
+ throw new RemoteException("exception initiating prompt", ex);
+ }
+ }
+
+ @Override
+ public void cancelPrompts() throws RemoteException {
+ assert sessionDelegate != null : "delegate is null";
+ try {
+ sessionDelegate.cancelPrompts();
+ } catch (Exception ex) {
+ throw new RemoteException("exception canceling prompt", ex);
+ }
+ }
+
+ @Override
+ public void initiateUserInputPrompt(IUserInputPromptResponse prompt) throws RemoteException {
+ assert sessionDelegate != null : "delegate is null";
+ try {
+ sessionDelegate.handleUserInput(prompt);
+ } catch (Exception ex) {
+ throw new RemoteException("exception initiating prompt", ex);
+ }
+ }
+
+ /**
+ * this must be called prior to establishing a test host connection
+ */
+ synchronized void setSessionDelegate(SessionDelegate sessionDelegate) {
+ // intentionally package-private
+ this.sessionDelegate = sessionDelegate;
+ }
+
+ /**
+ * closes this session
+ */
+ void close() {
+
+ }
+
+ TestHostConnection connect(IServiceConnector connector, IHostTestEnvironment testHost, TestEnvironmentConfig config) throws Exception {
+ // intentionally package-private
+ if (lock.tryLock(TIMEOUT, TimeUnit.MINUTES)) {
+ try {
+ IRemoteUserSession exportedSession = (IRemoteUserSession) connector.export(this);
+ UUID id = UUID.randomUUID();
+ Thread.currentThread().setContextClassLoader(ExportClassLoader.getInstance());
+ ConnectionRequestResult result = testHost.requestEnvironment(exportedSession, id, config);
+ if (result != null && result.getStatus().getStatus()) {
+ connector.setConnected(true);
+ return new TestHostConnection(connector, testHost, result.getEnvironment(), result.getSessionKey());
+ } else {
+ OseeLog.log(Activator.class, OseeLevel.SEVERE_POPUP, "Error Connecting to the OTE Test Server.",
+ new Exception(result.getStatus().getMessage()));
+ }
+ return null;
+ } finally {
+ lock.unlock();
+ }
+ }
+ throw new IllegalStateException(LOCK_ERROR_MSG);
+
+ }
+
+ void disconnect(TestHostConnection connection) throws InterruptedException, RemoteException {
+ // intentionally package-private
+ if (lock.tryLock(TIMEOUT, TimeUnit.MINUTES)) {
+ try {
+ connection.getServiceConnector().setConnected(false);
+ connection.endConnection();
+ return;
+ } finally {
+ lock.unlock();
+ }
+ }
+ throw new IllegalStateException(LOCK_ERROR_MSG);
+ }
+
+ @Override
+ public void initiateYesNoPrompt(IYesNoPromptResponse prompt) throws Exception {
+ assert sessionDelegate != null : "delegate is null";
+ try {
+ sessionDelegate.handleYesNo(prompt);
+ } catch (Exception ex) {
+ throw new RemoteException("exception initiating prompt", ex);
+ }
+ }
+
+ @Override
+ public UUID getUserId() throws Exception {
+ return id;
+ }
+}
diff --git a/org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/core/ConnectionServiceTracker.java b/org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/core/ConnectionServiceTracker.java
new file mode 100644
index 000000000..7a82a8b37
--- /dev/null
+++ b/org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/core/ConnectionServiceTracker.java
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ote.service.core;
+
+import java.util.logging.Level;
+
+import org.eclipse.osee.connection.service.IConnectionService;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.ote.service.IOteClientService;
+import org.eclipse.osee.ote.service.TestSessionException;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+import org.osgi.framework.ServiceRegistration;
+import org.osgi.util.tracker.ServiceTracker;
+
+public class ConnectionServiceTracker extends ServiceTracker {
+
+// private final OteClientEndpointReceive endpointReceive = new OteClientEndpointReceive();
+// private final OteClientEndpointSend endpointSend = new OteClientEndpointSend();
+// private final MessagingGatewayBindTracker messagingGatewayTracker;
+
+ private ServiceRegistration registration;
+ private TestClientServiceImpl testClientService;
+
+ public ConnectionServiceTracker(BundleContext context) {
+ super(context, IConnectionService.class.getName(), null);
+// messagingGatewayTracker = new MessagingGatewayBindTracker(context, endpointSend, endpointReceive);
+// messagingGatewayTracker.open(true);
+ }
+
+ @Override
+ public Object addingService(ServiceReference reference) {
+ IConnectionService connectionService = (IConnectionService) super.addingService(reference);
+ testClientService = new TestClientServiceImpl(connectionService);
+ testClientService.init();
+ // register the service
+ registration = context.registerService(IOteClientService.class.getName(), testClientService, null);
+ return connectionService;
+ }
+
+ private void shutdownClientService() {
+ if (testClientService != null) {
+ // we should fire off all disconnect listeners before we unregister the service
+ if (testClientService.isConnected()) {
+ try {
+ testClientService.disconnect();
+ } catch (TestSessionException ex) {
+ OseeLog.log(ConnectionServiceTracker.class, Level.SEVERE, "failed to disconnect", ex);
+ }
+ }
+ registration.unregister();
+ try {
+ testClientService.stop();
+ } catch (Exception e) {
+ OseeLog.log(ConnectionServiceTracker.class, Level.SEVERE, "failed to properly stop OTE client service", e);
+
+ }
+ testClientService = null;
+ }
+ }
+
+ @Override
+ public void close() {
+ shutdownClientService();
+// messagingGatewayTracker.close();
+ super.close();
+ }
+
+ @Override
+ public void removedService(ServiceReference reference, Object service) {
+ shutdownClientService();
+ super.removedService(reference, service);
+ }
+
+}
diff --git a/org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/core/ListenerNotifier.java b/org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/core/ListenerNotifier.java
new file mode 100644
index 000000000..61490b51c
--- /dev/null
+++ b/org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/core/ListenerNotifier.java
@@ -0,0 +1,94 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ote.service.core;
+
+import java.util.concurrent.CopyOnWriteArraySet;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ThreadFactory;
+import java.util.logging.Level;
+
+import org.eclipse.osee.connection.service.IServiceConnector;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.ote.service.Activator;
+import org.eclipse.osee.ote.service.ConnectionEvent;
+import org.eclipse.osee.ote.service.ITestConnectionListener;
+
+/**
+ * @author Ken J. Aguilar
+ */
+class ListenerNotifier {
+ private final ExecutorService executor = Executors.newCachedThreadPool(new ThreadFactory() {
+ private int count = 0;
+ @Override
+ public Thread newThread(Runnable r) {
+ Thread th = new Thread(r);
+ th.setName(String.format("OTE listener notifier [%d]", count++));
+ return th;
+ }
+ });
+ private final CopyOnWriteArraySet<ITestConnectionListener> testConnectionListeners =
+ new CopyOnWriteArraySet<ITestConnectionListener>();
+
+ boolean addTestConnectionListener(ITestConnectionListener listener) {
+ return testConnectionListeners.add(listener);
+ }
+
+ boolean removeTestConnectionListener(ITestConnectionListener listener) {
+ return testConnectionListeners.remove(listener);
+ }
+
+ void notifyPostConnection(final ConnectionEvent event) {
+ executor.submit(new Runnable() {
+
+ @Override
+ public void run() {
+ for (ITestConnectionListener listener : testConnectionListeners) {
+ try {
+ listener.onPostConnect(event);
+ } catch (Throwable ex) {
+ OseeLog.log(Activator.class, Level.SEVERE, "exception notifying listener of post connect event", ex);
+ }
+ }
+ }
+
+ });
+ }
+
+ void notifyDisconnect(final ConnectionEvent event) {
+ for (ITestConnectionListener listener : testConnectionListeners) {
+ try {
+ listener.onPreDisconnect(event);
+ } catch (Throwable ex) {
+ OseeLog.log(Activator.class, Level.SEVERE, "exception notifying listener of disconnect event", ex);
+ }
+ }
+ }
+
+ void notifyConnectionLost(final IServiceConnector connector) {
+ executor.submit(new Runnable() {
+
+ @Override
+ public void run() {
+ for (ITestConnectionListener listener : testConnectionListeners) {
+ try {
+ listener.onConnectionLost(connector);
+ } catch (Throwable ex) {
+ OseeLog.log(Activator.class, Level.SEVERE, "exception notifying listener of connection error event",
+ ex);
+ }
+ }
+ }
+ });
+
+ }
+
+}
diff --git a/org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/core/TestClientServiceImpl.java b/org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/core/TestClientServiceImpl.java
new file mode 100644
index 000000000..176d3d3f7
--- /dev/null
+++ b/org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/core/TestClientServiceImpl.java
@@ -0,0 +1,378 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ote.service.core;
+
+import java.net.InetAddress;
+import java.rmi.RemoteException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.UUID;
+import java.util.logging.Level;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.SubProgressMonitor;
+import org.eclipse.osee.connection.service.IConnectionService;
+import org.eclipse.osee.connection.service.IConnectorListener;
+import org.eclipse.osee.connection.service.IServiceConnector;
+import org.eclipse.osee.framework.jdk.core.util.EnhancedProperties;
+import org.eclipse.osee.ote.core.OSEEPerson1_4;
+import org.eclipse.osee.ote.core.ServiceUtility;
+import org.eclipse.osee.ote.core.environment.TestEnvironmentConfig;
+import org.eclipse.osee.ote.core.environment.interfaces.IHostTestEnvironment;
+import org.eclipse.osee.ote.core.environment.interfaces.ITestEnvironment;
+import org.eclipse.osee.ote.endpoint.OteUdpEndpoint;
+import org.eclipse.osee.ote.service.Activator;
+import org.eclipse.osee.ote.service.ConnectionEvent;
+import org.eclipse.osee.ote.service.IEnvironmentConfigurer;
+import org.eclipse.osee.ote.service.IOteClientService;
+import org.eclipse.osee.ote.service.ITestConnectionListener;
+import org.eclipse.osee.ote.service.ITestEnvironmentAvailibilityListener;
+import org.eclipse.osee.ote.service.OteServiceProperties;
+import org.eclipse.osee.ote.service.SessionDelegate;
+import org.eclipse.osee.ote.service.TestSessionException;
+
+public class TestClientServiceImpl implements IOteClientService, IConnectorListener {
+
+ private static final String NO_USER_MSG = "a user has not been set";
+ private final IConnectionService connectionService;
+ private final HashMap<String, IServiceConnector> testHosts = new HashMap<>();
+ private final ListenerNotifier listenerNotifier = new ListenerNotifier();
+ private final HashSet<ITestEnvironmentAvailibilityListener> hostAvailabilityListeners =
+ new HashSet<ITestEnvironmentAvailibilityListener>();
+ private ClientSession session = null;
+ private volatile boolean stopped = false;
+ private TestHostConnection testConnection;
+
+// private final OteClientEndpointSend endpointSend;
+// private final OteClientEndpointReceive endpointReceive;
+
+ public TestClientServiceImpl(IConnectionService connectionService) {
+ this.connectionService = connectionService;
+// this.endpointReceive = endpointReceive;
+// this.endpointSend = endpointSend;
+// endpointSend.setTestClientService(this);
+ }
+
+ public void init() {
+ connectionService.addListener(this);
+ }
+
+ @Override
+ public void addEnvironmentAvailibiltyListener(ITestEnvironmentAvailibilityListener listener) {
+ checkState();
+ final Set<Entry<String, IServiceConnector>> entrySet;
+ synchronized (this) {
+ if (hostAvailabilityListeners.add(listener)) {
+ entrySet = new HashSet<>(testHosts.entrySet());
+ } else {
+ entrySet = Collections.emptySet();
+ }
+ }
+ for (Entry<String, IServiceConnector> entry : entrySet) {
+ listener.environmentAvailable(entry.getValue(),
+ new OteServiceProperties(entry.getValue()));
+ }
+ }
+
+ @Override
+ public ConnectionEvent connect(IHostTestEnvironment testHost, IEnvironmentConfigurer configurer, TestEnvironmentConfig config, IProgressMonitor monitor) throws IllegalArgumentException, TestSessionException {
+ checkState();
+ final IServiceConnector connector;
+ final ClientSession localSession;
+ synchronized (this) {
+ if (session == null) {
+ throw new IllegalArgumentException("a user has not been set");
+ }
+ if (testConnection != null) {
+ throw new IllegalStateException("already connected");
+ }
+ if (testHost == null) {
+ throw new IllegalArgumentException("test host cannot be null");
+ }
+ connector = getConnector(testHost);
+ localSession = session;
+ }
+ try {
+ if (connector == null) {
+ throw new IllegalStateException("Unable to find a connection.");
+ }
+ if(configurer.configure(testHost, new SubProgressMonitor(monitor, 95)) && !monitor.isCanceled()){
+ testConnection = localSession.connect(connector, testHost, config);
+ if (testConnection != null) {
+ // success
+ ConnectionEvent event = new ConnectionEvent(testHost, connector, testConnection.getConnectEnvironment(), testConnection.getSessionKey());
+ listenerNotifier.notifyPostConnection(event);
+ return event;
+ }
+ }
+ } catch (Exception e) {
+ Activator.log(Level.SEVERE, "failed to establish connection", e);
+ testConnection = null;
+ }
+ return null;
+ }
+
+ @Override
+ public synchronized IServiceConnector getConnector(IHostTestEnvironment host) {
+ try {
+ EnhancedProperties properties = host.getProperties();
+ if(properties != null){
+ String passedInId = (String) properties.getProperty("id");
+ for (IServiceConnector connector : testHosts.values()) {
+ String loopId = (String) connector.getProperty("id", "no");
+ if (passedInId != null && loopId != null && loopId.equals(passedInId)) {
+ return connector;
+ }
+ }
+ }
+ } catch (RemoteException ex) {
+ ex.printStackTrace();
+ }
+ return null;
+ }
+
+ @Override
+ public void disconnect() throws TestSessionException {
+ checkState();
+ synchronized (this) {
+ if (session == null) {
+ throw new IllegalStateException(NO_USER_MSG);
+ }
+ if (testConnection == null) {
+ return;
+ }
+ Activator.log(Level.INFO,
+ "disconnecting from " + new OteServiceProperties(testConnection.getServiceConnector()).getStation());
+ ITestEnvironment envirnonment = testConnection.getConnectEnvironment();
+
+ if (!testConnection.getServiceConnector().ping()) {
+ listenerNotifier.notifyConnectionLost(testConnection.getServiceConnector());
+ testConnection = null;
+ } else {
+ ConnectionEvent event =
+ new ConnectionEvent(this.getConnectedHost(), testConnection.getConnectedTestHost(), envirnonment,
+ testConnection.getSessionKey());
+ listenerNotifier.notifyDisconnect(event);
+ try {
+ session.disconnect(testConnection);
+ } catch (Exception e) {
+ throw new TestSessionException("could not properly disconnect from test environment", e);
+ } finally {
+ testConnection = null;
+ }
+ }
+ }
+
+ }
+
+ /**
+ * stops this service
+ */
+ public synchronized void stop() {
+ connectionService.removeListener(this);
+ if (session != null) {
+ try {
+ if (testConnection != null) {
+ disconnect();
+ }
+ } catch (Exception e) {
+ Activator.log(Level.SEVERE, "exception trying to disconnect during stop()", e);
+ } finally {
+ session.close();
+ }
+ }
+ stopped = true;
+ hostAvailabilityListeners.clear();
+ }
+
+ @Override
+ public void addConnectionListener(ITestConnectionListener listener) {
+ checkState();
+ if (listenerNotifier.addTestConnectionListener(listener)) {
+ if (session == null) {
+ return;
+ }
+ try {
+ final ConnectionEvent event;
+ // we want to avoid holding a lock when we call onPostConnect due to potential deadlock. so lets do what we can
+ // in a small synchronized block prior to calling onPostConnect
+ synchronized (this) {
+ // check to see if a connection already established
+ if (testConnection != null) {
+ event = new ConnectionEvent(this.getConnectedHost(),
+ testConnection.getServiceConnector(), testConnection.getConnectEnvironment(),
+ testConnection.getSessionKey());
+ } else {
+ event = null;
+ }
+ }
+ if (event != null) {
+ listener.onPostConnect(event);
+ }
+ } catch (Exception e) {
+ Activator.log(Level.SEVERE, "Exception notifying listener of connection event", e);
+ }
+ }
+ }
+
+ @Override
+ public void removeConnectionListener(ITestConnectionListener listener) {
+ listenerNotifier.removeTestConnectionListener(listener);
+ }
+
+ @Override
+ public synchronized void removeEnvironmentAvailibiltyListener(ITestEnvironmentAvailibilityListener listener) {
+ checkState();
+ hostAvailabilityListeners.remove(listener);
+ }
+
+ private void checkState() {
+ if (stopped) {
+ throw new IllegalStateException("service stopped");
+ }
+ }
+
+ @Override
+ public synchronized void setUser(OSEEPerson1_4 user, InetAddress address) throws TestSessionException {
+ checkState();
+ if (testConnection != null) {
+ disconnect();
+ }
+ if (session != null) {
+ session.close();
+ }
+ session = new ClientSession(user, address);
+ }
+
+ @Override
+ public synchronized OSEEPerson1_4 getUser() {
+ if (session != null) {
+ return session.getUser();
+ }
+ return null;
+ }
+
+ @Override
+ public synchronized UUID getSessionKey() {
+ return testConnection != null ? testConnection.getSessionKey() : null;
+
+ }
+
+ @Override
+ public synchronized void setSessionDelegate(SessionDelegate sessionDelegate) {
+ checkState();
+ if (session == null) {
+ throw new IllegalStateException(NO_USER_MSG);
+ }
+ session.setSessionDelegate(sessionDelegate);
+ }
+
+
+ private void notifyHostAvailable(IServiceConnector connector, OteServiceProperties props) {
+ for (ITestEnvironmentAvailibilityListener listener : hostAvailabilityListeners) {
+ listener.environmentAvailable(connector, props);
+ }
+ }
+
+ private void notifyHostUnavailable(IServiceConnector connector, OteServiceProperties props) {
+ for (ITestEnvironmentAvailibilityListener listener : hostAvailabilityListeners) {
+ try {
+ listener.environmentUnavailable(connector, props);
+ } catch (Exception e) {
+ Activator.log(Level.SEVERE, "exception in listener during host unavailable event notification", e);
+ }
+ }
+ }
+
+ @Override
+ public synchronized ITestEnvironment getConnectedEnvironment() throws IllegalStateException {
+ checkState();
+ return testConnection == null ? null : testConnection.getConnectEnvironment();
+ }
+
+ @Override
+ public synchronized IHostTestEnvironment getConnectedHost() throws IllegalStateException {
+ checkState();
+ return testConnection == null ? null : (IHostTestEnvironment) testConnection.getConnectedTestHost().getService();
+
+ }
+
+ @Override
+ public synchronized IServiceConnector getConnector() {
+ checkState();
+ return testConnection == null ? null : testConnection.getServiceConnector();
+ }
+
+ @Override
+ public synchronized List<IServiceConnector> getAvailableTestHosts() {
+ List<IServiceConnector> envs = new ArrayList<>();
+ for (IServiceConnector conn : testHosts.values()) {
+ envs.add(conn);
+ }
+ return envs;
+ }
+
+ @Override
+ public synchronized boolean isConnected() {
+ return testConnection != null;
+ }
+
+ @Override
+ public OteServiceProperties getProperties(IHostTestEnvironment testHost) {
+
+ IServiceConnector connector = getConnector(testHost);
+ if (connector != null) {
+ return new OteServiceProperties(connector);
+ }
+ try {
+ return new OteServiceProperties(testHost.getProperties());
+ } catch (RemoteException ex) {
+ return null;
+ }
+ }
+
+ @Override
+ public void onConnectionServiceStopped() {
+ }
+
+ @Override
+ public synchronized void onConnectorsAdded(Collection<IServiceConnector> connectors) {
+ for (IServiceConnector connector : connectors) {
+ OteServiceProperties props = new OteServiceProperties(connector);
+ props.printStats();
+ testHosts.put(connector.getUniqueServerId(), connector);
+ notifyHostAvailable(connector, props);
+ }
+ }
+
+ @Override
+ public synchronized void onConnectorRemoved(IServiceConnector connector) {
+ String id = connector.getUniqueServerId();
+ testHosts.remove(id);
+ notifyHostUnavailable(connector, new OteServiceProperties(connector));
+ IHostTestEnvironment connectedHost = getConnectedHost();
+ if (testConnection != null && testConnection.getId().equals(id)) {
+ testConnection = null;
+ listenerNotifier.notifyConnectionLost(connector);
+ OteUdpEndpoint endpoint = ServiceUtility.getService(OteUdpEndpoint.class);
+ if(endpoint != null){
+ endpoint.removeBroadcast(null);
+ }
+ }
+ }
+
+}
diff --git a/org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/core/TestHostConnection.java b/org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/core/TestHostConnection.java
new file mode 100644
index 000000000..6680b6b0f
--- /dev/null
+++ b/org.eclipse.osee.ote.client/src/org/eclipse/osee/ote/service/core/TestHostConnection.java
@@ -0,0 +1,93 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ote.service.core;
+
+import java.rmi.RemoteException;
+import java.util.UUID;
+
+import org.eclipse.osee.connection.service.IServiceConnector;
+import org.eclipse.osee.ote.core.environment.interfaces.IHostTestEnvironment;
+import org.eclipse.osee.ote.core.environment.interfaces.ITestEnvironment;
+
+/**
+ * Encapsulated all information regarding the current connection between a client and a test server.
+ *
+ * @author Ken J. Aguilar
+ */
+class TestHostConnection {
+ // intentionally package-private
+
+ private final IServiceConnector serviceConnector;
+ private final ITestEnvironment connectEnvironment;
+ private final UUID sessionKey;
+ private final IHostTestEnvironment host;
+ private String serverId;
+
+ TestHostConnection(IServiceConnector connector, IHostTestEnvironment host, ITestEnvironment connectEnvironment, UUID uuid) {
+ // intentionally package-private
+ if (connector == null) {
+ throw new NullPointerException("service connector cannot be null");
+ }
+ if (connectEnvironment == null) {
+ throw new NullPointerException("test environment cannot be null");
+ }
+ if (uuid == null) {
+ throw new NullPointerException("session key cannot be null");
+ }
+ this.serviceConnector = connector;
+ this.host = host;
+ this.connectEnvironment = connectEnvironment;
+ this.sessionKey = uuid;
+ try {
+ this.serverId = (String) host.getProperties().getProperty("id");
+ } catch (RemoteException e) {
+ this.serverId = "";
+ }
+ }
+
+ /**
+ * @return the connectedTestHost
+ */
+ public IServiceConnector getConnectedTestHost() {
+ return serviceConnector;
+ }
+
+ /**
+ * @return the connectEnvironment
+ */
+ public ITestEnvironment getConnectEnvironment() {
+ return connectEnvironment;
+ }
+
+ /**
+ * @return the sessionKey
+ */
+ public UUID getSessionKey() {
+ return sessionKey;
+ }
+
+ /**
+ * @return the serviceConnector
+ */
+ public IServiceConnector getServiceConnector() {
+ return serviceConnector;
+ }
+
+ public String getId(){
+ return serverId;
+ }
+
+ void endConnection() throws RemoteException {
+ // intentionally package-private
+
+ host.disconnect(sessionKey);
+ }
+}
diff --git a/org.eclipse.osee.ote.connection.jini/.classpath b/org.eclipse.osee.ote.connection.jini/.classpath
new file mode 100644
index 000000000..1fa3e6803
--- /dev/null
+++ b/org.eclipse.osee.ote.connection.jini/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.osee.ote.connection.jini/.pmd b/org.eclipse.osee.ote.connection.jini/.pmd
new file mode 100644
index 000000000..c7b0a9fb3
--- /dev/null
+++ b/org.eclipse.osee.ote.connection.jini/.pmd
@@ -0,0 +1,925 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<pmd>
+ <useProjectRuleSet>false</useProjectRuleSet>
+ <ruleSetFile>.ruleset</ruleSetFile>
+ <rules>
+ <rule>
+ <name>LooseCoupling</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CloneMethodMustImplementCloneable</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedImports</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SignatureDeclareThrowsException</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>IfStmtsMustUseBraces</name>
+ <ruleset>Braces Rules</ruleset>
+ </rule>
+ <rule>
+ <name>WhileLoopsMustUseBraces</name>
+ <ruleset>Braces Rules</ruleset>
+ </rule>
+ <rule>
+ <name>IfElseStmtsMustUseBraces</name>
+ <ruleset>Braces Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ForLoopsMustUseBraces</name>
+ <ruleset>Braces Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseSingleton</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SimplifyBooleanReturns</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SimplifyBooleanExpressions</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SwitchStmtsShouldHaveDefault</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidDeeplyNestedIfStmts</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidReassigningParameters</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SwitchDensity</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ConstructorCallsOverridableMethod</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AccessorClassGeneration</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>FinalFieldCouldBeStatic</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CloseResource</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NonStaticInitializer</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DefaultLabelNotLastInSwitchStmt</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NonCaseLabelInSwitchStatement</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>OptimizableToArrayCall</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>BadComparison</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EqualsNull</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ConfusingTernary</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>InstantiationToGetClass</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>IdempotentOperations</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SimpleDateFormatNeedsLocale</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ImmutableField</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseLocaleWithCaseConversions</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidProtectedFieldInFinalClass</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AssignmentToNonFinalStatic</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MissingStaticMethodInNonInstantiatableClass</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidSynchronizedAtMethodLevel</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MissingBreakInSwitch</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseNotifyAllInsteadOfNotify</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidInstanceofChecksInCatchClause</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AbstractClassWithoutAbstractMethod</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SimplifyConditional</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CompareObjectsWithEquals</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>PositionLiteralsFirstInComparisons</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryLocalBeforeReturn</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NonThreadSafeSingleton</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UncommentedEmptyMethod</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UncommentedEmptyConstructor</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidConstantsInterface</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnsynchronizedStaticDateFormatter</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>PreserveStackTrace</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseCollectionIsEmpty</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ClassWithOnlyPrivateConstructorsShouldBeFinal</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyMethodInAbstractClassShouldBeAbstract</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SingularField</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ReturnEmptyArrayRatherThanNull</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AbstractClassWithoutAnyMethod</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>TooFewBranchesForASwitchStatement</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidCatchingThrowable</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SignatureDeclareThrowsException</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ExceptionAsFlowControl</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidCatchingNPE</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidThrowingRawExceptionTypes</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidThrowingNullPointerException</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidRethrowingException</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DoNotExtendJavaLangError</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DoNotThrowExceptionInFinally</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidThrowingNewInstanceOfSameException</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedPrivateField</name>
+ <ruleset>Unused Code Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedLocalVariable</name>
+ <ruleset>Unused Code Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedPrivateMethod</name>
+ <ruleset>Unused Code Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedFormalParameter</name>
+ <ruleset>Unused Code Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MoreThanOneLogger</name>
+ <ruleset>Java Logging Rules</ruleset>
+ </rule>
+ <rule>
+ <name>LoggerIsNotStaticFinal</name>
+ <ruleset>Java Logging Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SystemPrintln</name>
+ <ruleset>Java Logging Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidPrintStackTrace</name>
+ <ruleset>Java Logging Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidDuplicateLiterals</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>StringInstantiation</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>StringToString</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>InefficientStringBuffering</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryCaseChange</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseStringBufferLength</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AppendCharacterWithChar</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ConsecutiveLiteralAppends</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseIndexOfChar</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>InefficientEmptyStringCheck</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>InsufficientStringBufferDeclaration</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UselessStringValueOf</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>StringBufferInstantiationWithChar</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseEqualsToCompareStrings</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidStringBufferField</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ReplaceVectorWithList</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ReplaceHashtableWithMap</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ReplaceEnumerationWithIterator</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidEnumAsIdentifier</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidAssertAsIdentifier</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>IntegerInstantiation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ByteInstantiation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ShortInstantiation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>LongInstantiation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnit4TestShouldUseBeforeAnnotation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnit4TestShouldUseAfterAnnotation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnit4TestShouldUseTestAnnotation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnit4SuitesShouldUseSuiteAnnotation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnitUseExpected</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseProperClassLoader</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MDBAndSessionBeanNamingConvention</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>RemoteSessionInterfaceNamingConvention</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>LocalInterfaceSessionNamingConvention</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>LocalHomeNamingConvention</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>RemoteInterfaceNamingConvention</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DoNotCallSystemExit</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>StaticEJBFieldShouldBeFinal</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DoNotUseThreads</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidInstantiatingObjectsInLoops</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseArrayListInsteadOfVector</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SimplifyStartsWith</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseStringBufferForStringAppends</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseArraysAsList</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidArrayLoops</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryWrapperObjectCreation</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AddEmptyString</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyCatchBlock</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyIfStmt</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyWhileStmt</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyTryBlock</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyFinallyBlock</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptySwitchStatements</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JumbledIncrementer</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ForLoopShouldBeWhileLoop</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryConversionTemporary</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>OverrideBothEqualsAndHashcode</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DoubleCheckedLocking</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ReturnFromFinallyBlock</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptySynchronizedBlock</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryReturn</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyStaticInitializer</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnconditionalIfStatement</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyStatementNotInLoop</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>BooleanInstantiation</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryFinalModifier</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CollapsibleIfStatements</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UselessOverridingMethod</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ClassCastExceptionWithToArray</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidDecimalLiteralsInBigDecimalConstructor</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UselessOperationOnImmutable</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MisplacedNullCheck</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedNullCheckInEquals</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidThreadGroup</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>BrokenNullCheck</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>BigIntegerInstantiation</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidUsingOctalValues</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidUsingHardCodedIP</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CheckResultSet</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidMultipleUnaryOperators</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyInitializer</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MethodReturnsInternalArray</name>
+ <ruleset>Security Code Guidelines</ruleset>
+ </rule>
+ <rule>
+ <name>ArrayIsStoredDirectly</name>
+ <ruleset>Security Code Guidelines</ruleset>
+ </rule>
+ <rule>
+ <name>CouplingBetweenObjects</name>
+ <ruleset>Coupling Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ExcessiveImports</name>
+ <ruleset>Coupling Rules</ruleset>
+ </rule>
+ <rule>
+ <name>LooseCoupling</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DuplicateImports</name>
+ <ruleset>Import Statement Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DontImportJavaLang</name>
+ <ruleset>Import Statement Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedImports</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ImportFromSamePackage</name>
+ <ruleset>Import Statement Rules</ruleset>
+ </rule>
+ <rule>
+ <name>TooManyStaticImports</name>
+ <ruleset>Import Statement Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnitStaticSuite</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnitSpelling</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnitAssertionsShouldIncludeMessage</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnitTestsShouldIncludeAssert</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>TestClassWithoutTestCases</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryBooleanAssertion</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseAssertEqualsInsteadOfAssertTrue</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseAssertSameInsteadOfAssertTrue</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseAssertNullInsteadOfAssertTrue</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SimplifyBooleanAssertion</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryConstructor</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NullAssignment</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedModifier</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AssignmentInOperand</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AtLeastOneConstructor</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DontImportSun</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SuspiciousOctalEscape</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CallSuperInConstructor</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryParentheses</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DefaultPackage</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>BooleanInversion</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DataflowAnomalyAnalysis</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidFinalLocalVariable</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidUsingShortType</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidUsingVolatile</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidUsingNativeCode</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidAccessibilityAlteration</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DoNotCallGarbageCollectionExplicitly</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MethodNamingConventions</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ClassNamingConventions</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AbstractNaming</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidDollarSigns</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MethodWithSameNameAsEnclosingClass</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SuspiciousHashcodeMethodName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SuspiciousConstantFieldName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SuspiciousEqualsMethodName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidFieldNameMatchingTypeName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidFieldNameMatchingMethodName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NoPackage</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>PackageCase</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MisleadingVariableName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>BooleanGetMethodName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NPathComplexity</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ExcessiveMethodLength</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ExcessiveParameterList</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ExcessiveClassLength</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CyclomaticComplexity</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ExcessivePublicCount</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>TooManyFields</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NcssMethodCount</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NcssTypeCount</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NcssConstructorCount</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>TooManyMethods</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyFinalizer</name>
+ <ruleset>Finalizer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>FinalizeOnlyCallsSuperFinalize</name>
+ <ruleset>Finalizer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>FinalizeOverloaded</name>
+ <ruleset>Finalizer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>FinalizeDoesNotCallSuperFinalize</name>
+ <ruleset>Finalizer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>FinalizeShouldBeProtected</name>
+ <ruleset>Finalizer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidCallingFinalize</name>
+ <ruleset>Finalizer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseCorrectExceptionLogging</name>
+ <ruleset>Jakarta Commons Logging Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ProperLogger</name>
+ <ruleset>Jakarta Commons Logging Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MissingSerialVersionUID</name>
+ <ruleset>JavaBean Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ProperCloneImplementation</name>
+ <ruleset>Clone Implementation Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CloneThrowsCloneNotSupportedException</name>
+ <ruleset>Clone Implementation Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CloneMethodMustImplementCloneable</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ </rules>
+ <includeDerivedFiles>false</includeDerivedFiles>
+ <violationsAsErrors>true</violationsAsErrors>
+</pmd>
diff --git a/org.eclipse.osee.ote.connection.jini/.project b/org.eclipse.osee.ote.connection.jini/.project
new file mode 100644
index 000000000..42f4d6531
--- /dev/null
+++ b/org.eclipse.osee.ote.connection.jini/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.osee.ote.connection.jini</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/org.eclipse.osee.ote.connection.jini/META-INF/MANIFEST.MF b/org.eclipse.osee.ote.connection.jini/META-INF/MANIFEST.MF
new file mode 100644
index 000000000..793371522
--- /dev/null
+++ b/org.eclipse.osee.ote.connection.jini/META-INF/MANIFEST.MF
@@ -0,0 +1,18 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: JINI Connector provider (Incubation)
+Bundle-SymbolicName: org.eclipse.osee.ote.connection.jini;singleton:=true
+Bundle-Version: 0.25.3.qualifier
+Bundle-Activator: org.eclipse.osee.ote.connection.jini.Activator
+Bundle-Vendor: Eclipse Open System Engineering Environment
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.osee.framework.jini,
+ net.jini,
+ org.eclipse.osee.framework.plugin.core,
+ org.eclipse.osee.framework.logging
+Bundle-ActivationPolicy: lazy
+Import-Package: org.eclipse.osee.connection.service,
+ org.eclipse.osee.framework.jdk.core.util,
+ org.eclipse.osee.framework.jdk.core.util.network
+Export-Package: org.eclipse.osee.ote.connection.jini
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/org.eclipse.osee.ote.connection.jini/build.properties b/org.eclipse.osee.ote.connection.jini/build.properties
new file mode 100644
index 000000000..e9863e281
--- /dev/null
+++ b/org.eclipse.osee.ote.connection.jini/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ plugin.xml
diff --git a/org.eclipse.osee.ote.connection.jini/plugin.xml b/org.eclipse.osee.ote.connection.jini/plugin.xml
new file mode 100644
index 000000000..9523eb4e9
--- /dev/null
+++ b/org.eclipse.osee.ote.connection.jini/plugin.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+ <extension
+ point="org.eclipse.osee.connection.service.ext">
+ <ConnectorContribution
+ className="org.eclipse.osee.ote.connection.jini.ConnectorContribution">
+ </ConnectorContribution>
+ </extension>
+
+</plugin>
diff --git a/org.eclipse.osee.ote.connection.jini/pom.xml b/org.eclipse.osee.ote.connection.jini/pom.xml
new file mode 100644
index 000000000..4b5e4cc44
--- /dev/null
+++ b/org.eclipse.osee.ote.connection.jini/pom.xml
@@ -0,0 +1,35 @@
+<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.eclipse.osee</groupId>
+ <artifactId>org.eclipse.osee.ote.parent</artifactId>
+ <version>0.25.3-SNAPSHOT</version>
+ <relativePath>../org.eclipse.osee.ote.parent</relativePath>
+ </parent>
+
+ <artifactId>org.eclipse.osee.ote.connection.jini</artifactId>
+ <packaging>eclipse-plugin</packaging>
+ <name>OTE Connection JINI (Incubation)</name>
+
+ <build>
+ <!-- workaround for https://issues.sonatype.org/browse/TYCHO-168 -->
+ <resources>
+ <resource>
+ <directory>src</directory>
+ <excludes>
+ <exclude>**/*.java</exclude>
+ </excludes>
+ </resource>
+ </resources>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-source-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </build>
+
+</project> \ No newline at end of file
diff --git a/org.eclipse.osee.ote.connection.jini/src/org/eclipse/osee/ote/connection/jini/Activator.java b/org.eclipse.osee.ote.connection.jini/src/org/eclipse/osee/ote/connection/jini/Activator.java
new file mode 100644
index 000000000..d73c09496
--- /dev/null
+++ b/org.eclipse.osee.ote.connection.jini/src/org/eclipse/osee/ote/connection/jini/Activator.java
@@ -0,0 +1,74 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ote.connection.jini;
+
+import java.util.logging.Level;
+
+import org.eclipse.core.runtime.Plugin;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.plugin.core.util.ExportClassLoader;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends Plugin {
+
+ // The plug-in ID
+ public static final String PLUGIN_ID = "org.eclipse.osee.ote.connection.jini";
+
+ // The shared instance
+ private static Activator plugin;
+
+
+ private ExportClassLoader exportClassLoader;
+
+ /**
+ * The constructor
+ */
+ public Activator() {
+ }
+
+ @Override
+ public void start(BundleContext context) throws Exception {
+ super.start(context);
+ plugin = this;
+
+ }
+
+ @Override
+ public void stop(BundleContext context) throws Exception {
+ super.stop(context);
+ exportClassLoader = null;
+ plugin = null;
+ }
+
+ /**
+ * Returns the shared instance
+ *
+ * @return the shared instance
+ */
+ public static Activator getDefault() {
+ return plugin;
+ }
+
+ ClassLoader getExportClassLoader() {
+ return exportClassLoader;
+ }
+
+ public static void log(Level level, String message, Throwable t) {
+ OseeLog.log(Activator.class, level, message, t);
+ }
+
+ public static void log(Level level, String message) {
+ log(level, message, null);
+ }
+}
diff --git a/org.eclipse.osee.ote.connection.jini/src/org/eclipse/osee/ote/connection/jini/ConnectorContribution.java b/org.eclipse.osee.ote.connection.jini/src/org/eclipse/osee/ote/connection/jini/ConnectorContribution.java
new file mode 100644
index 000000000..17d6fe946
--- /dev/null
+++ b/org.eclipse.osee.ote.connection.jini/src/org/eclipse/osee/ote/connection/jini/ConnectorContribution.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ote.connection.jini;
+
+import org.eclipse.osee.connection.service.IConnectorContributor;
+
+public class ConnectorContribution implements IConnectorContributor {
+
+ public ConnectorContribution() {
+ }
+
+ @Override
+ public void init() throws Exception {
+ }
+
+}
diff --git a/org.eclipse.osee.ote.connection.jini/src/org/eclipse/osee/ote/connection/jini/IJiniConnectorLink.java b/org.eclipse.osee.ote.connection.jini/src/org/eclipse/osee/ote/connection/jini/IJiniConnectorLink.java
new file mode 100644
index 000000000..bd858a816
--- /dev/null
+++ b/org.eclipse.osee.ote.connection.jini/src/org/eclipse/osee/ote/connection/jini/IJiniConnectorLink.java
@@ -0,0 +1,18 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ote.connection.jini;
+
+import java.rmi.Remote;
+import java.rmi.RemoteException;
+
+public interface IJiniConnectorLink extends Remote {
+ boolean ping() throws RemoteException;
+}
diff --git a/org.eclipse.osee.ote.connection.jini/src/org/eclipse/osee/ote/connection/jini/IJiniConnectorRegistrar.java b/org.eclipse.osee.ote.connection.jini/src/org/eclipse/osee/ote/connection/jini/IJiniConnectorRegistrar.java
new file mode 100644
index 000000000..b2418692b
--- /dev/null
+++ b/org.eclipse.osee.ote.connection.jini/src/org/eclipse/osee/ote/connection/jini/IJiniConnectorRegistrar.java
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ote.connection.jini;
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+import net.jini.core.discovery.LookupLocator;
+
+/**
+ * @author Ken J. Aguilar
+ */
+public interface IJiniConnectorRegistrar {
+ void addLocators(String... hosts) throws MalformedURLException, ClassNotFoundException, IOException;
+
+ LookupLocator[] getLocators();
+
+ void addGroup(String... groups) throws IOException;
+
+ String[] getGroups();
+}
diff --git a/org.eclipse.osee.ote.connection.jini/src/org/eclipse/osee/ote/connection/jini/JiniClientSideConnector.java b/org.eclipse.osee.ote.connection.jini/src/org/eclipse/osee/ote/connection/jini/JiniClientSideConnector.java
new file mode 100644
index 000000000..10ff1b693
--- /dev/null
+++ b/org.eclipse.osee.ote.connection.jini/src/org/eclipse/osee/ote/connection/jini/JiniClientSideConnector.java
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ote.connection.jini;
+
+import java.io.File;
+import java.net.URI;
+import java.net.UnknownHostException;
+import java.rmi.RemoteException;
+import java.rmi.server.ExportException;
+import net.jini.core.lookup.ServiceItem;
+
+/**
+ * @author Ken J. Aguilar
+ */
+public class JiniClientSideConnector extends JiniConnector {
+ public static final String TYPE = "jini.client-end";
+ private final ServiceItem serviceItem;
+ private final IJiniConnectorLink link;
+
+ JiniClientSideConnector(ServiceItem serviceItem) {
+ super();
+ this.serviceItem = serviceItem;
+ link = (IJiniConnectorLink) getProperties().getProperty(LINK_PROPERTY);
+ }
+
+ @Override
+ public Object getService() {
+ return serviceItem.service;
+ }
+
+ @Override
+ public String getConnectorType() {
+ return TYPE;
+ }
+
+ @Override
+ public URI upload(File file) throws Exception {
+ return null;
+ }
+
+ @Override
+ public boolean ping() {
+ try {
+ return link.ping();
+ } catch (RemoteException e) {
+ return false;
+ }
+ }
+
+ @Override
+ public void init(Object service) throws UnknownHostException, ExportException {
+
+ }
+
+ @Override
+ public String getUniqueServerId() {
+ return serviceItem.serviceID.toString();
+ }
+
+}
diff --git a/org.eclipse.osee.ote.connection.jini/src/org/eclipse/osee/ote/connection/jini/JiniConnector.java b/org.eclipse.osee.ote.connection.jini/src/org/eclipse/osee/ote/connection/jini/JiniConnector.java
new file mode 100644
index 000000000..276d77ede
--- /dev/null
+++ b/org.eclipse.osee.ote.connection.jini/src/org/eclipse/osee/ote/connection/jini/JiniConnector.java
@@ -0,0 +1,152 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ote.connection.jini;
+
+import java.io.Serializable;
+import java.net.UnknownHostException;
+import java.rmi.Remote;
+import java.rmi.server.ExportException;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedList;
+
+import net.jini.core.entry.Entry;
+import net.jini.export.Exporter;
+import net.jini.jeri.BasicILFactory;
+import net.jini.jeri.BasicJeriExporter;
+import net.jini.jeri.tcp.TcpServerEndpoint;
+
+import org.eclipse.osee.connection.service.IServiceConnector;
+import org.eclipse.osee.connection.service.IServicePropertyChangeListener;
+import org.eclipse.osee.framework.jdk.core.util.EnhancedProperties;
+import org.eclipse.osee.framework.jdk.core.util.Network;
+
+/**
+ * @author Ken J. Aguilar
+ */
+public abstract class JiniConnector implements IServiceConnector {
+ protected final static String LINK_PROPERTY = "JINI_CONNECTOR_LINK";
+ private final HashMap<Object, ExportInfo> exports = new HashMap<>();
+ private final EnhancedProperties properties;
+ private final HashSet<IServicePropertyChangeListener> propertyChangeListeners =
+ new HashSet<IServicePropertyChangeListener>();
+ private boolean connected = false;
+
+ private static final class ExportInfo {
+ private final Exporter exporter;
+ private final Object exportedObject;
+
+ private ExportInfo(Exporter exporter, Object exportedObject) {
+ this.exportedObject = exportedObject;
+ this.exporter = exporter;
+ }
+ }
+
+ protected JiniConnector() {
+ this(new EnhancedProperties());
+ }
+
+ protected JiniConnector(EnhancedProperties properties) {
+ this.properties = properties;
+ }
+
+ @Override
+ public Object export(Object callback) throws ExportException {
+ try {
+ Exporter exporter = createExporter();
+ Object exportedObject = exporter.export((Remote) callback);
+ exports.put(callback, new ExportInfo(exporter, exportedObject));
+ return exportedObject;
+ } catch (UnknownHostException e) {
+ throw new ExportException("failed to export", e);
+ }
+ }
+
+ @Override
+ public void unexport(Object callback) throws Exception {
+ ExportInfo info = exports.remove(callback);
+ if (info != null) {
+ info.exporter.unexport(false);
+ }
+ }
+
+ @Override
+ public Object findExport(Object callback) {
+ ExportInfo info = exports.get(callback);
+ if (info != null) {
+ return info.exportedObject;
+ }
+ return null;
+ }
+
+ @Override
+ public void stop() throws Exception {
+ for (ExportInfo info : exports.values()) {
+ info.exporter.unexport(false);
+ }
+ exports.clear();
+ }
+
+ private Exporter createExporter() throws UnknownHostException {
+ return new BasicJeriExporter(TcpServerEndpoint.getInstance(Network.getValidIP().getHostAddress(), 0),
+ new BasicILFactory(null, null, Activator.getDefault().getExportClassLoader()), false, false);
+ }
+
+ protected Entry[] createEntries() {
+ LinkedList<Entry> entries = new LinkedList<>();
+ return entries.toArray(new Entry[entries.size()]);
+ }
+
+ @Override
+ public Serializable getProperty(String property, Serializable defaultValue) {
+ return properties.getProperty(property, defaultValue);
+ }
+
+ @Override
+ public void addPropertyChangeListener(IServicePropertyChangeListener listener) {
+ propertyChangeListeners.add(listener);
+ }
+
+ @Override
+ public void removePropertyChangeListener(IServicePropertyChangeListener listener) {
+ propertyChangeListeners.remove(listener);
+ }
+
+ @Override
+ public void setProperty(String key, Serializable value) {
+ properties.setProperty(key, value);
+ for (IServicePropertyChangeListener listener : propertyChangeListeners) {
+ listener.propertyChanged(this, key, value);
+ }
+ }
+
+ @Override
+ public EnhancedProperties getProperties() {
+ return properties;
+ }
+
+ public void entriesChanged(Entry[] entries) {
+ EnhancedProperties newProps = new EnhancedProperties();
+ for (String key : properties.differences(newProps)) {
+ for (IServicePropertyChangeListener listener : propertyChangeListeners) {
+ listener.propertyChanged(this, key, properties.getProperty(key));
+ }
+ }
+ }
+
+ public void setConnected(boolean connected){
+ this.connected = connected;
+ }
+
+ public boolean isConnected() {
+ return this.connected;
+ }
+}
diff --git a/org.eclipse.osee.ote.connection.jini/src/org/eclipse/osee/ote/connection/jini/JiniServiceSideConnector.java b/org.eclipse.osee.ote.connection.jini/src/org/eclipse/osee/ote/connection/jini/JiniServiceSideConnector.java
new file mode 100644
index 000000000..22d9dd963
--- /dev/null
+++ b/org.eclipse.osee.ote.connection.jini/src/org/eclipse/osee/ote/connection/jini/JiniServiceSideConnector.java
@@ -0,0 +1,179 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ote.connection.jini;
+
+import java.io.File;
+import java.io.Serializable;
+import java.net.URI;
+import java.net.UnknownHostException;
+import java.rmi.Remote;
+import java.rmi.server.ExportException;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Timer;
+import java.util.logging.Level;
+import net.jini.core.entry.Entry;
+import net.jini.core.lookup.ServiceID;
+import net.jini.core.lookup.ServiceItem;
+import net.jini.core.lookup.ServiceRegistrar;
+import net.jini.core.lookup.ServiceRegistration;
+import net.jini.id.Uuid;
+import net.jini.id.UuidFactory;
+import net.jini.jeri.BasicILFactory;
+import net.jini.jeri.BasicJeriExporter;
+import net.jini.jeri.tcp.TcpServerEndpoint;
+import org.eclipse.osee.framework.jdk.core.util.EnhancedProperties;
+import org.eclipse.osee.framework.jdk.core.util.Network;
+import org.eclipse.osee.ote.connection.jini.util.LeaseRenewTask;
+
+/**
+ * @author Ken J. Aguilar
+ */
+public class JiniServiceSideConnector extends JiniConnector implements IJiniConnectorLink {
+ public static final String TYPE = "jini.service-end";
+ private final HashMap<ServiceRegistration, LeaseRenewTask> registrations =
+ new HashMap<ServiceRegistration, LeaseRenewTask>();
+ private Remote service;
+ private Remote serviceProxy;
+ private BasicJeriExporter serviceExporter;
+ private ServiceID serviceId;
+ private final Timer timer = new Timer();
+ private ServiceItem serviceItem;
+ private BasicJeriExporter linkExporter;
+ private IJiniConnectorLink exportedThis;
+ private boolean stopped = false;
+
+ public JiniServiceSideConnector() {
+ super();
+ }
+
+ @Override
+ public void init(Object service) throws UnknownHostException, ExportException {
+
+ this.service = (Remote) service;
+ serviceId = generateServiceId();
+ serviceExporter =
+ new BasicJeriExporter(TcpServerEndpoint.getInstance(Network.getValidIP().getHostAddress(), 0),
+ new BasicILFactory(null, null, Activator.getDefault().getExportClassLoader()), false, false);
+ linkExporter =
+ new BasicJeriExporter(TcpServerEndpoint.getInstance(Network.getValidIP().getHostAddress(), 0),
+ new BasicILFactory(null, null, Activator.getDefault().getExportClassLoader()), false, false);
+ serviceProxy = serviceExporter.export(this.service);
+ exportedThis = (IJiniConnectorLink) linkExporter.export(this);
+ setProperty(LINK_PROPERTY, (Serializable) exportedThis);
+ serviceItem = new ServiceItem(serviceId, serviceProxy, createEntries());
+ }
+
+ public JiniServiceSideConnector(Remote service, EnhancedProperties props) throws UnknownHostException, ExportException {
+ super(props);
+ this.service = service;
+ serviceId = generateServiceId();
+ serviceExporter =
+ new BasicJeriExporter(TcpServerEndpoint.getInstance(Network.getValidIP().getHostAddress(), 0),
+ new BasicILFactory(null, null, Activator.getDefault().getExportClassLoader()), false, false);
+ linkExporter =
+ new BasicJeriExporter(TcpServerEndpoint.getInstance(Network.getValidIP().getHostAddress(), 0),
+ new BasicILFactory(null, null, Activator.getDefault().getExportClassLoader()), false, false);
+ serviceProxy = serviceExporter.export(service);
+ exportedThis = (IJiniConnectorLink) linkExporter.export(this);
+ props.setProperty(LINK_PROPERTY, (Serializable) exportedThis);
+ serviceItem = new ServiceItem(serviceId, serviceProxy, createEntries());
+ }
+
+ @Override
+ public Remote getService() {
+ return serviceProxy;
+ }
+
+ @Override
+ public synchronized void stop() throws Exception {
+ if (stopped) {
+ return;
+ }
+ stopped = true;
+ super.stop();
+ removeAllRegistrations();
+ serviceExporter.unexport(true);
+ linkExporter.unexport(true);
+ }
+
+ /**
+ * this method will cancel all current registrations of this connector
+ */
+ synchronized void removeAllRegistrations() {
+ for (ServiceRegistration registration : registrations.keySet()) {
+ try {
+ LeaseRenewTask task = registrations.get(registration);
+ if (task != null) {
+ task.cancel();
+ }
+ } catch (Exception e) {
+ Activator.log(Level.SEVERE, "exception removing registration", e);
+ }
+ }
+ registrations.clear();
+ }
+
+ private ServiceID generateServiceId() {
+ Uuid uuid = UuidFactory.generate();
+ Long lsb = new Long(uuid.getLeastSignificantBits());
+ Long msb = new Long(uuid.getMostSignificantBits());
+ return new ServiceID(msb.longValue(), lsb.longValue());
+ }
+
+ synchronized void addRegistration(ServiceRegistration registration, ServiceRegistrar registrar) {
+ registrations.put(registration, new LeaseRenewTask(timer, registration, registrar));
+ }
+
+ ServiceItem getServiceItem() {
+ return serviceItem;
+ }
+
+ private synchronized void setAttributes(Entry[] entry) {
+ Iterator<ServiceRegistration> iter = registrations.keySet().iterator();
+ while (iter.hasNext()) {
+ ServiceRegistration registration = iter.next();
+ try {
+ registration.setAttributes(entry);
+ } catch (Exception ex) {
+ Activator.log(Level.SEVERE, "exception setting attributes", ex);
+ registrations.remove(registration);
+ }
+ }
+ }
+
+ @Override
+ public String getConnectorType() {
+ return TYPE;
+ }
+
+ @Override
+ public void setProperty(String key, Serializable value) {
+ super.setProperty(key, value);
+ setAttributes(createEntries());
+ }
+
+ @Override
+ public URI upload(File file) throws Exception {
+ return null;
+ }
+
+ @Override
+ public boolean ping() {
+ return true;
+ }
+
+ @Override
+ public String getUniqueServerId() {
+ return serviceId.toString();
+ }
+
+}
diff --git a/org.eclipse.osee.ote.connection.jini/src/org/eclipse/osee/ote/connection/jini/TestEntry.java b/org.eclipse.osee.ote.connection.jini/src/org/eclipse/osee/ote/connection/jini/TestEntry.java
new file mode 100644
index 000000000..4bcc3f666
--- /dev/null
+++ b/org.eclipse.osee.ote.connection.jini/src/org/eclipse/osee/ote/connection/jini/TestEntry.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ote.connection.jini;
+
+import net.jini.entry.AbstractEntry;
+
+/**
+ * @author Ken J. Aguilar
+ */
+public class TestEntry extends AbstractEntry {
+ private static final long serialVersionUID = -2239353039479522642L;
+ public final String data;
+
+ public TestEntry() {
+ data = "<none>";
+ }
+
+ public TestEntry(String data) {
+ super();
+ this.data = data;
+ }
+
+ /**
+ * @return the data
+ */
+ public String getData() {
+ return data;
+ }
+
+}
diff --git a/org.eclipse.osee.ote.connection.jini/src/org/eclipse/osee/ote/connection/jini/util/LeaseRenewTask.java b/org.eclipse.osee.ote.connection.jini/src/org/eclipse/osee/ote/connection/jini/util/LeaseRenewTask.java
new file mode 100644
index 000000000..49feede69
--- /dev/null
+++ b/org.eclipse.osee.ote.connection.jini/src/org/eclipse/osee/ote/connection/jini/util/LeaseRenewTask.java
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ote.connection.jini.util;
+
+import java.util.Timer;
+import java.util.TimerTask;
+import java.util.logging.Level;
+import net.jini.core.lease.Lease;
+import net.jini.core.lookup.ServiceRegistrar;
+import net.jini.core.lookup.ServiceRegistration;
+import org.eclipse.osee.ote.connection.jini.Activator;
+
+public class LeaseRenewTask extends TimerTask {
+ /**
+ * The amount of time before a lease expires to first attempt renewal. This amount of time should be sufficiently
+ * large to account for delays in communication (i.e. network delays), and allow for at least a few retries in the
+ * event the service is not reachable. This time is specified in milliseconds.
+ */
+ private static final long RENEWAL_TIME = 1 * 60 * 1000; // 1 minute
+
+ private final ServiceRegistration registration;
+ private volatile boolean canceled = false;
+ private final ServiceRegistrar registrar;
+
+ public LeaseRenewTask(Timer timer, ServiceRegistration registration, ServiceRegistrar registrar) {
+ this.registration = registration;
+ timer.scheduleAtFixedRate(this, 0, RENEWAL_TIME);
+ this.registrar = registrar;
+ }
+
+ @Override
+ public void run() {
+ if (canceled) {
+ return;
+ }
+ try {
+ // Renew for the maximum amount of time allowed
+ registration.getLease().renew(Lease.FOREVER);
+ } catch (Throwable ex) {
+ handleLeaseRenewException(ex);
+ try {
+ registration.getLease().renew(Lease.FOREVER);
+ } catch (Throwable ex1) {
+ handleLeaseRenewException(ex1);
+ }
+ }
+ }
+
+ private void handleLeaseRenewException(Throwable th) {
+ String host = "unknown";
+ int port = 0;
+ try {
+ host = registrar.getLocator().getHost();
+ port = registrar.getLocator().getPort();
+ } catch (Throwable th2) {
+ th2.printStackTrace();
+ }
+ System.out.printf("lookup serviceId[%s] host[%s] port[%d]\n", registrar.getServiceID().toString(), host, port);
+ Activator.log(Level.SEVERE, "error renewing lease", th);
+ }
+
+ @Override
+ public boolean cancel() {
+ canceled = true;
+ boolean result = super.cancel();
+ try {
+ System.out.println("Canceling lookup lease");
+ registration.getLease().cancel();
+ } catch (Exception ex) {
+ throw new RuntimeException("failed to cancel lease", ex);
+ }
+ return result;
+ }
+
+} \ No newline at end of file
diff --git a/org.eclipse.osee.ote.connection.service.test/.classpath b/org.eclipse.osee.ote.connection.service.test/.classpath
new file mode 100644
index 000000000..751c8f2e5
--- /dev/null
+++ b/org.eclipse.osee.ote.connection.service.test/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.osee.ote.connection.service.test/.pmd b/org.eclipse.osee.ote.connection.service.test/.pmd
new file mode 100644
index 000000000..c7b0a9fb3
--- /dev/null
+++ b/org.eclipse.osee.ote.connection.service.test/.pmd
@@ -0,0 +1,925 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<pmd>
+ <useProjectRuleSet>false</useProjectRuleSet>
+ <ruleSetFile>.ruleset</ruleSetFile>
+ <rules>
+ <rule>
+ <name>LooseCoupling</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CloneMethodMustImplementCloneable</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedImports</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SignatureDeclareThrowsException</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>IfStmtsMustUseBraces</name>
+ <ruleset>Braces Rules</ruleset>
+ </rule>
+ <rule>
+ <name>WhileLoopsMustUseBraces</name>
+ <ruleset>Braces Rules</ruleset>
+ </rule>
+ <rule>
+ <name>IfElseStmtsMustUseBraces</name>
+ <ruleset>Braces Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ForLoopsMustUseBraces</name>
+ <ruleset>Braces Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseSingleton</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SimplifyBooleanReturns</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SimplifyBooleanExpressions</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SwitchStmtsShouldHaveDefault</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidDeeplyNestedIfStmts</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidReassigningParameters</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SwitchDensity</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ConstructorCallsOverridableMethod</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AccessorClassGeneration</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>FinalFieldCouldBeStatic</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CloseResource</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NonStaticInitializer</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DefaultLabelNotLastInSwitchStmt</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NonCaseLabelInSwitchStatement</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>OptimizableToArrayCall</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>BadComparison</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EqualsNull</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ConfusingTernary</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>InstantiationToGetClass</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>IdempotentOperations</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SimpleDateFormatNeedsLocale</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ImmutableField</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseLocaleWithCaseConversions</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidProtectedFieldInFinalClass</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AssignmentToNonFinalStatic</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MissingStaticMethodInNonInstantiatableClass</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidSynchronizedAtMethodLevel</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MissingBreakInSwitch</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseNotifyAllInsteadOfNotify</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidInstanceofChecksInCatchClause</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AbstractClassWithoutAbstractMethod</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SimplifyConditional</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CompareObjectsWithEquals</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>PositionLiteralsFirstInComparisons</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryLocalBeforeReturn</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NonThreadSafeSingleton</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UncommentedEmptyMethod</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UncommentedEmptyConstructor</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidConstantsInterface</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnsynchronizedStaticDateFormatter</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>PreserveStackTrace</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseCollectionIsEmpty</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ClassWithOnlyPrivateConstructorsShouldBeFinal</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyMethodInAbstractClassShouldBeAbstract</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SingularField</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ReturnEmptyArrayRatherThanNull</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AbstractClassWithoutAnyMethod</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>TooFewBranchesForASwitchStatement</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidCatchingThrowable</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SignatureDeclareThrowsException</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ExceptionAsFlowControl</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidCatchingNPE</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidThrowingRawExceptionTypes</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidThrowingNullPointerException</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidRethrowingException</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DoNotExtendJavaLangError</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DoNotThrowExceptionInFinally</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidThrowingNewInstanceOfSameException</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedPrivateField</name>
+ <ruleset>Unused Code Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedLocalVariable</name>
+ <ruleset>Unused Code Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedPrivateMethod</name>
+ <ruleset>Unused Code Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedFormalParameter</name>
+ <ruleset>Unused Code Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MoreThanOneLogger</name>
+ <ruleset>Java Logging Rules</ruleset>
+ </rule>
+ <rule>
+ <name>LoggerIsNotStaticFinal</name>
+ <ruleset>Java Logging Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SystemPrintln</name>
+ <ruleset>Java Logging Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidPrintStackTrace</name>
+ <ruleset>Java Logging Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidDuplicateLiterals</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>StringInstantiation</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>StringToString</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>InefficientStringBuffering</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryCaseChange</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseStringBufferLength</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AppendCharacterWithChar</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ConsecutiveLiteralAppends</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseIndexOfChar</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>InefficientEmptyStringCheck</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>InsufficientStringBufferDeclaration</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UselessStringValueOf</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>StringBufferInstantiationWithChar</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseEqualsToCompareStrings</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidStringBufferField</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ReplaceVectorWithList</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ReplaceHashtableWithMap</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ReplaceEnumerationWithIterator</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidEnumAsIdentifier</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidAssertAsIdentifier</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>IntegerInstantiation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ByteInstantiation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ShortInstantiation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>LongInstantiation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnit4TestShouldUseBeforeAnnotation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnit4TestShouldUseAfterAnnotation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnit4TestShouldUseTestAnnotation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnit4SuitesShouldUseSuiteAnnotation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnitUseExpected</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseProperClassLoader</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MDBAndSessionBeanNamingConvention</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>RemoteSessionInterfaceNamingConvention</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>LocalInterfaceSessionNamingConvention</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>LocalHomeNamingConvention</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>RemoteInterfaceNamingConvention</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DoNotCallSystemExit</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>StaticEJBFieldShouldBeFinal</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DoNotUseThreads</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidInstantiatingObjectsInLoops</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseArrayListInsteadOfVector</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SimplifyStartsWith</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseStringBufferForStringAppends</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseArraysAsList</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidArrayLoops</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryWrapperObjectCreation</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AddEmptyString</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyCatchBlock</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyIfStmt</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyWhileStmt</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyTryBlock</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyFinallyBlock</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptySwitchStatements</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JumbledIncrementer</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ForLoopShouldBeWhileLoop</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryConversionTemporary</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>OverrideBothEqualsAndHashcode</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DoubleCheckedLocking</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ReturnFromFinallyBlock</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptySynchronizedBlock</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryReturn</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyStaticInitializer</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnconditionalIfStatement</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyStatementNotInLoop</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>BooleanInstantiation</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryFinalModifier</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CollapsibleIfStatements</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UselessOverridingMethod</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ClassCastExceptionWithToArray</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidDecimalLiteralsInBigDecimalConstructor</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UselessOperationOnImmutable</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MisplacedNullCheck</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedNullCheckInEquals</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidThreadGroup</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>BrokenNullCheck</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>BigIntegerInstantiation</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidUsingOctalValues</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidUsingHardCodedIP</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CheckResultSet</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidMultipleUnaryOperators</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyInitializer</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MethodReturnsInternalArray</name>
+ <ruleset>Security Code Guidelines</ruleset>
+ </rule>
+ <rule>
+ <name>ArrayIsStoredDirectly</name>
+ <ruleset>Security Code Guidelines</ruleset>
+ </rule>
+ <rule>
+ <name>CouplingBetweenObjects</name>
+ <ruleset>Coupling Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ExcessiveImports</name>
+ <ruleset>Coupling Rules</ruleset>
+ </rule>
+ <rule>
+ <name>LooseCoupling</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DuplicateImports</name>
+ <ruleset>Import Statement Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DontImportJavaLang</name>
+ <ruleset>Import Statement Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedImports</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ImportFromSamePackage</name>
+ <ruleset>Import Statement Rules</ruleset>
+ </rule>
+ <rule>
+ <name>TooManyStaticImports</name>
+ <ruleset>Import Statement Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnitStaticSuite</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnitSpelling</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnitAssertionsShouldIncludeMessage</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnitTestsShouldIncludeAssert</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>TestClassWithoutTestCases</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryBooleanAssertion</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseAssertEqualsInsteadOfAssertTrue</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseAssertSameInsteadOfAssertTrue</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseAssertNullInsteadOfAssertTrue</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SimplifyBooleanAssertion</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryConstructor</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NullAssignment</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedModifier</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AssignmentInOperand</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AtLeastOneConstructor</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DontImportSun</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SuspiciousOctalEscape</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CallSuperInConstructor</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryParentheses</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DefaultPackage</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>BooleanInversion</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DataflowAnomalyAnalysis</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidFinalLocalVariable</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidUsingShortType</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidUsingVolatile</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidUsingNativeCode</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidAccessibilityAlteration</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DoNotCallGarbageCollectionExplicitly</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MethodNamingConventions</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ClassNamingConventions</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AbstractNaming</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidDollarSigns</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MethodWithSameNameAsEnclosingClass</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SuspiciousHashcodeMethodName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SuspiciousConstantFieldName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SuspiciousEqualsMethodName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidFieldNameMatchingTypeName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidFieldNameMatchingMethodName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NoPackage</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>PackageCase</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MisleadingVariableName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>BooleanGetMethodName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NPathComplexity</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ExcessiveMethodLength</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ExcessiveParameterList</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ExcessiveClassLength</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CyclomaticComplexity</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ExcessivePublicCount</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>TooManyFields</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NcssMethodCount</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NcssTypeCount</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NcssConstructorCount</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>TooManyMethods</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyFinalizer</name>
+ <ruleset>Finalizer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>FinalizeOnlyCallsSuperFinalize</name>
+ <ruleset>Finalizer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>FinalizeOverloaded</name>
+ <ruleset>Finalizer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>FinalizeDoesNotCallSuperFinalize</name>
+ <ruleset>Finalizer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>FinalizeShouldBeProtected</name>
+ <ruleset>Finalizer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidCallingFinalize</name>
+ <ruleset>Finalizer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseCorrectExceptionLogging</name>
+ <ruleset>Jakarta Commons Logging Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ProperLogger</name>
+ <ruleset>Jakarta Commons Logging Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MissingSerialVersionUID</name>
+ <ruleset>JavaBean Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ProperCloneImplementation</name>
+ <ruleset>Clone Implementation Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CloneThrowsCloneNotSupportedException</name>
+ <ruleset>Clone Implementation Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CloneMethodMustImplementCloneable</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ </rules>
+ <includeDerivedFiles>false</includeDerivedFiles>
+ <violationsAsErrors>true</violationsAsErrors>
+</pmd>
diff --git a/org.eclipse.osee.ote.connection.service.test/.project b/org.eclipse.osee.ote.connection.service.test/.project
new file mode 100644
index 000000000..6f398b297
--- /dev/null
+++ b/org.eclipse.osee.ote.connection.service.test/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.osee.ote.connection.service.test</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/org.eclipse.osee.ote.connection.service.test/META-INF/MANIFEST.MF b/org.eclipse.osee.ote.connection.service.test/META-INF/MANIFEST.MF
new file mode 100644
index 000000000..f2b751616
--- /dev/null
+++ b/org.eclipse.osee.ote.connection.service.test/META-INF/MANIFEST.MF
@@ -0,0 +1,15 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Test Plug-in (Incubation)
+Bundle-SymbolicName: org.eclipse.osee.ote.connection.service.test;singleton:=true
+Bundle-Version: 0.25.3.qualifier
+Bundle-Activator: org.eclipse.osee.ote.connection.service.test.Activator
+Bundle-Vendor: Eclipse Open System Engineering Environment
+Bundle-ActivationPolicy: lazy
+Import-Package: org.eclipse.osee.connection.service,
+ org.osgi.framework,
+ org.osgi.util.tracker
+Require-Bundle: net.jini,
+ org.eclipse.osee.ote.connection.jini,
+ org.eclipse.osee.framework.jdk.core
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/org.eclipse.osee.ote.connection.service.test/build.properties b/org.eclipse.osee.ote.connection.service.test/build.properties
new file mode 100644
index 000000000..34d2e4d2d
--- /dev/null
+++ b/org.eclipse.osee.ote.connection.service.test/build.properties
@@ -0,0 +1,4 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .
diff --git a/org.eclipse.osee.ote.connection.service.test/pom.xml b/org.eclipse.osee.ote.connection.service.test/pom.xml
new file mode 100644
index 000000000..340a6091c
--- /dev/null
+++ b/org.eclipse.osee.ote.connection.service.test/pom.xml
@@ -0,0 +1,31 @@
+<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.eclipse.osee</groupId>
+ <artifactId>org.eclipse.osee.ote.parent</artifactId>
+ <version>0.25.3-SNAPSHOT</version>
+ <relativePath>../org.eclipse.osee.ote.parent</relativePath>
+ </parent>
+
+ <artifactId>org.eclipse.osee.ote.connection.service.test</artifactId>
+ <packaging>eclipse-plugin</packaging>
+ <name>OTE Connection Service Test (Incubation)</name>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-surefire-plugin</artifactId>
+ <version>${tycho-version}</version>
+ <configuration>
+ <testSuite>org.eclipse.osee.ote.connection.service.test</testSuite>
+ <testClass>org.eclipse.osee.ote.connection.service.test.TestJiniService</testClass>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+</project> \ No newline at end of file
diff --git a/org.eclipse.osee.ote.connection.service.test/src/org/eclipse/osee/ote/connection/service/test/Activator.java b/org.eclipse.osee.ote.connection.service.test/src/org/eclipse/osee/ote/connection/service/test/Activator.java
new file mode 100644
index 000000000..98eb83466
--- /dev/null
+++ b/org.eclipse.osee.ote.connection.service.test/src/org/eclipse/osee/ote/connection/service/test/Activator.java
@@ -0,0 +1,95 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ote.connection.service.test;
+
+import java.rmi.Remote;
+import java.util.Collection;
+import java.util.Timer;
+import java.util.TimerTask;
+import org.eclipse.osee.connection.service.IConnectionService;
+import org.eclipse.osee.connection.service.IConnectorListener;
+import org.eclipse.osee.connection.service.IServiceConnector;
+import org.eclipse.osee.framework.jdk.core.util.EnhancedProperties;
+import org.eclipse.osee.ote.connection.jini.JiniServiceSideConnector;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+import org.osgi.util.tracker.ServiceTracker;
+
+public class Activator implements BundleActivator {
+ private ServiceTracker connectionServiceTracker;
+ private static Activator instance = null;
+ private JiniServiceSideConnector testConnector;
+
+ @Override
+ public void start(BundleContext context) throws Exception {
+ instance = this;
+ connectionServiceTracker = new ServiceTracker(context, IConnectionService.class.getName(), null);
+ connectionServiceTracker.open();
+ final IConnectionService service = getConnectionService();
+ EnhancedProperties properties = new EnhancedProperties();
+ properties.setProperty("name", "Dummy Test Service");
+ testConnector = new JiniServiceSideConnector(new TestJiniService(), properties);
+ service.addConnector(testConnector);
+
+ service.addListener(new IConnectorListener() {
+
+ @Override
+ public void onConnectionServiceStopped() {
+ }
+
+ @Override
+ public void onConnectorsAdded(Collection<IServiceConnector> connectors) {
+ for (IServiceConnector connector : connectors) {
+ if (connector.getService() instanceof Remote) {
+ System.out.printf("found remote service %s. connector type=%s\n",
+ connector.getProperty("name", "N.A."), connector.getConnectorType());
+ } else {
+ System.out.println("found a non-remote service!?. connector type=" + connector.getConnectorType());
+ }
+ }
+ }
+
+ @Override
+ public void onConnectorRemoved(IServiceConnector connector) {
+ }
+
+ });
+
+ final Timer timer = new Timer();
+ timer.schedule(new TimerTask() {
+
+ @Override
+ public void run() {
+ System.out.println("connectors:");
+ for (IServiceConnector connector : service.getAllConnectors()) {
+ System.out.printf("\ttype=%s\n", connector.getConnectorType());
+ }
+ timer.cancel();
+ }
+
+ }, 10000);
+ }
+
+ @Override
+ public void stop(BundleContext context) throws Exception {
+ instance = null;
+ getConnectionService().removeConnector(testConnector);
+ connectionServiceTracker.close();
+ }
+
+ public Activator getDefault() {
+ return instance;
+ }
+
+ public IConnectionService getConnectionService() {
+ return (IConnectionService) connectionServiceTracker.getService();
+ }
+}
diff --git a/org.eclipse.osee.ote.connection.service.test/src/org/eclipse/osee/ote/connection/service/test/TestJiniService.java b/org.eclipse.osee.ote.connection.service.test/src/org/eclipse/osee/ote/connection/service/test/TestJiniService.java
new file mode 100644
index 000000000..9739a2f6d
--- /dev/null
+++ b/org.eclipse.osee.ote.connection.service.test/src/org/eclipse/osee/ote/connection/service/test/TestJiniService.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ote.connection.service.test;
+
+import java.rmi.Remote;
+import java.rmi.RemoteException;
+
+/**
+ * @author Ken J. Aguilar
+ */
+public class TestJiniService implements Remote {
+
+ public void doSomething() throws RemoteException {
+ System.out.println("doing something...");
+ }
+}
diff --git a/org.eclipse.osee.ote.connection.service/.classpath b/org.eclipse.osee.ote.connection.service/.classpath
new file mode 100644
index 000000000..751c8f2e5
--- /dev/null
+++ b/org.eclipse.osee.ote.connection.service/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.osee.ote.connection.service/.pmd b/org.eclipse.osee.ote.connection.service/.pmd
new file mode 100644
index 000000000..c7b0a9fb3
--- /dev/null
+++ b/org.eclipse.osee.ote.connection.service/.pmd
@@ -0,0 +1,925 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<pmd>
+ <useProjectRuleSet>false</useProjectRuleSet>
+ <ruleSetFile>.ruleset</ruleSetFile>
+ <rules>
+ <rule>
+ <name>LooseCoupling</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CloneMethodMustImplementCloneable</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedImports</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SignatureDeclareThrowsException</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>IfStmtsMustUseBraces</name>
+ <ruleset>Braces Rules</ruleset>
+ </rule>
+ <rule>
+ <name>WhileLoopsMustUseBraces</name>
+ <ruleset>Braces Rules</ruleset>
+ </rule>
+ <rule>
+ <name>IfElseStmtsMustUseBraces</name>
+ <ruleset>Braces Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ForLoopsMustUseBraces</name>
+ <ruleset>Braces Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseSingleton</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SimplifyBooleanReturns</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SimplifyBooleanExpressions</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SwitchStmtsShouldHaveDefault</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidDeeplyNestedIfStmts</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidReassigningParameters</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SwitchDensity</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ConstructorCallsOverridableMethod</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AccessorClassGeneration</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>FinalFieldCouldBeStatic</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CloseResource</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NonStaticInitializer</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DefaultLabelNotLastInSwitchStmt</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NonCaseLabelInSwitchStatement</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>OptimizableToArrayCall</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>BadComparison</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EqualsNull</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ConfusingTernary</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>InstantiationToGetClass</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>IdempotentOperations</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SimpleDateFormatNeedsLocale</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ImmutableField</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseLocaleWithCaseConversions</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidProtectedFieldInFinalClass</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AssignmentToNonFinalStatic</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MissingStaticMethodInNonInstantiatableClass</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidSynchronizedAtMethodLevel</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MissingBreakInSwitch</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseNotifyAllInsteadOfNotify</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidInstanceofChecksInCatchClause</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AbstractClassWithoutAbstractMethod</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SimplifyConditional</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CompareObjectsWithEquals</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>PositionLiteralsFirstInComparisons</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryLocalBeforeReturn</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NonThreadSafeSingleton</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UncommentedEmptyMethod</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UncommentedEmptyConstructor</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidConstantsInterface</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnsynchronizedStaticDateFormatter</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>PreserveStackTrace</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseCollectionIsEmpty</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ClassWithOnlyPrivateConstructorsShouldBeFinal</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyMethodInAbstractClassShouldBeAbstract</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SingularField</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ReturnEmptyArrayRatherThanNull</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AbstractClassWithoutAnyMethod</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>TooFewBranchesForASwitchStatement</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidCatchingThrowable</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SignatureDeclareThrowsException</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ExceptionAsFlowControl</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidCatchingNPE</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidThrowingRawExceptionTypes</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidThrowingNullPointerException</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidRethrowingException</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DoNotExtendJavaLangError</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DoNotThrowExceptionInFinally</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidThrowingNewInstanceOfSameException</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedPrivateField</name>
+ <ruleset>Unused Code Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedLocalVariable</name>
+ <ruleset>Unused Code Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedPrivateMethod</name>
+ <ruleset>Unused Code Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedFormalParameter</name>
+ <ruleset>Unused Code Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MoreThanOneLogger</name>
+ <ruleset>Java Logging Rules</ruleset>
+ </rule>
+ <rule>
+ <name>LoggerIsNotStaticFinal</name>
+ <ruleset>Java Logging Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SystemPrintln</name>
+ <ruleset>Java Logging Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidPrintStackTrace</name>
+ <ruleset>Java Logging Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidDuplicateLiterals</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>StringInstantiation</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>StringToString</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>InefficientStringBuffering</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryCaseChange</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseStringBufferLength</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AppendCharacterWithChar</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ConsecutiveLiteralAppends</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseIndexOfChar</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>InefficientEmptyStringCheck</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>InsufficientStringBufferDeclaration</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UselessStringValueOf</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>StringBufferInstantiationWithChar</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseEqualsToCompareStrings</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidStringBufferField</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ReplaceVectorWithList</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ReplaceHashtableWithMap</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ReplaceEnumerationWithIterator</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidEnumAsIdentifier</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidAssertAsIdentifier</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>IntegerInstantiation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ByteInstantiation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ShortInstantiation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>LongInstantiation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnit4TestShouldUseBeforeAnnotation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnit4TestShouldUseAfterAnnotation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnit4TestShouldUseTestAnnotation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnit4SuitesShouldUseSuiteAnnotation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnitUseExpected</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseProperClassLoader</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MDBAndSessionBeanNamingConvention</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>RemoteSessionInterfaceNamingConvention</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>LocalInterfaceSessionNamingConvention</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>LocalHomeNamingConvention</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>RemoteInterfaceNamingConvention</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DoNotCallSystemExit</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>StaticEJBFieldShouldBeFinal</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DoNotUseThreads</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidInstantiatingObjectsInLoops</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseArrayListInsteadOfVector</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SimplifyStartsWith</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseStringBufferForStringAppends</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseArraysAsList</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidArrayLoops</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryWrapperObjectCreation</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AddEmptyString</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyCatchBlock</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyIfStmt</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyWhileStmt</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyTryBlock</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyFinallyBlock</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptySwitchStatements</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JumbledIncrementer</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ForLoopShouldBeWhileLoop</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryConversionTemporary</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>OverrideBothEqualsAndHashcode</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DoubleCheckedLocking</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ReturnFromFinallyBlock</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptySynchronizedBlock</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryReturn</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyStaticInitializer</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnconditionalIfStatement</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyStatementNotInLoop</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>BooleanInstantiation</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryFinalModifier</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CollapsibleIfStatements</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UselessOverridingMethod</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ClassCastExceptionWithToArray</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidDecimalLiteralsInBigDecimalConstructor</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UselessOperationOnImmutable</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MisplacedNullCheck</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedNullCheckInEquals</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidThreadGroup</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>BrokenNullCheck</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>BigIntegerInstantiation</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidUsingOctalValues</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidUsingHardCodedIP</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CheckResultSet</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidMultipleUnaryOperators</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyInitializer</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MethodReturnsInternalArray</name>
+ <ruleset>Security Code Guidelines</ruleset>
+ </rule>
+ <rule>
+ <name>ArrayIsStoredDirectly</name>
+ <ruleset>Security Code Guidelines</ruleset>
+ </rule>
+ <rule>
+ <name>CouplingBetweenObjects</name>
+ <ruleset>Coupling Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ExcessiveImports</name>
+ <ruleset>Coupling Rules</ruleset>
+ </rule>
+ <rule>
+ <name>LooseCoupling</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DuplicateImports</name>
+ <ruleset>Import Statement Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DontImportJavaLang</name>
+ <ruleset>Import Statement Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedImports</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ImportFromSamePackage</name>
+ <ruleset>Import Statement Rules</ruleset>
+ </rule>
+ <rule>
+ <name>TooManyStaticImports</name>
+ <ruleset>Import Statement Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnitStaticSuite</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnitSpelling</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnitAssertionsShouldIncludeMessage</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnitTestsShouldIncludeAssert</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>TestClassWithoutTestCases</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryBooleanAssertion</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseAssertEqualsInsteadOfAssertTrue</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseAssertSameInsteadOfAssertTrue</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseAssertNullInsteadOfAssertTrue</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SimplifyBooleanAssertion</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryConstructor</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NullAssignment</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedModifier</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AssignmentInOperand</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AtLeastOneConstructor</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DontImportSun</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SuspiciousOctalEscape</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CallSuperInConstructor</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryParentheses</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DefaultPackage</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>BooleanInversion</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DataflowAnomalyAnalysis</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidFinalLocalVariable</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidUsingShortType</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidUsingVolatile</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidUsingNativeCode</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidAccessibilityAlteration</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DoNotCallGarbageCollectionExplicitly</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MethodNamingConventions</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ClassNamingConventions</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AbstractNaming</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidDollarSigns</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MethodWithSameNameAsEnclosingClass</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SuspiciousHashcodeMethodName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SuspiciousConstantFieldName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SuspiciousEqualsMethodName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidFieldNameMatchingTypeName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidFieldNameMatchingMethodName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NoPackage</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>PackageCase</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MisleadingVariableName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>BooleanGetMethodName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NPathComplexity</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ExcessiveMethodLength</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ExcessiveParameterList</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ExcessiveClassLength</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CyclomaticComplexity</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ExcessivePublicCount</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>TooManyFields</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NcssMethodCount</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NcssTypeCount</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NcssConstructorCount</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>TooManyMethods</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyFinalizer</name>
+ <ruleset>Finalizer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>FinalizeOnlyCallsSuperFinalize</name>
+ <ruleset>Finalizer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>FinalizeOverloaded</name>
+ <ruleset>Finalizer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>FinalizeDoesNotCallSuperFinalize</name>
+ <ruleset>Finalizer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>FinalizeShouldBeProtected</name>
+ <ruleset>Finalizer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidCallingFinalize</name>
+ <ruleset>Finalizer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseCorrectExceptionLogging</name>
+ <ruleset>Jakarta Commons Logging Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ProperLogger</name>
+ <ruleset>Jakarta Commons Logging Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MissingSerialVersionUID</name>
+ <ruleset>JavaBean Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ProperCloneImplementation</name>
+ <ruleset>Clone Implementation Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CloneThrowsCloneNotSupportedException</name>
+ <ruleset>Clone Implementation Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CloneMethodMustImplementCloneable</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ </rules>
+ <includeDerivedFiles>false</includeDerivedFiles>
+ <violationsAsErrors>true</violationsAsErrors>
+</pmd>
diff --git a/org.eclipse.osee.ote.connection.service/.project b/org.eclipse.osee.ote.connection.service/.project
new file mode 100644
index 000000000..dd83e6aa5
--- /dev/null
+++ b/org.eclipse.osee.ote.connection.service/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.osee.ote.connection.service</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/org.eclipse.osee.ote.connection.service/META-INF/MANIFEST.MF b/org.eclipse.osee.ote.connection.service/META-INF/MANIFEST.MF
new file mode 100644
index 000000000..7f5f5ffb1
--- /dev/null
+++ b/org.eclipse.osee.ote.connection.service/META-INF/MANIFEST.MF
@@ -0,0 +1,15 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Service Plug-in (Incubation)
+Bundle-SymbolicName: org.eclipse.osee.ote.connection.service;singleton:=true
+Bundle-Version: 0.25.3.qualifier
+Bundle-Activator: org.eclipse.osee.connection.service.internal.Activator
+Bundle-Vendor: Eclipse Open System Engineering Environment
+Bundle-ActivationPolicy: lazy
+Import-Package: org.eclipse.osee.framework.jdk.core.util,
+ org.eclipse.osee.framework.logging,
+ org.eclipse.osee.framework.plugin.core.util,
+ org.osgi.framework,
+ org.osgi.util.tracker
+Export-Package: org.eclipse.osee.connection.service
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/org.eclipse.osee.ote.connection.service/build.properties b/org.eclipse.osee.ote.connection.service/build.properties
new file mode 100644
index 000000000..e9863e281
--- /dev/null
+++ b/org.eclipse.osee.ote.connection.service/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ plugin.xml
diff --git a/org.eclipse.osee.ote.connection.service/plugin.xml b/org.eclipse.osee.ote.connection.service/plugin.xml
new file mode 100644
index 000000000..a652d47ca
--- /dev/null
+++ b/org.eclipse.osee.ote.connection.service/plugin.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+ <extension-point id="org.eclipse.osee.connection.service.ext" name="Connection Service Extension" schema="schema/org.eclipse.osee.connection.service.ext.exsd"/>
+
+</plugin>
diff --git a/org.eclipse.osee.ote.connection.service/pom.xml b/org.eclipse.osee.ote.connection.service/pom.xml
new file mode 100644
index 000000000..541b996cf
--- /dev/null
+++ b/org.eclipse.osee.ote.connection.service/pom.xml
@@ -0,0 +1,35 @@
+<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.eclipse.osee</groupId>
+ <artifactId>org.eclipse.osee.ote.parent</artifactId>
+ <version>0.25.3-SNAPSHOT</version>
+ <relativePath>../org.eclipse.osee.ote.parent</relativePath>
+ </parent>
+
+ <artifactId>org.eclipse.osee.ote.connection.service</artifactId>
+ <packaging>eclipse-plugin</packaging>
+ <name>OTE Connection Service (Incubation)</name>
+
+ <build>
+ <!-- workaround for https://issues.sonatype.org/browse/TYCHO-168 -->
+ <resources>
+ <resource>
+ <directory>src</directory>
+ <excludes>
+ <exclude>**/*.java</exclude>
+ </excludes>
+ </resource>
+ </resources>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-source-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </build>
+
+</project> \ No newline at end of file
diff --git a/org.eclipse.osee.ote.connection.service/schema/org.eclipse.osee.connection.service.ext.exsd b/org.eclipse.osee.ote.connection.service/schema/org.eclipse.osee.connection.service.ext.exsd
new file mode 100644
index 000000000..73f50562b
--- /dev/null
+++ b/org.eclipse.osee.ote.connection.service/schema/org.eclipse.osee.connection.service.ext.exsd
@@ -0,0 +1,102 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.osee.ote.connection.service" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+ <appinfo>
+ <meta.schema plugin="org.eclipse.osee.ote.connection.service" id="org.eclipse.osee.connection.service.ext" name="Connection Service Extension"/>
+ </appinfo>
+ <documentation>
+ [Enter description of this extension point.]
+ </documentation>
+ </annotation>
+
+ <element name="extension">
+ <annotation>
+ <appinfo>
+ <meta.element />
+ </appinfo>
+ </annotation>
+ <complexType>
+ <sequence>
+ <element ref="ConnectorContribution"/>
+ </sequence>
+ <attribute name="point" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="id" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="name" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appinfo>
+ <meta.attribute translatable="true"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="ConnectorContribution">
+ <complexType>
+ <attribute name="className" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appinfo>
+ <meta.attribute kind="java" basedOn=":org.eclipse.osee.connection.service.IConnectorContributor"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="since"/>
+ </appinfo>
+ <documentation>
+ [Enter the first release in which this extension point appears.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="examples"/>
+ </appinfo>
+ <documentation>
+ [Enter extension point usage example here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="apiinfo"/>
+ </appinfo>
+ <documentation>
+ [Enter API information here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="implementation"/>
+ </appinfo>
+ <documentation>
+ [Enter information about supplied implementation of this extension point.]
+ </documentation>
+ </annotation>
+
+
+</schema>
diff --git a/org.eclipse.osee.ote.connection.service/src/org/eclipse/osee/connection/service/IConnectionService.java b/org.eclipse.osee.ote.connection.service/src/org/eclipse/osee/connection/service/IConnectionService.java
new file mode 100644
index 000000000..310b8da61
--- /dev/null
+++ b/org.eclipse.osee.ote.connection.service/src/org/eclipse/osee/connection/service/IConnectionService.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.connection.service;
+
+import java.util.Collection;
+
+/**
+ * @author Ken J. Aguilar
+ */
+public interface IConnectionService {
+
+ /**
+ * finds all currently existing connectors
+ */
+ Collection<IServiceConnector> getAllConnectors();
+
+ /**
+ * finds all available connectors that are accepted by all filters in the filter chain
+ */
+ Collection<IServiceConnector> findConnectors(IConnectorFilter[] filterChain);
+
+ /**
+ * registers an listener object for notification of connector events. Note that the listener object's
+ * {@link IConnectorListener#onConnectorsAdded(Collection)} will be called immediately for each active connector.
+ */
+ void addListener(IConnectorListener listener);
+
+ void removeListener(IConnectorListener listener);
+
+ void addConnector(IServiceConnector connector);
+
+ void addConnectors(Collection<IServiceConnector> connectors);
+
+ void removeConnector(IServiceConnector connector) throws Exception;
+
+ boolean isStopped();
+}
diff --git a/org.eclipse.osee.ote.connection.service/src/org/eclipse/osee/connection/service/IConnectorContributor.java b/org.eclipse.osee.ote.connection.service/src/org/eclipse/osee/connection/service/IConnectorContributor.java
new file mode 100644
index 000000000..32d2f63d5
--- /dev/null
+++ b/org.eclipse.osee.ote.connection.service/src/org/eclipse/osee/connection/service/IConnectorContributor.java
@@ -0,0 +1,16 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.connection.service;
+
+public interface IConnectorContributor {
+
+ void init() throws Exception;
+}
diff --git a/org.eclipse.osee.ote.connection.service/src/org/eclipse/osee/connection/service/IConnectorFilter.java b/org.eclipse.osee.ote.connection.service/src/org/eclipse/osee/connection/service/IConnectorFilter.java
new file mode 100644
index 000000000..bab00bbb9
--- /dev/null
+++ b/org.eclipse.osee.ote.connection.service/src/org/eclipse/osee/connection/service/IConnectorFilter.java
@@ -0,0 +1,18 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.connection.service;
+
+/**
+ * @author Ken J. Aguilar
+ */
+public interface IConnectorFilter {
+ public boolean accept(IServiceConnector connector);
+}
diff --git a/org.eclipse.osee.ote.connection.service/src/org/eclipse/osee/connection/service/IConnectorListener.java b/org.eclipse.osee.ote.connection.service/src/org/eclipse/osee/connection/service/IConnectorListener.java
new file mode 100644
index 000000000..8b4c185f6
--- /dev/null
+++ b/org.eclipse.osee.ote.connection.service/src/org/eclipse/osee/connection/service/IConnectorListener.java
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.connection.service;
+
+import java.util.Collection;
+
+/**
+ * @author Ken J. Aguilar
+ */
+public interface IConnectorListener {
+
+ void onConnectorsAdded(Collection<IServiceConnector> connectors);
+
+ void onConnectorRemoved(IServiceConnector connector);
+
+ /**
+ * this method will be called when the connect service has been commanded to stop but before it is actually stopped.
+ * this gives clients a chance to cleanup however, clients should not call any methods on the service.
+ */
+ void onConnectionServiceStopped();
+}
diff --git a/org.eclipse.osee.ote.connection.service/src/org/eclipse/osee/connection/service/IFileKey.java b/org.eclipse.osee.ote.connection.service/src/org/eclipse/osee/connection/service/IFileKey.java
new file mode 100644
index 000000000..0d2d5a85f
--- /dev/null
+++ b/org.eclipse.osee.ote.connection.service/src/org/eclipse/osee/connection/service/IFileKey.java
@@ -0,0 +1,18 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.connection.service;
+
+/**
+ * @author Ken J. Aguilar
+ */
+public interface IFileKey {
+
+}
diff --git a/org.eclipse.osee.ote.connection.service/src/org/eclipse/osee/connection/service/IServiceConnector.java b/org.eclipse.osee.ote.connection.service/src/org/eclipse/osee/connection/service/IServiceConnector.java
new file mode 100644
index 000000000..f74ab3ba4
--- /dev/null
+++ b/org.eclipse.osee.ote.connection.service/src/org/eclipse/osee/connection/service/IServiceConnector.java
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.connection.service;
+
+import java.io.File;
+import java.io.Serializable;
+import java.net.URI;
+import java.net.UnknownHostException;
+import java.rmi.server.ExportException;
+import org.eclipse.osee.framework.jdk.core.util.EnhancedProperties;
+
+/**
+ * Provides a communication pipe to a service.
+ *
+ * @author Ken J. Aguilar
+ */
+public interface IServiceConnector {
+
+ String getConnectorType();
+
+ /**
+ * gets the service provided by this connector
+ */
+ Object getService();
+
+ void setProperty(String key, Serializable value);
+
+ Serializable getProperty(String property, Serializable defaultValue);
+
+ void stop() throws Exception;
+
+ /**
+ * makes the callback accessible by this connector's service
+ */
+ Object export(Object callback) throws ExportException;
+
+ void init(Object service) throws UnknownHostException, ExportException;
+
+ /**
+ * finds the matching exported representation of supplied object
+ */
+ Object findExport(Object callback);
+
+ void unexport(Object callback) throws Exception;
+
+ void addPropertyChangeListener(IServicePropertyChangeListener listener);
+
+ void removePropertyChangeListener(IServicePropertyChangeListener listener);
+
+ /**
+ * uploads a file to a service and creates an {@link URI} that the service can access.
+ */
+ URI upload(File file) throws Exception;
+
+ boolean ping();
+
+ EnhancedProperties getProperties();
+
+ public String getUniqueServerId();
+
+ void setConnected(boolean b);
+ boolean isConnected();
+}
diff --git a/org.eclipse.osee.ote.connection.service/src/org/eclipse/osee/connection/service/IServicePropertyChangeListener.java b/org.eclipse.osee.ote.connection.service/src/org/eclipse/osee/connection/service/IServicePropertyChangeListener.java
new file mode 100644
index 000000000..7200b1b15
--- /dev/null
+++ b/org.eclipse.osee.ote.connection.service/src/org/eclipse/osee/connection/service/IServicePropertyChangeListener.java
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.connection.service;
+
+import java.io.Serializable;
+
+/**
+ * @author Ken J. Aguilar
+ */
+public interface IServicePropertyChangeListener {
+ void propertyChanged(IServiceConnector connector, String key, Serializable value);
+}
diff --git a/org.eclipse.osee.ote.connection.service/src/org/eclipse/osee/connection/service/LocalConnector.java b/org.eclipse.osee.ote.connection.service/src/org/eclipse/osee/connection/service/LocalConnector.java
new file mode 100644
index 000000000..bf81d7f02
--- /dev/null
+++ b/org.eclipse.osee.ote.connection.service/src/org/eclipse/osee/connection/service/LocalConnector.java
@@ -0,0 +1,131 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.connection.service;
+
+import java.io.File;
+import java.io.Serializable;
+import java.net.URI;
+import java.rmi.server.ExportException;
+import java.util.HashSet;
+
+import org.eclipse.osee.framework.jdk.core.util.EnhancedProperties;
+
+/**
+ * @author Ken J. Aguilar
+ */
+public class LocalConnector implements IServiceConnector {
+ public static final String TYPE = "local";
+ private Object service;
+ private final EnhancedProperties properties;
+ private String id;
+
+ private final HashSet<IServicePropertyChangeListener> propertyChangeListeners =
+ new HashSet<IServicePropertyChangeListener>();
+ private boolean connected = false;
+
+ public LocalConnector() {
+ this(null, "", new EnhancedProperties());
+ }
+
+ @Override
+ public void init(Object service) {
+ this.service = service;
+ }
+
+ public LocalConnector(Object service, String id, EnhancedProperties properties) {
+ this.service = service;
+ this.properties = properties;
+ }
+
+ @Override
+ public Object getService() {
+ return service;
+ }
+
+ @Override
+ public void stop() {
+ }
+
+ @Override
+ public String getConnectorType() {
+ return TYPE;
+ }
+
+ @Override
+ public void setProperty(String key, Serializable value) {
+ properties.setProperty(key, value);
+ for (IServicePropertyChangeListener listener : propertyChangeListeners) {
+ listener.propertyChanged(this, key, value);
+ }
+
+ }
+
+ @Override
+ public Serializable getProperty(String property, Serializable defaultValue) {
+ return properties.getProperty(property, defaultValue);
+ }
+
+ @Override
+ public Object export(Object callback) throws ExportException {
+ return callback;
+ }
+
+ @Override
+ public void unexport(Object callback) throws Exception {
+ }
+
+ @Override
+ public Object findExport(Object callback) {
+ return callback;
+ }
+
+ @Override
+ public void addPropertyChangeListener(IServicePropertyChangeListener listener) {
+ propertyChangeListeners.add(listener);
+ }
+
+ @Override
+ public void removePropertyChangeListener(IServicePropertyChangeListener listener) {
+ propertyChangeListeners.remove(listener);
+ }
+
+ @Override
+ public URI upload(File file) throws Exception {
+ return file.toURI();
+ }
+
+ @Override
+ public boolean ping() {
+ return true;
+ }
+
+ @Override
+ public EnhancedProperties getProperties() {
+ return properties;
+ }
+
+ @Override
+ public String getUniqueServerId() {
+ if(properties == null){
+ return id;
+ } else {
+ return (String)properties.getProperty("id", id);
+ }
+ }
+
+ public void setConnected(boolean connected){
+ this.connected = connected;
+ }
+
+ public boolean isConnected() {
+ return this.connected;
+ }
+}
diff --git a/org.eclipse.osee.ote.connection.service/src/org/eclipse/osee/connection/service/LocalFileKey.java b/org.eclipse.osee.ote.connection.service/src/org/eclipse/osee/connection/service/LocalFileKey.java
new file mode 100644
index 000000000..bfe1b1b52
--- /dev/null
+++ b/org.eclipse.osee.ote.connection.service/src/org/eclipse/osee/connection/service/LocalFileKey.java
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.connection.service;
+
+import java.io.File;
+
+/**
+ * @author Ken J. Aguilar
+ */
+class LocalFileKey implements IFileKey {
+
+ private final File file;
+
+ LocalFileKey(File file) {
+ this.file = file;
+ }
+
+ File getFile() {
+ return file;
+ }
+}
diff --git a/org.eclipse.osee.ote.connection.service/src/org/eclipse/osee/connection/service/internal/Activator.java b/org.eclipse.osee.ote.connection.service/src/org/eclipse/osee/connection/service/internal/Activator.java
new file mode 100644
index 000000000..0a5e88434
--- /dev/null
+++ b/org.eclipse.osee.ote.connection.service/src/org/eclipse/osee/connection/service/internal/Activator.java
@@ -0,0 +1,69 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.connection.service.internal;
+
+import java.util.List;
+import java.util.logging.Level;
+import org.eclipse.osee.connection.service.IConnectionService;
+import org.eclipse.osee.connection.service.IConnectorContributor;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.plugin.core.util.ExtensionDefinedObjects;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceRegistration;
+
+public class Activator implements BundleActivator {
+
+ private ConnectionServiceImpl service;
+ private ServiceRegistration registration;
+
+ @Override
+ public void start(BundleContext context) throws Exception {
+ service = new ConnectionServiceImpl();
+
+ // register the service
+ registration = context.registerService(IConnectionService.class.getName(), service, null);
+
+ // create a tracker and track the service
+
+ ExtensionDefinedObjects<IConnectorContributor> definedObjects =
+ new ExtensionDefinedObjects<IConnectorContributor>("org.eclipse.osee.connection.service.ext",
+ "ConnectorContribution", "className");
+ try {
+ List<IConnectorContributor> contributors = definedObjects.getObjects();
+ for (IConnectorContributor contributor : contributors) {
+ try {
+ contributor.init();
+ } catch (Exception e) {
+ log(Level.SEVERE, "exception initializing connector contributor", e);
+ }
+ }
+ } catch (Exception ex) {
+ log(Level.SEVERE, "failed to process OTE runtime library provider extensions", ex);
+ }
+ }
+
+ @Override
+ public void stop(BundleContext context) throws Exception {
+ service.stop();
+ registration.unregister();
+ service = null;
+ }
+
+ public static void log(Level level, String message, Throwable t) {
+ OseeLog.log(Activator.class, level, message, t);
+ }
+
+ public static void log(Level level, String message) {
+ log(level, message, null);
+ }
+
+}
diff --git a/org.eclipse.osee.ote.connection.service/src/org/eclipse/osee/connection/service/internal/ConnectionServiceImpl.java b/org.eclipse.osee.ote.connection.service/src/org/eclipse/osee/connection/service/internal/ConnectionServiceImpl.java
new file mode 100644
index 000000000..bb6c43d40
--- /dev/null
+++ b/org.eclipse.osee.ote.connection.service/src/org/eclipse/osee/connection/service/internal/ConnectionServiceImpl.java
@@ -0,0 +1,115 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.connection.service.internal;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.logging.Level;
+import org.eclipse.osee.connection.service.IConnectionService;
+import org.eclipse.osee.connection.service.IConnectorFilter;
+import org.eclipse.osee.connection.service.IConnectorListener;
+import org.eclipse.osee.connection.service.IServiceConnector;
+
+class ConnectionServiceImpl implements IConnectionService {
+
+ private final HashSet<IServiceConnector> connectors = new HashSet<>();
+ private final EventNotifier eventNotifier = new EventNotifier();
+
+ private boolean isStopped = false;
+
+ @Override
+ public void addConnector(IServiceConnector connector) {
+ addConnectors(Collections.singletonList(connector));
+ }
+
+ @Override
+ public synchronized void addConnectors(Collection<IServiceConnector> connectors) {
+ checkState();
+ this.connectors.addAll(connectors);
+ eventNotifier.notifyConnectorsAdded(connectors);
+ }
+
+ @Override
+ public synchronized void addListener(IConnectorListener listener) {
+ checkState();
+ eventNotifier.addListener(listener);
+ listener.onConnectorsAdded(connectors);
+ }
+
+ @Override
+ public synchronized List<IServiceConnector> findConnectors(IConnectorFilter[] filterChain) {
+ checkState();
+ ArrayList<IServiceConnector> matchingConnectors = new ArrayList<>();
+ for (IServiceConnector connector : connectors) {
+ boolean accepted = true;
+ for (IConnectorFilter filter : filterChain) {
+ if (!filter.accept(connector)) {
+ accepted = false;
+ break;
+ }
+ }
+ if (accepted) {
+ matchingConnectors.add(connector);
+ }
+ }
+ return matchingConnectors;
+ }
+
+ @Override
+ public synchronized Collection<IServiceConnector> getAllConnectors() {
+ checkState();
+ return connectors;
+ }
+
+ @Override
+ public synchronized void removeConnector(IServiceConnector connector) throws Exception {
+ checkState();
+ if (connectors.remove(connector)) {
+ eventNotifier.notifyConnectorRemoved(connector);
+ connector.stop();
+ }
+
+ }
+
+ @Override
+ public synchronized void removeListener(IConnectorListener listener) {
+ checkState();
+ eventNotifier.removeListener(listener);
+ }
+
+ void stop() {
+ isStopped = true;
+ eventNotifier.notifyServiceStopped();
+ for (IServiceConnector connector : connectors) {
+ try {
+ connector.stop();
+ } catch (Exception ex) {
+ Activator.log(Level.SEVERE, "Exception notifying listener of service stop", ex);
+ }
+ }
+ connectors.clear();
+ }
+
+ private void checkState() throws IllegalStateException {
+ if (isStopped) {
+ throw new IllegalStateException("service has been stopped");
+ }
+ }
+
+ @Override
+ public boolean isStopped() {
+ return isStopped;
+ }
+
+}
diff --git a/org.eclipse.osee.ote.connection.service/src/org/eclipse/osee/connection/service/internal/EventNotifier.java b/org.eclipse.osee.ote.connection.service/src/org/eclipse/osee/connection/service/internal/EventNotifier.java
new file mode 100644
index 000000000..474d578e4
--- /dev/null
+++ b/org.eclipse.osee.ote.connection.service/src/org/eclipse/osee/connection/service/internal/EventNotifier.java
@@ -0,0 +1,79 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.connection.service.internal;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.logging.Level;
+import org.eclipse.osee.connection.service.IConnectorListener;
+import org.eclipse.osee.connection.service.IServiceConnector;
+
+public class EventNotifier {
+
+ private final ExecutorService executorService = Executors.newCachedThreadPool();
+
+ private final CopyOnWriteArrayList<IConnectorListener> connectorListener =
+ new CopyOnWriteArrayList<IConnectorListener>();
+
+ void notifyConnectorsAdded(final Collection<IServiceConnector> connectors) {
+ executorService.submit(new Runnable() {
+ // copy the collection of new connectors
+ final ArrayList<IServiceConnector> newConnectors = new ArrayList<>(connectors);
+
+ @Override
+ public void run() {
+ for (IConnectorListener listener : connectorListener) {
+ try {
+ listener.onConnectorsAdded(newConnectors);
+ } catch (Exception e) {
+ Activator.log(Level.SEVERE, "Error processing listeners for connector added event", e);
+ }
+ }
+ }
+ });
+
+ }
+
+ void notifyConnectorRemoved(final IServiceConnector connector) {
+ executorService.submit(new Runnable() {
+
+ @Override
+ public void run() {
+ for (IConnectorListener listener : connectorListener) {
+ try {
+ listener.onConnectorRemoved(connector);
+ } catch (Exception e) {
+ Activator.log(Level.SEVERE, "Error processing listeners for connector remove event", e);
+ }
+ }
+ }
+
+ });
+
+ }
+
+ void notifyServiceStopped() {
+ for (IConnectorListener listener : connectorListener) {
+ listener.onConnectionServiceStopped();
+ }
+ }
+
+ void addListener(IConnectorListener listener) {
+ connectorListener.add(listener);
+ }
+
+ void removeListener(IConnectorListener listener) {
+ connectorListener.remove(listener);
+ }
+}
diff --git a/org.eclipse.osee.ote.container/.classpath b/org.eclipse.osee.ote.container/.classpath
new file mode 100644
index 000000000..1fa3e6803
--- /dev/null
+++ b/org.eclipse.osee.ote.container/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.osee.ote.container/.pmd b/org.eclipse.osee.ote.container/.pmd
new file mode 100644
index 000000000..c7b0a9fb3
--- /dev/null
+++ b/org.eclipse.osee.ote.container/.pmd
@@ -0,0 +1,925 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<pmd>
+ <useProjectRuleSet>false</useProjectRuleSet>
+ <ruleSetFile>.ruleset</ruleSetFile>
+ <rules>
+ <rule>
+ <name>LooseCoupling</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CloneMethodMustImplementCloneable</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedImports</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SignatureDeclareThrowsException</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>IfStmtsMustUseBraces</name>
+ <ruleset>Braces Rules</ruleset>
+ </rule>
+ <rule>
+ <name>WhileLoopsMustUseBraces</name>
+ <ruleset>Braces Rules</ruleset>
+ </rule>
+ <rule>
+ <name>IfElseStmtsMustUseBraces</name>
+ <ruleset>Braces Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ForLoopsMustUseBraces</name>
+ <ruleset>Braces Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseSingleton</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SimplifyBooleanReturns</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SimplifyBooleanExpressions</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SwitchStmtsShouldHaveDefault</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidDeeplyNestedIfStmts</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidReassigningParameters</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SwitchDensity</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ConstructorCallsOverridableMethod</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AccessorClassGeneration</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>FinalFieldCouldBeStatic</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CloseResource</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NonStaticInitializer</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DefaultLabelNotLastInSwitchStmt</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NonCaseLabelInSwitchStatement</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>OptimizableToArrayCall</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>BadComparison</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EqualsNull</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ConfusingTernary</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>InstantiationToGetClass</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>IdempotentOperations</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SimpleDateFormatNeedsLocale</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ImmutableField</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseLocaleWithCaseConversions</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidProtectedFieldInFinalClass</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AssignmentToNonFinalStatic</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MissingStaticMethodInNonInstantiatableClass</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidSynchronizedAtMethodLevel</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MissingBreakInSwitch</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseNotifyAllInsteadOfNotify</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidInstanceofChecksInCatchClause</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AbstractClassWithoutAbstractMethod</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SimplifyConditional</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CompareObjectsWithEquals</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>PositionLiteralsFirstInComparisons</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryLocalBeforeReturn</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NonThreadSafeSingleton</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UncommentedEmptyMethod</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UncommentedEmptyConstructor</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidConstantsInterface</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnsynchronizedStaticDateFormatter</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>PreserveStackTrace</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseCollectionIsEmpty</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ClassWithOnlyPrivateConstructorsShouldBeFinal</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyMethodInAbstractClassShouldBeAbstract</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SingularField</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ReturnEmptyArrayRatherThanNull</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AbstractClassWithoutAnyMethod</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>TooFewBranchesForASwitchStatement</name>
+ <ruleset>Design Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidCatchingThrowable</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SignatureDeclareThrowsException</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ExceptionAsFlowControl</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidCatchingNPE</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidThrowingRawExceptionTypes</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidThrowingNullPointerException</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidRethrowingException</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DoNotExtendJavaLangError</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DoNotThrowExceptionInFinally</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidThrowingNewInstanceOfSameException</name>
+ <ruleset>Strict Exception Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedPrivateField</name>
+ <ruleset>Unused Code Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedLocalVariable</name>
+ <ruleset>Unused Code Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedPrivateMethod</name>
+ <ruleset>Unused Code Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedFormalParameter</name>
+ <ruleset>Unused Code Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MoreThanOneLogger</name>
+ <ruleset>Java Logging Rules</ruleset>
+ </rule>
+ <rule>
+ <name>LoggerIsNotStaticFinal</name>
+ <ruleset>Java Logging Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SystemPrintln</name>
+ <ruleset>Java Logging Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidPrintStackTrace</name>
+ <ruleset>Java Logging Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidDuplicateLiterals</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>StringInstantiation</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>StringToString</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>InefficientStringBuffering</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryCaseChange</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseStringBufferLength</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AppendCharacterWithChar</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ConsecutiveLiteralAppends</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseIndexOfChar</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>InefficientEmptyStringCheck</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>InsufficientStringBufferDeclaration</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UselessStringValueOf</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>StringBufferInstantiationWithChar</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseEqualsToCompareStrings</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidStringBufferField</name>
+ <ruleset>String and StringBuffer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ReplaceVectorWithList</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ReplaceHashtableWithMap</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ReplaceEnumerationWithIterator</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidEnumAsIdentifier</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidAssertAsIdentifier</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>IntegerInstantiation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ByteInstantiation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ShortInstantiation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>LongInstantiation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnit4TestShouldUseBeforeAnnotation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnit4TestShouldUseAfterAnnotation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnit4TestShouldUseTestAnnotation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnit4SuitesShouldUseSuiteAnnotation</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnitUseExpected</name>
+ <ruleset>Migration Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseProperClassLoader</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MDBAndSessionBeanNamingConvention</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>RemoteSessionInterfaceNamingConvention</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>LocalInterfaceSessionNamingConvention</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>LocalHomeNamingConvention</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>RemoteInterfaceNamingConvention</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DoNotCallSystemExit</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>StaticEJBFieldShouldBeFinal</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DoNotUseThreads</name>
+ <ruleset>J2EE Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidInstantiatingObjectsInLoops</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseArrayListInsteadOfVector</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SimplifyStartsWith</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseStringBufferForStringAppends</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseArraysAsList</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidArrayLoops</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryWrapperObjectCreation</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AddEmptyString</name>
+ <ruleset>Optimization Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyCatchBlock</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyIfStmt</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyWhileStmt</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyTryBlock</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyFinallyBlock</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptySwitchStatements</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JumbledIncrementer</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ForLoopShouldBeWhileLoop</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryConversionTemporary</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>OverrideBothEqualsAndHashcode</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DoubleCheckedLocking</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ReturnFromFinallyBlock</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptySynchronizedBlock</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryReturn</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyStaticInitializer</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnconditionalIfStatement</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyStatementNotInLoop</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>BooleanInstantiation</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryFinalModifier</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CollapsibleIfStatements</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UselessOverridingMethod</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ClassCastExceptionWithToArray</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidDecimalLiteralsInBigDecimalConstructor</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UselessOperationOnImmutable</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MisplacedNullCheck</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedNullCheckInEquals</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidThreadGroup</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>BrokenNullCheck</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>BigIntegerInstantiation</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidUsingOctalValues</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidUsingHardCodedIP</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CheckResultSet</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidMultipleUnaryOperators</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyInitializer</name>
+ <ruleset>Basic Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MethodReturnsInternalArray</name>
+ <ruleset>Security Code Guidelines</ruleset>
+ </rule>
+ <rule>
+ <name>ArrayIsStoredDirectly</name>
+ <ruleset>Security Code Guidelines</ruleset>
+ </rule>
+ <rule>
+ <name>CouplingBetweenObjects</name>
+ <ruleset>Coupling Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ExcessiveImports</name>
+ <ruleset>Coupling Rules</ruleset>
+ </rule>
+ <rule>
+ <name>LooseCoupling</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DuplicateImports</name>
+ <ruleset>Import Statement Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DontImportJavaLang</name>
+ <ruleset>Import Statement Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedImports</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ImportFromSamePackage</name>
+ <ruleset>Import Statement Rules</ruleset>
+ </rule>
+ <rule>
+ <name>TooManyStaticImports</name>
+ <ruleset>Import Statement Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnitStaticSuite</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnitSpelling</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnitAssertionsShouldIncludeMessage</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>JUnitTestsShouldIncludeAssert</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>TestClassWithoutTestCases</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryBooleanAssertion</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseAssertEqualsInsteadOfAssertTrue</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseAssertSameInsteadOfAssertTrue</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseAssertNullInsteadOfAssertTrue</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SimplifyBooleanAssertion</name>
+ <ruleset>JUnit Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryConstructor</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NullAssignment</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnusedModifier</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AssignmentInOperand</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AtLeastOneConstructor</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DontImportSun</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SuspiciousOctalEscape</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CallSuperInConstructor</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UnnecessaryParentheses</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DefaultPackage</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>BooleanInversion</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DataflowAnomalyAnalysis</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidFinalLocalVariable</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidUsingShortType</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidUsingVolatile</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidUsingNativeCode</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidAccessibilityAlteration</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>DoNotCallGarbageCollectionExplicitly</name>
+ <ruleset>Controversial Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MethodNamingConventions</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ClassNamingConventions</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AbstractNaming</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidDollarSigns</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MethodWithSameNameAsEnclosingClass</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SuspiciousHashcodeMethodName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SuspiciousConstantFieldName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>SuspiciousEqualsMethodName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidFieldNameMatchingTypeName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidFieldNameMatchingMethodName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NoPackage</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>PackageCase</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MisleadingVariableName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>BooleanGetMethodName</name>
+ <ruleset>Naming Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NPathComplexity</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ExcessiveMethodLength</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ExcessiveParameterList</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ExcessiveClassLength</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CyclomaticComplexity</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ExcessivePublicCount</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>TooManyFields</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NcssMethodCount</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NcssTypeCount</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>NcssConstructorCount</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>TooManyMethods</name>
+ <ruleset>Code Size Rules</ruleset>
+ </rule>
+ <rule>
+ <name>EmptyFinalizer</name>
+ <ruleset>Finalizer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>FinalizeOnlyCallsSuperFinalize</name>
+ <ruleset>Finalizer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>FinalizeOverloaded</name>
+ <ruleset>Finalizer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>FinalizeDoesNotCallSuperFinalize</name>
+ <ruleset>Finalizer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>FinalizeShouldBeProtected</name>
+ <ruleset>Finalizer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>AvoidCallingFinalize</name>
+ <ruleset>Finalizer Rules</ruleset>
+ </rule>
+ <rule>
+ <name>UseCorrectExceptionLogging</name>
+ <ruleset>Jakarta Commons Logging Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ProperLogger</name>
+ <ruleset>Jakarta Commons Logging Rules</ruleset>
+ </rule>
+ <rule>
+ <name>MissingSerialVersionUID</name>
+ <ruleset>JavaBean Rules</ruleset>
+ </rule>
+ <rule>
+ <name>ProperCloneImplementation</name>
+ <ruleset>Clone Implementation Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CloneThrowsCloneNotSupportedException</name>
+ <ruleset>Clone Implementation Rules</ruleset>
+ </rule>
+ <rule>
+ <name>CloneMethodMustImplementCloneable</name>
+ <ruleset>Type Resolution Rules</ruleset>
+ </rule>
+ </rules>
+ <includeDerivedFiles>false</includeDerivedFiles>
+ <violationsAsErrors>true</violationsAsErrors>
+</pmd>
diff --git a/org.eclipse.osee.ote.container/.project b/org.eclipse.osee.ote.container/.project
new file mode 100644
index 000000000..c7196c9c5
--- /dev/null
+++ b/org.eclipse.osee.ote.container/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.osee.ote.container</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/org.eclipse.osee.ote.container/META-INF/MANIFEST.MF b/org.eclipse.osee.ote.container/META-INF/MANIFEST.MF
new file mode 100644
index 000000000..522e97f3c
--- /dev/null
+++ b/org.eclipse.osee.ote.container/META-INF/MANIFEST.MF
@@ -0,0 +1,19 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: OTE Classpath Container
+Bundle-SymbolicName: org.eclipse.osee.ote.container;singleton:=true
+Bundle-Version: 0.25.3.qualifier
+Bundle-Activator: org.eclipse.osee.ote.container.OteContainerActivator
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.core.resources,
+ org.eclipse.jdt,
+ org.eclipse.jdt.ui,
+ org.eclipse.jdt.core,
+ org.eclipse.osee.ote.runtimeManager,
+ org.eclipse.osee.framework.jdk.core,
+ org.eclipse.osee.ote.core
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-ActivationPolicy: lazy
+Import-Package: org.eclipse.osee.framework.ui.workspacebundleloader
+Bundle-Vendor: Eclipse Open System Engineering Environment
diff --git a/org.eclipse.osee.ote.container/build.properties b/org.eclipse.osee.ote.container/build.properties
new file mode 100644
index 000000000..e9863e281
--- /dev/null
+++ b/org.eclipse.osee.ote.container/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ plugin.xml
diff --git a/org.eclipse.osee.ote.container/plugin.xml b/org.eclipse.osee.ote.container/plugin.xml
new file mode 100644
index 000000000..d428fe62c
--- /dev/null
+++ b/org.eclipse.osee.ote.container/plugin.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+ <extension
+ point="org.eclipse.jdt.core.classpathContainerInitializer">
+ <classpathContainerInitializer
+ class="org.eclipse.osee.ote.container.OteClasspathContainerInitializer"
+ id="OTE Classpath Container from the extension point">
+ </classpathContainerInitializer>
+ </extension>
+ <extension
+ point="org.eclipse.jdt.ui.classpathContainerPage">
+ <classpathContainerPage
+ class="org.eclipse.osee.ote.container.OteContainerPage"
+ id="org.eclipse.osee.ote.container.classpathContainerPage"
+ name="OTE Classpath Container please use this">
+ </classpathContainerPage>
+ </extension>
+
+</plugin>
diff --git a/org.eclipse.osee.ote.container/pom.xml b/org.eclipse.osee.ote.container/pom.xml
new file mode 100644
index 000000000..3871f881d
--- /dev/null
+++ b/org.eclipse.osee.ote.container/pom.xml
@@ -0,0 +1,17 @@
+<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.eclipse.osee</groupId>
+ <artifactId>org.eclipse.osee.ote.parent</artifactId>
+ <version>0.25.3-SNAPSHOT</version>
+ <relativePath>../org.eclipse.osee.ote.parent</relativePath>
+ </parent>
+
+ <artifactId>org.eclipse.osee.ote.container</artifactId>
+ <packaging>eclipse-plugin</packaging>
+ <name>OTE Container (Incubation)</name>
+
+</project> \ No newline at end of file
diff --git a/org.eclipse.osee.ote.container/src/org/eclipse/osee/ote/container/IUserLibListener.java b/org.eclipse.osee.ote.container/src/org/eclipse/osee/ote/container/IUserLibListener.java
new file mode 100644
index 000000000..3ec0a3800
--- /dev/null
+++ b/org.eclipse.osee.ote.container/src/org/eclipse/osee/ote/container/IUserLibListener.java
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ote.container;
+
+/**
+ * @author Michael P. Masterson
+ */
+public interface IUserLibListener {
+
+ public void libraryChanged();
+
+}
diff --git a/org.eclipse.osee.ote.container/src/org/eclipse/osee/ote/container/JarChangeResourceListener.java b/org.eclipse.osee.ote.container/src/org/eclipse/osee/ote/container/JarChangeResourceListener.java
new file mode 100644
index 000000000..410c02b6d
--- /dev/null
+++ b/org.eclipse.osee.ote.container/src/org/eclipse/osee/ote/container/JarChangeResourceListener.java
@@ -0,0 +1,158 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ote.container;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IProjectNature;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.osee.framework.ui.workspacebundleloader.JarCollectionNature;
+
+/**
+ * Handler for IResourceChangeEvent.POST_CHANGE and IResourceChangeEvent.PRE_CLOSE events for projects with a given
+ * nature ID that extends JarCollectionNature. POST_CHANGE events against the jars in projects with the nature, and
+ * close events on the projects with the nature are detected and offered to an IJarChangeListener.
+ *
+ * @author Robert A. Fisher
+ */
+public class JarChangeResourceListener<T extends JarCollectionNature> implements IResourceChangeListener {
+ private final String natureId;
+ private final LibraryChangeProvider listener;
+
+ public JarChangeResourceListener(String natureId, LibraryChangeProvider listener) {
+ if (natureId == null) {
+ throw new IllegalArgumentException("natureId must not be null");
+ }
+ if (listener == null) {
+ throw new IllegalArgumentException("listener must not be null");
+ }
+ this.natureId = natureId;
+ this.listener = listener;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public void resourceChanged(IResourceChangeEvent event) {
+ try {
+ if (event.getType() == IResourceChangeEvent.POST_CHANGE) {
+ handleChangeEvent(event);
+ } else if (event.getType() == IResourceChangeEvent.PRE_CLOSE) {
+ IResource resource = event.getResource();
+ if (resource != null && resource instanceof IProject) {
+ IProject project = (IProject) resource;
+
+ IProjectNature nature = project.getNature(natureId);
+ if (nature != null) {
+ listener.handleNatureClosed((T) nature);
+ }
+ }
+ }
+ } catch (CoreException ex) {
+ } catch (MalformedURLException ex) {
+ }
+ }
+
+ private void handleChangeEvent(IResourceChangeEvent event) throws CoreException, MalformedURLException {
+ IResourceDelta rootDelta = event.getDelta();
+ if (rootDelta != null) {
+ boolean triggered = false;
+ for (IResourceDelta child : rootDelta.getAffectedChildren()) {
+ IResource resource = child.getResource();
+ if (resource != null && resource instanceof IProject) {
+ IProject project = (IProject) resource;
+
+ IProjectNature nature = project.getNature(natureId);
+ if (nature != null) {
+ JarCollectionNature starterNature = (JarCollectionNature) nature;
+ IPath[] paths = starterNature.getProjectRelativeBundlePaths();
+ for (IPath path : paths) {
+ IResourceDelta pluginDelta = child.findMember(path);
+ if (pluginDelta != null) {
+ handlePluginChanges(project.getLocation().removeLastSegments(1),
+ pluginDelta.getAffectedChildren());
+ triggered = true;
+ }
+ }
+ }
+ }
+ }
+
+ if (triggered) {
+ listener.handlePostChange();
+ }
+ }
+ }
+
+ protected void handlePluginChanges(IPath workspacePath, IResourceDelta[] affectedChildren) throws MalformedURLException {
+ for (IResourceDelta affectedPluginDelta : affectedChildren) {
+ URL url = workspacePath.append(affectedPluginDelta.getFullPath()).toFile().toURI().toURL();
+ if (affectedPluginDelta.getFullPath().getFileExtension().equals("jar")) {
+ try {
+ switch (affectedPluginDelta.getKind()) {
+ case IResourceDelta.ADDED:
+ listener.handleBundleAdded(url);
+ break;
+ case IResourceDelta.CHANGED:
+ listener.handleBundleChanged(url);
+ break;
+ case IResourceDelta.REMOVED:
+ listener.handleBundleRemoved(url);
+ break;
+
+ default:
+ System.err.println("Do not expect change kind of " + generateKindString(affectedPluginDelta.getKind()));
+ }
+ } catch (RuntimeException ex) {
+ ex.printStackTrace();
+ throw ex;
+ }
+ }
+ }
+ }
+
+ private String generateKindString(int kind) {
+ switch (kind) {
+ case IResourceDelta.ADDED:
+ return "Added";
+ case IResourceDelta.CHANGED:
+ return "Changed";
+ case IResourceDelta.REMOVED:
+ return "Removed";
+ default:
+ return "Unexpected Kind: " + kind;
+ }
+ }
+
+ protected String generateEventString(int type) {
+ switch (type) {
+ case IResourceChangeEvent.POST_BUILD:
+ return "Post Build";
+ case IResourceChangeEvent.POST_CHANGE:
+ return "Post Change";
+ case IResourceChangeEvent.PRE_BUILD:
+ return "Pre Build";
+ case IResourceChangeEvent.PRE_CLOSE:
+ return "Pre Close";
+ case IResourceChangeEvent.PRE_DELETE:
+ return "Pre Delete";
+ case IResourceChangeEvent.PRE_REFRESH:
+ return "Pre Refresh";
+ default:
+ return "Unknown Code: " + type;
+ }
+ }
+}
diff --git a/org.eclipse.osee.ote.container/src/org/eclipse/osee/ote/container/LibraryChangeProvider.java b/org.eclipse.osee.ote.container/src/org/eclipse/osee/ote/container/LibraryChangeProvider.java
new file mode 100644
index 000000000..4384a90bd
--- /dev/null
+++ b/org.eclipse.osee.ote.container/src/org/eclipse/osee/ote/container/LibraryChangeProvider.java
@@ -0,0 +1,62 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ote.container;
+
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+import org.eclipse.osee.framework.ui.workspacebundleloader.JarCollectionNature;
+
+public class LibraryChangeProvider<T extends JarCollectionNature> {
+
+ private final List<IUserLibListener> listeners;
+
+ public LibraryChangeProvider() {
+ listeners = new ArrayList<>();
+ }
+
+ public void addListener(IUserLibListener listener) {
+ if (!listeners.contains(listener)) {
+ listeners.add(listener);
+ }
+ }
+
+ public void handleBundleAdded(URL url) {
+ resetClasspath();
+ }
+
+ private void resetClasspath() {
+ for (IUserLibListener listener : listeners) {
+ listener.libraryChanged();
+ // try {
+ // this.oteClasspathContainer.javaProject.getPerProjectInfo().resetResolvedClasspath();
+ // }
+ // catch (JavaModelException ex) {
+ // ex.printStackTrace();
+ // }
+ }
+ }
+
+ public void handleBundleChanged(URL url) {
+ }
+
+ public void handleBundleRemoved(URL url) {
+ resetClasspath();
+ }
+
+ public void handleNatureClosed(T nature) {
+ resetClasspath();
+ }
+
+ public void handlePostChange() {
+ }
+
+} \ No newline at end of file
diff --git a/org.eclipse.osee.ote.container/src/org/eclipse/osee/ote/container/OteClasspathContainer.java b/org.eclipse.osee.ote.container/src/org/eclipse/osee/ote/container/OteClasspathContainer.java
new file mode 100644
index 000000000..2f0ae41d7
--- /dev/null
+++ b/org.eclipse.osee.ote.container/src/org/eclipse/osee/ote/container/OteClasspathContainer.java
@@ -0,0 +1,176 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.ote.container;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.jdt.core.IClasspathContainer;
+import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.internal.core.JavaProject;
+import org.eclipse.osee.framework.ui.workspacebundleloader.JarChangeResourceListener;
+import org.eclipse.osee.ote.core.BundleInfo;
+import org.eclipse.osee.ote.core.OteBundleLocator;
+import org.eclipse.osee.ote.runtimemanager.OteUserLibsNature;
+import org.osgi.framework.BundleContext;
+import org.osgi.util.tracker.ServiceTracker;
+
+/**
+ * @author Andrew M. Finkbeiner
+ */
+public class OteClasspathContainer implements IClasspathContainer, IUserLibListener {
+ public final static Path ID = new Path("OTE Classpath Container from the extension point");
+
+ private Collection<ClassPathDescription> classPaths;
+
+ private List<BundleInfo> betterPaths;
+
+ private ServiceTracker tracker;
+
+ private OteBundleLocator locator;
+
+ private final JavaProject javaProject;
+
+ private LibraryChangeProvider<OteUserLibsNature> userLibListener;
+
+ private JarChangeResourceListener<OteUserLibsNature> userLibResourceListener;
+
+ public OteClasspathContainer(IPath path, IJavaProject javaProject) throws CoreException {
+ this.javaProject = (JavaProject) javaProject;
+
+ try {
+ BundleContext context = OteContainerActivator.getDefault().getContext();
+ tracker = new ServiceTracker(context, OteBundleLocator.class.getName(), null);
+ tracker.open(true);
+ Object obj = tracker.waitForService(10000);
+ locator = (OteBundleLocator) obj;
+
+ OteContainerActivator.getDefault().getLibraryChangeProvider().addListener(this);
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ }
+
+ }
+
+ private String findProjectRoot(String path) {
+ File fileForPath = new File(path);
+ File projectFile = recursivelyFindProjectFile(fileForPath);
+ return projectFile.getAbsolutePath();
+ }
+
+ private File recursivelyFindProjectFile(File file) {
+
+ if (file == null) {
+ return file;
+ }
+
+ if (fileIsDirectoryWithBin(file)) {
+ return file;
+ } else {
+ return recursivelyFindProjectFile(file.getParentFile());
+ }
+ }
+
+ private boolean fileIsDirectoryWithBin(File file) {
+ if (file.isDirectory()) {
+ File binChildFile = new File(file.getAbsoluteFile() + "/bin");
+ if (binChildFile.exists()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private String getWorkspaceRelativePath(String absolutePath) {
+ return absolutePath;
+ }
+
+ @Override
+ public IClasspathEntry[] getClasspathEntries() {
+ List<IClasspathEntry> entries = new ArrayList<>();
+ Collection<BundleInfo> runtimeLibUrls;
+ try {
+ runtimeLibUrls = locator.getRuntimeLibs();
+ classPaths = new ArrayList<>();
+ betterPaths = new ArrayList<>();
+ for (BundleInfo info : runtimeLibUrls) {
+
+ String binaryFilePath = info.getSystemLocation().getFile();
+
+ if (info.isSystemLibrary()) {
+ entries.add(JavaCore.newLibraryEntry(new Path(binaryFilePath), new Path(binaryFilePath), new Path("/")));
+ } else {
+ File projectFilePath = recursivelyFindProjectFile(new File(binaryFilePath));
+ binaryFilePath = "/" + projectFilePath.getName();
+
+ entries.add(JavaCore.newProjectEntry(new Path(binaryFilePath)));
+ }
+ }
+
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ }
+
+ IClasspathEntry[] retVal = new IClasspathEntry[entries.size()];
+ return entries.toArray(retVal);
+ }
+
+ @Override
+ public String getDescription() {
+ return "OTE Classpath Container";
+ }
+
+ @Override
+ public int getKind() {
+ return IClasspathContainer.K_APPLICATION;
+ }
+
+ @Override
+ public IPath getPath() {
+ return ID;
+ }
+
+ private class ClassPathDescription {
+ private final String sourcePath, binaryPath;
+
+ public ClassPathDescription(String binaryPath, String sourcePath) {
+ super();
+ this.sourcePath = sourcePath;
+ this.binaryPath = binaryPath;
+ }
+
+ /**
+ * @return the sourcePath
+ */
+ public String getSourcePath() {
+ return sourcePath;
+ }
+
+ /**
+ * @return the binaryPath
+ */
+ public String getBinaryPath() {
+ return binaryPath;
+ }
+
+ }
+
+ @Override
+ public void libraryChanged() {
+ }
+
+}
diff --git a/org.eclipse.osee.ote.container/src/org/eclipse/osee/ote/container/OteClasspathContainerInitializer.java b/org.eclipse.osee.ote.container/src/org/eclipse/osee/ote/container/OteClasspathContainerInitializer.java
new file mode 100644