diff options
Diffstat (limited to 'plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee')
9 files changed, 377 insertions, 121 deletions
diff --git a/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/AtsApplication.java b/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/AtsApplication.java index 4da90e73ede..d2f08f842ba 100644 --- a/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/AtsApplication.java +++ b/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/AtsApplication.java @@ -17,14 +17,16 @@ import javax.ws.rs.core.Application; import org.eclipse.osee.ats.impl.IAtsServer; import org.eclipse.osee.ats.impl.resource.AtsResourceTokens; import org.eclipse.osee.ats.rest.internal.build.report.resources.BuildTraceReportResource; +import org.eclipse.osee.ats.rest.internal.config.ActionableItemResource; +import org.eclipse.osee.ats.rest.internal.config.ProgramResource; +import org.eclipse.osee.ats.rest.internal.config.TeamResource; +import org.eclipse.osee.ats.rest.internal.config.VersionResource; import org.eclipse.osee.ats.rest.internal.cpa.CpaResource; import org.eclipse.osee.ats.rest.internal.cpa.CpaServiceRegistry; import org.eclipse.osee.ats.rest.internal.resources.ActionResource; import org.eclipse.osee.ats.rest.internal.resources.AtsUiResource; import org.eclipse.osee.ats.rest.internal.resources.ConvertResource; -import org.eclipse.osee.ats.rest.internal.resources.TeamResource; import org.eclipse.osee.ats.rest.internal.resources.UserResource; -import org.eclipse.osee.ats.rest.internal.resources.VersionResource; import org.eclipse.osee.framework.jdk.core.type.IResourceRegistry; import org.eclipse.osee.framework.jdk.core.type.ResourceRegistry; import org.eclipse.osee.logger.Log; @@ -66,11 +68,15 @@ public class AtsApplication extends Application { AtsRestTemplateTokens.register(registry); OseeTemplateTokens.register(registry); + // Config resources + singletons.add(new VersionResource(atsServer)); + singletons.add(new TeamResource(atsServer)); + singletons.add(new ProgramResource(atsServer)); + singletons.add(new ActionableItemResource(atsServer)); + singletons.add(new BuildTraceReportResource(logger, registry, orcsApi)); singletons.add(new ActionResource(atsServer, orcsApi, registry)); singletons.add(new ConvertResource(atsServer, registry)); - singletons.add(new TeamResource(atsServer)); - singletons.add(new VersionResource(atsServer)); singletons.add(new CpaResource(orcsApi, atsServer, cpaRegistry)); singletons.add(new UserResource(atsServer.getUserService())); diff --git a/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/config/ActionableItemResource.java b/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/config/ActionableItemResource.java new file mode 100644 index 00000000000..59dd29108d9 --- /dev/null +++ b/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/config/ActionableItemResource.java @@ -0,0 +1,28 @@ +/******************************************************************************* + * Copyright (c) 2014 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.rest.internal.config; + +import javax.ws.rs.Path; +import org.eclipse.osee.ats.api.data.AtsArtifactTypes; +import org.eclipse.osee.ats.impl.IAtsServer; +import org.eclipse.osee.ats.impl.config.AbstractConfigResource; + +/** + * Donald G. Dunne + */ +@Path("ai") +public class ActionableItemResource extends AbstractConfigResource { + + public ActionableItemResource(IAtsServer atsServer) { + super(AtsArtifactTypes.ActionableItem, atsServer); + } + +} diff --git a/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/config/ConfigJsonWriter.java b/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/config/ConfigJsonWriter.java new file mode 100644 index 00000000000..00069aa9cad --- /dev/null +++ b/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/config/ConfigJsonWriter.java @@ -0,0 +1,160 @@ +package org.eclipse.osee.ats.rest.internal.config; + +import java.io.IOException; +import java.io.OutputStream; +import java.lang.annotation.Annotation; +import java.lang.reflect.Type; +import java.util.Collection; +import java.util.List; +import javax.ws.rs.WebApplicationException; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.MultivaluedMap; +import javax.ws.rs.ext.MessageBodyWriter; +import javax.ws.rs.ext.Provider; +import org.codehaus.jackson.JsonFactory; +import org.codehaus.jackson.JsonGenerationException; +import org.codehaus.jackson.JsonGenerator; +import org.codehaus.jackson.JsonProcessingException; +import org.eclipse.osee.ats.api.IAtsConfigObject; +import org.eclipse.osee.ats.api.data.AtsRelationTypes; +import org.eclipse.osee.ats.api.program.IAtsProgram; +import org.eclipse.osee.ats.api.team.IAtsTeamDefinition; +import org.eclipse.osee.ats.api.version.IAtsVersion; +import org.eclipse.osee.ats.impl.IAtsServer; +import org.eclipse.osee.framework.core.data.IAttributeType; +import org.eclipse.osee.framework.jdk.core.type.ResultSet; +import org.eclipse.osee.jaxrs.mvc.IdentityView; +import org.eclipse.osee.orcs.data.ArtifactReadable; +import org.eclipse.osee.orcs.data.AttributeReadable; +import org.eclipse.osee.orcs.data.AttributeTypes; + +/** + * @author Donald G. Dunne + */ +@Provider +public class ConfigJsonWriter implements MessageBodyWriter<IAtsConfigObject> { + + private JsonFactory jsonFactory; + private IAtsServer atsServer; + + public void setAtsServer(IAtsServer atsServer) { + this.atsServer = atsServer; + } + + public void start() { + jsonFactory = new JsonFactory(); + } + + public void stop() { + jsonFactory = null; + } + + @Override + public long getSize(IAtsConfigObject data, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { + return -1; + } + + @Override + public boolean isWriteable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { + boolean assignableFrom = IAtsConfigObject.class.isAssignableFrom(type); + return assignableFrom && MediaType.APPLICATION_JSON_TYPE.equals(mediaType); + } + + private boolean matches(Class<? extends Annotation> toMatch, Annotation[] annotations) { + for (Annotation annotation : annotations) { + if (annotation.annotationType().isAssignableFrom(toMatch)) { + return true; + } + } + return false; + } + + private AttributeTypes getAttributeTypes() { + return atsServer.getOrcsApi().getOrcsTypes(null).getAttributeTypes(); + } + + @Override + public void writeTo(IAtsConfigObject config, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, Object> httpHeaders, OutputStream entityStream) throws IOException, WebApplicationException { + JsonGenerator writer = null; + try { + writer = jsonFactory.createJsonGenerator(entityStream); + writer.writeStartArray(); + addProgramObject(atsServer, config, annotations, writer, matches(IdentityView.class, annotations), + getAttributeTypes()); + writer.writeEndArray(); + } finally { + if (writer != null) { + writer.flush(); + } + } + } + + public static void addProgramObject(IAtsServer atsServer, IAtsConfigObject config, Annotation[] annotations, JsonGenerator writer, boolean identityView, AttributeTypes attributeTypes) throws IOException, JsonGenerationException, JsonProcessingException { + ArtifactReadable artifact = (ArtifactReadable) config.getStoreObject(); + writer.writeStartObject(); + writer.writeNumberField("uuid", getUuid(config)); + writer.writeStringField("Name", config.getName()); + writer.writeStringField("Description", config.getDescription()); + + if (config instanceof IAtsTeamDefinition) { + if (!identityView) { + writer.writeArrayFieldStart("version"); + for (ArtifactReadable verArt : artifact.getRelated(AtsRelationTypes.TeamDefinitionToVersion_Version)) { + IAtsVersion version = atsServer.getConfig().getSoleByGuid(verArt.getGuid(), IAtsVersion.class); + addProgramObject(atsServer, version, annotations, writer, true, attributeTypes); + } + writer.writeEndArray(); + } + } + if (config instanceof IAtsVersion) { + if (!identityView) { + writer.writeArrayFieldStart("workflow"); + for (ArtifactReadable workArt : artifact.getRelated(AtsRelationTypes.TeamWorkflowTargetedForVersion_Workflow)) { + addArtifactIdentity(writer, workArt); + } + writer.writeEndArray(); + } + } else if (config instanceof IAtsProgram) { + IAtsProgram program = (IAtsProgram) config; + writer.writeStringField("Namespace", program.getNamespace()); + writer.writeBooleanField("Active", program.isActive()); + } + if (!identityView) { + Collection<? extends IAttributeType> attrTypes = attributeTypes.getAll(); + ResultSet<? extends AttributeReadable<Object>> attributes = artifact.getAttributes(); + if (!attributes.isEmpty()) { + for (IAttributeType attrType : attrTypes) { + if (artifact.isAttributeTypeValid(attrType)) { + List<Object> attributeValues = artifact.getAttributeValues(attrType); + if (!attributeValues.isEmpty()) { + + if (attributeValues.size() > 1) { + writer.writeArrayFieldStart(attrType.getName()); + for (Object value : attributeValues) { + writer.writeObject(value); + } + writer.writeEndArray(); + } else if (attributeValues.size() == 1) { + Object value = attributeValues.iterator().next(); + writer.writeObjectField(attrType.getName(), value); + } + + } + } + } + } + } + writer.writeEndObject(); + } + + private static void addArtifactIdentity(JsonGenerator writer, ArtifactReadable workArt) throws IOException, JsonGenerationException, JsonProcessingException { + writer.writeStartObject(); + writer.writeNumberField("uuid", workArt.getLocalId()); + writer.writeStringField("Name", workArt.getName()); + writer.writeEndObject(); + } + + private static Long getUuid(IAtsConfigObject config) { + return ((ArtifactReadable) config.getStoreObject()).getLocalId().longValue(); + } +}
\ No newline at end of file diff --git a/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/config/ConfigsJsonWriter.java b/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/config/ConfigsJsonWriter.java new file mode 100644 index 00000000000..d19778a3cb6 --- /dev/null +++ b/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/config/ConfigsJsonWriter.java @@ -0,0 +1,95 @@ +package org.eclipse.osee.ats.rest.internal.config; + +import java.io.IOException; +import java.io.OutputStream; +import java.lang.annotation.Annotation; +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; +import java.util.Collection; +import javax.ws.rs.WebApplicationException; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.MultivaluedMap; +import javax.ws.rs.ext.MessageBodyWriter; +import javax.ws.rs.ext.Provider; +import org.codehaus.jackson.JsonFactory; +import org.codehaus.jackson.JsonGenerator; +import org.eclipse.osee.ats.api.IAtsConfigObject; +import org.eclipse.osee.ats.impl.IAtsServer; +import org.eclipse.osee.jaxrs.mvc.IdentityView; +import org.eclipse.osee.orcs.data.AttributeTypes; + +/** + * @author Donald G. Dunne + */ +@Provider +public class ConfigsJsonWriter implements MessageBodyWriter<Collection<IAtsConfigObject>> { + + private JsonFactory jsonFactory; + + private IAtsServer atsServer; + + public void setAtsServer(IAtsServer atsServer) { + this.atsServer = atsServer; + } + + public void start() { + jsonFactory = new JsonFactory(); + } + + public void stop() { + jsonFactory = null; + } + + @Override + public long getSize(Collection<IAtsConfigObject> data, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { + return -1; + } + + @Override + public boolean isWriteable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { + boolean isWriteable = false; + if (Collection.class.isAssignableFrom(type) && genericType instanceof ParameterizedType) { + ParameterizedType parameterizedType = (ParameterizedType) genericType; + Type[] actualTypeArgs = parameterizedType.getActualTypeArguments(); + if (actualTypeArgs.length == 1) { + Type t = actualTypeArgs[0]; + if (t instanceof Class) { + Class<?> clazz = (Class<?>) t; + isWriteable = IAtsConfigObject.class.isAssignableFrom(clazz); + } + } + } + return isWriteable; + } + + private boolean matches(Class<? extends Annotation> toMatch, Annotation[] annotations) { + for (Annotation annotation : annotations) { + if (annotation.annotationType().isAssignableFrom(toMatch)) { + return true; + } + } + return false; + } + + private AttributeTypes getAttributeTypes() { + return atsServer.getOrcsApi().getOrcsTypes(null).getAttributeTypes(); + } + + @Override + public void writeTo(Collection<IAtsConfigObject> programs, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, Object> httpHeaders, OutputStream entityStream) throws IOException, WebApplicationException { + JsonGenerator writer = null; + try { + writer = jsonFactory.createJsonGenerator(entityStream); + writer.writeStartArray(); + for (IAtsConfigObject program : programs) { + ConfigJsonWriter.addProgramObject(atsServer, program, annotations, writer, + matches(IdentityView.class, annotations), getAttributeTypes()); + } + writer.writeEndArray(); + } finally { + if (writer != null) { + writer.flush(); + } + } + } +}
\ No newline at end of file diff --git a/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/config/ProgramResource.java b/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/config/ProgramResource.java new file mode 100644 index 00000000000..f100e57fecd --- /dev/null +++ b/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/config/ProgramResource.java @@ -0,0 +1,28 @@ +/******************************************************************************* + * Copyright (c) 2014 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.rest.internal.config; + +import javax.ws.rs.Path; +import org.eclipse.osee.ats.api.data.AtsArtifactTypes; +import org.eclipse.osee.ats.impl.IAtsServer; +import org.eclipse.osee.ats.impl.config.AbstractConfigResource; + +/** + * Donald G. Dunne + */ +@Path("program") +public class ProgramResource extends AbstractConfigResource { + + public ProgramResource(IAtsServer atsServer) { + super(AtsArtifactTypes.Program, atsServer); + } + +} diff --git a/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/config/TeamResource.java b/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/config/TeamResource.java new file mode 100644 index 00000000000..1599c7b7687 --- /dev/null +++ b/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/config/TeamResource.java @@ -0,0 +1,28 @@ +/******************************************************************************* + * Copyright (c) 2014 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.rest.internal.config; + +import javax.ws.rs.Path; +import org.eclipse.osee.ats.api.data.AtsArtifactTypes; +import org.eclipse.osee.ats.impl.IAtsServer; +import org.eclipse.osee.ats.impl.config.AbstractConfigResource; + +/** + * Donald G. Dunne + */ +@Path("team") +public class TeamResource extends AbstractConfigResource { + + public TeamResource(IAtsServer atsServer) { + super(AtsArtifactTypes.TeamDefinition, atsServer); + } + +} diff --git a/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/config/VersionResource.java b/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/config/VersionResource.java new file mode 100644 index 00000000000..5913cfd8a07 --- /dev/null +++ b/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/config/VersionResource.java @@ -0,0 +1,28 @@ +/******************************************************************************* + * Copyright (c) 2014 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.rest.internal.config; + +import javax.ws.rs.Path; +import org.eclipse.osee.ats.api.data.AtsArtifactTypes; +import org.eclipse.osee.ats.impl.IAtsServer; +import org.eclipse.osee.ats.impl.config.AbstractConfigResource; + +/** + * Donald G. Dunne + */ +@Path("version") +public class VersionResource extends AbstractConfigResource { + + public VersionResource(IAtsServer atsServer) { + super(AtsArtifactTypes.Version, atsServer); + } + +} diff --git a/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/resources/TeamResource.java b/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/resources/TeamResource.java deleted file mode 100644 index 142891f51f3..00000000000 --- a/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/resources/TeamResource.java +++ /dev/null @@ -1,59 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2014 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.rest.internal.resources; - -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; -import org.eclipse.osee.ats.api.data.AtsArtifactTypes; -import org.eclipse.osee.ats.api.data.AtsRelationTypes; -import org.eclipse.osee.ats.impl.IAtsServer; -import org.eclipse.osee.framework.jdk.core.type.ResultSet; -import org.eclipse.osee.orcs.data.ArtifactReadable; -import org.eclipse.osee.orcs.utility.RestUtil; -import org.json.JSONArray; -import org.json.JSONObject; - -/** - * @author Donald G. Dunne - */ -@Path("team") -public final class TeamResource { - - private final IAtsServer atsServer; - - public TeamResource(IAtsServer atsServer) { - this.atsServer = atsServer; - } - - @GET - @Produces(MediaType.APPLICATION_JSON) - public String get() throws Exception { - ResultSet<ArtifactReadable> artifacts = - atsServer.getQuery().andTypeEquals(AtsArtifactTypes.TeamDefinition).getResults(); - JSONArray jsonArray = RestUtil.getDefaultJSonArray(artifacts); - return RestUtil.jsonToPretty(jsonArray, true); - } - - @GET - @Path("{uuid}") - @Produces(MediaType.APPLICATION_JSON) - public String getTeam(@PathParam("uuid") int uuid) throws Exception { - ArtifactReadable teamArt = atsServer.getQuery().andLocalId(Integer.valueOf(uuid)).getResults().getExactlyOne(); - JSONObject team = RestUtil.getDefaultJSon(teamArt); - team.put("versions", - RestUtil.getDefaultJSonArray(teamArt.getRelated(AtsRelationTypes.TeamDefinitionToVersion_Version))); - return RestUtil.jsonToPretty(team, true); - } - -} diff --git a/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/resources/VersionResource.java b/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/resources/VersionResource.java deleted file mode 100644 index 6cab47a090c..00000000000 --- a/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/resources/VersionResource.java +++ /dev/null @@ -1,58 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2014 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.rest.internal.resources; - -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; -import org.eclipse.osee.ats.api.data.AtsArtifactTypes; -import org.eclipse.osee.ats.api.data.AtsRelationTypes; -import org.eclipse.osee.ats.impl.IAtsServer; -import org.eclipse.osee.framework.jdk.core.type.ResultSet; -import org.eclipse.osee.orcs.data.ArtifactReadable; -import org.eclipse.osee.orcs.utility.RestUtil; -import org.json.JSONArray; -import org.json.JSONObject; - -/** - * @author Donald G. Dunne - */ -@Path("version") -public final class VersionResource { - - private final IAtsServer atsServer; - - public VersionResource(IAtsServer atsServer) { - this.atsServer = atsServer; - } - - @GET - @Produces(MediaType.APPLICATION_JSON) - public String get() throws Exception { - ResultSet<ArtifactReadable> artifacts = atsServer.getQuery().andTypeEquals(AtsArtifactTypes.Version).getResults(); - JSONArray jsonArray = RestUtil.getDefaultJSonArray(artifacts); - return RestUtil.jsonToPretty(jsonArray, true); - } - - @GET - @Path("{uuid}") - @Produces(MediaType.APPLICATION_JSON) - public String getVersion(@PathParam("uuid") int uuid) throws Exception { - ArtifactReadable verArt = atsServer.getQuery().andLocalId(Integer.valueOf(uuid)).getResults().getExactlyOne(); - JSONObject version = RestUtil.getDefaultJSon(verArt); - version.put("workflows", - RestUtil.getDefaultJSonArray(verArt.getRelated(AtsRelationTypes.TeamWorkflowTargetedForVersion_Workflow))); - return RestUtil.jsonToPretty(version, true); - } - -} |