IPA Demo resource
Change-Id: Ief4c25f4efbabcabd9c2df25ec16190d4df3e3b8
diff --git a/plugins/org.eclipse.osee.define.report/src/org/eclipse/osee/define/report/internal/IpaDemoResource.java b/plugins/org.eclipse.osee.define.report/src/org/eclipse/osee/define/report/internal/IpaDemoResource.java
new file mode 100644
index 0000000..7fb1c22
--- /dev/null
+++ b/plugins/org.eclipse.osee.define.report/src/org/eclipse/osee/define/report/internal/IpaDemoResource.java
@@ -0,0 +1,100 @@
+/*******************************************************************************
+ * 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.define.report.internal;
+
+import static org.eclipse.osee.framework.core.enums.CoreBranches.COMMON;
+import java.util.Random;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+import org.eclipse.osee.framework.core.data.ArtifactId;
+import org.eclipse.osee.framework.core.enums.CoreArtifactTokens;
+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.orcs.OrcsApi;
+import org.eclipse.osee.orcs.data.ArtifactReadable;
+import org.eclipse.osee.orcs.search.QueryFactory;
+import org.eclipse.osee.orcs.transaction.TransactionBuilder;
+import org.eclipse.osee.orcs.transaction.TransactionFactory;
+
+/**
+ * @author Ryan D. Brooks
+ */
+@Path("/")
+public final class IpaDemoResource {
+ private final QueryFactory queryFactory;
+ private final Random rand = new Random();
+ private final TransactionFactory transactionFactory;
+
+ public IpaDemoResource(OrcsApi orcsApi) {
+ queryFactory = orcsApi.getQueryFactory();
+ transactionFactory = orcsApi.getTransactionFactory();
+ }
+
+ /**
+ * create a tree of component artifacts with the given breadth and depth. The total number crated is given by the
+ * Power Sum: for i = 1..D, sum (B^i) = B + B^2 + ... + B^D
+ *
+ * @param breadth
+ * @param depth
+ * @return
+ */
+ @Path("ipa")
+ @GET
+ @Produces(MediaType.TEXT_HTML)
+ public String createIpaArtifacts(@QueryParam("breadth") int breadth, @QueryParam("depth") int depth) {
+ TransactionBuilder txBuilder = transactionFactory.createTransaction(COMMON, getUser(), "Create IPA demo data");
+ createChildren(txBuilder, getFolder("System Test"), breadth, depth, 0);
+
+ txBuilder.commit();
+ return "done";
+ }
+
+ private void createChildren(TransactionBuilder txBuilder, ArtifactId parent, int breadth, int depth, int currentDepth) {
+ if (currentDepth >= depth) {
+ return;
+ }
+ for (int childCount = 0; childCount < breadth; childCount++) {
+ ArtifactId component = txBuilder.createArtifact(CoreArtifactTypes.Component, getName());
+ txBuilder.setSoleAttributeValue(component, CoreAttributeTypes.Developmental, getDevelopmental());
+ txBuilder.addChildren(parent, component);
+
+ createChildren(txBuilder, component, breadth, depth, currentDepth + 1);
+ }
+ }
+
+ private ArtifactReadable getUser() {
+ return queryFactory.fromBranch(COMMON).andUuid(50).getResults().getExactlyOne();
+ }
+
+ private ArtifactReadable getFolder(String name) {
+ ArtifactReadable root = queryFactory.fromBranch(CoreBranches.COMMON).andUuid(
+ CoreArtifactTokens.DefaultHierarchyRoot.getUuid()).getResults().getAtMostOneOrNull();
+
+ for (ArtifactReadable child : root.getChildren()) {
+ if (child.getName().equals(name)) {
+ return child;
+ }
+ }
+ return null;
+ }
+
+ private boolean getDevelopmental() {
+ return rand.nextDouble() < 0.5;
+ }
+
+ private String getName() {
+ return String.valueOf(rand.nextInt());
+ }
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.osee.define.report/src/org/eclipse/osee/define/report/internal/OseeReportApplication.java b/plugins/org.eclipse.osee.define.report/src/org/eclipse/osee/define/report/internal/OseeReportApplication.java
index ad9cb8a..6898d34 100644
--- a/plugins/org.eclipse.osee.define.report/src/org/eclipse/osee/define/report/internal/OseeReportApplication.java
+++ b/plugins/org.eclipse.osee.define.report/src/org/eclipse/osee/define/report/internal/OseeReportApplication.java
@@ -57,6 +57,7 @@
OseeAppResourceTokens.register(resourceRegistry);
logger.debug(">>>>> registered Requirement resource");
singletons.add(new SystemSafetyResource(logger, resourceRegistry, orcsApi));
+ singletons.add(new IpaDemoResource(orcsApi));
logger.debug(">>>>> registered Safety resource");
singletons.add(new PublishLowHighReqTraceabilityResource(logger, resourceRegistry, orcsApi));
logger.debug(">>>>> registered Low/High Trace resource");