Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordonald.g.dunne2017-06-16 23:52:23 +0000
committerdonald.g.dunne2017-07-11 15:20:09 +0000
commitaa810157c996a6e2f753adad740a8abab5d55d61 (patch)
tree14198b0dbc2f52ba20f2eada9a0c05a8d2b9abee /plugins
parent03f6bc3787255de495b0939c63dcb31f50d70c92 (diff)
downloadorg.eclipse.osee-aa810157c996a6e2f753adad740a8abab5d55d61.tar.gz
org.eclipse.osee-aa810157c996a6e2f753adad740a8abab5d55d61.tar.xz
org.eclipse.osee-aa810157c996a6e2f753adad740a8abab5d55d61.zip
bug[ats_ATS402006]: ATS config objects not loading prior to use
Diffstat (limited to 'plugins')
-rw-r--r--plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/config/AtsConfigEndpointApi.java18
-rw-r--r--plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/config/AtsConfigurations.java60
-rw-r--r--plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/config/JaxActionableItem.java57
-rw-r--r--plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/config/JaxNewAtsConfigObject.java1
-rw-r--r--plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/config/JaxTeamDefinition.java64
-rw-r--r--plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/config/JaxVersion.java32
-rw-r--r--plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/user/IAtsUserService.java2
-rw-r--r--plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/workdef/IRelationResolver.java2
-rw-r--r--plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/core/client/util/AtsUserTest.java12
-rw-r--r--plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/util/DbInitTest.java3
-rw-r--r--plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/AtsClientImpl.java34
-rw-r--r--plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/AtsConfigurationsService.java1
-rw-r--r--plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/user/AtsUserServiceClientImpl.java11
-rw-r--r--plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/workflow/AtsRelationResolverServiceImpl.java10
-rw-r--r--plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/config/ActionableItem2.java108
-rw-r--r--plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/config/TeamDefinition2.java347
-rw-r--r--plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/users/AbstractAtsUserService.java4
-rw-r--r--plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/config/AtsConfigEndpointImpl.java267
-rw-r--r--plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/config/AtsUserServiceServerImpl.java33
-rw-r--r--plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/config/UpdateAtsConfiguration.java2
-rw-r--r--plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/util/AtsRelationResolverServiceImpl.java9
-rw-r--r--plugins/org.eclipse.osee.ats/META-INF/MANIFEST.MF1
-rw-r--r--plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/wizard/NewActionPage1.java34
-rw-r--r--plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/dialog/AITreeContentProvider.java5
-rw-r--r--plugins/org.eclipse.osee.orcs.core/src/org/eclipse/osee/orcs/core/internal/proxy/impl/ArtifactReadOnlyImpl.java23
-rw-r--r--plugins/org.eclipse.osee.orcs/src/org/eclipse/osee/orcs/data/ArtifactReadable.java4
26 files changed, 1017 insertions, 127 deletions
diff --git a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/config/AtsConfigEndpointApi.java b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/config/AtsConfigEndpointApi.java
index efccbdb0c32..e5695286b7d 100644
--- a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/config/AtsConfigEndpointApi.java
+++ b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/config/AtsConfigEndpointApi.java
@@ -31,11 +31,29 @@ import org.eclipse.osee.framework.jdk.core.type.ViewModel;
@Path("config")
public interface AtsConfigEndpointApi {
+ /**
+ * @return cached copy of AtsConfigurations that is reloaded every 5 minutes. Use getFromDb() for latest copy from
+ * database.
+ */
@GET
@Produces(MediaType.APPLICATION_JSON)
public AtsConfigurations get();
/**
+ * @return non-cached copy of AtsConfigurations read straight from database. Can take 30ish seconds to load. Use
+ * get() for quick access to cached copy.
+ */
+ @GET
+ @Path("fromdb")
+ @Produces(MediaType.APPLICATION_JSON)
+ public AtsConfigurations getFromDb();
+
+ @GET
+ @Path("clearcache")
+ @Produces(MediaType.APPLICATION_JSON)
+ public AtsConfigurations clearCaches();
+
+ /**
* @return html5 action entry page
*/
@GET
diff --git a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/config/AtsConfigurations.java b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/config/AtsConfigurations.java
index 97d7582ae97..5ce5cd331d0 100644
--- a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/config/AtsConfigurations.java
+++ b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/config/AtsConfigurations.java
@@ -33,9 +33,14 @@ public class AtsConfigurations implements IWorkDefinitionStringProvider {
private ColorColumns colorColumns = new ColorColumns();
List<JaxAtsUser> users = new ArrayList<>();
List<Long> atsAdmins = new ArrayList<>();
- List<Long> atsConfigIds = new ArrayList<>();
+ Long topActionableItem;
+ Long topTeamDefinition;
+ List<JaxVersion> versions = new ArrayList<>();
private Collection<String> validStateNames = new ArrayList<>();
private Map<String, String> workDefIdToWorkDef = new HashMap<>();
+ private Map<Long, JaxActionableItem> idToAi = new HashMap<>();
+ private Map<Long, JaxTeamDefinition> idToTeamDef = new HashMap<>();
+ private Map<Long, JaxVersion> idToVersion = new HashMap<>();
public List<AtsConfiguration> getConfigs() {
return configs;
@@ -65,19 +70,6 @@ public class AtsConfigurations implements IWorkDefinitionStringProvider {
this.users = users;
}
- public String getAtsConfigIdsStr() {
- return Collections.toString(",", atsConfigIds);
- }
-
- @JsonIgnore
- public List<Long> getAtsConfigIds() {
- return atsConfigIds;
- }
-
- public void setAtsConfigIdsStr(String atsConfigIdsStr) {
- parseStringOfLongs(this.atsConfigIds, atsConfigIdsStr);
- }
-
public Collection<String> getValidStateNames() {
return validStateNames;
}
@@ -120,4 +112,44 @@ public class AtsConfigurations implements IWorkDefinitionStringProvider {
this.workDefIdToWorkDef = workDefIdToWorkDef;
}
+ public Map<Long, JaxActionableItem> getIdToAi() {
+ return idToAi;
+ }
+
+ public void setIdToAi(Map<Long, JaxActionableItem> idToAi) {
+ this.idToAi = idToAi;
+ }
+
+ public Map<Long, JaxTeamDefinition> getIdToTeamDef() {
+ return idToTeamDef;
+ }
+
+ public void setIdToTeamDef(Map<Long, JaxTeamDefinition> idToTeamDef) {
+ this.idToTeamDef = idToTeamDef;
+ }
+
+ public Map<Long, JaxVersion> getIdToVersion() {
+ return idToVersion;
+ }
+
+ public void setIdToVersion(Map<Long, JaxVersion> idToVersion) {
+ this.idToVersion = idToVersion;
+ }
+
+ public Long getTopActionableItem() {
+ return topActionableItem;
+ }
+
+ public void setTopActionableItem(Long topActionableItem) {
+ this.topActionableItem = topActionableItem;
+ }
+
+ public Long getTopTeamDefinition() {
+ return topTeamDefinition;
+ }
+
+ public void setTopTeamDefinition(Long topTeamDefinition) {
+ this.topTeamDefinition = topTeamDefinition;
+ }
+
}
diff --git a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/config/JaxActionableItem.java b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/config/JaxActionableItem.java
new file mode 100644
index 00000000000..813498a0982
--- /dev/null
+++ b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/config/JaxActionableItem.java
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * Copyright (c) 2017 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.ats.api.config;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.codehaus.jackson.map.annotate.JsonSerialize;
+import org.codehaus.jackson.map.ser.std.ToStringSerializer;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class JaxActionableItem extends JaxAtsConfigObject {
+
+ @JsonSerialize(using = ToStringSerializer.class)
+ Long parentId;
+ @JsonSerialize(using = ToStringSerializer.class)
+ Long teamDefId;
+ List<Long> children = new ArrayList<>();
+
+ public JaxActionableItem() {
+ // for jax-rs
+ }
+
+ public Long getParentId() {
+ return parentId;
+ }
+
+ public void setParentId(Long parentId) {
+ this.parentId = parentId;
+ }
+
+ public Long getTeamDefId() {
+ return teamDefId;
+ }
+
+ public void setTeamDefId(Long teamDefId) {
+ this.teamDefId = teamDefId;
+ }
+
+ public List<Long> getChildren() {
+ return children;
+ }
+
+ public void setChildren(List<Long> children) {
+ this.children = children;
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/config/JaxNewAtsConfigObject.java b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/config/JaxNewAtsConfigObject.java
index aa2bfc27337..cafa247c9e4 100644
--- a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/config/JaxNewAtsConfigObject.java
+++ b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/config/JaxNewAtsConfigObject.java
@@ -17,4 +17,5 @@ import javax.xml.bind.annotation.XmlRootElement;
*/
@XmlRootElement
public class JaxNewAtsConfigObject extends JaxAtsObject {
+ // do nothing
} \ No newline at end of file
diff --git a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/config/JaxTeamDefinition.java b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/config/JaxTeamDefinition.java
new file mode 100644
index 00000000000..66f7a00b685
--- /dev/null
+++ b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/config/JaxTeamDefinition.java
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * Copyright (c) 2017 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.ats.api.config;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.codehaus.jackson.map.annotate.JsonSerialize;
+import org.codehaus.jackson.map.ser.std.ToStringSerializer;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class JaxTeamDefinition extends JaxAtsConfigObject {
+
+ @JsonSerialize(using = ToStringSerializer.class)
+ Long parentId;
+ List<Long> ais = new ArrayList<>();
+ List<Long> versions = new ArrayList<>();
+ List<Long> children = new ArrayList<>();
+
+ public JaxTeamDefinition() {
+ }
+
+ public Long getParentId() {
+ return parentId;
+ }
+
+ public void setParentId(Long parentId) {
+ this.parentId = parentId;
+ }
+
+ public List<Long> getAis() {
+ return ais;
+ }
+
+ public void setAis(List<Long> ais) {
+ this.ais = ais;
+ }
+
+ public List<Long> getVersions() {
+ return versions;
+ }
+
+ public void setVersions(List<Long> versions) {
+ this.versions = versions;
+ }
+
+ public List<Long> getChildren() {
+ return children;
+ }
+
+ public void setChildren(List<Long> children) {
+ this.children = children;
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/config/JaxVersion.java b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/config/JaxVersion.java
new file mode 100644
index 00000000000..5c6720241ed
--- /dev/null
+++ b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/config/JaxVersion.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2017 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.ats.api.config;
+
+import org.codehaus.jackson.map.annotate.JsonSerialize;
+import org.codehaus.jackson.map.ser.std.ToStringSerializer;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class JaxVersion extends JaxAtsConfigObject {
+
+ @JsonSerialize(using = ToStringSerializer.class)
+ Long teamDefId;
+
+ public Long getTeamDefId() {
+ return teamDefId;
+ }
+
+ public void setTeamDefId(Long teamDefId) {
+ this.teamDefId = teamDefId;
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/user/IAtsUserService.java b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/user/IAtsUserService.java
index 5a639bfa968..4fb18c1e6bc 100644
--- a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/user/IAtsUserService.java
+++ b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/user/IAtsUserService.java
@@ -51,6 +51,8 @@ public interface IAtsUserService {
List<? extends IAtsUser> getUsers();
+ List<? extends IAtsUser> getUsersFromDb();
+
IAtsUser getUserByAccountId(Long accountId);
}
diff --git a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/workdef/IRelationResolver.java b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/workdef/IRelationResolver.java
index c0fa533cffa..e8cdfa33da8 100644
--- a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/workdef/IRelationResolver.java
+++ b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/workdef/IRelationResolver.java
@@ -58,4 +58,6 @@ public interface IRelationResolver {
int getRelatedCount(ArtifactToken artifact, RelationTypeSide relationTypeSide);
+ Collection<Long> getRelatedIds(ArtifactId artifact, RelationTypeSide relationTypeSide);
+
}
diff --git a/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/core/client/util/AtsUserTest.java b/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/core/client/util/AtsUserTest.java
index e16b6d41a4d..72b34919cec 100644
--- a/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/core/client/util/AtsUserTest.java
+++ b/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/core/client/util/AtsUserTest.java
@@ -21,18 +21,18 @@ import org.eclipse.osee.framework.jdk.core.util.Collections;
import org.eclipse.osee.framework.skynet.core.User;
import org.eclipse.osee.framework.skynet.core.UserManager;
import org.junit.Assert;
-import org.junit.Before;
+import org.junit.BeforeClass;
/**
* @author Donald G. Dunne
*/
public class AtsUserTest {
- private IAtsUser atsUser;
- private User user;
+ private static IAtsUser atsUser;
+ private static User user;
- @Before
- public void setUp() throws OseeCoreException {
+ @BeforeClass
+ public static void setUp() throws OseeCoreException {
user = UserManager.getUser();
atsUser = AtsClientService.get().getUserService().getCurrentUser();
}
@@ -48,7 +48,7 @@ public class AtsUserTest {
}
@org.junit.Test
- public void testGetEmail() throws OseeCoreException {
+ public void testGetEmail() throws Exception {
Assert.assertEquals(user.getEmail(), atsUser.getEmail());
}
diff --git a/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/util/DbInitTest.java b/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/util/DbInitTest.java
index ee9e013d674..b24b439bb71 100644
--- a/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/util/DbInitTest.java
+++ b/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/util/DbInitTest.java
@@ -66,7 +66,8 @@ public class DbInitTest {
ClientSessionManager.releaseSession();
ClientSessionManager.getSession();
UserManager.releaseUser();
- AtsClientService.get().getUserService().releaseUser();
+ AtsClientService.getConfigEndpoint().clearCaches();
+ AtsClientService.get().getUserService().reloadCache();
if (UserManager.getUser().getUserId().equals("bootstrap")) {
throw new OseeStateException("Should not be bootstrap user here");
diff --git a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/AtsClientImpl.java b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/AtsClientImpl.java
index 3673489a970..d55b0b07d82 100644
--- a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/AtsClientImpl.java
+++ b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/AtsClientImpl.java
@@ -25,6 +25,8 @@ import org.eclipse.osee.ats.api.IAtsServices;
import org.eclipse.osee.ats.api.IAtsWorkItem;
import org.eclipse.osee.ats.api.agile.IAgileService;
import org.eclipse.osee.ats.api.ai.IAtsActionableItem;
+import org.eclipse.osee.ats.api.config.JaxActionableItem;
+import org.eclipse.osee.ats.api.config.JaxTeamDefinition;
import org.eclipse.osee.ats.api.data.AtsArtifactToken;
import org.eclipse.osee.ats.api.data.AtsRelationTypes;
import org.eclipse.osee.ats.api.notify.AtsNotificationCollector;
@@ -60,8 +62,10 @@ import org.eclipse.osee.ats.core.client.util.IArtifactMembersCache;
import org.eclipse.osee.ats.core.client.workflow.AbstractWorkflowArtifact;
import org.eclipse.osee.ats.core.client.workflow.ChangeTypeUtil;
import org.eclipse.osee.ats.core.client.workflow.transition.TransitionListeners;
+import org.eclipse.osee.ats.core.config.ActionableItem2;
import org.eclipse.osee.ats.core.config.IActionableItemFactory;
import org.eclipse.osee.ats.core.config.ITeamDefinitionFactory;
+import org.eclipse.osee.ats.core.config.TeamDefinition2;
import org.eclipse.osee.ats.core.util.ActionFactory;
import org.eclipse.osee.ats.core.util.AtsCoreFactory;
import org.eclipse.osee.ats.core.util.AtsCoreServiceImpl;
@@ -214,26 +218,34 @@ public class AtsClientImpl extends AtsCoreServiceImpl implements IAtsClient {
@Override
public void reloadConfigCache(boolean pend) {
+ final IAtsServices client = this;
Runnable reload = new Runnable() {
@Override
public void run() {
try {
- List<Integer> ids = new LinkedList<>();
- for (Long id : configProvider.getConfigurations().getAtsConfigIds()) {
- ids.add(id.intValue());
- }
- List<Artifact> artifacts = ArtifactQuery.getArtifactListFromIds(ids, getAtsBranch());
- for (Artifact artifact : artifacts) {
- IAtsConfigObject configObj = configItemFactory.getConfigObject(artifact);
- if (configObj != null) {
- atsCache.cacheAtsObject(configObj);
- }
- }
+ cacheActionableItems(configProvider.getConfigurations().getIdToAi().get(
+ configProvider.getConfigurations().getTopActionableItem()));
+ cacheTeamDefinitions(configProvider.getConfigurations().getIdToTeamDef().get(
+ configProvider.getConfigurations().getTopTeamDefinition()));
} catch (Exception ex) {
OseeLog.log(Activator.class, Level.SEVERE, ex);
}
}
+
+ private void cacheTeamDefinitions(JaxTeamDefinition jaxTeamDef) {
+ atsCache.cacheAtsObject(new TeamDefinition2(getLogger(), client, jaxTeamDef));
+ for (Long childId : jaxTeamDef.getChildren()) {
+ cacheTeamDefinitions(configProvider.getConfigurations().getIdToTeamDef().get(childId));
+ }
+ }
+
+ private void cacheActionableItems(JaxActionableItem jaxAi) {
+ atsCache.cacheAtsObject(new ActionableItem2(getLogger(), client, jaxAi));
+ for (Long child : jaxAi.getChildren()) {
+ cacheActionableItems(configProvider.getConfigurations().getIdToAi().get(child));
+ }
+ }
};
if (pend) {
reload.run();
diff --git a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/AtsConfigurationsService.java b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/AtsConfigurationsService.java
index d58495c52f1..a071c7bb5f0 100644
--- a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/AtsConfigurationsService.java
+++ b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/AtsConfigurationsService.java
@@ -18,7 +18,6 @@ import org.eclipse.osee.ats.api.config.IAtsConfigurationProvider;
import org.eclipse.osee.ats.api.user.IAtsUser;
import org.eclipse.osee.ats.api.user.IUserArtLoader;
import org.eclipse.osee.ats.api.user.JaxAtsUser;
-import org.eclipse.osee.ats.core.util.AtsUtilCore;
import org.eclipse.osee.framework.core.data.ArtifactToken;
import org.eclipse.osee.framework.core.exception.ArtifactDoesNotExist;
import org.eclipse.osee.framework.skynet.core.UserManager;
diff --git a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/user/AtsUserServiceClientImpl.java b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/user/AtsUserServiceClientImpl.java
index 77674c59314..537451a44ed 100644
--- a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/user/AtsUserServiceClientImpl.java
+++ b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/user/AtsUserServiceClientImpl.java
@@ -27,6 +27,7 @@ import org.eclipse.osee.framework.core.data.ArtifactId;
import org.eclipse.osee.framework.core.enums.Active;
import org.eclipse.osee.framework.core.enums.CoreArtifactTypes;
import org.eclipse.osee.framework.core.enums.CoreAttributeTypes;
+import org.eclipse.osee.framework.core.enums.CoreBranches;
import org.eclipse.osee.framework.core.exception.ArtifactDoesNotExist;
import org.eclipse.osee.framework.jdk.core.type.OseeCoreException;
import org.eclipse.osee.framework.skynet.core.User;
@@ -205,4 +206,14 @@ public class AtsUserServiceClientImpl extends AbstractAtsUserService implements
return user;
}
+ @Override
+ public List<IAtsUser> getUsersFromDb() {
+ List<IAtsUser> users = new ArrayList<>();
+ for (ArtifactId userArt : ArtifactQuery.getArtifactListFromType(CoreArtifactTypes.User, CoreBranches.COMMON)) {
+ JaxAtsUser atsUser = createFromArtifact((Artifact) userArt);
+ users.add(atsUser);
+ }
+ return users;
+ }
+
}
diff --git a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/workflow/AtsRelationResolverServiceImpl.java b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/workflow/AtsRelationResolverServiceImpl.java
index 6bdfa965e2e..21e4376b01e 100644
--- a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/workflow/AtsRelationResolverServiceImpl.java
+++ b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/workflow/AtsRelationResolverServiceImpl.java
@@ -203,4 +203,14 @@ public class AtsRelationResolverServiceImpl extends AbstractRelationResolverServ
return art.getRelatedArtifactsCount(relationTypeSide);
}
+ @Override
+ public Collection<Long> getRelatedIds(ArtifactId artifact, RelationTypeSide relationTypeSide) {
+ List<Long> related = new LinkedList<>();
+ Artifact art = getArtifact(artifact);
+ for (Artifact rel : art.getRelatedArtifacts(relationTypeSide)) {
+ related.add(rel.getId());
+ }
+ return related;
+ }
+
}
diff --git a/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/config/ActionableItem2.java b/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/config/ActionableItem2.java
new file mode 100644
index 00000000000..2a546dcdbfb
--- /dev/null
+++ b/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/config/ActionableItem2.java
@@ -0,0 +1,108 @@
+/*******************************************************************************
+ * Copyright (c) 2017 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.ats.core.config;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.List;
+import org.eclipse.osee.ats.api.IAtsServices;
+import org.eclipse.osee.ats.api.ai.IAtsActionableItem;
+import org.eclipse.osee.ats.api.config.JaxActionableItem;
+import org.eclipse.osee.ats.api.data.AtsArtifactTypes;
+import org.eclipse.osee.ats.api.data.AtsAttributeTypes;
+import org.eclipse.osee.ats.api.team.IAtsTeamDefinition;
+import org.eclipse.osee.ats.core.model.impl.AtsConfigObject;
+import org.eclipse.osee.framework.core.data.ArtifactToken;
+import org.eclipse.osee.framework.jdk.core.type.OseeCoreException;
+import org.eclipse.osee.logger.Log;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class ActionableItem2 extends AtsConfigObject implements IAtsActionableItem {
+
+ private final JaxActionableItem jaxAI;
+
+ public ActionableItem2(Log logger, IAtsServices services, JaxActionableItem jaxAI) {
+ super(logger, services, ArtifactToken.valueOf(jaxAI.getUuid(), jaxAI.getName(), services.getAtsBranch(),
+ AtsArtifactTypes.ActionableItem));
+ this.jaxAI = jaxAI;
+ }
+
+ @Override
+ public String getTypeName() {
+ return "Actionable Item";
+ }
+
+ @Override
+ public Collection<String> getRules() throws OseeCoreException {
+ Collection<String> rules = new ArrayList<>();
+ try {
+ rules = services.getAttributeResolver().getAttributeValues(artifact, AtsAttributeTypes.RuleDefinition);
+ } catch (OseeCoreException ex) {
+ getLogger().error(ex, "Error getting rules");
+ }
+ return rules;
+ }
+
+ @Override
+ public boolean hasRule(String rule) throws OseeCoreException {
+ return getRules().contains(rule);
+ }
+
+ @Override
+ public Collection<IAtsActionableItem> getChildrenActionableItems() {
+ List<IAtsActionableItem> children = new LinkedList<>();
+ for (Long childId : jaxAI.getChildren()) {
+ children.add(new ActionableItem2(logger, services, services.getConfigurations().getIdToAi().get(childId)));
+ }
+ return children;
+ }
+
+ @Override
+ public IAtsActionableItem getParentActionableItem() {
+ IAtsActionableItem parent = null;
+ try {
+ if (jaxAI.getParentId() != null) {
+ parent = services.getConfigItemFactory().getActionableItem(services.getArtifact(jaxAI.getParentId()));
+ }
+ } catch (OseeCoreException ex) {
+ getLogger().error(ex, "Error getParentActionableItem");
+ }
+ return parent;
+ }
+
+ @Override
+ public IAtsTeamDefinition getTeamDefinition() {
+ IAtsTeamDefinition teamDef = null;
+ try {
+ if (jaxAI.getTeamDefId() != null) {
+ teamDef = services.getConfigItemFactory().getTeamDef(services.getArtifact(jaxAI.getTeamDefId()));
+ }
+ } catch (OseeCoreException ex) {
+ getLogger().error(ex, "Error getTeamDefinition");
+ }
+ return teamDef;
+ }
+
+ @Override
+ public IAtsTeamDefinition getTeamDefinitionInherited() {
+ return TeamDefinitions.getImpactedTeamDef(this);
+ }
+
+ @Override
+ public boolean isAllowUserActionCreation() {
+ return services.getAttributeResolver().getSoleAttributeValue(artifact, AtsAttributeTypes.AllowUserActionCreation,
+ true);
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/config/TeamDefinition2.java b/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/config/TeamDefinition2.java
new file mode 100644
index 00000000000..9aece5add3a
--- /dev/null
+++ b/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/config/TeamDefinition2.java
@@ -0,0 +1,347 @@
+/*******************************************************************************
+ * 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.ats.core.config;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+import org.eclipse.osee.ats.api.IAtsServices;
+import org.eclipse.osee.ats.api.ai.IAtsActionableItem;
+import org.eclipse.osee.ats.api.config.JaxTeamDefinition;
+import org.eclipse.osee.ats.api.data.AtsArtifactTypes;
+import org.eclipse.osee.ats.api.data.AtsAttributeTypes;
+import org.eclipse.osee.ats.api.data.AtsRelationTypes;
+import org.eclipse.osee.ats.api.team.IAtsTeamDefinition;
+import org.eclipse.osee.ats.api.user.IAtsUser;
+import org.eclipse.osee.ats.api.version.IAtsVersion;
+import org.eclipse.osee.ats.api.version.VersionLockedType;
+import org.eclipse.osee.ats.api.version.VersionReleaseType;
+import org.eclipse.osee.ats.core.model.impl.AtsConfigObject;
+import org.eclipse.osee.framework.core.data.ArtifactId;
+import org.eclipse.osee.framework.core.data.ArtifactToken;
+import org.eclipse.osee.framework.core.data.BranchId;
+import org.eclipse.osee.framework.core.enums.CoreRelationTypes;
+import org.eclipse.osee.framework.core.util.Result;
+import org.eclipse.osee.framework.jdk.core.type.OseeCoreException;
+import org.eclipse.osee.logger.Log;
+
+/**
+ * @author Donald G Dunne
+ */
+public class TeamDefinition2 extends AtsConfigObject implements IAtsTeamDefinition {
+
+ private final JaxTeamDefinition jaxTeamDef;
+
+ public TeamDefinition2(Log logger, IAtsServices services, JaxTeamDefinition jaxTeamDef) {
+ super(logger, services, ArtifactToken.valueOf(jaxTeamDef.getUuid(), jaxTeamDef.getName(), services.getAtsBranch(),
+ AtsArtifactTypes.ActionableItem));
+ this.jaxTeamDef = jaxTeamDef;
+ }
+
+ @Override
+ public String getTypeName() {
+ return "Team Definition";
+ }
+
+ @Override
+ public Collection<IAtsActionableItem> getActionableItems() {
+ List<IAtsActionableItem> children = new LinkedList<>();
+ for (Long aiId : jaxTeamDef.getAis()) {
+ children.add(new ActionableItem2(logger, services, services.getConfigurations().getIdToAi().get(aiId)));
+ }
+ return children;
+ }
+
+ @Override
+ public IAtsTeamDefinition getParentTeamDef() {
+ IAtsTeamDefinition parent = null;
+ try {
+ Collection<ArtifactToken> related =
+ services.getRelationResolver().getRelated(artifact, CoreRelationTypes.Default_Hierarchical__Parent);
+ if (!related.isEmpty()) {
+ parent = services.getConfigItemFactory().getTeamDef(related.iterator().next());
+ }
+ } catch (OseeCoreException ex) {
+ getLogger().error(ex, "Error getParentTeamDef");
+ }
+ return parent;
+ }
+
+ @Override
+ public Collection<IAtsTeamDefinition> getChildrenTeamDefinitions() {
+ Set<IAtsTeamDefinition> children = new HashSet<>();
+ try {
+ for (ArtifactId childArt : services.getRelationResolver().getRelated(artifact,
+ CoreRelationTypes.Default_Hierarchical__Child)) {
+ IAtsTeamDefinition childTeamDef = services.getConfigItemFactory().getTeamDef(childArt);
+ if (childTeamDef != null) {
+ children.add(childTeamDef);
+ }
+ }
+ } catch (OseeCoreException ex) {
+ getLogger().error(ex, "Error getChildrenTeamDefinitions");
+ }
+ return children;
+ }
+
+ @Override
+ public Collection<IAtsUser> getLeads(Collection<IAtsActionableItem> actionableItems) {
+ Set<IAtsUser> leads = new HashSet<>();
+ for (IAtsActionableItem aia : actionableItems) {
+ if (this.equals(aia.getTeamDefinitionInherited())) {
+ // If leads are specified for this aia, add them
+ Collection<IAtsUser> leads2 = aia.getLeads();
+ if (leads2.size() > 0) {
+ leads.addAll(leads2);
+ } else {
+ if (aia.getTeamDefinitionInherited() != null) {
+ Collection<IAtsUser> leads3 = aia.getTeamDefinitionInherited().getLeads();
+ leads.addAll(leads3);
+ }
+ }
+ }
+ }
+ if (leads.isEmpty()) {
+ Collection<IAtsUser> leads2 = getLeads();
+ leads.addAll(leads2);
+ }
+ return leads;
+ }
+
+ @Override
+ public Collection<IAtsUser> getMembers() {
+ return getRelatedUsers(AtsRelationTypes.TeamMember_Member);
+ }
+
+ @Override
+ public Collection<IAtsUser> getMembersAndLeads() {
+ Set<IAtsUser> results = new HashSet<>();
+ results.addAll(getLeads());
+ results.addAll(getMembers());
+ return results;
+ }
+
+ @Override
+ public Collection<IAtsUser> getPrivilegedMembers() {
+ return getRelatedUsers(AtsRelationTypes.PrivilegedMember_Member);
+ }
+
+ @Override
+ public boolean isAllowCommitBranch() {
+ boolean set = false;
+ try {
+ set =
+ services.getAttributeResolver().getSoleAttributeValue(artifact, AtsAttributeTypes.AllowCommitBranch, false);
+ } catch (OseeCoreException ex) {
+ getLogger().error(ex, "Error is allow commit branch");
+ }
+ return set;
+ }
+
+ @Override
+ public Result isAllowCommitBranchInherited() {
+ if (!isAllowCommitBranch()) {
+ return new Result(false, "Team Definition [" + this + "] not configured to allow branch commit.");
+ }
+ if (getBaselineBranchId().isInvalid()) {
+ return new Result(false, "Parent Branch not configured for Team Definition [" + this + "]");
+ }
+ return Result.TrueResult;
+ }
+
+ @Override
+ public boolean isAllowCreateBranch() {
+ boolean set = false;
+ try {
+ set =
+ services.getAttributeResolver().getSoleAttributeValue(artifact, AtsAttributeTypes.AllowCreateBranch, false);
+ } catch (OseeCoreException ex) {
+ getLogger().error(ex, "Error get allow create branch");
+ }
+ return set;
+ }
+
+ @Override
+ public Result isAllowCreateBranchInherited() {
+ if (!isAllowCreateBranch()) {
+ return new Result(false, "Branch creation disabled for Team Definition [" + this + "]");
+ }
+ if (getBaselineBranchId().isInvalid()) {
+ return new Result(false, "Parent Branch not configured for Team Definition [" + this + "]");
+ }
+ return Result.TrueResult;
+ }
+
+ @Override
+ public BranchId getBaselineBranchId() {
+ return BranchId.valueOf((String) getAttributeValue(AtsAttributeTypes.BaselineBranchUuid, "0"));
+ }
+
+ @Override
+ public BranchId getTeamBranchId() {
+ BranchId branch = getBaselineBranchId();
+ if (branch.isValid()) {
+ return branch;
+ } else {
+ IAtsTeamDefinition parentTeamDef = getParentTeamDef();
+ if (parentTeamDef instanceof TeamDefinition2) {
+ return parentTeamDef.getTeamBranchId();
+ }
+ }
+ return BranchId.SENTINEL;
+ }
+
+ @Override
+ public String getCommitFullDisplayName() {
+ return getName();
+ }
+
+ @Override
+ public boolean isTeamUsesVersions() throws OseeCoreException {
+ return getTeamDefinitionHoldingVersions() != null;
+ }
+
+ @Override
+ public IAtsVersion getNextReleaseVersion() {
+ IAtsVersion result = null;
+ for (IAtsVersion version : getVersions()) {
+ if (version.isNextVersion()) {
+ result = version;
+ break;
+ }
+ }
+ return result;
+ }
+
+ @Override
+ public IAtsTeamDefinition getTeamDefinitionHoldingVersions() throws OseeCoreException {
+ IAtsTeamDefinition teamDef = null;
+ if (getVersions().size() > 0) {
+ teamDef = this;
+ } else {
+ IAtsTeamDefinition parentTda = getParentTeamDef();
+ if (parentTda != null) {
+ teamDef = parentTda.getTeamDefinitionHoldingVersions();
+ }
+ }
+ return teamDef;
+ }
+
+ @Override
+ public IAtsVersion getVersion(String name) {
+ IAtsVersion result = null;
+ for (IAtsVersion version : getVersions()) {
+ if (version.getName().equals(name)) {
+ result = version;
+ break;
+ }
+ }
+ return result;
+ }
+
+ @Override
+ public Collection<IAtsVersion> getVersions() {
+ Set<IAtsVersion> results = new HashSet<>();
+ try {
+ for (ArtifactId verArt : services.getRelationResolver().getRelated(artifact,
+ AtsRelationTypes.TeamDefinitionToVersion_Version)) {
+ IAtsVersion version = services.getConfigItemFactory().getVersion(verArt);
+ results.add(version);
+ }
+ } catch (OseeCoreException ex) {
+ getLogger().error(ex, "Error getting versions");
+ }
+ return results;
+ }
+
+ @Override
+ public Collection<IAtsVersion> getVersions(VersionReleaseType releaseType, VersionLockedType lockedType) {
+ return org.eclipse.osee.framework.jdk.core.util.Collections.setIntersection(getVersionsReleased(releaseType),
+ getVersionsLocked(lockedType));
+ }
+
+ @Override
+ public Collection<IAtsVersion> getVersionsFromTeamDefHoldingVersions(VersionReleaseType releaseType, VersionLockedType lockedType) throws OseeCoreException {
+ IAtsTeamDefinition teamDef = getTeamDefinitionHoldingVersions();
+ if (teamDef == null) {
+ return new ArrayList<IAtsVersion>();
+ }
+ return teamDef.getVersions(releaseType, lockedType);
+ }
+
+ @Override
+ public Collection<IAtsVersion> getVersionsLocked(VersionLockedType lockType) {
+ ArrayList<IAtsVersion> versions = new ArrayList<>();
+ for (IAtsVersion version : getVersions()) {
+ if (version.isVersionLocked() && (lockType == VersionLockedType.Locked || lockType == VersionLockedType.Both)) {
+ versions.add(version);
+ } else if (!version.isVersionLocked() && lockType == VersionLockedType.UnLocked || lockType == VersionLockedType.Both) {
+ versions.add(version);
+ }
+ }
+ return versions;
+ }
+
+ @Override
+ public Collection<IAtsVersion> getVersionsReleased(VersionReleaseType releaseType) {
+ ArrayList<IAtsVersion> versions = new ArrayList<>();
+ for (IAtsVersion version : getVersions()) {
+ if (version.isReleased() && (releaseType == VersionReleaseType.Released || releaseType == VersionReleaseType.Both)) {
+ versions.add(version);
+ } else if (!version.isReleased() && releaseType == VersionReleaseType.UnReleased || releaseType == VersionReleaseType.Both) {
+ versions.add(version);
+ }
+ }
+ return versions;
+ }
+
+ @Override
+ public String getWorkflowDefinition() {
+ return getAttributeValue(AtsAttributeTypes.WorkflowDefinition, "");
+ }
+
+ @Override
+ public String getRelatedTaskWorkDefinition() {
+ return getAttributeValue(AtsAttributeTypes.RelatedTaskWorkDefinition, "");
+ }
+
+ @Override
+ public String getRelatedPeerWorkDefinition() {
+ return getAttributeValue(AtsAttributeTypes.RelatedPeerWorkflowDefinition, "");
+ }
+
+ @Override
+ public Collection<String> getRules() {
+ Collection<String> rules = new ArrayList<>();
+ try {
+ rules = services.getAttributeResolver().getAttributeValues(artifact, AtsAttributeTypes.RuleDefinition);
+ } catch (OseeCoreException ex) {
+ getLogger().error(ex, "Error getting rules");
+ }
+ return rules;
+ }
+
+ @Override
+ public boolean hasRule(String rule) {
+ boolean result = false;
+ for (String rule2 : getRules()) {
+ if (rule.equals(rule2)) {
+ result = true;
+ break;
+ }
+ }
+ return result;
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/users/AbstractAtsUserService.java b/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/users/AbstractAtsUserService.java
index 9d2d07c127d..b7d0f3c2f8d 100644
--- a/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/users/AbstractAtsUserService.java
+++ b/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/users/AbstractAtsUserService.java
@@ -135,10 +135,6 @@ public abstract class AbstractAtsUserService implements IAtsUserService {
return getUserById(userToken.getUserId());
}
- public void releaseUser(IAtsUser newUser) {
- currentUser = null;
- }
-
@Override
public abstract String getCurrentUserId();
diff --git a/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/config/AtsConfigEndpointImpl.java b/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/config/AtsConfigEndpointImpl.java
index 544fe772905..0583957f888 100644
--- a/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/config/AtsConfigEndpointImpl.java
+++ b/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/config/AtsConfigEndpointImpl.java
@@ -10,15 +10,13 @@
*******************************************************************************/
package org.eclipse.osee.ats.rest.internal.config;
-import com.google.common.base.Supplier;
-import com.google.common.base.Suppliers;
+import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Callable;
-import java.util.concurrent.TimeUnit;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
@@ -31,15 +29,20 @@ import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import javax.ws.rs.core.UriInfo;
import org.eclipse.nebula.widgets.xviewer.core.model.SortDataType;
+import org.eclipse.osee.ats.api.IAtsServices;
import org.eclipse.osee.ats.api.config.AtsAttributeValueColumn;
import org.eclipse.osee.ats.api.config.AtsConfigEndpointApi;
import org.eclipse.osee.ats.api.config.AtsConfiguration;
import org.eclipse.osee.ats.api.config.AtsConfigurations;
import org.eclipse.osee.ats.api.config.AtsViews;
import org.eclipse.osee.ats.api.config.ColumnAlign;
+import org.eclipse.osee.ats.api.config.JaxActionableItem;
+import org.eclipse.osee.ats.api.config.JaxTeamDefinition;
+import org.eclipse.osee.ats.api.config.JaxVersion;
import org.eclipse.osee.ats.api.data.AtsArtifactToken;
import org.eclipse.osee.ats.api.data.AtsArtifactTypes;
import org.eclipse.osee.ats.api.data.AtsAttributeTypes;
+import org.eclipse.osee.ats.api.data.AtsRelationTypes;
import org.eclipse.osee.ats.api.user.IAtsUser;
import org.eclipse.osee.ats.api.user.JaxAtsUser;
import org.eclipse.osee.ats.api.workdef.JaxAtsWorkDef;
@@ -72,80 +75,208 @@ import org.eclipse.osee.orcs.transaction.TransactionBuilder;
public final class AtsConfigEndpointImpl implements AtsConfigEndpointApi {
private final OrcsApi orcsApi;
- private final IAtsServer atsServer;
+ private final IAtsServices services;
private final Log logger;
+ private AtsConfigurations atsConfigurations;
- public AtsConfigEndpointImpl(IAtsServer atsServer, OrcsApi orcsApi, Log logger) {
- this.atsServer = atsServer;
+ public AtsConfigEndpointImpl(IAtsServices services, OrcsApi orcsApi, Log logger) {
+ this.services = services;
this.orcsApi = orcsApi;
this.logger = logger;
+ startAtsConfigurationsReloader();
}
- private final Supplier<AtsConfigurations> configurationsCache =
- Suppliers.memoizeWithExpiration(getConfigurationsSupplier(), 5, TimeUnit.MINUTES);
-
- private Supplier<AtsConfigurations> getConfigurationsSupplier() {
- return new Supplier<AtsConfigurations>() {
+ private void startAtsConfigurationsReloader() {
+ Thread thread = new Thread("ATS Configuration Re-Loader") {
@Override
- public AtsConfigurations get() {
- ResultSet<ArtifactReadable> artifacts =
- orcsApi.getQueryFactory().fromBranch(CoreBranches.COMMON).andTypeEquals(
- AtsArtifactTypes.Configuration).getResults();
- // load ats branch configurations
- AtsConfigurations configs = new AtsConfigurations();
- for (ArtifactReadable art : artifacts) {
- AtsConfiguration config = new AtsConfiguration();
- configs.getConfigs().add(config);
- config.setName(art.getName());
- config.setUuid(art.getId());
- config.setBranchUuid(
- Long.valueOf(art.getSoleAttributeValue(AtsAttributeTypes.AtsConfiguredBranch, "0L")));
- config.setIsDefault(art.getSoleAttributeValue(AtsAttributeTypes.Default, false));
- }
- UpdateAtsConfiguration update = new UpdateAtsConfiguration(atsServer);
- AtsViews views = update.getConfigViews();
- // load views
- configs.setViews(views);
- // load color column config
- configs.setColorColumns(update.getColorColumns());
- // load valid state names
- configs.setValidStateNames(update.getValidStateNames());
- // load users
- for (IAtsUser user : atsServer.getUserService().getUsers()) {
- configs.getUsers().add((JaxAtsUser) user);
- }
- // load admins
- ArtifactReadable atsAdminArt = orcsApi.getQueryFactory().fromBranch(atsServer.getAtsBranch()).andIds(
- AtsArtifactToken.AtsAdmin).getResults().getAtMostOneOrNull();
- if (atsAdminArt != null) {
- for (ArtifactReadable member : atsAdminArt.getRelated(CoreRelationTypes.Users_User)) {
- configs.getAtsAdmins().add(member.getId());
- }
- }
- // load ats config object ids
- for (ArtifactId configArtId : orcsApi.getQueryFactory().fromBranch(atsServer.getAtsBranch()).andIsOfType(
- AtsArtifactTypes.TeamDefinition, AtsArtifactTypes.Version,
- AtsArtifactTypes.ActionableItem).getResultsAsLocalIds()) {
- configs.getAtsConfigIds().add(configArtId.getId());
+ public void run() {
+ AtsConfigurations configs = getAtsConfigurationsFromDb();
+ atsConfigurations = configs;
+ }
+ };
+ thread.start();
+ }
+
+ private AtsConfigurations getAtsConfigurationsFromDb() {
+ ResultSet<ArtifactReadable> artifacts = orcsApi.getQueryFactory().fromBranch(CoreBranches.COMMON).andTypeEquals(
+ AtsArtifactTypes.Configuration).getResults();
+ // load ats branch configurations
+ AtsConfigurations configs = new AtsConfigurations();
+ for (ArtifactReadable art : artifacts) {
+ AtsConfiguration config = new AtsConfiguration();
+ configs.getConfigs().add(config);
+ config.setName(art.getName());
+ config.setUuid(art.getId());
+ config.setBranchUuid(Long.valueOf(art.getSoleAttributeValue(AtsAttributeTypes.AtsConfiguredBranch, "0L")));
+ config.setIsDefault(art.getSoleAttributeValue(AtsAttributeTypes.Default, false));
+ }
+ UpdateAtsConfiguration update = new UpdateAtsConfiguration((IAtsServer) services);
+ AtsViews views = update.getConfigViews();
+ // load views
+ configs.setViews(views);
+ // load color column config
+ configs.setColorColumns(update.getColorColumns());
+ // load valid state names
+ configs.setValidStateNames(update.getValidStateNames());
+ // load users
+ for (IAtsUser user : services.getUserService().getUsersFromDb()) {
+ configs.getUsers().add((JaxAtsUser) user);
+ }
+ // load admins
+ ArtifactReadable atsAdminArt = orcsApi.getQueryFactory().fromBranch(services.getAtsBranch()).andIds(
+ AtsArtifactToken.AtsAdmin).getResults().getAtMostOneOrNull();
+ if (atsAdminArt != null) {
+ for (ArtifactReadable member : atsAdminArt.getRelated(CoreRelationTypes.Users_User)) {
+ configs.getAtsAdmins().add(member.getId());
+ }
+ }
+
+ Map<Long, ArtifactReadable> idToArtifact = new HashMap<>();
+
+ @SuppressWarnings("unused")
+ List<ArtifactReadable> configArts =
+ orcsApi.getQueryFactory().fromBranch(services.getAtsBranch()).andIsOfType(AtsArtifactTypes.TeamDefinition,
+ AtsArtifactTypes.Version, AtsArtifactTypes.ActionableItem).getResults().getList();
+
+ // load ats config objects
+ for (ArtifactReadable configArtId : orcsApi.getQueryFactory().fromBranch(services.getAtsBranch()).andIsOfType(
+ AtsArtifactTypes.TeamDefinition, AtsArtifactTypes.Version, AtsArtifactTypes.ActionableItem).getResults()) {
+ if (services.getStoreService().isOfType(configArtId, AtsArtifactTypes.TeamDefinition)) {
+ JaxTeamDefinition teamDef = createJaxTeamDefinition(configArtId);
+ configs.getIdToTeamDef().put(teamDef.getUuid(), teamDef);
+ } else if (services.getStoreService().isOfType(configArtId, AtsArtifactTypes.ActionableItem)) {
+ JaxActionableItem ai = createJaxActionableItem(configArtId);
+ configs.getIdToAi().put(ai.getUuid(), ai);
+ } else if (services.getStoreService().isOfType(configArtId, AtsArtifactTypes.Version)) {
+ JaxVersion version = createJaxVersion(configArtId);
+ configs.getIdToVersion().put(version.getUuid(), version);
+ }
+ idToArtifact.put(configArtId.getId(), configArtId);
+ }
+
+ // load team def tree
+ JaxTeamDefinition topJaxTeamDef =
+ addTeamDefinitionChildrenWIthRecurse(AtsArtifactToken.TopTeamDefinition.getId(), idToArtifact, configs);
+ configs.setTopTeamDefinition(topJaxTeamDef.getUuid());
+
+ // load actionable items tree
+ JaxActionableItem topJaxAi =
+ addActionableItemChildrenWIthRecurse(AtsArtifactToken.TopActionableItem.getId(), idToArtifact, configs);
+ configs.setTopActionableItem(topJaxAi.getUuid());
+
+ // load work definitions
+ for (ArtifactToken workDefArt : orcsApi.getQueryFactory().fromBranch(services.getAtsBranch()).andIsOfType(
+ AtsArtifactTypes.WorkDefinition).getResults()) {
+ String workDefStr =
+ services.getAttributeResolver().getSoleAttributeValueAsString(workDefArt, AtsAttributeTypes.DslSheet, "");
+ configs.getWorkDefIdToWorkDef().put(workDefArt.getName(), workDefStr);
+ }
+ return configs;
+ }
+
+ private JaxActionableItem addActionableItemChildrenWIthRecurse(Long aiId, Map<Long, ArtifactReadable> idToArtifact, AtsConfigurations configs) {
+ ArtifactReadable aiArt = idToArtifact.get(aiId);
+ if (aiArt != null && aiArt.isOfType(AtsArtifactTypes.ActionableItem)) {
+ JaxActionableItem jaxAi = configs.getIdToAi().get(aiId);
+ for (Long childId : aiArt.getChildrentIds()) {
+ JaxActionableItem child = addActionableItemChildrenWIthRecurse(childId, idToArtifact, configs);
+ if (child != null) {
+ child.setParentId(aiId);
+ jaxAi.getChildren().add(child.getUuid());
}
- // load work definitions
- for (ArtifactToken workDefArt : orcsApi.getQueryFactory().fromBranch(atsServer.getAtsBranch()).andIsOfType(
- AtsArtifactTypes.WorkDefinition).getResults()) {
- String workDefStr = atsServer.getAttributeResolver().getSoleAttributeValueAsString(workDefArt,
- AtsAttributeTypes.DslSheet, "");
- configs.getWorkDefIdToWorkDef().put(workDefArt.getName(), workDefStr);
+ }
+ return jaxAi;
+ }
+ return null;
+ }
+
+ private JaxTeamDefinition addTeamDefinitionChildrenWIthRecurse(Long teamDefId, Map<Long, ArtifactReadable> idToArtifact, AtsConfigurations configs) {
+ ArtifactReadable teamDef = idToArtifact.get(teamDefId);
+ if (teamDef != null && teamDef.isOfType(AtsArtifactTypes.TeamDefinition)) {
+ // System.err.println(teamDef.toStringWithId());
+ JaxTeamDefinition jaxTeamDef = configs.getIdToTeamDef().get(teamDefId);
+ for (Long childId : teamDef.getChildrentIds()) {
+ JaxTeamDefinition child = addTeamDefinitionChildrenWIthRecurse(childId, idToArtifact, configs);
+ if (child != null) {
+ child.setParentId(teamDefId);
+ jaxTeamDef.getChildren().add(child.getUuid());
}
- return configs;
}
+ // add team to version ids
+ Collection<Long> relatedVersions =
+ services.getRelationResolver().getRelatedIds(teamDef, AtsRelationTypes.TeamDefinitionToVersion_Version);
+ jaxTeamDef.getVersions().addAll(relatedVersions);
+ for (Long verId : relatedVersions) {
+ JaxVersion version = configs.getIdToVersion().get(verId);
+ version.setTeamDefId(teamDefId);
+ }
+ // add team to ai ids
+ Collection<Long> relatedAis =
+ services.getRelationResolver().getRelatedIds(teamDef, AtsRelationTypes.TeamActionableItem_ActionableItem);
+ jaxTeamDef.getAis().addAll(relatedAis);
+ for (Long aiId : relatedAis) {
+ JaxActionableItem jai = configs.getIdToAi().get(aiId);
+ jai.setTeamDefId(teamDefId);
+ }
+ return jaxTeamDef;
+ }
+ return null;
+ }
- };
+ private JaxVersion createJaxVersion(ArtifactReadable verArt) {
+ JaxVersion jaxVersion = new JaxVersion();
+ jaxVersion.setName(verArt.getName());
+ jaxVersion.setUuid(verArt.getId());
+ jaxVersion.setActive(verArt.getSoleAttributeValue(AtsAttributeTypes.Active, true));
+ return jaxVersion;
+ }
+
+ private JaxActionableItem createJaxActionableItem(ArtifactReadable artifact) {
+ JaxActionableItem jaxAi = new JaxActionableItem();
+ jaxAi.setName(artifact.getName());
+ jaxAi.setUuid(artifact.getId());
+ jaxAi.setDescription(artifact.getSoleAttributeValue(AtsAttributeTypes.Description, ""));
+ jaxAi.setActive(artifact.getSoleAttributeValue(AtsAttributeTypes.Active, true));
+ return jaxAi;
+ }
+
+ private JaxTeamDefinition createJaxTeamDefinition(ArtifactReadable child) {
+ JaxTeamDefinition jaxChild = new JaxTeamDefinition();
+ jaxChild.setName(child.getName());
+ jaxChild.setUuid(child.getId());
+ jaxChild.setActive(child.getSoleAttributeValue(AtsAttributeTypes.Active, true));
+ for (ArtifactToken ai : services.getRelationResolver().getRelated(child,
+ AtsRelationTypes.TeamActionableItem_ActionableItem)) {
+ jaxChild.getAis().add(ai.getId());
+ }
+ return jaxChild;
+ }
+
+ @Override
+ @GET
+ @Path("clearcache")
+ @Produces(MediaType.APPLICATION_JSON)
+ public AtsConfigurations clearCaches() {
+ atsConfigurations = null;
+ return get();
}
@GET
@Produces(MediaType.APPLICATION_JSON)
@Override
public AtsConfigurations get() {
- return configurationsCache.get();
+ if (atsConfigurations == null) {
+ atsConfigurations = getAtsConfigurationsFromDb();
+ }
+ return atsConfigurations;
+ }
+
+ @GET
+ @Path("fromdb")
+ @Produces(MediaType.APPLICATION_JSON)
+ @Override
+ public AtsConfigurations getFromDb() {
+ return getAtsConfigurationsFromDb();
}
@GET
@@ -168,7 +299,7 @@ public final class AtsConfigEndpointImpl implements AtsConfigEndpointApi {
Conditions.checkNotNullOrEmpty(newBranchName, "newBranchName");
String userId = form.getFirst("userId");
Conditions.checkNotNullOrEmpty(userId, "UserId");
- ArtifactId user = atsServer.getUserService().getUserById(userId).getStoreObject();
+ ArtifactId user = services.getUserService().getUserById(userId).getStoreObject();
if (user == null) {
logger.error("User by id [%s] does not exist", userId);
}
@@ -256,7 +387,7 @@ public final class AtsConfigEndpointImpl implements AtsConfigEndpointApi {
config.setUuid(((ArtifactReadable) configArt).getId());
tx.createAttribute(configArt, AtsAttributeTypes.AtsConfiguredBranch, String.valueOf(newBranchUuid));
XResultData rd = new XResultData();
- UpdateAtsConfiguration update = new UpdateAtsConfiguration(atsServer);
+ UpdateAtsConfiguration update = new UpdateAtsConfiguration((IAtsServer) services);
// Get or create Configs folder
ArtifactId configsFolderArt = update.getOrCreateConfigsFolder(userArt, rd);
@@ -273,7 +404,7 @@ public final class AtsConfigEndpointImpl implements AtsConfigEndpointApi {
@Override
public Response createUpdateConfig() {
XResultData resultData = new XResultData(false);
- UpdateAtsConfiguration update = new UpdateAtsConfiguration(atsServer);
+ UpdateAtsConfiguration update = new UpdateAtsConfiguration((IAtsServer) services);
update.createUpdateConfig(resultData);
if (resultData.isEmpty()) {
resultData.log("Nothing to update");
@@ -286,25 +417,27 @@ public final class AtsConfigEndpointImpl implements AtsConfigEndpointApi {
@Override
public Response storeWorkDef(JaxAtsWorkDef jaxWorkDef) {
TransactionBuilder tx = orcsApi.getTransactionFactory().createTransaction(CoreBranches.COMMON,
- atsServer.getArtifact(AtsCoreUsers.SYSTEM_USER), "Store Work Definition " + jaxWorkDef.getName());
- ArtifactReadable workDefArt = orcsApi.getQueryFactory().fromBranch(atsServer.getAtsBranch()).andIsOfType(
+ services.getArtifact(AtsCoreUsers.SYSTEM_USER), "Store Work Definition " + jaxWorkDef.getName());
+ ArtifactReadable workDefArt = orcsApi.getQueryFactory().fromBranch(services.getAtsBranch()).andIsOfType(
AtsArtifactTypes.WorkDefinition).andNameEquals(jaxWorkDef.getName()).getResults().getAtMostOneOrNull();
if (workDefArt == null) {
workDefArt = (ArtifactReadable) tx.createArtifact(AtsArtifactTypes.WorkDefinition, jaxWorkDef.getName());
}
tx.setSoleAttributeValue(workDefArt, AtsAttributeTypes.DslSheet, jaxWorkDef.getWorkDefDsl());
if (workDefArt.getParent() == null) {
- ArtifactReadable workDefFolder = atsServer.getArtifact(AtsArtifactToken.WorkDefinitionsFolder);
+ ArtifactReadable workDefFolder =
+ (ArtifactReadable) services.getArtifact(AtsArtifactToken.WorkDefinitionsFolder);
tx.addChildren(workDefFolder, workDefArt);
}
tx.commit();
- atsServer.getWorkDefAdmin().clearCaches();
+ ((IAtsServer) services).getWorkDefAdmin().clearCaches();
return Response.ok().build();
}
@Override
public List<AtsAttributeValueColumn> generateAttrTypeViews() throws Exception {
Map<String, AttributeTypeToken> idToToken = new HashMap<>();
+ IAtsServer atsServer = (IAtsServer) services;
for (AttributeTypeToken attrType : atsServer.getOrcsApi().getOrcsTypes().getAttributeTypes().getAll()) {
idToToken.put(attrType.getName(), attrType);
}
diff --git a/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/config/AtsUserServiceServerImpl.java b/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/config/AtsUserServiceServerImpl.java
index 0f74fdeed44..ce54b0e7efb 100644
--- a/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/config/AtsUserServiceServerImpl.java
+++ b/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/config/AtsUserServiceServerImpl.java
@@ -10,6 +10,8 @@
*******************************************************************************/
package org.eclipse.osee.ats.rest.internal.config;
+import com.google.common.base.Supplier;
+import com.google.common.base.Suppliers;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
@@ -25,8 +27,6 @@ import org.eclipse.osee.framework.core.enums.CoreRelationTypes;
import org.eclipse.osee.framework.core.enums.SystemUser;
import org.eclipse.osee.orcs.OrcsApi;
import org.eclipse.osee.orcs.data.ArtifactReadable;
-import com.google.common.base.Supplier;
-import com.google.common.base.Suppliers;
/**
* @author Donald G. Dunne
@@ -54,7 +54,7 @@ public class AtsUserServiceServerImpl extends AbstractAtsUserService {
return atsAdminArt.areRelated(CoreRelationTypes.User_Grouping__Members, (ArtifactReadable) user.getStoreObject());
}
- private final Supplier<List<IAtsUser>> usersCache =
+ private Supplier<List<IAtsUser>> usersCache =
Suppliers.memoizeWithExpiration(getConfigurationsSupplier(), 5, TimeUnit.MINUTES);
private Supplier<List<IAtsUser>> getConfigurationsSupplier() {
@@ -62,10 +62,7 @@ public class AtsUserServiceServerImpl extends AbstractAtsUserService {
@Override
public List<IAtsUser> get() {
List<IAtsUser> users = new ArrayList<>();
- for (ArtifactId art : orcsApi.getQueryFactory().fromBranch(CoreBranches.COMMON).andIsOfType(
- CoreArtifactTypes.User).getResults()) {
- ArtifactReadable userArt = (ArtifactReadable) art;
- JaxAtsUser atsUser = createFromArtifact(userArt);
+ for (IAtsUser atsUser : getUsersFromDb()) {
userIdToAtsUser.put(atsUser.getUserId(), atsUser);
nameToAtsUser.put(atsUser.getName(), atsUser);
users.add(atsUser);
@@ -79,8 +76,8 @@ public class AtsUserServiceServerImpl extends AbstractAtsUserService {
JaxAtsUser atsUser = new JaxAtsUser();
atsUser.setName(userArt.getName());
atsUser.setStoreObject(userArt);
- atsUser.setUserId(userArt.getSoleAttributeValue(CoreAttributeTypes.UserId, ""));
- atsUser.setEmail(userArt.getSoleAttributeValue(CoreAttributeTypes.Email, ""));
+ atsUser.setUserId(userArt.getSoleAttributeAsString(CoreAttributeTypes.UserId, ""));
+ atsUser.setEmail(userArt.getSoleAttributeAsString(CoreAttributeTypes.Email, ""));
atsUser.setActive(userArt.getSoleAttributeValue(CoreAttributeTypes.Active, true));
atsUser.setUuid(userArt.getId());
return atsUser;
@@ -92,6 +89,24 @@ public class AtsUserServiceServerImpl extends AbstractAtsUserService {
}
@Override
+ public List<IAtsUser> getUsersFromDb() {
+ List<IAtsUser> users = new ArrayList<>();
+ for (ArtifactId art : orcsApi.getQueryFactory().fromBranch(CoreBranches.COMMON).andIsOfType(
+ CoreArtifactTypes.User).getResults()) {
+ ArtifactReadable userArt = (ArtifactReadable) art;
+ JaxAtsUser atsUser = createFromArtifact(userArt);
+ users.add(atsUser);
+ }
+ return users;
+ }
+
+ @Override
+ public void reloadCache() {
+ usersCache = Suppliers.memoizeWithExpiration(getConfigurationsSupplier(), 5, TimeUnit.MINUTES);
+ super.reloadCache();
+ }
+
+ @Override
protected IAtsUser loadUserFromDbByUserId(String userId) {
ArtifactReadable userArt =
orcsApi.getQueryFactory().fromBranch(CoreBranches.COMMON).andIsOfType(CoreArtifactTypes.User).and(
diff --git a/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/config/UpdateAtsConfiguration.java b/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/config/UpdateAtsConfiguration.java
index a2c9c902ea1..f8bd98df531 100644
--- a/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/config/UpdateAtsConfiguration.java
+++ b/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/config/UpdateAtsConfiguration.java
@@ -101,10 +101,8 @@ public class UpdateAtsConfiguration {
private void createUpdateConfigAttributes(ArtifactReadable configArt, ArtifactReadable userArt, XResultData rd) throws OseeCoreException {
try {
- int x = 1;
AtsViews databaseViews = getConfigViews();
for (String viewsJson : getViewsJsonStrings()) {
- String comment = "Create Update Config Attributes - " + x++;
AtsViews atsViews = gson.fromJson(viewsJson, AtsViews.class);
// merge any new default view items to current database view items
List<AtsAttributeValueColumn> toAdd = new LinkedList<>();
diff --git a/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/util/AtsRelationResolverServiceImpl.java b/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/util/AtsRelationResolverServiceImpl.java
index c88cb571769..225f5a16660 100644
--- a/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/util/AtsRelationResolverServiceImpl.java
+++ b/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/util/AtsRelationResolverServiceImpl.java
@@ -201,4 +201,13 @@ public class AtsRelationResolverServiceImpl extends AbstractRelationResolverServ
return art.getRelatedCount(relationTypeSide);
}
+ @Override
+ public Collection<Long> getRelatedIds(ArtifactId artifact, RelationTypeSide relationTypeSide) {
+ List<Long> related = new LinkedList<>();
+ ArtifactReadable art = getArtifact(artifact);
+ for (ArtifactReadable rel : art.getRelated(relationTypeSide)) {
+ related.add(rel.getId());
+ }
+ return related;
+ }
}
diff --git a/plugins/org.eclipse.osee.ats/META-INF/MANIFEST.MF b/plugins/org.eclipse.osee.ats/META-INF/MANIFEST.MF
index 92ec16941cf..6b6166efc32 100644
--- a/plugins/org.eclipse.osee.ats/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.osee.ats/META-INF/MANIFEST.MF
@@ -226,6 +226,7 @@ Import-Package: com.google.common.cache,
org.eclipse.osee.framework.ui.ws,
org.eclipse.osee.jaxrs.client,
org.eclipse.osee.jdbc,
+ org.eclipse.osee.logger,
org.eclipse.osee.orcs.rest.client,
org.eclipse.osee.orcs.rest.model,
org.eclipse.osee.orcs.rest.model.search.artifact,
diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/wizard/NewActionPage1.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/wizard/NewActionPage1.java
index cdb573a3851..a60f67afc33 100644
--- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/wizard/NewActionPage1.java
+++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/wizard/NewActionPage1.java
@@ -14,6 +14,7 @@ package org.eclipse.osee.ats.actions.wizard;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
+import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import java.util.logging.Level;
@@ -23,9 +24,12 @@ import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.osee.ats.api.ai.IAtsActionableItem;
+import org.eclipse.osee.ats.api.config.JaxActionableItem;
import org.eclipse.osee.ats.api.data.AtsArtifactToken;
import org.eclipse.osee.ats.api.data.AtsAttributeTypes;
import org.eclipse.osee.ats.api.team.IAtsTeamDefinition;
+import org.eclipse.osee.ats.core.client.IAtsClient;
+import org.eclipse.osee.ats.core.config.ActionableItem2;
import org.eclipse.osee.ats.core.config.ActionableItems;
import org.eclipse.osee.ats.core.config.TeamDefinitions;
import org.eclipse.osee.ats.help.ui.AtsHelpContext;
@@ -149,9 +153,16 @@ public class NewActionPage1 extends WizardPage {
treeViewer.getViewer().setLabelProvider(new AtsObjectLabelProvider());
try {
if (selectableAis == null) {
- List<IAtsActionableItem> topLevelActionableItems =
- ActionableItems.getTopLevelActionableItems(Active.Active, AtsClientService.get());
- treeViewer.getViewer().setInput(topLevelActionableItems);
+ List<IAtsActionableItem> activeActionableItemTree = new LinkedList<>();
+ IAtsClient atsClient = AtsClientService.get();
+ for (Long aiId : atsClient.getConfigurations().getIdToAi().get(
+ atsClient.getConfigurations().getTopActionableItem()).getChildren()) {
+ JaxActionableItem jai = atsClient.getConfigurations().getIdToAi().get(aiId);
+ if (jai.isActive()) {
+ activeActionableItemTree.add(new ActionableItem2(atsClient.getLogger(), atsClient, jai));
+ }
+ }
+ treeViewer.getViewer().setInput(activeActionableItemTree);
} else {
treeViewer.getViewer().setInput(selectableAis);
}
@@ -218,8 +229,14 @@ public class NewActionPage1 extends WizardPage {
if (checked.isEmpty()) {
descriptionLabel.setText("");
} else {
- IAtsActionableItem aia = (IAtsActionableItem) checked.iterator().next();
- descriptionLabel.setText(aia.getDescription());
+ Object obj = checked.iterator().next();
+ if (obj instanceof IAtsActionableItem) {
+ IAtsActionableItem ai = (IAtsActionableItem) obj;
+ descriptionLabel.setText(ai.getDescription());
+ } else if (obj instanceof JaxActionableItem) {
+ JaxActionableItem jai = (JaxActionableItem) obj;
+ descriptionLabel.setText(jai.getDescription());
+ }
}
}
}
@@ -231,7 +248,12 @@ public class NewActionPage1 extends WizardPage {
public Set<IAtsActionableItem> getSelectedIAtsActionableItems() {
Set<IAtsActionableItem> selected = new HashSet<>();
for (Object obj : treeViewer.getChecked()) {
- selected.add((IAtsActionableItem) obj);
+ if (obj instanceof IAtsActionableItem) {
+ selected.add((IAtsActionableItem) obj);
+ } else if (obj instanceof JaxActionableItem) {
+ JaxActionableItem jai = (JaxActionableItem) obj;
+ selected.add(AtsClientService.get().getConfigItem(jai.getUuid()));
+ }
}
return selected;
}
diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/dialog/AITreeContentProvider.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/dialog/AITreeContentProvider.java
index 8815cf9fd07..24be92f799e 100644
--- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/dialog/AITreeContentProvider.java
+++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/dialog/AITreeContentProvider.java
@@ -20,9 +20,7 @@ import org.eclipse.osee.ats.api.ai.IAtsActionableItem;
import org.eclipse.osee.ats.core.config.ActionableItems;
import org.eclipse.osee.ats.internal.Activator;
import org.eclipse.osee.framework.core.enums.Active;
-import org.eclipse.osee.framework.core.enums.CoreRelationTypes;
import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
/**
* @author Donald G. Dunne
@@ -67,9 +65,6 @@ public class AITreeContentProvider implements ITreeContentProvider {
@Override
public boolean hasChildren(Object element) {
- if (element instanceof Artifact) {
- return ((Artifact) element).getRelatedArtifactsCount(CoreRelationTypes.Default_Hierarchical__Child) > 0;
- }
return getChildren(element).length > 0;
}
diff --git a/plugins/org.eclipse.osee.orcs.core/src/org/eclipse/osee/orcs/core/internal/proxy/impl/ArtifactReadOnlyImpl.java b/plugins/org.eclipse.osee.orcs.core/src/org/eclipse/osee/orcs/core/internal/proxy/impl/ArtifactReadOnlyImpl.java
index e8b5358375e..ddb862273b9 100644
--- a/plugins/org.eclipse.osee.orcs.core/src/org/eclipse/osee/orcs/core/internal/proxy/impl/ArtifactReadOnlyImpl.java
+++ b/plugins/org.eclipse.osee.orcs.core/src/org/eclipse/osee/orcs/core/internal/proxy/impl/ArtifactReadOnlyImpl.java
@@ -21,11 +21,11 @@ import org.eclipse.osee.framework.core.data.AttributeTypeId;
import org.eclipse.osee.framework.core.data.AttributeTypeToken;
import org.eclipse.osee.framework.core.data.BranchId;
import org.eclipse.osee.framework.core.data.IArtifactType;
-import org.eclipse.osee.framework.core.data.AttributeTypeId;
import org.eclipse.osee.framework.core.data.IRelationType;
import org.eclipse.osee.framework.core.data.RelationTypeId;
import org.eclipse.osee.framework.core.data.RelationTypeSide;
import org.eclipse.osee.framework.core.data.TransactionId;
+import org.eclipse.osee.framework.core.enums.CoreRelationTypes;
import org.eclipse.osee.framework.core.enums.DeletionFlag;
import org.eclipse.osee.framework.core.enums.ModificationType;
import org.eclipse.osee.framework.core.enums.RelationSide;
@@ -39,6 +39,7 @@ import org.eclipse.osee.orcs.OrcsSession;
import org.eclipse.osee.orcs.core.internal.artifact.Artifact;
import org.eclipse.osee.orcs.core.internal.attribute.Attribute;
import org.eclipse.osee.orcs.core.internal.proxy.ExternalArtifactManager;
+import org.eclipse.osee.orcs.core.internal.relation.Relation;
import org.eclipse.osee.orcs.core.internal.relation.RelationManager;
import org.eclipse.osee.orcs.core.internal.relation.RelationNode;
import org.eclipse.osee.orcs.data.ArtifactReadable;
@@ -326,4 +327,24 @@ public class ArtifactReadOnlyImpl extends AbstractProxied<Artifact> implements A
return getProxiedObject().getModificationType();
}
+ @Override
+ public Collection<Long> getChildrentIds() {
+ return getRelatedIds(CoreRelationTypes.Default_Hierarchical__Child);
+ }
+
+ @Override
+ public Collection<Long> getRelatedIds(RelationTypeSide relationTypeSide) {
+ List<Long> childIds = new ArrayList<>();
+ for (Relation relation : getRelationManager().getRelations(getSession(), getProxiedObject(),
+ DeletionFlag.EXCLUDE_DELETED)) {
+ boolean relIsSideA = relationTypeSide.getSide().isSideA();
+ boolean thisOnCorrectSide =
+ (relIsSideA && relation.getArtIdB() == getId().intValue()) || (!relIsSideA && relation.getArtIdA() == getId().intValue());
+ if (thisOnCorrectSide && relation.getRelationType().matches(relationTypeSide)) {
+ childIds.add(Long.valueOf(relation.getArtIdB()));
+ }
+ }
+ return childIds;
+ }
+
}
diff --git a/plugins/org.eclipse.osee.orcs/src/org/eclipse/osee/orcs/data/ArtifactReadable.java b/plugins/org.eclipse.osee.orcs/src/org/eclipse/osee/orcs/data/ArtifactReadable.java
index 8b41cf29d2d..e4c6e991b2e 100644
--- a/plugins/org.eclipse.osee.orcs/src/org/eclipse/osee/orcs/data/ArtifactReadable.java
+++ b/plugins/org.eclipse.osee.orcs/src/org/eclipse/osee/orcs/data/ArtifactReadable.java
@@ -102,4 +102,8 @@ public interface ArtifactReadable extends ArtifactToken, HasTransaction, OrcsRea
ResultSet<RelationReadable> getRelations(RelationTypeSide relationTypeSide);
+ Collection<Long> getChildrentIds();
+
+ Collection<Long> getRelatedIds(RelationTypeSide relationTypeSide);
+
}

Back to the top