diff options
author | David W. Miller | 2017-03-28 14:43:00 +0000 |
---|---|---|
committer | David Miller | 2017-04-18 14:47:58 +0000 |
commit | 68f6e43f4fe75b51abf9fe6121edc82fb35b84fd (patch) | |
tree | 7d61abed662964354337202a9e099c677ce70dad /plugins | |
parent | 11017feb8a2343dfcd51c5b57604e953a0ab2c1a (diff) | |
download | org.eclipse.osee-68f6e43f4fe75b51abf9fe6121edc82fb35b84fd.tar.gz org.eclipse.osee-68f6e43f4fe75b51abf9fe6121edc82fb35b84fd.tar.xz org.eclipse.osee-68f6e43f4fe75b51abf9fe6121edc82fb35b84fd.zip |
refinement[ats_ATS358027]: Add query parsing, drag and drop
Change-Id: If343ec0337c8c91b8d802980de9411aa9ecd86c6
Diffstat (limited to 'plugins')
19 files changed, 387 insertions, 38 deletions
diff --git a/plugins/org.eclipse.osee.client.parent/pom.xml b/plugins/org.eclipse.osee.client.parent/pom.xml index cc4cf9ca725..db71264eae9 100644 --- a/plugins/org.eclipse.osee.client.parent/pom.xml +++ b/plugins/org.eclipse.osee.client.parent/pom.xml @@ -73,12 +73,16 @@ <module>../../plugins/org.eclipse.osee.define</module> <module>../../plugins/org.eclipse.osee.define.test</module> + <module>../../plugins/org.eclipse.osee.doors.connector.core</module> + <module>../../plugins/org.eclipse.osee.doors.connector.ui</module> <module>../../features/org.eclipse.osee.framework.feature</module> <module>../../features/org.eclipse.osee.framework.ui.feature</module> <module>../../features/org.eclipse.osee.define.feature</module> + + <module>../../features/org.eclipse.osee.doors.feature</module> <module>../../plugins/org.eclipse.osee.client.demo</module> @@ -150,12 +154,15 @@ <module>../../plugins/org.eclipse.osee.define</module> <module>../../plugins/org.eclipse.osee.define.test</module> - <module>../../features/org.eclipse.osee.framework.feature</module> - <module>../../features/org.eclipse.osee.framework.ui.feature</module> + <module>../../plugins/org.eclipse.osee.doors.connector.core</module> + <module>../../plugins/org.eclipse.osee.doors.connector.ui</module> + <module>../../features/org.eclipse.osee.define.feature</module> + + <module>../../features/org.eclipse.osee.doors.feature</module> <module>../../plugins/org.eclipse.osee.client.demo</module> diff --git a/plugins/org.eclipse.osee.doors.connector.core/META-INF/MANIFEST.MF b/plugins/org.eclipse.osee.doors.connector.core/META-INF/MANIFEST.MF index efab6b831be..cdb358b89cb 100644 --- a/plugins/org.eclipse.osee.doors.connector.core/META-INF/MANIFEST.MF +++ b/plugins/org.eclipse.osee.doors.connector.core/META-INF/MANIFEST.MF @@ -18,14 +18,18 @@ Import-Package: org.apache.commons.codec;version="1.6.0", org.apache.commons.httpclient, org.apache.commons.httpclient.methods, org.apache.commons.httpclient.util, + org.codehaus.jackson, + org.codehaus.jackson.annotate, + org.codehaus.jackson.node, org.eclipse.core.runtime, org.eclipse.jface.dialogs, + org.eclipse.osee.framework.jdk.core.util, org.eclipse.osee.framework.logging, org.eclipse.swt, org.eclipse.swt.events, org.eclipse.swt.layout, org.eclipse.swt.widgets, - org.eclipse.ui, org.scribe.builder.api Bundle-ClassPath: ., lib/scribe-1.3.7.jar +Require-Bundle: org.eclipse.ui.workbench;bundle-version="3.108.0" diff --git a/plugins/org.eclipse.osee.doors.connector.core/build.properties b/plugins/org.eclipse.osee.doors.connector.core/build.properties index 637de5749c2..0f9497ce08c 100644 --- a/plugins/org.eclipse.osee.doors.connector.core/build.properties +++ b/plugins/org.eclipse.osee.doors.connector.core/build.properties @@ -3,7 +3,6 @@ output.. = bin/ bin.includes = META-INF/,\ .,\ plugin.xml,\ - icons/,\ lib/,\ schema/,\ types/,\ diff --git a/plugins/org.eclipse.osee.doors.connector.core/pom.xml b/plugins/org.eclipse.osee.doors.connector.core/pom.xml new file mode 100644 index 00000000000..e6fd8194a01 --- /dev/null +++ b/plugins/org.eclipse.osee.doors.connector.core/pom.xml @@ -0,0 +1,18 @@ +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <modelVersion>4.0.0</modelVersion> + + <parent> + <groupId>org.eclipse.osee</groupId> + <artifactId>org.eclipse.osee.client.parent</artifactId> + <version>0.25.0-SNAPSHOT</version> + <relativePath>../../plugins/org.eclipse.osee.client.parent</relativePath> + </parent> + + <artifactId>org.eclipse.osee.doors.connector.core</artifactId> + <packaging>eclipse-plugin</packaging> + <name>OSEE Doors Connector Core (Incubation)</name> + + +</project> diff --git a/plugins/org.eclipse.osee.doors.connector.core/src/org/eclipse/osee/doors/connector/core/DoorsArtifact.java b/plugins/org.eclipse.osee.doors.connector.core/src/org/eclipse/osee/doors/connector/core/DoorsArtifact.java index 5d1b2bdf5c0..384d535dc6a 100644 --- a/plugins/org.eclipse.osee.doors.connector.core/src/org/eclipse/osee/doors/connector/core/DoorsArtifact.java +++ b/plugins/org.eclipse.osee.doors.connector.core/src/org/eclipse/osee/doors/connector/core/DoorsArtifact.java @@ -72,4 +72,8 @@ public class DoorsArtifact implements INamedElement { public List<DoorsArtifact> getChildren() { return this.children; } + + public IDoorsArtifactParser getReader() { + return new ServiceProviderCatalogReader(); + } } diff --git a/plugins/org.eclipse.osee.doors.connector.core/src/org/eclipse/osee/doors/connector/core/ReqReader.java b/plugins/org.eclipse.osee.doors.connector.core/src/org/eclipse/osee/doors/connector/core/ReqReader.java new file mode 100644 index 00000000000..5ec37980633 --- /dev/null +++ b/plugins/org.eclipse.osee.doors.connector.core/src/org/eclipse/osee/doors/connector/core/ReqReader.java @@ -0,0 +1,96 @@ +/******************************************************************************* + * 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.doors.connector.core; + +import java.io.StringReader; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.xpath.XPath; +import javax.xml.xpath.XPathConstants; +import javax.xml.xpath.XPathFactory; +import org.eclipse.osee.framework.jdk.core.util.Strings; +import org.w3c.dom.Document; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.InputSource; + +/** + * @author David W. Miller + */ +public class ReqReader implements IDoorsArtifactParser { + + /** + * Method to parse the DWA URL to get the response + */ + @Override + public DoorsArtifact parse(DoorsArtifact reqIn) throws Exception { + Requirement reqObj; + if (reqIn instanceof Requirement) { + reqObj = (Requirement) reqIn; + } else { + return reqIn; + } + String path = reqObj.getPath(); + // for now, all the parsing does is get the shortName from the shortTitle xml attribute + // if the shortName is set, don't redo the parsing + if (Strings.isInValid(reqObj.getShortName())) { + + DoorsOSLCConnector doors = new DoorsOSLCConnector(); + // set query string to null for now, can be used later to get specifics about the requirement + String catalogResponse = doors.getCatalogResponse(replace(path), null); + + XPath xpath = XPathFactory.newInstance().newXPath(); + + DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); + domFactory.setNamespaceAware(true); // never forget this! + DocumentBuilder builder = domFactory.newDocumentBuilder(); + + InputSource is = new InputSource(new StringReader(catalogResponse)); + Document doc = builder.parse(is); + Object result1 = xpath.evaluate("//*[local-name()='Requirement']", doc, XPathConstants.NODESET); + NodeList rootNodes = (NodeList) result1; + if (rootNodes.getLength() > 0) { + for (int i = 0; i < rootNodes.getLength(); i++) { + Node node = rootNodes.item(i); + String name = findReqName(node); + if (!name.isEmpty()) { + reqObj.setShortName(name); + break; + } + } + } + } + return reqObj; + } + + private String findReqName(Node node) { + String toReturn = ""; + NodeList childNodes = node.getChildNodes(); + for (int j = 0; j < childNodes.getLength(); j++) { + Node item = childNodes.item(j); + if ((item.getLocalName() != null) && item.getLocalName().equalsIgnoreCase("shortTitle")) { + NodeList childNodes2 = item.getChildNodes(); + Node item2 = childNodes2.item(0); + toReturn = item2.getTextContent(); + break; + } + } + return toReturn; + } + + /** + * Method to return the url replaced to lower case + */ + @Override + public String replace(final String url) { + return url.toLowerCase(); + } +} diff --git a/plugins/org.eclipse.osee.doors.connector.core/src/org/eclipse/osee/doors/connector/core/Requirement.java b/plugins/org.eclipse.osee.doors.connector.core/src/org/eclipse/osee/doors/connector/core/Requirement.java index 2e70788a225..15fdd52941a 100644 --- a/plugins/org.eclipse.osee.doors.connector.core/src/org/eclipse/osee/doors/connector/core/Requirement.java +++ b/plugins/org.eclipse.osee.doors.connector.core/src/org/eclipse/osee/doors/connector/core/Requirement.java @@ -5,13 +5,25 @@ */ package org.eclipse.osee.doors.connector.core; - /** * Model Class to create a requirement oblect. Currently it extends Doors artifact. Further more objects can be added to * extend it in future - * + * * @author Chandan Bandemutt */ public class Requirement extends DoorsArtifact { - // + private String shortName; + + public String getShortName() { + return shortName; + } + + public void setShortName(String shortName) { + this.shortName = shortName; + } + + @Override + public IDoorsArtifactParser getReader() { + return new ReqReader(); + } } diff --git a/plugins/org.eclipse.osee.doors.connector.core/src/org/eclipse/osee/doors/connector/core/ServiceProvider.java b/plugins/org.eclipse.osee.doors.connector.core/src/org/eclipse/osee/doors/connector/core/ServiceProvider.java index 4a61616b56b..12f8e95ee35 100644 --- a/plugins/org.eclipse.osee.doors.connector.core/src/org/eclipse/osee/doors/connector/core/ServiceProvider.java +++ b/plugins/org.eclipse.osee.doors.connector.core/src/org/eclipse/osee/doors/connector/core/ServiceProvider.java @@ -12,5 +12,8 @@ package org.eclipse.osee.doors.connector.core; * @author Chandan Bandemutt */ public class ServiceProvider extends DoorsArtifact { - // + @Override + public IDoorsArtifactParser getReader() { + return new ServiceProviderReader(); + } } diff --git a/plugins/org.eclipse.osee.doors.connector.core/src/org/eclipse/osee/doors/connector/core/ServiceProviderCatalogReader.java b/plugins/org.eclipse.osee.doors.connector.core/src/org/eclipse/osee/doors/connector/core/ServiceProviderCatalogReader.java index 292551276c7..a79b5c2ad45 100644 --- a/plugins/org.eclipse.osee.doors.connector.core/src/org/eclipse/osee/doors/connector/core/ServiceProviderCatalogReader.java +++ b/plugins/org.eclipse.osee.doors.connector.core/src/org/eclipse/osee/doors/connector/core/ServiceProviderCatalogReader.java @@ -38,9 +38,6 @@ public class ServiceProviderCatalogReader implements IDoorsArtifactParser { DoorsOSLCConnector doors = new DoorsOSLCConnector(); String catalogResponse = doors.getCatalogResponse(path, null); - while (catalogResponse.contains("500")) { - catalogResponse = doors.getCatalogResponse(path, null); - } XPath xpath = XPathFactory.newInstance().newXPath(); DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); diff --git a/plugins/org.eclipse.osee.doors.connector.core/src/org/eclipse/osee/doors/connector/core/oauth/DWAOAuthService.java b/plugins/org.eclipse.osee.doors.connector.core/src/org/eclipse/osee/doors/connector/core/oauth/DWAOAuthService.java index 480569cf47c..76c68db322e 100644 --- a/plugins/org.eclipse.osee.doors.connector.core/src/org/eclipse/osee/doors/connector/core/oauth/DWAOAuthService.java +++ b/plugins/org.eclipse.osee.doors.connector.core/src/org/eclipse/osee/doors/connector/core/oauth/DWAOAuthService.java @@ -314,6 +314,7 @@ public class DWAOAuthService { GetMethod authorizeGetMethod = new GetMethod(path); authorizeGetMethod.addRequestHeader("Content-Type", "application/x-oslc-rm-requirement-collection-1.0+xml"); + authorizeGetMethod.addRequestHeader("OSLC-Core-Version", "2.0"); authorizeGetMethod.addRequestHeader("Accept", "application/rdf+xml"); authorizeGetMethod.addRequestHeader("Accept-Charset", "UTF-8"); if ((queryString != null) && !queryString.isEmpty()) { diff --git a/plugins/org.eclipse.osee.doors.connector.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.osee.doors.connector.ui/META-INF/MANIFEST.MF index 1e6edf5d893..3e838eebbda 100644 --- a/plugins/org.eclipse.osee.doors.connector.ui/META-INF/MANIFEST.MF +++ b/plugins/org.eclipse.osee.doors.connector.ui/META-INF/MANIFEST.MF @@ -7,6 +7,9 @@ Bundle-Vendor: Bosch GmbH Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Bundle-ActivationPolicy: lazy Import-Package: org.apache.commons.httpclient, + org.codehaus.jackson, + org.codehaus.jackson.map, + org.codehaus.jackson.node, org.eclipse.core.commands, org.eclipse.core.resources, org.eclipse.core.runtime, @@ -27,14 +30,19 @@ Import-Package: org.apache.commons.httpclient, org.eclipse.osee.framework.skynet.core.artifact, org.eclipse.osee.framework.skynet.core.artifact.search, org.eclipse.osee.framework.skynet.core.transaction, + org.eclipse.osee.framework.skynet.core.utility, org.eclipse.osee.framework.ui.plugin, org.eclipse.osee.framework.ui.skynet, + org.eclipse.osee.framework.ui.skynet.artifact, org.eclipse.osee.framework.ui.skynet.branch, + org.eclipse.osee.framework.ui.skynet.internal, org.eclipse.osee.framework.ui.skynet.listener, + org.eclipse.osee.framework.ui.skynet.util, org.eclipse.osee.framework.ui.skynet.widgets, org.eclipse.osee.framework.ui.swt, org.eclipse.swt, org.eclipse.swt.browser, + org.eclipse.swt.dnd, org.eclipse.swt.events, org.eclipse.swt.graphics, org.eclipse.swt.layout, diff --git a/plugins/org.eclipse.osee.doors.connector.ui/pom.xml b/plugins/org.eclipse.osee.doors.connector.ui/pom.xml new file mode 100644 index 00000000000..88d55cfa8f9 --- /dev/null +++ b/plugins/org.eclipse.osee.doors.connector.ui/pom.xml @@ -0,0 +1,18 @@ +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <modelVersion>4.0.0</modelVersion> + + <parent> + <groupId>org.eclipse.osee</groupId> + <artifactId>org.eclipse.osee.client.parent</artifactId> + <version>0.25.0-SNAPSHOT</version> + <relativePath>../../plugins/org.eclipse.osee.client.parent</relativePath> + </parent> + + <artifactId>org.eclipse.osee.doors.connector.ui</artifactId> + <packaging>eclipse-plugin</packaging> + <name>OSEE Doors Connector UI (Incubation)</name> + + +</project> diff --git a/plugins/org.eclipse.osee.doors.connector.ui/src/org/eclipse/osee/doors/connector/ui/viewer/RdfExplorer.java b/plugins/org.eclipse.osee.doors.connector.ui/src/org/eclipse/osee/doors/connector/ui/viewer/RdfExplorer.java index 2ecc76b58b1..0658299973b 100644 --- a/plugins/org.eclipse.osee.doors.connector.ui/src/org/eclipse/osee/doors/connector/ui/viewer/RdfExplorer.java +++ b/plugins/org.eclipse.osee.doors.connector.ui/src/org/eclipse/osee/doors/connector/ui/viewer/RdfExplorer.java @@ -26,7 +26,10 @@ import org.eclipse.jface.window.Window; import org.eclipse.osee.doors.connector.core.DoorsArtifact; import org.eclipse.osee.doors.connector.core.DoorsModel; import org.eclipse.osee.doors.connector.core.DoorsOSLCConnector; +import org.eclipse.osee.doors.connector.core.IDoorsArtifactParser; import org.eclipse.osee.doors.connector.core.LoginDialog; +import org.eclipse.osee.doors.connector.core.QueryCapabilities; +import org.eclipse.osee.doors.connector.core.Requirement; import org.eclipse.osee.doors.connector.core.oauth.DWAOAuthService; import org.eclipse.osee.doors.connector.ui.oauth.extension.DoorsOSLCDWAProviderInfoExtn; import org.eclipse.osee.framework.logging.OseeLog; @@ -53,6 +56,7 @@ import org.eclipse.ui.PlatformUI; public class RdfExplorer extends GenericViewPart implements IRebuildMenuListener { public static final String VIEW_ID = "org.eclipse.osee.doors.connector.ui.viewer.RdfExplorer"; private RdfTreeViewer treeViewer; + private RdfExplorerDragAndDrop dragAndDropWorker; private Composite parentComp; private RdfExplorerItem rootItem; @@ -80,6 +84,7 @@ public class RdfExplorer extends GenericViewPart implements IRebuildMenuListener treeViewer.setUseHashlookup(true); treeViewer.getControl().setLayoutData(gridData); + dragAndDropWorker = new RdfExplorerDragAndDrop(treeViewer.getTree()); getSite().setSelectionProvider(treeViewer); parentComp.layout(); createActions(); @@ -190,16 +195,19 @@ public class RdfExplorer extends GenericViewPart implements IRebuildMenuListener } - private ArrayList<RdfExplorerItem> getSelectedItems() { - ArrayList<RdfExplorerItem> arts = new ArrayList<>(); - Iterator<?> i = ((IStructuredSelection) treeViewer.getSelection()).iterator(); + private ArrayList<Requirement> getSelectedItems(IStructuredSelection selection) { + ArrayList<Requirement> reqs = new ArrayList<>(); + Iterator<?> i = selection.iterator(); while (i.hasNext()) { Object obj = i.next(); if (obj instanceof RdfExplorerItem) { - arts.add((RdfExplorerItem) obj); + DoorsArtifact dwaItem = ((RdfExplorerItem) obj).getDwaItem(); + if (dwaItem instanceof Requirement) { + reqs.add((Requirement) dwaItem); + } } } - return arts; + return reqs; } private void expandAll(IStructuredSelection selection) { @@ -209,6 +217,46 @@ public class RdfExplorer extends GenericViewPart implements IRebuildMenuListener } } + public void expandItem(IStructuredSelection selection) { + RdfExplorerItem item = (RdfExplorerItem) selection.getFirstElement(); + DoorsArtifact provider = item.getDwaItem(); + if (provider.getChildren().size() < 1) { + IDoorsArtifactParser reader = provider.getReader(); + try { + reader.parse(provider); + for (DoorsArtifact dwaItem : provider.getChildren()) { + if (dwaItem instanceof QueryCapabilities) { + // root level, contains requirements + QueryCapabilities qc = (QueryCapabilities) dwaItem; + for (DoorsArtifact reqt : qc.getRequirements()) { + item.addItem(RdfExplorerFactory.getExplorerItem(reqt.getName(), item.getTreeViewer(), item, + item.getRdfExplorer(), reqt)); + } + } else { + item.addItem(RdfExplorerFactory.getExplorerItem(dwaItem.getName(), item.getTreeViewer(), item, + item.getRdfExplorer(), dwaItem)); + } + } + if (provider instanceof Requirement) { + List<Requirement> selected = getSelectedItems(selection); + if (selected.size() > 0) { + dragAndDropWorker.clearRequirements(); + for (Requirement req : selected) { + // set up drag and drop for selected requirements only + // make sure they are all parsed + IDoorsArtifactParser reqReader = req.getReader(); + reqReader.parse(req); + dragAndDropWorker.addRequirement(req); + } + } + } + reload(); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + public void reload() { List<RdfExplorerItem> items = new LinkedList<>(); if (rootItem == null) { @@ -233,9 +281,6 @@ public class RdfExplorer extends GenericViewPart implements IRebuildMenuListener DWAOAuthService service1 = new DWAOAuthService(config, "Open System Engineering Environment", "BoeingOSEE"); DoorsArtifact doorsArtifact = connector.getAuthentication(service1, dialog.getName(), dialog.getPassword()); DoorsModel.setDoorsArtifact(doorsArtifact); - for (DoorsArtifact item : doorsArtifact.getChildren()) { - rootItem.addItem(RdfExplorerFactory.getExplorerItem(item.getName(), treeViewer, rootItem, this, item)); - } Cookie[] cookies = service1.getHttpClient().getState().getCookies(); for (Cookie cookie : cookies) { @@ -243,6 +288,10 @@ public class RdfExplorer extends GenericViewPart implements IRebuildMenuListener } } } + DoorsArtifact da = DoorsModel.getDoorsArtifact(); + for (DoorsArtifact item : da.getChildren()) { + rootItem.addItem(RdfExplorerFactory.getExplorerItem(item.getName(), treeViewer, rootItem, this, item)); + } } } diff --git a/plugins/org.eclipse.osee.doors.connector.ui/src/org/eclipse/osee/doors/connector/ui/viewer/RdfExplorerDragAndDrop.java b/plugins/org.eclipse.osee.doors.connector.ui/src/org/eclipse/osee/doors/connector/ui/viewer/RdfExplorerDragAndDrop.java new file mode 100644 index 00000000000..2c9080372d1 --- /dev/null +++ b/plugins/org.eclipse.osee.doors.connector.ui/src/org/eclipse/osee/doors/connector/ui/viewer/RdfExplorerDragAndDrop.java @@ -0,0 +1,114 @@ +/******************************************************************************* + * Copyright (c) 2004, 2007 Boeing. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Boeing - initial API and implementation + *******************************************************************************/ +package org.eclipse.osee.doors.connector.ui.viewer; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import org.codehaus.jackson.map.ObjectMapper; +import org.eclipse.osee.doors.connector.core.Requirement; +import org.eclipse.osee.framework.core.enums.CoreArtifactTypes; +import org.eclipse.osee.framework.core.enums.CoreAttributeTypes; +import org.eclipse.osee.framework.skynet.core.utility.JsonArtifactRepresentation; +import org.eclipse.osee.framework.skynet.core.utility.JsonAttributeRepresentation; +import org.eclipse.swt.dnd.DND; +import org.eclipse.swt.dnd.DragSource; +import org.eclipse.swt.dnd.DragSourceEvent; +import org.eclipse.swt.dnd.DragSourceListener; +import org.eclipse.swt.dnd.DropTargetEvent; +import org.eclipse.swt.dnd.TextTransfer; +import org.eclipse.swt.dnd.Transfer; +import org.eclipse.swt.widgets.Control; + +/** + * @author David W. Miller + */ +public class RdfExplorerDragAndDrop { + private DragSource dragSource; + + private final List<Requirement> reqs = new ArrayList<Requirement>(); + + public RdfExplorerDragAndDrop(Control source) { + + if (source != null) { + dragSource = new DragSource(source, DND.DROP_MOVE | DND.DROP_COPY); + setupDragSupport(); + } + } + + private void setupDragSupport() { + dragSource.setTransfer(new Transfer[] {TextTransfer.getInstance()}); + dragSource.addDragListener(new DragSourceListener() { + + @Override + public void dragFinished(DragSourceEvent event) { + // do nothing + } + + @Override + public void dragSetData(DragSourceEvent event) { + performDataTransafer(event); + } + + @Override + public void dragStart(DragSourceEvent event) { + // do nothing + } + }); + } + + private void performDataTransafer(DragSourceEvent event) { + if (TextTransfer.getInstance().isSupportedType(event.dataType)) { + textTransferDragSetData(event); + } + } + + public void textTransferDragSetData(DragSourceEvent event) { + List<JsonArtifactRepresentation> reqsOut = new ArrayList<JsonArtifactRepresentation>(); + for (Requirement reqt : reqs) { + reqsOut.add(makeJsonArtifactRepresentation(reqt)); + } + + ObjectMapper mapper = new ObjectMapper(); + try { + event.data = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(reqsOut); + } catch (IOException ex) { + // + } + } + + private JsonArtifactRepresentation makeJsonArtifactRepresentation(Requirement reqt) { + JsonArtifactRepresentation artRep = new JsonArtifactRepresentation(); + artRep.setArtifactTypeId(CoreArtifactTypes.Url.getId()); + artRep.setName(reqt.getShortName()); + List<JsonAttributeRepresentation> attrs = new ArrayList<JsonAttributeRepresentation>(); + attrs.add(new JsonAttributeRepresentation(CoreAttributeTypes.Description.getId(), reqt.getName())); + attrs.add(new JsonAttributeRepresentation(CoreAttributeTypes.ContentUrl.getId(), reqt.getPath())); + artRep.setAttrs(attrs); + return artRep; + } + + public void clearRequirements() { + if (reqs.size() > 0) { + reqs.clear(); + } + } + + public void addRequirement(Requirement req) { + reqs.add(req); + } + + public void performDragOver(DropTargetEvent event) { + event.feedback = DND.FEEDBACK_SELECT | DND.FEEDBACK_SCROLL | DND.FEEDBACK_EXPAND; + event.detail = DND.DROP_NONE; + } + +} diff --git a/plugins/org.eclipse.osee.doors.connector.ui/src/org/eclipse/osee/doors/connector/ui/viewer/RdfExplorerFactory.java b/plugins/org.eclipse.osee.doors.connector.ui/src/org/eclipse/osee/doors/connector/ui/viewer/RdfExplorerFactory.java index cde425d8543..92730590b7f 100644 --- a/plugins/org.eclipse.osee.doors.connector.ui/src/org/eclipse/osee/doors/connector/ui/viewer/RdfExplorerFactory.java +++ b/plugins/org.eclipse.osee.doors.connector.ui/src/org/eclipse/osee/doors/connector/ui/viewer/RdfExplorerFactory.java @@ -12,6 +12,7 @@ package org.eclipse.osee.doors.connector.ui.viewer; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.osee.doors.connector.core.DoorsArtifact; +import org.eclipse.osee.doors.connector.core.Requirement; import org.eclipse.osee.doors.connector.core.ServiceProvider; import org.eclipse.osee.doors.connector.core.ServiceProviderCatalog; @@ -26,6 +27,8 @@ public class RdfExplorerFactory { return (T) new RdfSevPro(name, treeViewer, rootItem, rdfExplorer, item); } else if (item instanceof ServiceProviderCatalog) { return (T) new RdfSevProCat(name, treeViewer, rootItem, rdfExplorer, item); + } else if (item instanceof Requirement) { + return (T) new RdfRequirement(name, treeViewer, rootItem, rdfExplorer, item); } return (T) new RdfExplorerItem(name, treeViewer, rootItem, rdfExplorer, item); } diff --git a/plugins/org.eclipse.osee.doors.connector.ui/src/org/eclipse/osee/doors/connector/ui/viewer/RdfExplorerItem.java b/plugins/org.eclipse.osee.doors.connector.ui/src/org/eclipse/osee/doors/connector/ui/viewer/RdfExplorerItem.java index 1e298fe9cf4..a39db1bb32e 100644 --- a/plugins/org.eclipse.osee.doors.connector.ui/src/org/eclipse/osee/doors/connector/ui/viewer/RdfExplorerItem.java +++ b/plugins/org.eclipse.osee.doors.connector.ui/src/org/eclipse/osee/doors/connector/ui/viewer/RdfExplorerItem.java @@ -119,6 +119,6 @@ public class RdfExplorerItem implements IAdaptable { @Override public <T> T getAdapter(Class<T> adapter) { - return (T) this; + return null; } } diff --git a/plugins/org.eclipse.osee.doors.connector.ui/src/org/eclipse/osee/doors/connector/ui/viewer/RdfRequirement.java b/plugins/org.eclipse.osee.doors.connector.ui/src/org/eclipse/osee/doors/connector/ui/viewer/RdfRequirement.java new file mode 100644 index 00000000000..653e8fb7d63 --- /dev/null +++ b/plugins/org.eclipse.osee.doors.connector.ui/src/org/eclipse/osee/doors/connector/ui/viewer/RdfRequirement.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.doors.connector.ui.viewer; + +import org.eclipse.jface.viewers.TreeViewer; +import org.eclipse.osee.doors.connector.core.DoorsArtifact; +import org.eclipse.osee.framework.ui.skynet.FrameworkImage; +import org.eclipse.osee.framework.ui.swt.ImageManager; +import org.eclipse.swt.graphics.Image; + +/** + * @author David W. Miller + */ +public class RdfRequirement extends RdfExplorerItem { + + public RdfRequirement(String name, TreeViewer treeViewer, RdfExplorerItem parentItem, RdfExplorer rdfExplorer, DoorsArtifact dwaItem) { + super(name, treeViewer, parentItem, rdfExplorer, dwaItem); + } + + @Override + public Image getImage() { + return ImageManager.getImage(FrameworkImage.DOCUMENT); + } +} diff --git a/plugins/org.eclipse.osee.doors.connector.ui/src/org/eclipse/osee/doors/connector/ui/viewer/RdfTreeViewer.java b/plugins/org.eclipse.osee.doors.connector.ui/src/org/eclipse/osee/doors/connector/ui/viewer/RdfTreeViewer.java index 9759705bd1b..076884082cb 100644 --- a/plugins/org.eclipse.osee.doors.connector.ui/src/org/eclipse/osee/doors/connector/ui/viewer/RdfTreeViewer.java +++ b/plugins/org.eclipse.osee.doors.connector.ui/src/org/eclipse/osee/doors/connector/ui/viewer/RdfTreeViewer.java @@ -18,8 +18,6 @@ import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.TreePath; import org.eclipse.jface.viewers.TreeViewer; -import org.eclipse.osee.doors.connector.core.DoorsArtifact; -import org.eclipse.osee.doors.connector.core.ServiceProviderCatalogReader; import org.eclipse.swt.widgets.Composite; /** @@ -40,23 +38,8 @@ public class RdfTreeViewer extends TreeViewer { ISelection selection = getSelection(); if (selection instanceof IStructuredSelection) { RdfExplorerItem item = (RdfExplorerItem) ((IStructuredSelection) selection).getFirstElement(); - if (item != null && item.getParentItem() != null) { - DoorsArtifact provider = item.getDwaItem(); - if (provider.getChildren().size() < 1) { - ServiceProviderCatalogReader catalogReader = new ServiceProviderCatalogReader(); - - try { - catalogReader.parse(provider); - for (DoorsArtifact dwaItem : provider.getChildren()) { - item.addItem(RdfExplorerFactory.getExplorerItem(dwaItem.getName(), item.getTreeViewer(), - item, item.getRdfExplorer(), dwaItem)); - } - rdfExplorer.reload(); - } catch (Exception e) { - e.printStackTrace(); - } - } + rdfExplorer.expandItem((IStructuredSelection) selection); } } } diff --git a/plugins/org.eclipse.osee.framework.core/src/org/eclipse/osee/framework/core/enums/CoreArtifactTypes.java b/plugins/org.eclipse.osee.framework.core/src/org/eclipse/osee/framework/core/enums/CoreArtifactTypes.java index e0aec9152a7..b4782c41f4f 100644 --- a/plugins/org.eclipse.osee.framework.core/src/org/eclipse/osee/framework/core/enums/CoreArtifactTypes.java +++ b/plugins/org.eclipse.osee.framework.core/src/org/eclipse/osee/framework/core/enums/CoreArtifactTypes.java @@ -90,6 +90,7 @@ public final class CoreArtifactTypes { public static final IArtifactType TestSupport = TokenFactory.createArtifactType(83, "Test Support"); public static final IArtifactType TestUnit = TokenFactory.createArtifactType(4, "Test Unit"); public static final IArtifactType UniversalGroup = TokenFactory.createArtifactType(8, "Universal Group"); + public static final IArtifactType Url = TokenFactory.createArtifactType(15, "Url"); public static final IArtifactType User = TokenFactory.createArtifactType(5, "User"); public static final IArtifactType UserGroup = TokenFactory.createArtifactType(7, "User Group"); public static final IArtifactType XViewerGlobalCustomization = TokenFactory.createArtifactType(55, "XViewer Global Customization"); |