Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrescobar2010-07-22 16:47:07 -0400
committerrescobar2010-07-22 16:47:07 -0400
commit0f734679236b818e60f7a781a288f6e8539364ef (patch)
tree0d748a937d255cc18085a875cee619687d77b358 /plugins/org.eclipse.osee.framework.core.dsl.ui.integration
parent7ba331a468b2239a5c8ff8877f0bb3971635da99 (diff)
downloadorg.eclipse.osee-0f734679236b818e60f7a781a288f6e8539364ef.tar.gz
org.eclipse.osee-0f734679236b818e60f7a781a288f6e8539364ef.tar.xz
org.eclipse.osee-0f734679236b818e60f7a781a288f6e8539364ef.zip
Includes content of org.eclipse.osee.framework.types plus osee access dsl syntax
Diffstat (limited to 'plugins/org.eclipse.osee.framework.core.dsl.ui.integration')
-rw-r--r--plugins/org.eclipse.osee.framework.core.dsl.ui.integration/META-INF/MANIFEST.MF60
-rw-r--r--plugins/org.eclipse.osee.framework.core.dsl.ui.integration/build.properties6
-rw-r--r--plugins/org.eclipse.osee.framework.core.dsl.ui.integration/images/gears.gifbin0 -> 951 bytes
-rw-r--r--plugins/org.eclipse.osee.framework.core.dsl.ui.integration/plugin.xml33
-rw-r--r--plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/internal/Activator.java37
-rw-r--r--plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/operations/CreateEditorReportOperation.java104
-rw-r--r--plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/operations/ExcelToEMFModel.java359
-rw-r--r--plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/operations/OseeTypesExportOperation.java66
-rw-r--r--plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/operations/OseeTypesImportOperation.java141
-rw-r--r--plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/operations/ResolveImportsOperation.java99
-rw-r--r--plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/operations/XtextOseeTypesHandler.java45
-rw-r--r--plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/wizards/LinkMessage.java29
-rw-r--r--plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/wizards/LinkNode.java60
-rw-r--r--plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/wizards/LinkNodeContentProvider.java60
-rw-r--r--plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/wizards/LinkNodeLabelProvider.java53
-rw-r--r--plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/wizards/NewOseeTypesFilePage.java142
-rw-r--r--plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/wizards/OseeTypesExportWizard.java59
-rw-r--r--plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/wizards/OseeTypesImportPage.java261
-rw-r--r--plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/wizards/OseeTypesImportWizard.java71
-rw-r--r--plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/wizards/OseeTypesViewerFilter.java73
-rw-r--r--plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/wizards/ResourceSelectionPage.java98
-rw-r--r--plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/wizards/SelectOseeTypesPanel.java92
22 files changed, 1948 insertions, 0 deletions
diff --git a/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/META-INF/MANIFEST.MF b/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000..64e4958557
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/META-INF/MANIFEST.MF
@@ -0,0 +1,60 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Osee DSL Ui Integration
+Bundle-SymbolicName: org.eclipse.osee.framework.core.dsl.ui.integration;singleton:=true
+Bundle-Version: 0.9.5.qualifier
+Bundle-Activator: org.eclipse.osee.framework.core.dsl.ui.integration.internal.Activator
+Bundle-Vendor: Eclipse.org
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Import-Package: org.eclipse.compare,
+ org.eclipse.core.commands.common,
+ org.eclipse.core.resources,
+ org.eclipse.core.runtime,
+ org.eclipse.core.runtime.jobs,
+ org.eclipse.emf.compare.diff.metamodel,
+ org.eclipse.emf.compare.ui.editor,
+ org.eclipse.nebula.widgets.xviewer,
+ org.eclipse.osee.framework.core.client,
+ org.eclipse.osee.framework.core.client.server,
+ org.eclipse.osee.framework.core.data,
+ org.eclipse.osee.framework.core.dsl.integration,
+ org.eclipse.osee.framework.core.enums,
+ org.eclipse.osee.framework.core.exception,
+ org.eclipse.osee.framework.core.message,
+ org.eclipse.osee.framework.core.model,
+ org.eclipse.osee.framework.core.model.cache,
+ org.eclipse.osee.framework.core.operation,
+ org.eclipse.osee.framework.core.services,
+ org.eclipse.osee.framework.core.util,
+ org.eclipse.osee.framework.database.init,
+ org.eclipse.osee.framework.jdk.core.type,
+ org.eclipse.osee.framework.jdk.core.util,
+ org.eclipse.osee.framework.jdk.core.util.xml,
+ org.eclipse.osee.framework.logging,
+ org.eclipse.osee.framework.osee,
+ org.eclipse.osee.framework.plugin.core.util,
+ org.eclipse.osee.framework.skynet.core.artifact,
+ org.eclipse.osee.framework.skynet.core.attribute,
+ org.eclipse.osee.framework.skynet.core.importing,
+ org.eclipse.osee.framework.ui.plugin,
+ org.eclipse.osee.framework.ui.plugin.util,
+ org.eclipse.osee.framework.ui.skynet,
+ org.eclipse.osee.framework.ui.skynet.panels,
+ org.eclipse.osee.framework.ui.skynet.results,
+ org.eclipse.osee.framework.ui.skynet.results.table,
+ org.eclipse.osee.framework.ui.swt,
+ org.eclipse.osee.framework.ui.ws,
+ org.eclipse.swt,
+ org.eclipse.swt.widgets,
+ org.osgi.framework,
+ org.osgi.util.tracker
+Bundle-ActivationPolicy: lazy
+Require-Bundle: org.eclipse.osee.framework.core.dsl,
+ org.eclipse.emf.ecore,
+ org.eclipse.emf.common,
+ org.eclipse.ui,
+ org.eclipse.ui.forms,
+ org.eclipse.ui.ide,
+ org.eclipse.ui.views,
+ org.eclipse.jface,
+ org.eclipse.xtext
diff --git a/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/build.properties b/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/build.properties
new file mode 100644
index 0000000000..6d28be5b48
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/build.properties
@@ -0,0 +1,6 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ images/,\
+ plugin.xml
diff --git a/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/images/gears.gif b/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/images/gears.gif
new file mode 100644
index 0000000000..86683b8bd6
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/images/gears.gif
Binary files differ
diff --git a/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/plugin.xml b/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/plugin.xml
new file mode 100644
index 0000000000..f19f2acdbd
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/plugin.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+ <extension
+ point="org.eclipse.ui.importWizards">
+ <wizard
+ category="org.eclipse.osee.define.import.category"
+ class="org.eclipse.osee.framework.core.dsl.ui.integration.wizards.OseeTypesImportWizard"
+ icon="images/gears.gif"
+ id="org.eclipse.osee.framework.types.bridge.osee.types.import"
+ name="Osee Types Import">
+ <description>
+ Imports OSEE Types
+ </description>
+ </wizard>
+ </extension>
+ <extension
+ point="org.eclipse.ui.exportWizards">
+ <wizard
+ category="org.eclipse.osee.framework.ui.skynet.export"
+ class="org.eclipse.osee.framework.core.dsl.ui.integration.wizards.OseeTypesExportWizard"
+ icon="images/gears.gif"
+ id="org.eclipse.osee.framework.types.bridge.osee.types.export"
+ name="Osee Types Export">
+ </wizard>
+ </extension>
+ <extension
+ point="org.eclipse.osee.framework.skynet.core.OseeTypesHandler">
+ <OseeTypesHandler
+ classname="org.eclipse.osee.framework.core.dsl.ui.integration.operations.XtextOseeTypesHandler">
+ </OseeTypesHandler>
+ </extension>
+</plugin>
diff --git a/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/internal/Activator.java b/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/internal/Activator.java
new file mode 100644
index 0000000000..ce78f06f7a
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/internal/Activator.java
@@ -0,0 +1,37 @@
+package org.eclipse.osee.framework.core.dsl.ui.integration.internal;
+
+import org.eclipse.osee.framework.core.services.IOseeCachingService;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+import org.osgi.util.tracker.ServiceTracker;
+
+public class Activator implements BundleActivator {
+ public static final String PLUGIN_ID = "org.eclipse.osee.framework.core.dsl.ui.integration";
+ private static BundleContext context;
+ private static Activator instance;
+ private ServiceTracker cacheServiceTracker;
+
+ static BundleContext getContext() {
+ return context;
+ }
+
+ @Override
+ public void start(BundleContext bundleContext) throws Exception {
+ Activator.instance = this;
+ Activator.context = bundleContext;
+ cacheServiceTracker = new ServiceTracker(context, IOseeCachingService.class.getName(), null);
+ cacheServiceTracker.open(true);
+ }
+
+ @Override
+ public void stop(BundleContext bundleContext) throws Exception {
+ Activator.context = null;
+ if (cacheServiceTracker != null) {
+ cacheServiceTracker.close();
+ }
+ }
+
+ public static IOseeCachingService getOseeCacheService() {
+ return (IOseeCachingService) Activator.instance.cacheServiceTracker.getService();
+ }
+}
diff --git a/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/operations/CreateEditorReportOperation.java b/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/operations/CreateEditorReportOperation.java
new file mode 100644
index 0000000000..30dc98e182
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/operations/CreateEditorReportOperation.java
@@ -0,0 +1,104 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.core.dsl.ui.integration.operations;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.nebula.widgets.xviewer.XViewerColumn;
+import org.eclipse.nebula.widgets.xviewer.XViewerColumn.SortDataType;
+import org.eclipse.osee.framework.core.dsl.ui.integration.internal.Activator;
+import org.eclipse.osee.framework.core.message.TableData;
+import org.eclipse.osee.framework.core.operation.AbstractOperation;
+import org.eclipse.osee.framework.core.operation.Operations;
+import org.eclipse.osee.framework.ui.skynet.results.IResultsEditorProvider;
+import org.eclipse.osee.framework.ui.skynet.results.IResultsEditorTab;
+import org.eclipse.osee.framework.ui.skynet.results.ResultsEditor;
+import org.eclipse.osee.framework.ui.skynet.results.table.IResultsXViewerRow;
+import org.eclipse.osee.framework.ui.skynet.results.table.ResultsEditorTableTab;
+import org.eclipse.osee.framework.ui.skynet.results.table.ResultsXViewerRow;
+import org.eclipse.swt.SWT;
+import org.eclipse.ui.progress.UIJob;
+
+/**
+ * @author Roberto E. Escobar
+ */
+public class CreateEditorReportOperation extends AbstractOperation {
+ private final Collection<TableData> tableData;
+ private final String reportName;
+
+ public CreateEditorReportOperation(String reportName, Collection<TableData> tableData) {
+ super("Generate Report", Activator.PLUGIN_ID);
+ this.tableData = tableData;
+ this.reportName = reportName;
+ }
+
+ @Override
+ protected void doWork(IProgressMonitor monitor) throws Exception {
+ List<IResultsEditorTab> tabs = new ArrayList<IResultsEditorTab>();
+ for (TableData data : tableData) {
+ List<XViewerColumn> columns = new ArrayList<XViewerColumn>();
+ for (String name : data.getColumns()) {
+ columns.add(new XViewerColumn(name, name, 80, SWT.LEFT, true, SortDataType.String, false, ""));
+ }
+ List<IResultsXViewerRow> rows = new ArrayList<IResultsXViewerRow>();
+ for (String[] row : data.getRows()) {
+ rows.add(new ResultsXViewerRow(row));
+ }
+ tabs.add(new ResultsEditorTableTab(data.getTitle(), columns, rows));
+ }
+ openReport(tabs);
+ }
+
+ private void openReport(final List<IResultsEditorTab> resultsTabs) {
+ Job job = new UIJob(reportName) {
+
+ @Override
+ public IStatus runInUIThread(IProgressMonitor monitor) {
+ IStatus status;
+ try {
+ ResultsEditor.open(new ReportProvider(getName(), resultsTabs));
+ status = Status.OK_STATUS;
+ } catch (Exception ex) {
+ status =
+ new Status(IStatus.ERROR, Activator.PLUGIN_ID, String.format("Error creating %s Report",
+ reportName), ex);
+ }
+ return status;
+ }
+ };
+ Operations.scheduleJob(job, true, Job.SHORT, null);
+ }
+
+ private static final class ReportProvider implements IResultsEditorProvider {
+ private final List<IResultsEditorTab> resultsTabs;
+ private final String editorName;
+
+ public ReportProvider(String editorName, List<IResultsEditorTab> resultsTabs) {
+ this.resultsTabs = resultsTabs;
+ this.editorName = editorName;
+ }
+
+ @Override
+ public String getEditorName() {
+ return editorName;
+ }
+
+ @Override
+ public List<IResultsEditorTab> getResultsEditorTabs() {
+ return resultsTabs;
+ }
+ }
+}
diff --git a/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/operations/ExcelToEMFModel.java b/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/operations/ExcelToEMFModel.java
new file mode 100644
index 0000000000..eab01aec74
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/operations/ExcelToEMFModel.java
@@ -0,0 +1,359 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.core.dsl.ui.integration.operations;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.osee.framework.core.dsl.oseeDsl.OseeDsl;
+import org.eclipse.osee.framework.core.dsl.oseeDsl.OseeDslFactory;
+import org.eclipse.osee.framework.core.dsl.oseeDsl.OseeType;
+import org.eclipse.osee.framework.core.dsl.oseeDsl.RelationMultiplicityEnum;
+import org.eclipse.osee.framework.core.dsl.oseeDsl.XArtifactType;
+import org.eclipse.osee.framework.core.dsl.oseeDsl.XAttributeType;
+import org.eclipse.osee.framework.core.dsl.oseeDsl.XAttributeTypeRef;
+import org.eclipse.osee.framework.core.dsl.oseeDsl.XOseeEnumEntry;
+import org.eclipse.osee.framework.core.dsl.oseeDsl.XOseeEnumType;
+import org.eclipse.osee.framework.core.dsl.oseeDsl.XRelationType;
+import org.eclipse.osee.framework.core.exception.OseeArgumentException;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.core.exception.OseeExceptions;
+import org.eclipse.osee.framework.core.exception.OseeInvalidInheritanceException;
+import org.eclipse.osee.framework.core.exception.OseeStateException;
+import org.eclipse.osee.framework.jdk.core.type.Pair;
+import org.eclipse.osee.framework.jdk.core.util.Lib;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+import org.eclipse.osee.framework.jdk.core.util.xml.Jaxp;
+import org.eclipse.osee.framework.skynet.core.artifact.Attribute;
+import org.eclipse.osee.framework.skynet.core.attribute.AttributeExtensionManager;
+import org.eclipse.osee.framework.skynet.core.attribute.EnumeratedAttribute;
+import org.eclipse.osee.framework.skynet.core.importing.IOseeDataTypeProcessor;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+/**
+ * @author Roberto E. Escobar
+ */
+public class ExcelToEMFModel implements IOseeDataTypeProcessor {
+ private final OseeDslFactory factory;
+ private final Map<String, OseeDsl> oseeModels;
+ private OseeDsl currentModel;
+
+ public ExcelToEMFModel(Map<String, OseeDsl> oseeModels) {
+ this.factory = OseeDslFactory.eINSTANCE;
+ this.oseeModels = oseeModels;
+ }
+
+ public void createModel(String name) {
+ currentModel = factory.createOseeDsl();
+ oseeModels.put(name, currentModel);
+ }
+
+ private OseeDsl getCurrentModel() {
+ return currentModel;
+ }
+
+ private String toQualifiedName(String name) {
+ return "\"" + name + "\"";
+ }
+
+ private OseeType getObject(String name, Class<? extends OseeType> classToLookFor) throws OseeArgumentException {
+ EList<? extends OseeType> types;
+
+ if (classToLookFor.equals(XArtifactType.class)) {
+ types = getCurrentModel().getArtifactTypes();
+ } else if (classToLookFor.equals(XAttributeType.class)) {
+ types = getCurrentModel().getAttributeTypes();
+ } else if (classToLookFor.equals(XRelationType.class)) {
+ types = getCurrentModel().getRelationTypes();
+ } else if (classToLookFor.equals(XOseeEnumType.class)) {
+ types = getCurrentModel().getEnumTypes();
+ } else {
+ throw new OseeArgumentException(classToLookFor.getName() + " not a supported type");
+ }
+ for (OseeType oseeTypes : types) {
+ if (name.equals(oseeTypes.getName())) {
+ return classToLookFor.cast(oseeTypes);
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public void onArtifactTypeInheritance(String ancestor, Collection<String> descendants) throws OseeCoreException {
+ XArtifactType ancestorType = (XArtifactType) getObject(ancestor, XArtifactType.class);
+ if (ancestorType == null) {
+ throw new OseeInvalidInheritanceException("Ancestor [%s]");
+ }
+
+ // if (superArtifactTypeName != null) {
+ // ArtifactType superArtifactType = (ArtifactType) getObject(superArtifactTypeName, ArtifactType.class);
+ // if (superArtifactType == null) {
+ // boolean isAbstractSuper = false;
+ // onArtifactType(isAbstractSuper, superArtifactTypeName, null);
+ // superArtifactType = (ArtifactType) getObject(superArtifactTypeName, ArtifactType.class);
+ // }
+ // artifactType.setSuperArtifactType(superArtifactType);
+ // }
+ }
+
+ @Override
+ public void onArtifactType(boolean isAbstract, String name) throws OseeCoreException {
+ String id = toQualifiedName(name);
+ OseeType types = getObject(id, XArtifactType.class);
+ if (types == null) {
+ XArtifactType artifactType = factory.createXArtifactType();
+ artifactType.setName(id);
+ getCurrentModel().getArtifactTypes().add(artifactType);
+ }
+ }
+
+ @Override
+ public void onAttributeType(String attributeBaseType, String attributeProviderTypeName, String fileTypeExtension, String name, String defaultValue, String validityXml, int minOccurrence, int maxOccurrence, String toolTipText, String taggerId) throws OseeCoreException {
+ String id = toQualifiedName(name);
+ OseeType types = getObject(id, XAttributeType.class);
+ if (types == null) {
+ XAttributeType attributeType = factory.createXAttributeType();
+ attributeType.setName(id);
+ attributeType.setBaseAttributeType(Lib.getExtension(attributeBaseType));
+ attributeType.setDataProvider(Lib.getExtension(attributeProviderTypeName));
+ attributeType.setMin(String.valueOf(minOccurrence));
+
+ String maxValue;
+ if (maxOccurrence == Integer.MAX_VALUE) {
+ maxValue = "unlimited";
+ } else {
+ maxValue = String.valueOf(maxOccurrence);
+ }
+ attributeType.setMax(maxValue);
+
+ if (Strings.isValid(fileTypeExtension)) {
+ attributeType.setFileExtension(fileTypeExtension);
+ }
+ if (Strings.isValid(defaultValue)) {
+ attributeType.setDefaultValue(defaultValue);
+ }
+ if (Strings.isValid(toolTipText)) {
+ attributeType.setDescription(toolTipText);
+ }
+ if (Strings.isValid(taggerId)) {
+ attributeType.setTaggerId(taggerId);
+ }
+
+ XOseeEnumType enumType = getEnumType(attributeBaseType, attributeProviderTypeName, name, validityXml);
+ if (enumType != null) {
+ attributeType.setEnumType(enumType);
+ }
+ getCurrentModel().getAttributeTypes().add(attributeType);
+ }
+ }
+
+ @Override
+ public boolean doesArtifactSuperTypeExist(String artifactSuperTypeName) throws OseeCoreException {
+ return getObject(artifactSuperTypeName, XArtifactType.class) != null;
+ }
+
+ @Override
+ public void onAttributeValidity(String attributeName, String artifactSuperTypeName, Collection<String> concreteTypes) throws OseeCoreException {
+ XArtifactType superArtifactType =
+ (XArtifactType) getObject(toQualifiedName(artifactSuperTypeName), XArtifactType.class);
+ XAttributeType attributeType = (XAttributeType) getObject(toQualifiedName(attributeName), XAttributeType.class);
+
+ if (superArtifactType == null && "Artifact".equals(artifactSuperTypeName)) {
+ onArtifactType(false, "Artifact");
+ superArtifactType = (XArtifactType) getObject(toQualifiedName(artifactSuperTypeName), XArtifactType.class);
+ }
+
+ if (superArtifactType == null || attributeType == null) {
+ throw new OseeStateException(String.format("Type Missing: %s - %s", artifactSuperTypeName, attributeName));
+ }
+ XAttributeTypeRef reference = factory.createXAttributeTypeRef();
+ reference.setValidAttributeType(attributeType);
+ superArtifactType.getValidAttributeTypes().add(reference);
+ }
+
+ @Override
+ public void onRelationType(String name, String sideAName, String sideBName, String artifactTypeSideA, String artifactTypeSideB, String multiplicity, String ordered, String defaultOrderTypeGuid) throws OseeCoreException {
+ String id = toQualifiedName(name);
+ OseeType types = getObject(id, XRelationType.class);
+ if (types == null) {
+ XRelationType relationType = factory.createXRelationType();
+ relationType.setName(id);
+ relationType.setSideAName(sideAName);
+ relationType.setSideBName(sideBName);
+
+ String arranger;
+ if ("Yes".equals(ordered)) {
+ arranger = "Lexicographical_Ascending";
+ } else {
+ arranger = "Unordered";
+ }
+ relationType.setDefaultOrderType(arranger);
+ getCurrentModel().getRelationTypes().add(relationType);
+ }
+ }
+
+ @Override
+ public void onRelationValidity(String artifactTypeName, String relationTypeName, int sideAMax, int sideBMax) throws OseeCoreException {
+ XRelationType relationType = (XRelationType) getObject(toQualifiedName(relationTypeName), XRelationType.class);
+ XArtifactType artifactType = (XArtifactType) getObject(toQualifiedName(artifactTypeName), XArtifactType.class);
+
+ if (sideAMax > 0) {
+ relationType.setSideAArtifactType(artifactType);
+ }
+ if (sideBMax > 0) {
+ relationType.setSideBArtifactType(artifactType);
+ }
+
+ RelationMultiplicityEnum multiplicity = relationType.getMultiplicity();
+ if (sideAMax == Integer.MAX_VALUE && sideBMax == 1) {
+ multiplicity = RelationMultiplicityEnum.ONE_TO_MANY;
+
+ } else if (sideAMax == 1 && sideBMax == Integer.MAX_VALUE) {
+ multiplicity = RelationMultiplicityEnum.MANY_TO_ONE;
+
+ } else if (sideAMax == Integer.MAX_VALUE && sideBMax == Integer.MAX_VALUE) {
+ multiplicity = RelationMultiplicityEnum.MANY_TO_MANY;
+ } else if (sideAMax == 1 && sideBMax == 1) {
+ multiplicity = RelationMultiplicityEnum.ONE_TO_ONE;
+ } else {
+ System.out.println("None detected - " + relationTypeName);
+ }
+
+ if (multiplicity != null && !multiplicity.equals(relationType.getMultiplicity())) {
+ relationType.setMultiplicity(multiplicity);
+ } else {
+ System.out.println("Null multiplicity - " + relationTypeName);
+ }
+ }
+
+ private static void checkEnumTypeName(String enumTypeName) throws OseeCoreException {
+ if (!Strings.isValid(enumTypeName)) {
+ throw new OseeArgumentException("Osee Enum Type Name cannot be null.");
+ }
+ }
+
+ private XOseeEnumType getEnumType(String attributeBaseType, String attributeProviderTypeName, String name, String validityXml) throws OseeCoreException {
+ Class<? extends Attribute<?>> baseAttributeClass =
+ AttributeExtensionManager.getAttributeClassFor(attributeBaseType);
+
+ XOseeEnumType oseeEnumType = null;
+ if (EnumeratedAttribute.class.isAssignableFrom(baseAttributeClass)) {
+ createEnumTypeFromXml(toQualifiedEnumName(name), validityXml);
+ }
+ return oseeEnumType;
+ }
+
+ private String toQualifiedEnumName(String name) {
+ return "\"" + name + ".enum\"";
+ }
+
+ private XOseeEnumType createEnumTypeFromXml(String attributeTypeName, String xmlDefinition) throws OseeCoreException {
+ List<Pair<String, Integer>> entries = new ArrayList<Pair<String, Integer>>();
+ String enumTypeName = "";
+
+ if (!Strings.isValid(xmlDefinition)) {
+ throw new OseeArgumentException("The enum xml definition must not be null or empty");
+ }
+
+ Document document = null;
+ try {
+ document = Jaxp.readXmlDocument(xmlDefinition);
+ } catch (Exception ex) {
+ OseeExceptions.wrapAndThrow(ex);
+ }
+ enumTypeName = attributeTypeName;
+ Element choicesElement = document.getDocumentElement();
+ NodeList enumerations = choicesElement.getChildNodes();
+ Set<String> choices = new LinkedHashSet<String>();
+
+ for (int i = 0; i < enumerations.getLength(); i++) {
+ Node node = enumerations.item(i);
+ if (node.getNodeName().equalsIgnoreCase("Enum")) {
+ choices.add(node.getTextContent());
+ } else {
+ throw new OseeArgumentException("Validity Xml not of excepted enum format");
+ }
+ }
+
+ int ordinal = 0;
+ for (String choice : choices) {
+ entries.add(new Pair<String, Integer>(choice, ordinal++));
+ }
+
+ return createEnumType(enumTypeName, entries);
+ }
+
+ private XOseeEnumType createEnumType(String enumTypeName, List<Pair<String, Integer>> entries) throws OseeCoreException {
+ checkEnumTypeName(enumTypeName);
+ checkEntryIntegrity(enumTypeName, entries);
+
+ XOseeEnumType oseeEnumType = null;
+
+ OseeType types = getObject(enumTypeName, XOseeEnumType.class);
+ if (types == null) {
+ oseeEnumType = factory.createXOseeEnumType();
+ oseeEnumType.setName(enumTypeName);
+
+ for (Pair<String, Integer> entry : entries) {
+ XOseeEnumEntry oseeEnum = factory.createXOseeEnumEntry();
+ oseeEnum.setName(entry.getFirst());
+ oseeEnum.setOrdinal(String.valueOf(entry.getSecond()));
+ oseeEnumType.getEnumEntries().add(oseeEnum);
+ }
+ getCurrentModel().getEnumTypes().add(oseeEnumType);
+ } else {
+ oseeEnumType = (XOseeEnumType) types;
+ }
+ return oseeEnumType;
+ }
+
+ private static void checkEntryIntegrity(String enumTypeName, List<Pair<String, Integer>> entries) throws OseeCoreException {
+ if (entries == null) {
+ throw new OseeArgumentException(String.format("Osee Enum Type [%s] had null entries", enumTypeName));
+ }
+
+ // if (entries.size() <= 0) throw new OseeArgumentException(String.format("Osee Enum Type [%s] had 0 entries",
+ // enumTypeName));
+ Map<String, Integer> values = new HashMap<String, Integer>();
+ for (Pair<String, Integer> entry : entries) {
+ String name = entry.getFirst();
+ int ordinal = entry.getSecond();
+ if (!Strings.isValid(name)) {
+ throw new OseeArgumentException("Enum entry name cannot be null");
+ }
+ if (ordinal < 0) {
+ throw new OseeArgumentException("Enum entry ordinal cannot be of negative value");
+ }
+ if (values.containsKey(name)) {
+ throw new OseeArgumentException(String.format("Unique enum entry name violation - [%s] already exists.",
+ name));
+ }
+ if (values.containsValue(ordinal)) {
+ throw new OseeArgumentException(String.format("Unique enum entry ordinal violation - [%s] already exists.",
+ ordinal));
+ }
+ values.put(name, ordinal);
+ }
+ }
+
+ @Override
+ public void onFinish() {
+
+ }
+}
diff --git a/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/operations/OseeTypesExportOperation.java b/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/operations/OseeTypesExportOperation.java
new file mode 100644
index 0000000000..acccd443f7
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/operations/OseeTypesExportOperation.java
@@ -0,0 +1,66 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.core.dsl.ui.integration.operations;
+
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.OutputStream;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Map;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.core.client.ClientSessionManager;
+import org.eclipse.osee.framework.core.client.server.HttpUrlBuilderClient;
+import org.eclipse.osee.framework.core.data.OseeServerContext;
+import org.eclipse.osee.framework.core.dsl.ui.integration.internal.Activator;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.core.operation.AbstractOperation;
+import org.eclipse.osee.framework.core.util.HttpProcessor;
+import org.eclipse.osee.framework.core.util.HttpProcessor.AcquireResult;
+import org.eclipse.osee.framework.jdk.core.util.Lib;
+
+/**
+ * @author Roberto E. Escobar
+ */
+public class OseeTypesExportOperation extends AbstractOperation {
+ private final File folder;
+
+ public OseeTypesExportOperation(File folder) {
+ super("Export Osee Types Model", Activator.PLUGIN_ID);
+ this.folder = folder;
+ }
+
+ @Override
+ protected void doWork(IProgressMonitor monitor) throws Exception {
+ Map<String, String> parameters = new HashMap<String, String>();
+ parameters.put("sessionId", ClientSessionManager.getSessionId());
+
+ String url =
+ HttpUrlBuilderClient.getInstance().getOsgiServletServiceUrl(OseeServerContext.OSEE_MODEL_CONTEXT,
+ parameters);
+
+ OutputStream outputStream = null;
+ try {
+ outputStream = new BufferedOutputStream(new FileOutputStream(new File(folder, getOseeFileName())));
+ AcquireResult results = HttpProcessor.acquire(new URL(url), outputStream);
+ if (!results.wasSuccessful()) {
+ throw new OseeCoreException("Error exporting osee types");
+ }
+ } finally {
+ Lib.close(outputStream);
+ }
+ }
+
+ private String getOseeFileName() {
+ return "OseeTypes_" + Lib.getDateTimeString() + ".osee";
+ }
+}
diff --git a/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/operations/OseeTypesImportOperation.java b/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/operations/OseeTypesImportOperation.java
new file mode 100644
index 0000000000..f1843f8d8f
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/operations/OseeTypesImportOperation.java
@@ -0,0 +1,141 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.core.dsl.ui.integration.operations;
+
+import java.io.BufferedInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URI;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.eclipse.compare.CompareEditorInput;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.emf.compare.diff.metamodel.ComparisonSnapshot;
+import org.eclipse.emf.compare.ui.editor.ModelCompareEditorInput;
+import org.eclipse.osee.framework.core.data.OseeServerContext;
+import org.eclipse.osee.framework.core.dsl.integration.ModelUtil;
+import org.eclipse.osee.framework.core.dsl.ui.integration.internal.Activator;
+import org.eclipse.osee.framework.core.enums.CoreTranslatorId;
+import org.eclipse.osee.framework.core.message.OseeImportModelRequest;
+import org.eclipse.osee.framework.core.message.OseeImportModelResponse;
+import org.eclipse.osee.framework.core.message.TableData;
+import org.eclipse.osee.framework.core.operation.AbstractOperation;
+import org.eclipse.osee.framework.core.operation.Operations;
+import org.eclipse.osee.framework.core.services.IOseeCachingService;
+import org.eclipse.osee.framework.jdk.core.util.Lib;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+import org.eclipse.osee.framework.plugin.core.util.Jobs;
+import org.eclipse.osee.framework.skynet.core.artifact.HttpClientMessage;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.progress.UIJob;
+
+/**
+ * @author Roberto E. Escobar
+ */
+public class OseeTypesImportOperation extends AbstractOperation {
+ private final IOseeCachingService cacheService;
+ private final URI model;
+ private final boolean isPersistAllowed;
+ private final boolean createTypeChangeReport;
+ private final boolean createCompareReport;
+
+ public OseeTypesImportOperation(IOseeCachingService cacheService, URI model, boolean createTypeChangeReport, boolean createCompareReport, boolean isPersistAllowed) {
+ super("Import Osee Types Model", Activator.PLUGIN_ID);
+ this.cacheService = cacheService;
+ this.model = model;
+ this.isPersistAllowed = isPersistAllowed;
+ this.createCompareReport = createCompareReport;
+ this.createTypeChangeReport = createTypeChangeReport;
+ }
+
+ private String getModel(URL url) throws IOException {
+ InputStream inputStream = null;
+ try {
+ inputStream = new BufferedInputStream(url.openStream());
+ return Lib.inputStreamToString(inputStream);
+ } finally {
+ Lib.close(inputStream);
+ }
+ }
+
+ private String getName(URI uri) {
+ String name = uri.toASCIIString();
+ int index = name.lastIndexOf("/");
+ if (index > 0) {
+ name = name.substring(index + 1, name.length());
+ }
+ return name;
+ }
+
+ @Override
+ protected void doWork(IProgressMonitor monitor) throws Exception {
+ Map<String, String> parameters = new HashMap<String, String>();
+
+ OseeImportModelRequest modelRequest =
+ new OseeImportModelRequest(getName(model), getModel(model.toURL()), createTypeChangeReport,
+ createCompareReport, isPersistAllowed);
+
+ OseeImportModelResponse response =
+ HttpClientMessage.send(OseeServerContext.OSEE_MODEL_CONTEXT, parameters,
+ CoreTranslatorId.OSEE_IMPORT_MODEL_REQUEST, modelRequest,
+ CoreTranslatorId.OSEE_IMPORT_MODEL_RESPONSE);
+
+ if (response.wasPersisted()) {
+ cacheService.getEnumTypeCache().reloadCache();
+ cacheService.getAttributeTypeCache().reloadCache();
+ cacheService.getArtifactTypeCache().reloadCache();
+ cacheService.getRelationTypeCache().reloadCache();
+ }
+
+ if (createTypeChangeReport) {
+ openTabReport(response.getReportData());
+ }
+
+ if (createCompareReport) {
+ String compareName = response.getComparisonSnapshotModelName();
+ String compareData = response.getComparisonSnapshotModel();
+ if (Strings.isValid(compareData) && Strings.isValid(compareName)) {
+ ComparisonSnapshot snapshot = ModelUtil.loadComparisonSnapshot(compareName, compareData);
+ openCompareEditor(snapshot);
+ }
+ }
+ }
+
+ private void openCompareEditor(final ComparisonSnapshot snapshot) {
+ Job job = new UIJob("Open Compare") {
+
+ @Override
+ public IStatus runInUIThread(IProgressMonitor monitor) {
+ IStatus status;
+ try {
+ CompareEditorInput input = new ModelCompareEditorInput(snapshot);
+ IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+ page.openEditor(input, "org.eclipse.compare.CompareEditor", true);
+ status = Status.OK_STATUS;
+ } catch (Exception ex) {
+ status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, "Error opening compare editor", ex);
+ }
+ return status;
+ }
+ };
+ Jobs.startJob(job);
+ }
+
+ private void openTabReport(List<TableData> tableData) {
+ Operations.executeAsJob(new CreateEditorReportOperation("Un-Persisted Osee Types", tableData), true);
+ }
+}
diff --git a/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/operations/ResolveImportsOperation.java b/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/operations/ResolveImportsOperation.java
new file mode 100644
index 0000000000..a448e9a946
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/operations/ResolveImportsOperation.java
@@ -0,0 +1,99 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.core.dsl.ui.integration.operations;
+
+import java.io.BufferedInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.osee.framework.core.dsl.ui.integration.internal.Activator;
+import org.eclipse.osee.framework.core.dsl.ui.integration.wizards.LinkMessage;
+import org.eclipse.osee.framework.core.dsl.ui.integration.wizards.LinkNode;
+import org.eclipse.osee.framework.core.operation.AbstractOperation;
+import org.eclipse.osee.framework.jdk.core.util.Lib;
+import org.eclipse.xtext.resource.IClasspathUriResolver;
+
+/**
+ * @author Roberto E. Escobar
+ */
+public class ResolveImportsOperation extends AbstractOperation {
+ private final Pattern pattern = Pattern.compile("\\s*import\\s+\"(.*?)\"");
+ private final List<IFile> selectedItems;
+ private final Matcher matcher;
+ private final IClasspathUriResolver resolver;
+ private final List<LinkNode> dependencyData;
+
+ public ResolveImportsOperation(IClasspathUriResolver resolver, List<IFile> selectedItems, List<LinkNode> dependencyData) {
+ super("Extract imports", Activator.PLUGIN_ID);
+ this.matcher = pattern.matcher("");
+ this.selectedItems = selectedItems;
+ this.resolver = resolver;
+ this.dependencyData = dependencyData;
+ }
+
+ @Override
+ protected void doWork(IProgressMonitor monitor) throws Exception {
+ if (!selectedItems.isEmpty()) {
+ double workPercentage = 1.0 / selectedItems.size();
+ for (IFile selectedFile : selectedItems) {
+ URI uri = URI.createURI(selectedFile.getLocationURI().toASCIIString());
+ LinkNode node = new LinkNode(uri);
+ dependencyData.add(node);
+ resolveImports(node);
+ }
+ monitor.worked(calculateWork(workPercentage));
+ }
+ }
+
+ private void resolveImports(LinkNode node) throws IOException {
+ if (node.getUri() != null) {
+ Set<String> requiredImports = null;
+ try {
+ requiredImports = getImports(node.getUri());
+ } catch (IOException ex) {
+ node.setIsResolved(false);
+ throw ex;
+ }
+ for (String importEntry : requiredImports) {
+ URI resolved = resolver.resolve((Object) null, URI.createURI(importEntry));
+ LinkMessage message = new LinkMessage(resolved, importEntry);
+ node.addChild(message);
+ resolveImports(message);
+ }
+ }
+ }
+
+ private Set<String> getImports(URI uri) throws IOException {
+ Set<String> imports = new HashSet<String>();
+ InputStream inputStream = null;
+ try {
+ inputStream = new BufferedInputStream(new URL(uri.toString()).openStream());
+ String inputString = Lib.inputStreamToString(inputStream);
+ matcher.reset(inputString);
+ while (matcher.find()) {
+ imports.add(matcher.group(1));
+ }
+ } finally {
+ if (inputStream != null) {
+ inputStream.close();
+ }
+ }
+ return imports;
+ }
+}
diff --git a/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/operations/XtextOseeTypesHandler.java b/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/operations/XtextOseeTypesHandler.java
new file mode 100644
index 0000000000..514c95cac1
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/operations/XtextOseeTypesHandler.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.core.dsl.ui.integration.operations;
+
+import java.net.URI;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.core.dsl.ui.integration.internal.Activator;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.core.exception.OseeExceptions;
+import org.eclipse.osee.framework.core.operation.IOperation;
+import org.eclipse.osee.framework.core.operation.Operations;
+import org.eclipse.osee.framework.core.services.IOseeCachingService;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+import org.eclipse.osee.framework.skynet.core.importing.IOseeTypesHandler;
+
+/**
+ * @author Roberto E. Escobar
+ */
+public class XtextOseeTypesHandler implements IOseeTypesHandler {
+
+ @Override
+ public void execute(IProgressMonitor monitor, URI uri) throws OseeCoreException {
+ try {
+ IOseeCachingService cacheService = Activator.getOseeCacheService();
+ IOperation operation = new OseeTypesImportOperation(cacheService, uri, false, false, true);
+ Operations.executeWorkAndCheckStatus(operation, monitor, -1);
+ } catch (Exception ex) {
+ OseeExceptions.wrapAndThrow(ex);
+ }
+ }
+
+ @Override
+ public boolean isApplicable(String resource) {
+ return Strings.isValid(resource) && resource.endsWith(".osee");
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/wizards/LinkMessage.java b/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/wizards/LinkMessage.java
new file mode 100644
index 0000000000..af6ea0bcff
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/wizards/LinkMessage.java
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.core.dsl.ui.integration.wizards;
+
+import org.eclipse.emf.common.util.URI;
+
+/**
+ * @author Roberto E. Escobar
+ */
+public class LinkMessage extends LinkNode {
+ private final String importEntry;
+
+ public LinkMessage(URI nodeURI, String importEntry) {
+ super(nodeURI);
+ this.importEntry = importEntry;
+ }
+
+ public String getImportEntry() {
+ return importEntry;
+ }
+}
diff --git a/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/wizards/LinkNode.java b/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/wizards/LinkNode.java
new file mode 100644
index 0000000000..94f99a08bc
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/wizards/LinkNode.java
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.core.dsl.ui.integration.wizards;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.eclipse.emf.common.util.URI;
+
+/**
+ * @author Roberto E. Escobar
+ */
+public class LinkNode {
+ public LinkNode nodeParent;
+ public URI nodeURI;
+ public List<LinkNode> children;
+ public boolean resolved;
+
+ public LinkNode(URI nodeURI) {
+ this.nodeURI = nodeURI;
+ this.children = new ArrayList<LinkNode>();
+ this.resolved = true;
+ }
+
+ public void addChild(LinkNode node) {
+ nodeParent = this;
+ children.add(node);
+ }
+
+ public URI getUri() {
+ return nodeURI;
+ }
+
+ public LinkNode getParent() {
+ return nodeParent;
+ }
+
+ public boolean hasChildren() {
+ return !getChildren().isEmpty();
+ }
+
+ public List<LinkNode> getChildren() {
+ return children;
+ }
+
+ public void setIsResolved(boolean resolved) {
+ this.resolved = resolved;
+ }
+
+ public boolean isResolved() {
+ return resolved;
+ }
+} \ No newline at end of file
diff --git a/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/wizards/LinkNodeContentProvider.java b/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/wizards/LinkNodeContentProvider.java
new file mode 100644
index 0000000000..936a827d12
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/wizards/LinkNodeContentProvider.java
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.core.dsl.ui.integration.wizards;
+
+import java.util.Collection;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+
+/**
+ * @author Roberto E. Escobar
+ */
+public class LinkNodeContentProvider implements ITreeContentProvider {
+
+ @Override
+ public Object[] getChildren(Object element) {
+ if (element instanceof LinkNode) {
+ return ((LinkNode) element).getChildren().toArray();
+ } else if (element instanceof Collection<?>) {
+ return ((Collection<?>) element).toArray();
+ }
+ return new Object[0];
+ }
+
+ @Override
+ public Object getParent(Object element) {
+ if (element instanceof LinkNode) {
+ return ((LinkNode) element).getParent();
+ }
+ return null;
+ }
+
+ @Override
+ public boolean hasChildren(Object element) {
+ if (element instanceof LinkNode) {
+ return ((LinkNode) element).hasChildren();
+ }
+ return false;
+ }
+
+ @Override
+ public Object[] getElements(Object inputElement) {
+ return getChildren(inputElement);
+ }
+
+ @Override
+ public void dispose() {
+ }
+
+ @Override
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ }
+}
diff --git a/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/wizards/LinkNodeLabelProvider.java b/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/wizards/LinkNodeLabelProvider.java
new file mode 100644
index 0000000000..59f0f59db3
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/wizards/LinkNodeLabelProvider.java
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.core.dsl.ui.integration.wizards;
+
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.osee.framework.ui.skynet.FrameworkImage;
+import org.eclipse.osee.framework.ui.swt.ImageManager;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * @author Roberto E. Escobar
+ */
+public class LinkNodeLabelProvider extends LabelProvider {
+
+ @Override
+ public Image getImage(Object element) {
+ Image toReturn = super.getImage(element);
+ LinkNode node = null;
+ if (element instanceof LinkNode) {
+ node = (LinkNode) element;
+ toReturn = PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_ELEMENT);
+ }
+ if (element instanceof LinkMessage) {
+ toReturn = ImageManager.getImage(FrameworkImage.OSEE_TYPES_LINK);
+ }
+ if (node != null && !node.isResolved()) {
+ toReturn = PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJS_ERROR_TSK);
+ }
+ return toReturn;
+ }
+
+ @Override
+ public String getText(Object element) {
+ if (element instanceof LinkMessage) {
+ return ((LinkMessage) element).getImportEntry();
+ } else if (element instanceof LinkNode) {
+ LinkNode node = (LinkNode) element;
+ return node.getUri().toFileString();
+ }
+ return super.getText(element);
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/wizards/NewOseeTypesFilePage.java b/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/wizards/NewOseeTypesFilePage.java
new file mode 100644
index 0000000000..abbef407f4
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/wizards/NewOseeTypesFilePage.java
@@ -0,0 +1,142 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.core.dsl.ui.integration.wizards;
+
+import java.io.File;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+import org.eclipse.osee.framework.ui.plugin.util.DirectoryOrFileSelector;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.ui.dialogs.WizardDataTransferPage;
+
+public class NewOseeTypesFilePage extends WizardDataTransferPage {
+ private static final String PAGE_NAME = "org.eclipse.osee.framework.types.bridge.wizards.NewOseeTypeFilePage";
+
+ private DirectoryOrFileSelector sourceFileSelector;
+ private DirectoryOrFileSelector destinationFileSelector;
+ private Button fromExcel;
+ private final IResource defaultDestination;
+
+ protected NewOseeTypesFilePage(String title, IResource destination) {
+ super(PAGE_NAME);
+ this.defaultDestination = destination;
+ setTitle(title);
+ setDescription(title);
+ }
+
+ @Override
+ protected boolean allowNewContainerName() {
+ return false;
+ }
+
+ @Override
+ public void handleEvent(Event event) {
+ updateWidgetEnablements();
+ setPageComplete(determinePageCompletion());
+ }
+
+ @Override
+ public void createControl(Composite parent) {
+ initializeDialogUnits(parent);
+
+ Composite composite = new Composite(parent, SWT.NULL);
+ composite.setLayout(new GridLayout(1, false));
+ composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ composite.setFont(parent.getFont());
+
+ destinationFileSelector = new DirectoryOrFileSelector(composite, SWT.NONE, "Destination File", this);
+ destinationFileSelector.addListener(SWT.Selection, this);
+ destinationFileSelector.setDirectorySelected(false);
+
+ fromExcel = new Button(composite, SWT.CHECK);
+ fromExcel.setText("Based on Excel Osee Types");
+ fromExcel.setLayoutData(new GridData(SWT.BEGINNING, SWT.TOP, false, false));
+
+ sourceFileSelector = new DirectoryOrFileSelector(composite, SWT.NONE, "Excel Source File(s)", this);
+ sourceFileSelector.addListener(SWT.Selection, this);
+ sourceFileSelector.setDirectorySelected(false);
+
+ fromExcel.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ sourceFileSelector.setEnabled(fromExcel.getSelection());
+ }
+ });
+
+ restoreWidgetValues();
+ updateWidgetEnablements();
+ setPageComplete(determinePageCompletion());
+ setControl(composite);
+ }
+
+ @Override
+ protected void restoreWidgetValues() {
+ IDialogSettings settings = getDialogSettings();
+ if (settings != null) {
+ if (defaultDestination != null) {
+ destinationFileSelector.setDirectorySelected(true);
+ destinationFileSelector.setText(new File(defaultDestination.getLocationURI()).getAbsolutePath());
+ } else {
+ restoreSelector(settings, "new.osee.types.destination", destinationFileSelector);
+ }
+
+ restoreSelector(settings, "new.osee.types.source", sourceFileSelector);
+ }
+ }
+
+ private void restoreSelector(IDialogSettings settings, String key, DirectoryOrFileSelector selector) {
+ String file = settings.get("key");
+ boolean isSelected = settings.getBoolean(key + ".isDir");
+ if (Strings.isValid(file)) {
+ selector.setText(file);
+ selector.setDirectorySelected(isSelected);
+ }
+ }
+
+ private void saveSelector(IDialogSettings settings, String key, DirectoryOrFileSelector selector) {
+ File file = selector.getFile();
+ if (file != null) {
+ settings.put(key, file.getAbsolutePath());
+ settings.put(key + ".isDir", file.isDirectory());
+ }
+ }
+
+ @Override
+ protected void saveWidgetValues() {
+ IDialogSettings settings = getDialogSettings();
+ if (settings != null) {
+ saveSelector(settings, "new.osee.types.source", sourceFileSelector);
+ saveSelector(settings, "new.osee.types.destination", destinationFileSelector);
+ }
+ }
+
+ @Override
+ public boolean isPageComplete() {
+ return getSourceFile() != null && getDestinationFile() != null && super.isPageComplete();
+ }
+
+ public File getSourceFile() {
+ return sourceFileSelector.getFile();
+ }
+
+ public File getDestinationFile() {
+ return destinationFileSelector.getFile();
+ }
+}
diff --git a/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/wizards/OseeTypesExportWizard.java b/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/wizards/OseeTypesExportWizard.java
new file mode 100644
index 0000000000..8ec6ec9f60
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/wizards/OseeTypesExportWizard.java
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.core.dsl.ui.integration.wizards;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.osee.framework.core.dsl.ui.integration.internal.Activator;
+import org.eclipse.osee.framework.core.dsl.ui.integration.operations.OseeTypesExportOperation;
+import org.eclipse.osee.framework.core.operation.CompositeOperation;
+import org.eclipse.osee.framework.core.operation.IOperation;
+import org.eclipse.osee.framework.core.operation.Operations;
+import org.eclipse.ui.IImportWizard;
+import org.eclipse.ui.IWorkbench;
+
+/**
+ * @author Roberto E. Escobar
+ */
+public class OseeTypesExportWizard extends Wizard implements IImportWizard {
+ private ResourceSelectionPage mainPage;
+
+ public OseeTypesExportWizard() {
+ super();
+ // setDialogSettings(Activator.getInstance().getDialogSettings());
+ setWindowTitle("OSEE Types Export Wizard");
+ setNeedsProgressMonitor(true);
+ setHelpAvailable(true);
+ }
+
+ @Override
+ public boolean performFinish() {
+ final File folder = mainPage.getFile();
+
+ List<IOperation> ops = new ArrayList<IOperation>();
+ ops.add(new OseeTypesExportOperation(folder));
+ Operations.executeAsJob(new CompositeOperation("Export Osee Type Model", Activator.PLUGIN_ID, ops), true);
+ return true;
+ }
+
+ @Override
+ public void init(IWorkbench workbench, IStructuredSelection selection) {
+ mainPage = new ResourceSelectionPage(getWindowTitle());
+ }
+
+ @Override
+ public void addPages() {
+ addPage(mainPage);
+ }
+}
diff --git a/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/wizards/OseeTypesImportPage.java b/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/wizards/OseeTypesImportPage.java
new file mode 100644
index 0000000000..a134680e87
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/wizards/OseeTypesImportPage.java
@@ -0,0 +1,261 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.core.dsl.ui.integration.wizards;
+
+import java.io.File;
+import java.lang.reflect.InvocationTargetException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.osee.framework.core.dsl.ui.integration.internal.Activator;
+import org.eclipse.osee.framework.core.dsl.ui.integration.operations.ResolveImportsOperation;
+import org.eclipse.osee.framework.core.operation.AbstractOperation;
+import org.eclipse.osee.framework.core.operation.CompositeOperation;
+import org.eclipse.osee.framework.core.operation.IOperation;
+import org.eclipse.osee.framework.core.operation.Operations;
+import org.eclipse.osee.framework.database.init.OseeTypesSetup;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.ui.dialogs.WizardDataTransferPage;
+import org.eclipse.xtext.resource.ClassloaderClasspathUriResolver;
+
+/**
+ * @author Roberto E. Escobar
+ */
+public class OseeTypesImportPage extends WizardDataTransferPage {
+ private static final String PAGE_NAME = "org.eclipse.osee.framework.types.bridge.wizards.OseeTypesImportPage";
+
+ private final OseeTypesSetup oseeTypesSetup;
+ private File compositeFile;
+ private final IStructuredSelection selection;
+ private TreeViewer linksViewer;
+ private final SelectOseeTypesPanel oseeTypesPanel;
+ private final List<LinkNode> messages;
+ private Button reportChanges;
+ private Button persistChanges;
+ private Button useCompareEditor;
+
+ protected OseeTypesImportPage(IStructuredSelection selection, String title) {
+ super(PAGE_NAME);
+ this.selection = selection;
+ oseeTypesSetup = new OseeTypesSetup();
+ oseeTypesPanel = new SelectOseeTypesPanel();
+ oseeTypesPanel.setDefaultItem(getPreselected());
+ setTitle(title);
+ setDescription("Select *.osee files to import");
+ messages = new ArrayList<LinkNode>();
+ }
+
+ private List<IFile> getPreselected() {
+ List<IFile> resources = new ArrayList<IFile>();
+ if (selection != null) {
+ Iterator<?> iterator = selection.iterator();
+ while (iterator.hasNext()) {
+ Object object = iterator.next();
+ if (object instanceof IFile) {
+ IFile file = (IFile) object;
+ if (file.getFileExtension().equals("osee")) {
+ resources.add(file);
+ }
+ }
+ }
+ }
+ return resources;
+ }
+
+ @Override
+ protected boolean allowNewContainerName() {
+ return false;
+ }
+
+ @Override
+ public void handleEvent(Event event) {
+ updateWidgetEnablements();
+ updateExtractedElements();
+ }
+
+ @Override
+ public void createControl(Composite parent) {
+ initializeDialogUnits(parent);
+
+ Composite composite = new Composite(parent, SWT.NULL);
+ composite.setLayout(new GridLayout(1, false));
+ composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ composite.setFont(parent.getFont());
+
+ oseeTypesPanel.createControl(composite);
+ oseeTypesPanel.addListener(this);
+
+ Label sectionTitle = new Label(composite, SWT.NONE);
+ sectionTitle.setText("Resolved dependencies:");
+ sectionTitle.setLayoutData(new GridData(SWT.BEGINNING, SWT.TOP, true, false));
+
+ linksViewer = new TreeViewer(composite, SWT.BORDER);
+ linksViewer.getTree().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ linksViewer.setContentProvider(new LinkNodeContentProvider());
+ linksViewer.setLabelProvider(new LinkNodeLabelProvider());
+ linksViewer.setInput(messages);
+
+ createOptions(composite);
+
+ restoreWidgetValues();
+ updateWidgetEnablements();
+ updateExtractedElements();
+ setPageComplete(determinePageCompletion());
+ setControl(composite);
+ }
+
+ private void createOptions(Composite parent) {
+ Group composite = new Group(parent, SWT.NULL);
+ composite.setLayout(new GridLayout(1, false));
+ composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ composite.setFont(parent.getFont());
+ composite.setText("Options");
+
+ reportChanges = new Button(composite, SWT.CHECK);
+ reportChanges.setText("Report Changes");
+ reportChanges.setSelection(true);
+
+ useCompareEditor = new Button(composite, SWT.CHECK);
+ useCompareEditor.setText("Use Compare Editor");
+ useCompareEditor.setSelection(false);
+
+ persistChanges = new Button(composite, SWT.CHECK);
+ persistChanges.setText("Persist Changes");
+ persistChanges.setSelection(false);
+ }
+
+ public boolean isPersistAllowed() {
+ return persistChanges.getSelection();
+ }
+
+ public boolean isReportChanges() {
+ return reportChanges.getSelection();
+ }
+
+ public boolean useCompareEditor() {
+ return useCompareEditor.getSelection();
+ }
+
+ public File getTypesToImport() {
+ return compositeFile != null ? compositeFile : null;
+ }
+
+ private void setCompositeFile(File compositeFile) {
+ this.compositeFile = compositeFile;
+ }
+
+ @Override
+ protected boolean validateSourceGroup() {
+ return oseeTypesPanel.getSelected() != null;
+ }
+
+ @Override
+ protected boolean validateDestinationGroup() {
+ return getTypesToImport() != null;
+ }
+
+ private synchronized void updateExtractedElements() {
+ if (oseeTypesPanel.getSelected() != null) {
+ setErrorMessage(null);
+ File file = getTypesToImport();
+ if (file != null) {
+ file.delete();
+ setCompositeFile(null);
+ }
+ OseeLog.log(Activator.class, Level.INFO, "Resolving imports");
+
+ final List<IFile> selectedFiles = new ArrayList<IFile>(oseeTypesPanel.getSelected());
+ final List<LinkNode> dependencyData = new ArrayList<LinkNode>();
+
+ Collection<IOperation> ops = new ArrayList<IOperation>();
+ ops.add(new ResolveImportsOperation(new ClassloaderClasspathUriResolver(), selectedFiles, dependencyData));
+ ops.add(new CreateCombinedFile(dependencyData));
+ if (executeOperation(new CompositeOperation("Resolving imports", Activator.PLUGIN_ID, ops))) {
+ messages.clear();
+ messages.addAll(dependencyData);
+ linksViewer.refresh();
+ setPageComplete(determinePageCompletion());
+ }
+ }
+ }
+
+ protected boolean executeOperation(final IOperation operation) {
+ try {
+ getContainer().run(true, true, new IRunnableWithProgress() {
+
+ @Override
+ public void run(IProgressMonitor monitor) {
+ Operations.executeWork(operation, monitor, -1);
+ }
+ });
+ } catch (InterruptedException e) {
+ return false;
+ } catch (InvocationTargetException e) {
+ displayErrorDialog(e.getTargetException());
+ return false;
+ }
+
+ IStatus status = operation.getStatus();
+ if (status.isOK()) {
+ setErrorMessage(null);
+ } else {
+ setErrorMessage(status.getChildren()[0].getMessage());
+ }
+ return true;
+ }
+
+ private final class CreateCombinedFile extends AbstractOperation {
+ private final List<LinkNode> dependencyData;
+
+ public CreateCombinedFile(List<LinkNode> dependencyData) {
+ super("Create combined file", Activator.PLUGIN_ID);
+ this.dependencyData = dependencyData;
+ }
+
+ private void loadMap(LinkNode node, Map<String, URL> map) throws MalformedURLException {
+ for (LinkNode child : node.getChildren()) {
+ loadMap(child, map);
+ }
+ String path = node.getUri().toString();
+ map.put(path, new URL(node.getUri().toString()));
+ }
+
+ @Override
+ protected void doWork(IProgressMonitor monitor) throws Exception {
+ Map<String, URL> resolvedEntries = new LinkedHashMap<String, URL>();
+ for (LinkNode node : dependencyData) {
+ loadMap(node, resolvedEntries);
+ }
+ File file = oseeTypesSetup.createCombinedFile(resolvedEntries);
+ setCompositeFile(file);
+ }
+ }
+} \ No newline at end of file
diff --git a/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/wizards/OseeTypesImportWizard.java b/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/wizards/OseeTypesImportWizard.java
new file mode 100644
index 0000000000..24ea6788c1
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/wizards/OseeTypesImportWizard.java
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.core.dsl.ui.integration.wizards;
+
+import java.io.File;
+import org.eclipse.core.runtime.jobs.IJobChangeEvent;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.core.runtime.jobs.JobChangeAdapter;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.osee.framework.core.dsl.ui.integration.internal.Activator;
+import org.eclipse.osee.framework.core.dsl.ui.integration.operations.OseeTypesImportOperation;
+import org.eclipse.osee.framework.core.operation.IOperation;
+import org.eclipse.osee.framework.core.operation.Operations;
+import org.eclipse.osee.framework.core.services.IOseeCachingService;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.ui.IImportWizard;
+import org.eclipse.ui.IWorkbench;
+
+/**
+ * @author Roberto E. Escobar
+ */
+public class OseeTypesImportWizard extends Wizard implements IImportWizard {
+ private OseeTypesImportPage mainPage;
+
+ public OseeTypesImportWizard() {
+ super();
+ setDialogSettings(SkynetGuiPlugin.getInstance().getDialogSettings());
+ setWindowTitle("OSEE Types Import Wizard");
+ setNeedsProgressMonitor(true);
+ setHelpAvailable(true);
+ }
+
+ @Override
+ public boolean performFinish() {
+ final File file = mainPage.getTypesToImport();
+ boolean isReport = mainPage.isReportChanges();
+ boolean useCompareEditor = mainPage.useCompareEditor();
+ boolean isPersistAllowed = mainPage.isPersistAllowed();
+
+ IOseeCachingService cacheService = Activator.getOseeCacheService();
+ IOperation operation =
+ new OseeTypesImportOperation(cacheService, file.toURI(), isReport, useCompareEditor, isPersistAllowed);
+ Job job = Operations.executeAsJob(operation, true);
+ job.addJobChangeListener(new JobChangeAdapter() {
+ @Override
+ public void done(IJobChangeEvent event) {
+ file.delete();
+ }
+ });
+ return true;
+ }
+
+ @Override
+ public void init(IWorkbench workbench, IStructuredSelection selection) {
+ mainPage = new OseeTypesImportPage(selection, getWindowTitle());
+ }
+
+ @Override
+ public void addPages() {
+ addPage(mainPage);
+ }
+}
diff --git a/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/wizards/OseeTypesViewerFilter.java b/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/wizards/OseeTypesViewerFilter.java
new file mode 100644
index 0000000000..ac91f169bc
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/wizards/OseeTypesViewerFilter.java
@@ -0,0 +1,73 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.core.dsl.ui.integration.wizards;
+
+import java.util.logging.Level;
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceVisitor;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+import org.eclipse.osee.framework.core.dsl.ui.integration.internal.Activator;
+import org.eclipse.osee.framework.jdk.core.type.MutableBoolean;
+import org.eclipse.osee.framework.logging.OseeLog;
+
+/**
+ * @author Roberto E. Escobar
+ */
+public class OseeTypesViewerFilter extends ViewerFilter {
+
+ private boolean processIFile(Object resource) {
+ boolean toReturn = false;
+ if (resource instanceof IFile) {
+ IFile aFile = (IFile) resource;
+ String currentExtension = aFile.getFileExtension();
+ if (currentExtension.equalsIgnoreCase("osee")) {
+ toReturn = true;
+ }
+ }
+ return toReturn;
+ }
+
+ @Override
+ public boolean select(Viewer viewer, Object parentElement, Object element) {
+ if (element instanceof IProject) {
+ if (((IProject) element).isOpen()) {
+ return true;
+ }
+ } else if (element instanceof IContainer) {
+ IContainer container = (IContainer) element;
+ String name = container.getName();
+ if (!name.startsWith(".") && !name.equals("osee")) {
+ final MutableBoolean mutable = new MutableBoolean(false);
+ try {
+ container.accept(new IResourceVisitor() {
+
+ @Override
+ public boolean visit(IResource resource) {
+ mutable.setValue(processIFile(resource));
+ return mutable.getValue();
+ }
+ }, IResource.DEPTH_INFINITE, true);
+ } catch (CoreException ex) {
+ OseeLog.log(Activator.class, Level.SEVERE, ex);
+ }
+ return mutable.getValue();
+ }
+ } else {
+ return processIFile(element);
+ }
+ return false;
+ }
+}
diff --git a/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/wizards/ResourceSelectionPage.java b/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/wizards/ResourceSelectionPage.java
new file mode 100644
index 0000000000..e4816ba009
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/wizards/ResourceSelectionPage.java
@@ -0,0 +1,98 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.core.dsl.ui.integration.wizards;
+
+import java.io.File;
+
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+import org.eclipse.osee.framework.ui.ws.AWorkspace;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.DirectoryDialog;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.dialogs.WizardDataTransferPage;
+
+public class ResourceSelectionPage extends WizardDataTransferPage {
+ private static final String PAGE_NAME = "osee.define.wizardPage.artifactImportSourcePage";
+
+ private Text text;
+
+ protected ResourceSelectionPage(String title) {
+ super(PAGE_NAME);
+ setTitle(title);
+ setDescription(title);
+ }
+
+ @Override
+ protected boolean allowNewContainerName() {
+ return false;
+ }
+
+ @Override
+ public void handleEvent(Event event) {
+ updateWidgetEnablements();
+ setPageComplete(determinePageCompletion());
+ }
+
+ @Override
+ public void createControl(Composite parent) {
+ initializeDialogUnits(parent);
+
+ Group composite = new Group(parent, SWT.NONE);
+ composite.setText("Select destination...");
+ composite.setLayout(new GridLayout(2, false));
+ composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ composite.setFont(parent.getFont());
+
+ text = new Text(composite, SWT.SINGLE | SWT.BORDER);
+ text.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ text.addListener(SWT.Modify, this);
+
+ Button button = new Button(composite, SWT.PUSH);
+ button.setText("&Browse...");
+ button.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ DirectoryDialog dialog = new DirectoryDialog(getShell(), SWT.OPEN);
+ File file = getFile();
+ if (file != null && Strings.isValid(file.getAbsolutePath())) {
+ dialog.setFilterPath(file.getAbsolutePath());
+ } else {
+ dialog.setFilterPath(AWorkspace.getWorkspacePath());
+ }
+ String path = dialog.open();
+
+ File directory = path != null ? new File(path) : null;
+ if (directory != null && directory.isDirectory()) {
+ text.setText(directory.getPath());
+ }
+ }
+ });
+
+ restoreWidgetValues();
+ updateWidgetEnablements();
+ setPageComplete(determinePageCompletion());
+ setControl(composite);
+ }
+
+ public File getFile() {
+ return new File(text.getText());
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/wizards/SelectOseeTypesPanel.java b/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/wizards/SelectOseeTypesPanel.java
new file mode 100644
index 0000000000..57c2eb4f46
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/wizards/SelectOseeTypesPanel.java
@@ -0,0 +1,92 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.core.dsl.ui.integration.wizards;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.osee.framework.core.dsl.ui.integration.internal.Activator;
+import org.eclipse.osee.framework.ui.skynet.panels.AbstractItemSelectPanel;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.dialogs.CheckedTreeSelectionDialog;
+import org.eclipse.ui.dialogs.ISelectionStatusValidator;
+import org.eclipse.ui.model.WorkbenchContentProvider;
+import org.eclipse.ui.model.WorkbenchLabelProvider;
+
+/**
+ * @author Roberto E. Escobar
+ */
+public class SelectOseeTypesPanel extends AbstractItemSelectPanel<List<IFile>> {
+
+ public SelectOseeTypesPanel() {
+ super(new WorkbenchLabelProvider(), new ArrayContentProvider());
+ }
+
+ @Override
+ protected Dialog createSelectDialog(Shell shell, List<IFile> lastSelected) {
+ CheckedTreeSelectionDialog dialog =
+ new CheckedTreeSelectionDialog(shell, new WorkbenchLabelProvider(), new WorkbenchContentProvider());
+ dialog.addFilter(new OseeTypesViewerFilter());
+ dialog.setTitle("Select OseeTypes to import");
+ dialog.setValidator(new Validator());
+ dialog.setInput(ResourcesPlugin.getWorkspace().getRoot());
+ if (lastSelected != null) {
+ dialog.setInitialElementSelections(lastSelected);
+ }
+ return dialog;
+ }
+
+ @Override
+ protected boolean updateFromDialogResult(Dialog dialog) {
+ boolean updateRequired = false;
+ if (dialog instanceof CheckedTreeSelectionDialog) {
+ Object[] results = ((CheckedTreeSelectionDialog) dialog).getResult();
+ if (results != null && results.length > 0) {
+ List<IFile> selected = new ArrayList<IFile>();
+ for (Object object : results) {
+ if (object instanceof IFile) {
+ selected.add((IFile) object);
+ }
+ }
+ if (!selected.isEmpty()) {
+ setSelected(selected);
+ updateRequired = true;
+ }
+ }
+ }
+ return updateRequired;
+ }
+
+ private final class Validator implements ISelectionStatusValidator {
+ @Override
+ public IStatus validate(Object[] selection) {
+ IStatus status = Status.OK_STATUS;
+ boolean found = false;
+ if (selection != null) {
+ for (Object object : selection) {
+ if (object instanceof IFile) {
+ found = true;
+ break;
+ }
+ }
+ }
+ if (!found) {
+ status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, "At least (1) must be selected");
+ }
+ return status;
+ }
+ }
+} \ No newline at end of file

Back to the top