Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.osee.coverage/src')
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/CoverageManager.java44
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/ICoverageImporter.java24
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/ConfigureCoverageMethodsAction.java111
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/DeleteCoverUnitAction.java96
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/DeleteCoveragePackageAction.java75
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/EditAssigneesAction.java97
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/EditCoverageMethodAction.java88
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/EditCoverageNotesAction.java93
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/EditRationaleAction.java93
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/GenerateDetailedCoverageReportAction.java137
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/ICoveragePackageHandler.java16
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/IRefreshable.java19
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/ISelectedCoverageEditorItem.java19
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/LinkWithImportItemAction.java95
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/NewCoveragePackageAction.java62
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/OpenCoveragePackageAction.java58
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/SaveImportRecordAction.java68
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/ShowMergeDetailsAction.java92
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/ViewSourceAction.java67
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/blam/AbstractCoverageBlam.java59
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/CoverageEditor.java370
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/CoverageEditorCoverageTab.java182
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/CoverageEditorHandler.java38
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/CoverageEditorImportTab.java380
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/CoverageEditorInput.java106
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/CoverageEditorLoadingTab.java87
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/CoverageEditorMergeTab.java426
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/CoverageEditorOverviewTab.java241
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/CoverageRenderer.java91
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/params/CoverageParameters.java321
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/params/CoverageParametersComposite.java281
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/params/CoverageParametersTextFilter.java70
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/xcover/CoverageContentProvider.java84
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/xcover/CoverageLabelProvider.java234
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/xcover/CoverageXViewer.java294
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/xcover/CoverageXViewerFactory.java83
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/xcover/XCoverageViewer.java230
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/xmerge/CoverageMergeLabelProvider.java147
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/xmerge/CoverageMergeXViewer.java114
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/xmerge/CoverageMergeXViewerFactory.java34
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/xmerge/CoverageMergeXViewerFactoryImport.java52
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/xmerge/CoverageMergeXViewerFactoryPackage.java50
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/xmerge/XCoverageMergeViewer.java73
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/internal/Activator.java38
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/internal/CoveragePerspectiveFactory.java55
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/merge/IMergeItem.java26
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/merge/MatchItem.java66
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/merge/MatchType.java104
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/merge/MergeImportManager.java343
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/merge/MergeItem.java158
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/merge/MergeItemBase.java52
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/merge/MergeItemGroup.java153
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/merge/MergeManager.java503
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/merge/MergeType.java43
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/merge/MessageMergeItem.java39
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/CoverageImport.java122
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/CoverageItem.java338
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/CoverageOption.java89
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/CoverageOptionManager.java116
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/CoverageOptionManagerDefault.java34
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/CoveragePackage.java71
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/CoveragePackageBase.java303
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/CoverageTestUnit.java134
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/CoverageUnit.java393
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/ICoverage.java52
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/ICoverageItemProvider.java21
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/ICoverageUnit.java117
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/ICoverageUnitFileContentsProvider.java20
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/ICoverageUnitProvider.java21
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/ITestUnitProvider.java29
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/MessageCoverageItem.java115
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/SimpleCoverageUnitFileContentsProvider.java28
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/SimpleTestUnitProvider.java71
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/navigate/CoverageNavigateView.java192
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/navigate/CoverageNavigateViewItems.java121
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/navigate/CreateTestCoverageUnits.java92
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/navigate/DoesNotWorkItemCoverage.java233
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/navigate/ICoverageNavigateItem.java24
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/store/CoverageArtifactImageProvider.java32
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/store/CoverageArtifactTypes.java30
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/store/CoverageAttributes.java67
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/store/CoverageStore.java21
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/store/DbTestUnitProvider.java131
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/store/ICoverageStore.java23
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/store/OseeCoveragePackageStore.java207
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/store/OseeCoverageStore.java80
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/store/OseeCoverageUnitFileContentsProvider.java57
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/store/OseeCoverageUnitStore.java197
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/store/TestUnitStore.java111
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/util/CoverageImage.java56
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/util/CoverageUtil.java260
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/util/ISaveable.java27
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/util/NotSaveable.java40
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/util/dialog/CoverageListDialog.java47
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/util/dialog/CoverageMethodListDialog.java86
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/util/dialog/CoveragePackageArtifactListDialog.java47
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/util/widget/CoverageXWidgetFactory.java25
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/util/widget/XHyperlabelCoverageMethodSelection.java92
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/AggregateCoverageUnitResult.java44
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/CoverageDataFile.java93
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/CoverageDataSubProgram.java63
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/CoverageDataUnit.java61
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/IVectorCastCoverageImportProvider.java23
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/LineNumToBranches.java41
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/VCastAggregateReport.java90
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/VCastVcp.java73
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/VcpResultsDatFile.java90
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/VcpResultsFile.java64
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/VcpSourceFile.java94
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/VcpSourceLineFile.java52
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/VcpSourceLisFile.java95
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/VectorCastAdaCoverageImporter.java303
112 files changed, 12539 insertions, 0 deletions
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/CoverageManager.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/CoverageManager.java
new file mode 100644
index 00000000000..768b513f33f
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/CoverageManager.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * 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.coverage;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import org.eclipse.osee.coverage.blam.AbstractCoverageBlam;
+import org.eclipse.osee.coverage.editor.CoverageEditor;
+import org.eclipse.osee.coverage.editor.CoverageEditorInput;
+import org.eclipse.osee.coverage.model.CoverageImport;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.ui.skynet.blam.AbstractBlam;
+import org.eclipse.osee.framework.ui.skynet.blam.BlamContributionManager;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class CoverageManager {
+
+ public static void importCoverage(ICoverageImporter coverageImporter) throws OseeCoreException {
+ CoverageImport coverageImport = coverageImporter.run(null);
+ CoverageEditor.open(new CoverageEditorInput(coverageImport.getName(), null, coverageImport, false));
+ }
+
+ public static Collection<AbstractCoverageBlam> getCoverageBlams() {
+ List<AbstractCoverageBlam> blams = new ArrayList<AbstractCoverageBlam>();
+ for (AbstractBlam blam : BlamContributionManager.getBlamOperations()) {
+ if (blam instanceof AbstractCoverageBlam) {
+ blams.add((AbstractCoverageBlam) blam);
+ }
+ }
+ return blams;
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/ICoverageImporter.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/ICoverageImporter.java
new file mode 100644
index 00000000000..1ba68917546
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/ICoverageImporter.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * 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.coverage;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.coverage.model.CoverageImport;
+
+/**
+ * @author Donald G. Dunne
+ */
+public interface ICoverageImporter {
+
+ public String getName();
+
+ public CoverageImport run(IProgressMonitor progressMonitor);
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/ConfigureCoverageMethodsAction.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/ConfigureCoverageMethodsAction.java
new file mode 100644
index 00000000000..20267148be7
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/ConfigureCoverageMethodsAction.java
@@ -0,0 +1,111 @@
+/*
+ * Created on Oct 9, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.action;
+
+import java.util.HashSet;
+import java.util.Set;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.osee.coverage.internal.Activator;
+import org.eclipse.osee.coverage.model.CoverageOption;
+import org.eclipse.osee.coverage.model.CoverageOptionManager;
+import org.eclipse.osee.coverage.model.CoverageOptionManagerDefault;
+import org.eclipse.osee.coverage.store.CoverageAttributes;
+import org.eclipse.osee.coverage.store.OseeCoveragePackageStore;
+import org.eclipse.osee.coverage.util.CoverageUtil;
+import org.eclipse.osee.coverage.util.dialog.CoveragePackageArtifactListDialog;
+import org.eclipse.osee.framework.core.exception.OseeArgumentException;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLevel;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.skynet.FrameworkImage;
+import org.eclipse.osee.framework.ui.skynet.widgets.dialog.EntryDialog;
+import org.eclipse.osee.framework.ui.swt.ImageManager;
+import org.eclipse.osee.framework.ui.swt.KeyedImage;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class ConfigureCoverageMethodsAction extends Action {
+
+ public static KeyedImage OSEE_IMAGE = FrameworkImage.GEAR;
+
+ public ConfigureCoverageMethodsAction() {
+ super("Configure Coverage Methods");
+ }
+
+ @Override
+ public ImageDescriptor getImageDescriptor() {
+ return ImageManager.getImageDescriptor(OSEE_IMAGE);
+ }
+
+ @Override
+ public void run() {
+ try {
+ if (!CoverageUtil.getBranchFromUser(false)) {
+ return;
+ }
+ CoveragePackageArtifactListDialog dialog =
+ new CoveragePackageArtifactListDialog("Open Coverage Package", "Select Coverage Package");
+ dialog.setInput(OseeCoveragePackageStore.getCoveragePackageArtifacts());
+ if (dialog.open() == 0) {
+ Artifact coveragePackageArtifact = (Artifact) dialog.getResult()[0];
+ String coverageOptions =
+ coveragePackageArtifact.getSoleAttributeValueAsString(
+ CoverageAttributes.COVERAGE_OPTIONS.getStoreName(), null);
+ if (coverageOptions == null) {
+ if (!MessageDialog.openConfirm(Display.getCurrent().getActiveShell(), getText(),
+ "No Custom Coverage Methods Configured, Configure Now?")) {
+ return;
+ }
+ coverageOptions = CoverageOptionManagerDefault.instance().toXml();
+ }
+ boolean successOrCancel = false;
+ // Keep allowing user to enter options until valid
+ while (!successOrCancel) {
+ EntryDialog entryDiag = new EntryDialog(getText(), "Edit Configure Options");
+ entryDiag.setFillVertically(true);
+ entryDiag.setEntry(coverageOptions);
+ if (entryDiag.open() == 0) {
+ coverageOptions = entryDiag.getEntry();
+ try {
+ CoverageOptionManager manager = new CoverageOptionManager(coverageOptions);
+ if (manager.get().size() == 0) {
+ throw new OseeArgumentException("No options specified");
+ }
+ if (manager.get(CoverageOptionManager.Not_Covered.getName()) == null) {
+ throw new OseeArgumentException("Can't remove Not_Covered item");
+ }
+ Set<String> names = new HashSet<String>();
+ for (CoverageOption option : manager.get()) {
+ if (names.contains(option.getName())) {
+ throw new OseeArgumentException(String.format("Multiple options with same name [%s]",
+ option.getName()));
+ } else {
+ names.add(option.getName());
+ }
+ }
+ coveragePackageArtifact.setSoleAttributeFromString(
+ CoverageAttributes.COVERAGE_OPTIONS.getStoreName(), coverageOptions);
+ coveragePackageArtifact.persist();
+ successOrCancel = true;
+ } catch (Exception ex) {
+ OseeLog.log(Activator.class, OseeLevel.SEVERE_POPUP,
+ "Invalid coverage options\n\n" + ex.getLocalizedMessage(), ex);
+ }
+ } else {
+ successOrCancel = true;
+ }
+ }
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(Activator.class, OseeLevel.SEVERE_POPUP, ex);
+ }
+ }
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/DeleteCoverUnitAction.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/DeleteCoverUnitAction.java
new file mode 100644
index 00000000000..0ef044ee40f
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/DeleteCoverUnitAction.java
@@ -0,0 +1,96 @@
+/*
+ * Created on Oct 9, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.action;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.osee.coverage.internal.Activator;
+import org.eclipse.osee.coverage.model.CoverageUnit;
+import org.eclipse.osee.coverage.model.ICoverage;
+import org.eclipse.osee.coverage.model.ICoverageUnitProvider;
+import org.eclipse.osee.coverage.store.OseeCoverageUnitStore;
+import org.eclipse.osee.coverage.util.CoverageUtil;
+import org.eclipse.osee.coverage.util.ISaveable;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLevel;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.skynet.FrameworkImage;
+import org.eclipse.osee.framework.ui.swt.ImageManager;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class DeleteCoverUnitAction extends Action {
+ private final ISelectedCoverageEditorItem selectedCoverageEditorItem;
+ private final ISaveable saveable;
+ private final IRefreshable refreshable;
+
+ public DeleteCoverUnitAction(ISelectedCoverageEditorItem selectedCoverageEditorItem, IRefreshable refreshable, ISaveable saveable) {
+ super("Delete Coverage Unit");
+ this.selectedCoverageEditorItem = selectedCoverageEditorItem;
+ this.refreshable = refreshable;
+ this.saveable = saveable;
+ }
+
+ @Override
+ public ImageDescriptor getImageDescriptor() {
+ return ImageManager.getImageDescriptor(FrameworkImage.DELETE);
+ }
+
+ @Override
+ public void run() {
+ if (selectedCoverageEditorItem.getSelectedCoverageEditorItems().size() == 0) {
+ AWorkbench.popup("Select Coverage Unit");
+ return;
+ }
+ for (ICoverage item : selectedCoverageEditorItem.getSelectedCoverageEditorItems()) {
+ if (!(item instanceof CoverageUnit)) {
+ AWorkbench.popup("Can only delete Coverage Units");
+ return;
+ }
+ }
+ Result result = saveable.isEditable();
+ if (result.isFalse()) {
+ result.popup();
+ return;
+ }
+ if (MessageDialog.openConfirm(Display.getCurrent().getActiveShell(), "Delete Coverage Unit",
+ "Delete Coverage Units")) {
+ try {
+ SkynetTransaction transaction =
+ new SkynetTransaction(CoverageUtil.getBranch(), "Coverage - Delete Coverage Unit");
+ List<ICoverage> deleteItems = new ArrayList<ICoverage>();
+ for (ICoverage coverageItem : selectedCoverageEditorItem.getSelectedCoverageEditorItems()) {
+ if (coverageItem.getParent() instanceof ICoverageUnitProvider) {
+ ((ICoverageUnitProvider) coverageItem.getParent()).removeCoverageUnit((CoverageUnit) coverageItem);
+ deleteItems.add(coverageItem);
+ new OseeCoverageUnitStore((CoverageUnit) coverageItem).delete(transaction, false);
+ }
+ }
+ transaction.execute();
+ for (ICoverage coverageItem : deleteItems) {
+ refreshable.remove(coverageItem);
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(Activator.class, OseeLevel.SEVERE_POPUP, ex);
+ return;
+ }
+ }
+ try {
+ saveable.save();
+ } catch (OseeCoreException ex) {
+ OseeLog.log(Activator.class, OseeLevel.SEVERE_POPUP, ex);
+ return;
+ }
+ }
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/DeleteCoveragePackageAction.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/DeleteCoveragePackageAction.java
new file mode 100644
index 00000000000..1ac45553ece
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/DeleteCoveragePackageAction.java
@@ -0,0 +1,75 @@
+/*
+ * Created on Oct 9, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.action;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.osee.coverage.internal.Activator;
+import org.eclipse.osee.coverage.model.CoveragePackage;
+import org.eclipse.osee.coverage.store.OseeCoveragePackageStore;
+import org.eclipse.osee.coverage.util.CoverageUtil;
+import org.eclipse.osee.coverage.util.dialog.CoveragePackageArtifactListDialog;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLevel;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction;
+import org.eclipse.osee.framework.ui.skynet.FrameworkImage;
+import org.eclipse.osee.framework.ui.skynet.widgets.dialog.CheckBoxDialog;
+import org.eclipse.osee.framework.ui.swt.ImageManager;
+import org.eclipse.osee.framework.ui.swt.KeyedImage;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class DeleteCoveragePackageAction extends Action {
+
+ public static KeyedImage OSEE_IMAGE = FrameworkImage.DELETE;
+
+ public DeleteCoveragePackageAction() {
+ super("Delete/Purge Coverage Package");
+ }
+
+ @Override
+ public ImageDescriptor getImageDescriptor() {
+ return ImageManager.getImageDescriptor(OSEE_IMAGE);
+ }
+
+ @Override
+ public void run() {
+ try {
+ if (!CoverageUtil.getBranchFromUser(false)) {
+ return;
+ }
+ CoveragePackageArtifactListDialog dialog =
+ new CoveragePackageArtifactListDialog("Delete Package", "Select Package");
+ dialog.setInput(OseeCoveragePackageStore.getCoveragePackageArtifacts());
+ if (dialog.open() == 0) {
+ Artifact coveragePackageArtifact = (Artifact) dialog.getResult()[0];
+ CoveragePackage coveragePackage = OseeCoveragePackageStore.get(coveragePackageArtifact);
+ CheckBoxDialog cDialog =
+ new CheckBoxDialog(
+ "Delete/Purge Package",
+ String.format(
+ "This will delete Coverage Package and all realted Coverage Units and Test Units.\n\nDelete/Purge Package [%s]?",
+ coveragePackage.getName()), "Purge");
+ if (cDialog.open() == 0) {
+ boolean purge = cDialog.isChecked();
+ SkynetTransaction transaction = null;
+ if (!purge) {
+ transaction = new SkynetTransaction(CoverageUtil.getBranch(), "Delete Coverage Package");
+ }
+ OseeCoveragePackageStore.get(coveragePackage).delete(transaction, purge);
+ if (!purge) {
+ transaction.execute();
+ }
+ }
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(Activator.class, OseeLevel.SEVERE_POPUP, ex);
+ }
+ }
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/EditAssigneesAction.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/EditAssigneesAction.java
new file mode 100644
index 00000000000..5bbb6a849cd
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/EditAssigneesAction.java
@@ -0,0 +1,97 @@
+/*
+ * Created on Oct 9, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.action;
+
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.osee.coverage.internal.Activator;
+import org.eclipse.osee.coverage.model.CoverageUnit;
+import org.eclipse.osee.coverage.model.ICoverage;
+import org.eclipse.osee.coverage.store.OseeCoverageUnitStore;
+import org.eclipse.osee.coverage.util.ISaveable;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+import org.eclipse.osee.framework.logging.OseeLevel;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.User;
+import org.eclipse.osee.framework.skynet.core.utility.UsersByIds;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.skynet.FrameworkImage;
+import org.eclipse.osee.framework.ui.skynet.widgets.dialog.UserCheckTreeDialog;
+import org.eclipse.osee.framework.ui.swt.ImageManager;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class EditAssigneesAction extends Action {
+ private final ISelectedCoverageEditorItem selectedCoverageEditorItem;
+ private final ISaveable saveable;
+ private final IRefreshable refreshable;
+
+ public EditAssigneesAction(ISelectedCoverageEditorItem selectedCoverageEditorItem, IRefreshable refreshable, ISaveable saveable) {
+ super("Edit Assignees");
+ this.selectedCoverageEditorItem = selectedCoverageEditorItem;
+ this.refreshable = refreshable;
+ this.saveable = saveable;
+ }
+
+ @Override
+ public ImageDescriptor getImageDescriptor() {
+ return ImageManager.getImageDescriptor(FrameworkImage.USER);
+ }
+
+ @Override
+ public void run() {
+ if (selectedCoverageEditorItem.getSelectedCoverageEditorItems().size() == 0) {
+ AWorkbench.popup("Select Coverage Unit(s)");
+ return;
+ }
+ for (ICoverage coverage : selectedCoverageEditorItem.getSelectedCoverageEditorItems()) {
+ if (!(coverage instanceof CoverageUnit)) {
+ AWorkbench.popup("Assignees can only be set on Coverage Units");
+ return;
+ }
+ }
+ Result result = saveable.isEditable();
+ if (result.isFalse()) {
+ result.popup();
+ return;
+ }
+
+ try {
+ Set<User> initalUsers = new HashSet<User>();
+ for (ICoverage coverageItem : selectedCoverageEditorItem.getSelectedCoverageEditorItems()) {
+ if (coverageItem.isAssignable()) {
+ if (Strings.isValid(((CoverageUnit) coverageItem).getAssignees())) {
+ initalUsers.addAll(UsersByIds.getUsers(((CoverageUnit) coverageItem).getAssignees()));
+ }
+ }
+ }
+
+ UserCheckTreeDialog uld = new UserCheckTreeDialog();
+ uld.setInitialSelections(initalUsers);
+ uld.setMessage("Select to assign.\nDeSelect to un-assign.");
+ if (uld.open() == 0) {
+ Collection<User> users = uld.getUsersSelected();
+ Set<ICoverage> coveragesToSave = new HashSet<ICoverage>();
+ for (ICoverage coverageItem : selectedCoverageEditorItem.getSelectedCoverageEditorItems()) {
+ if (coverageItem.isAssignable()) {
+ OseeCoverageUnitStore.setAssignees(((CoverageUnit) coverageItem), users);
+ refreshable.update(coverageItem);
+ coveragesToSave.add(coverageItem);
+ }
+ }
+ saveable.save(coveragesToSave);
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(Activator.class, OseeLevel.SEVERE_POPUP, ex);
+ }
+ }
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/EditCoverageMethodAction.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/EditCoverageMethodAction.java
new file mode 100644
index 00000000000..a3230576d09
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/EditCoverageMethodAction.java
@@ -0,0 +1,88 @@
+/*
+ * Created on Oct 9, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.action;
+
+import java.util.HashSet;
+import java.util.Set;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.osee.coverage.editor.xcover.CoverageXViewer;
+import org.eclipse.osee.coverage.internal.Activator;
+import org.eclipse.osee.coverage.model.CoverageItem;
+import org.eclipse.osee.coverage.model.CoverageOption;
+import org.eclipse.osee.coverage.model.ICoverage;
+import org.eclipse.osee.coverage.util.ISaveable;
+import org.eclipse.osee.coverage.util.dialog.CoverageMethodListDialog;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLevel;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.skynet.FrameworkImage;
+import org.eclipse.osee.framework.ui.swt.ImageManager;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class EditCoverageMethodAction extends Action {
+
+ private final ISelectedCoverageEditorItem selectedCoverageEditorItem;
+ private final ISaveable saveable;
+ private final IRefreshable refreshable;
+ private final CoverageXViewer coverageXViewer;
+
+ public EditCoverageMethodAction(CoverageXViewer coverageXViewer, ISelectedCoverageEditorItem selectedCoverageEditorItem, IRefreshable refreshable, ISaveable saveable) {
+ super("Edit Coverage Method");
+ this.coverageXViewer = coverageXViewer;
+ this.selectedCoverageEditorItem = selectedCoverageEditorItem;
+ this.refreshable = refreshable;
+ this.saveable = saveable;
+ }
+
+ @Override
+ public ImageDescriptor getImageDescriptor() {
+ return ImageManager.getImageDescriptor(FrameworkImage.EDIT);
+ }
+
+ @Override
+ public void run() {
+ if (selectedCoverageEditorItem.getSelectedCoverageEditorItems().size() == 0) {
+ AWorkbench.popup("Select Coverage Item(s)");
+ return;
+ }
+ for (ICoverage coverage : selectedCoverageEditorItem.getSelectedCoverageEditorItems()) {
+ if (!(coverage instanceof CoverageItem)) {
+ AWorkbench.popup("Coverage Method can only be set on Coverage Items");
+ return;
+ }
+ }
+
+ Result result = saveable.isEditable();
+ if (result.isFalse()) {
+ result.popup();
+ return;
+ }
+
+ CoverageMethodListDialog dialog =
+ new CoverageMethodListDialog(coverageXViewer.getCoverageOptionManager().getEnabled());
+ if (dialog.open() == 0) {
+ Set<ICoverage> coveragesToSave = new HashSet<ICoverage>();
+ for (ICoverage coverageItem : selectedCoverageEditorItem.getSelectedCoverageEditorItems()) {
+ if (coverageItem instanceof CoverageItem) {
+ ((CoverageItem) coverageItem).setCoverageMethod((CoverageOption) dialog.getFirstResult());
+ refreshable.update(coverageItem);
+ coveragesToSave.add(coverageItem);
+ }
+ }
+ try {
+ saveable.save(coveragesToSave);
+ } catch (OseeCoreException ex) {
+ OseeLog.log(Activator.class, OseeLevel.SEVERE_POPUP, ex);
+ return;
+ }
+ }
+ }
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/EditCoverageNotesAction.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/EditCoverageNotesAction.java
new file mode 100644
index 00000000000..1605cff4f02
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/EditCoverageNotesAction.java
@@ -0,0 +1,93 @@
+/*
+ * Created on Oct 9, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.action;
+
+import java.util.HashSet;
+import java.util.Set;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.osee.coverage.internal.Activator;
+import org.eclipse.osee.coverage.model.CoverageUnit;
+import org.eclipse.osee.coverage.model.ICoverage;
+import org.eclipse.osee.coverage.util.ISaveable;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+import org.eclipse.osee.framework.logging.OseeLevel;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.skynet.FrameworkImage;
+import org.eclipse.osee.framework.ui.skynet.widgets.dialog.EntryDialog;
+import org.eclipse.osee.framework.ui.swt.ImageManager;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class EditCoverageNotesAction extends Action {
+
+ private final ISelectedCoverageEditorItem selectedCoverageEditorItem;
+ private final ISaveable saveable;
+ private final IRefreshable refreshable;
+
+ public EditCoverageNotesAction(ISelectedCoverageEditorItem selectedCoverageEditorItem, IRefreshable refreshable, ISaveable saveable) {
+ super("Edit Coverage Notes");
+ this.selectedCoverageEditorItem = selectedCoverageEditorItem;
+ this.refreshable = refreshable;
+ this.saveable = saveable;
+ }
+
+ @Override
+ public ImageDescriptor getImageDescriptor() {
+ return ImageManager.getImageDescriptor(FrameworkImage.EDIT);
+ }
+
+ @Override
+ public void run() {
+ if (selectedCoverageEditorItem.getSelectedCoverageEditorItems().size() == 0) {
+ AWorkbench.popup("Select Coverage Unit(s)");
+ return;
+ }
+ for (ICoverage coverage : selectedCoverageEditorItem.getSelectedCoverageEditorItems()) {
+ if (!(coverage instanceof CoverageUnit)) {
+ AWorkbench.popup("Notes can only be set on Coverage Units");
+ return;
+ }
+ }
+
+ Result result = saveable.isEditable();
+ if (result.isFalse()) {
+ result.popup();
+ return;
+ }
+ Set<String> rationale = new HashSet<String>();
+ for (ICoverage coverageItem : selectedCoverageEditorItem.getSelectedCoverageEditorItems()) {
+ if (coverageItem instanceof CoverageUnit) {
+ rationale.add(((CoverageUnit) coverageItem).getNotes());
+ }
+ }
+ EntryDialog ed = new EntryDialog("Coverage Notes", "Enter Coverage Notes");
+ if (rationale.size() == 1 && Strings.isValid(rationale.iterator().next())) {
+ ed.setEntry(rationale.iterator().next());
+ }
+ if (ed.open() == 0) {
+ Set<ICoverage> coveragesToSave = new HashSet<ICoverage>();
+ for (ICoverage coverageItem : selectedCoverageEditorItem.getSelectedCoverageEditorItems()) {
+ if (coverageItem instanceof CoverageUnit) {
+ ((CoverageUnit) coverageItem).setNotes(ed.getEntry());
+ refreshable.update(coverageItem);
+ coveragesToSave.add(coverageItem);
+ }
+ }
+ try {
+ saveable.save(coveragesToSave);
+ } catch (OseeCoreException ex) {
+ OseeLog.log(Activator.class, OseeLevel.SEVERE_POPUP, ex);
+ return;
+ }
+ }
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/EditRationaleAction.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/EditRationaleAction.java
new file mode 100644
index 00000000000..1faf204b7e9
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/EditRationaleAction.java
@@ -0,0 +1,93 @@
+/*
+ * Created on Oct 9, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.action;
+
+import java.util.HashSet;
+import java.util.Set;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.osee.coverage.internal.Activator;
+import org.eclipse.osee.coverage.model.CoverageItem;
+import org.eclipse.osee.coverage.model.ICoverage;
+import org.eclipse.osee.coverage.util.ISaveable;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+import org.eclipse.osee.framework.logging.OseeLevel;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.skynet.FrameworkImage;
+import org.eclipse.osee.framework.ui.skynet.widgets.dialog.EntryDialog;
+import org.eclipse.osee.framework.ui.swt.ImageManager;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class EditRationaleAction extends Action {
+
+ private final ISelectedCoverageEditorItem selectedCoverageEditorItem;
+ private final ISaveable saveable;
+ private final IRefreshable refreshable;
+
+ public EditRationaleAction(ISelectedCoverageEditorItem selectedCoverageEditorItem, IRefreshable refreshable, ISaveable saveable) {
+ super("Edit Rationale");
+ this.selectedCoverageEditorItem = selectedCoverageEditorItem;
+ this.refreshable = refreshable;
+ this.saveable = saveable;
+ }
+
+ @Override
+ public ImageDescriptor getImageDescriptor() {
+ return ImageManager.getImageDescriptor(FrameworkImage.EDIT);
+ }
+
+ @Override
+ public void run() {
+ if (selectedCoverageEditorItem.getSelectedCoverageEditorItems().size() == 0) {
+ AWorkbench.popup("Select Coverage Item(s)");
+ return;
+ }
+ for (ICoverage coverage : selectedCoverageEditorItem.getSelectedCoverageEditorItems()) {
+ if (!(coverage instanceof CoverageItem)) {
+ AWorkbench.popup("Coverage Rationale can only be set on Coverage Items");
+ return;
+ }
+ }
+
+ Result result = saveable.isEditable();
+ if (result.isFalse()) {
+ result.popup();
+ return;
+ }
+ Set<String> rationale = new HashSet<String>();
+ for (ICoverage coverageItem : selectedCoverageEditorItem.getSelectedCoverageEditorItems()) {
+ if (coverageItem instanceof CoverageItem) {
+ rationale.add(((CoverageItem) coverageItem).getRationale());
+ }
+ }
+ EntryDialog ed = new EntryDialog("Coverage Rationale", "Enter Coverage Rationale");
+ if (rationale.size() == 1 && Strings.isValid(rationale.iterator().next())) {
+ ed.setEntry(rationale.iterator().next());
+ }
+ if (ed.open() == 0) {
+ Set<ICoverage> coveragesToSave = new HashSet<ICoverage>();
+ for (ICoverage coverageItem : selectedCoverageEditorItem.getSelectedCoverageEditorItems()) {
+ if (coverageItem instanceof CoverageItem) {
+ ((CoverageItem) coverageItem).setRationale(ed.getEntry());
+ refreshable.update(coverageItem);
+ coveragesToSave.add(coverageItem);
+ }
+ }
+ try {
+ saveable.save();
+ } catch (OseeCoreException ex) {
+ OseeLog.log(Activator.class, OseeLevel.SEVERE_POPUP, ex);
+ return;
+ }
+ }
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/GenerateDetailedCoverageReportAction.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/GenerateDetailedCoverageReportAction.java
new file mode 100644
index 00000000000..32028b01a98
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/GenerateDetailedCoverageReportAction.java
@@ -0,0 +1,137 @@
+/*
+ * Created on Oct 9, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.action;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.nebula.widgets.xviewer.XViewerColumn;
+import org.eclipse.osee.coverage.editor.CoverageEditorOverviewTab;
+import org.eclipse.osee.coverage.editor.xcover.CoverageLabelProvider;
+import org.eclipse.osee.coverage.editor.xcover.CoverageXViewerFactory;
+import org.eclipse.osee.coverage.internal.Activator;
+import org.eclipse.osee.coverage.model.CoverageItem;
+import org.eclipse.osee.coverage.model.CoveragePackageBase;
+import org.eclipse.osee.coverage.util.CoverageUtil;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.core.util.TableWriterAdaptor;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+import org.eclipse.osee.framework.logging.OseeLevel;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.plugin.core.util.OseeData;
+import org.eclipse.osee.framework.ui.skynet.FrameworkImage;
+import org.eclipse.osee.framework.ui.skynet.widgets.XDate;
+import org.eclipse.osee.framework.ui.swt.ImageManager;
+import org.eclipse.swt.program.Program;
+import org.eclipse.swt.widgets.Display;
+import com.lowagie.text.Table;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class GenerateDetailedCoverageReportAction extends Action {
+
+ private final ICoveragePackageHandler coveragePackageHandler;
+ private Collection<XViewerColumn> columns =
+ Arrays.asList(CoverageXViewerFactory.Namespace, CoverageXViewerFactory.Coverage_Method,
+ CoverageXViewerFactory.Guid, CoverageXViewerFactory.Name);
+
+ public GenerateDetailedCoverageReportAction(ICoveragePackageHandler coveragePackageHandler) {
+ super("Generate Detailed Coverage Report");
+ this.coveragePackageHandler = coveragePackageHandler;
+ }
+
+ @Override
+ public ImageDescriptor getImageDescriptor() {
+ return ImageManager.getImageDescriptor(FrameworkImage.REPORT);
+ }
+
+ @Override
+ public void run() {
+ if (!MessageDialog.openConfirm(Display.getCurrent().getActiveShell(), getText(), getText())) {
+ return;
+ }
+ try {
+ Date date = new Date();
+ File file =
+ OseeData.getFile("coverage_" + XDate.getDateStr(date, XDate.YYYY_MM_DD).replaceAll("\\\\", "_") + ".pdf");
+ OutputStream outputStream = new FileOutputStream(file, true);
+ TableWriterAdaptor masterAdaptor = new TableWriterAdaptor("pdf", outputStream);
+
+ CoveragePackageBase coveragePackageBase = this.coveragePackageHandler.getCoveragePackageBase();
+
+ List<String> sortedHeaders = CoverageEditorOverviewTab.getSortedHeaders(coveragePackageBase);
+ masterAdaptor.writeHeader(sortedHeaders.toArray(new String[sortedHeaders.size()]));
+ masterAdaptor.getTable().setWidth(100);
+ for (String[] values : CoverageEditorOverviewTab.getRows(sortedHeaders, coveragePackageBase, false)) {
+ masterAdaptor.writeRow(values);
+ }
+
+ masterAdaptor.writeTitle("Detailed Coverage Report as of " + XDate.getDateStr(date, XDate.MMDDYYHHMM) + " for " + this.coveragePackageHandler.getCoveragePackageBase().getName());
+ masterAdaptor.openDocument();
+ masterAdaptor.writeDocument();
+
+ masterAdaptor.addTable(getDetailTable());
+ masterAdaptor.close();
+
+ Program.launch(file.getAbsolutePath());
+ } catch (Exception ex) {
+ OseeLog.log(Activator.class, OseeLevel.SEVERE_POPUP, ex);
+ }
+ }
+
+ private Table getDetailTable() throws Exception {
+ TableWriterAdaptor detailAdaptor = new TableWriterAdaptor("pdf", null);
+ detailAdaptor.writeHeader(getColumns());
+ detailAdaptor.getTable().setWidths(new float[] {400, 75, 75, 200});
+ detailAdaptor.getTable().setWidth(100);
+ writeRows(detailAdaptor);
+ return detailAdaptor.getTable();
+ }
+
+ private void writeRows(TableWriterAdaptor writerAdaptor) {
+ CoverageLabelProvider labelProvider = new CoverageLabelProvider(null);
+ for (CoverageItem item : this.coveragePackageHandler.getCoveragePackageBase().getCoverageItems()) {
+ List<String> values = new ArrayList<String>();
+ for (XViewerColumn column : columns) {
+ try {
+ if (column.equals(CoverageXViewerFactory.Namespace)) {
+ values.add(String.format("%s[%s][%s]", CoverageUtil.getFullPath(item), labelProvider.getColumnText(
+ item, CoverageXViewerFactory.Method_Number, 0), labelProvider.getColumnText(item,
+ CoverageXViewerFactory.Execution_Number, 0)));
+ } else if (column.equals(CoverageXViewerFactory.Coverage_Method)) {
+ String rationale = labelProvider.getColumnText(item, CoverageXViewerFactory.Coverage_Rationale, 0);
+ values.add(String.format("%s%s", labelProvider.getColumnText(item,
+ CoverageXViewerFactory.Coverage_Method, 0),
+ Strings.isValid(rationale) ? "Rationale: " + rationale : ""));
+ } else {
+ values.add(labelProvider.getColumnText(item, column, 0));
+ }
+ } catch (OseeCoreException ex) {
+ values.add("Exception: " + ex.getLocalizedMessage());
+ OseeLog.log(Activator.class, OseeLevel.SEVERE, ex);
+ }
+ }
+ writerAdaptor.writeRow(values.toArray(new String[values.size()]));
+ }
+ }
+
+ private String[] getColumns() {
+ List<String> columnNames = new ArrayList<String>();
+ for (XViewerColumn column : columns) {
+ columnNames.add(column.getName());
+ }
+ return columnNames.toArray(new String[columnNames.size()]);
+ }
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/ICoveragePackageHandler.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/ICoveragePackageHandler.java
new file mode 100644
index 00000000000..31b8a69a07f
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/ICoveragePackageHandler.java
@@ -0,0 +1,16 @@
+/*
+ * Created on Jan 29, 2010
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.action;
+
+import org.eclipse.osee.coverage.model.CoveragePackageBase;
+
+/**
+ * @author Donald G. Dunne
+ */
+public interface ICoveragePackageHandler {
+
+ public CoveragePackageBase getCoveragePackageBase();
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/IRefreshable.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/IRefreshable.java
new file mode 100644
index 00000000000..bd8dc7e8a40
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/IRefreshable.java
@@ -0,0 +1,19 @@
+/*
+ * Created on Oct 9, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.action;
+
+
+/**
+ * @author Donald G. Dunne
+ */
+public interface IRefreshable {
+
+ public void refresh(Object element);
+
+ public void update(Object element);
+
+ public void remove(Object element);
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/ISelectedCoverageEditorItem.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/ISelectedCoverageEditorItem.java
new file mode 100644
index 00000000000..5f0519f69e7
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/ISelectedCoverageEditorItem.java
@@ -0,0 +1,19 @@
+/*
+ * Created on Oct 9, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.action;
+
+import java.util.Collection;
+import org.eclipse.osee.coverage.model.ICoverage;
+
+/**
+ * @author Donald G. Dunne
+ */
+public interface ISelectedCoverageEditorItem {
+
+ public Collection<ICoverage> getSelectedCoverageEditorItems();
+
+ public void setSelectedCoverageEditorItem(ICoverage item);
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/LinkWithImportItemAction.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/LinkWithImportItemAction.java
new file mode 100644
index 00000000000..7e4ae6ba72f
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/LinkWithImportItemAction.java
@@ -0,0 +1,95 @@
+/*
+ * Created on Oct 9, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.action;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.osee.coverage.editor.xmerge.XCoverageMergeViewer;
+import org.eclipse.osee.coverage.internal.Activator;
+import org.eclipse.osee.coverage.merge.MatchItem;
+import org.eclipse.osee.coverage.merge.MergeItemGroup;
+import org.eclipse.osee.coverage.merge.MergeManager;
+import org.eclipse.osee.coverage.model.CoveragePackage;
+import org.eclipse.osee.coverage.model.ICoverage;
+import org.eclipse.osee.coverage.util.CoverageImage;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.core.exception.OseeStateException;
+import org.eclipse.osee.framework.logging.OseeLevel;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.ui.swt.ImageManager;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class LinkWithImportItemAction extends Action {
+ private XCoverageMergeViewer packageXViewer;
+ private XCoverageMergeViewer importXViewer;
+ private CoveragePackage coveragePackage;
+
+ public LinkWithImportItemAction() {
+ super("Link with Import Item", Action.AS_CHECK_BOX);
+ }
+
+ private void updateSelection() throws OseeStateException {
+ if (linkActionEnabled() && ((ISelectedCoverageEditorItem) importXViewer.getXViewer()).getSelectedCoverageEditorItems().size() == 1) {
+ ICoverage importCoverageEditorItem =
+ ((ISelectedCoverageEditorItem) importXViewer.getXViewer()).getSelectedCoverageEditorItems().iterator().next();
+ // If mergeitemgroup, want to link with parent of one of the children items
+ if (importCoverageEditorItem instanceof MergeItemGroup) {
+ importCoverageEditorItem =
+ ((MergeItemGroup) importCoverageEditorItem).getMergeItems().iterator().next().getParent();
+ }
+ MatchItem matchItem = MergeManager.getPackageCoverageItem(coveragePackage, importCoverageEditorItem);
+ if (matchItem != null && matchItem.getPackageItem() != null) {
+ ((ISelectedCoverageEditorItem) packageXViewer.getXViewer()).setSelectedCoverageEditorItem(matchItem.getPackageItem());
+ }
+ }
+ }
+
+ private boolean linkActionEnabled() {
+ return isChecked();
+ }
+
+ @Override
+ public ImageDescriptor getImageDescriptor() {
+ return ImageManager.getImageDescriptor(CoverageImage.LINK);
+ }
+
+ @Override
+ public void run() {
+ try {
+ updateSelection();
+ } catch (OseeCoreException ex) {
+ OseeLog.log(Activator.class, OseeLevel.SEVERE_POPUP, ex);
+ }
+ }
+
+ public void setPackageXViewer(XCoverageMergeViewer packageXViewer, CoveragePackage coveragePackage) {
+ this.packageXViewer = packageXViewer;
+ this.coveragePackage = coveragePackage;
+ }
+
+ public XCoverageMergeViewer getImportXViewer() {
+ return importXViewer;
+ }
+
+ public void setImportXViewer(XCoverageMergeViewer importXViewer) {
+ this.importXViewer = importXViewer;
+ this.importXViewer.getXViewer().getTree().addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ try {
+ updateSelection();
+ } catch (OseeCoreException ex) {
+ OseeLog.log(Activator.class, OseeLevel.SEVERE_POPUP, ex);
+ }
+ }
+ });
+
+ }
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/NewCoveragePackageAction.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/NewCoveragePackageAction.java
new file mode 100644
index 00000000000..e049f24199a
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/NewCoveragePackageAction.java
@@ -0,0 +1,62 @@
+/*
+ * Created on Oct 9, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.action;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.osee.coverage.editor.CoverageEditor;
+import org.eclipse.osee.coverage.editor.CoverageEditorInput;
+import org.eclipse.osee.coverage.internal.Activator;
+import org.eclipse.osee.coverage.model.CoverageOptionManagerDefault;
+import org.eclipse.osee.coverage.model.CoveragePackage;
+import org.eclipse.osee.coverage.store.OseeCoveragePackageStore;
+import org.eclipse.osee.coverage.util.CoverageImage;
+import org.eclipse.osee.coverage.util.CoverageUtil;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLevel;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction;
+import org.eclipse.osee.framework.ui.skynet.widgets.dialog.EntryDialog;
+import org.eclipse.osee.framework.ui.swt.ImageManager;
+import org.eclipse.osee.framework.ui.swt.KeyedImage;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class NewCoveragePackageAction extends Action {
+
+ public static KeyedImage OSEE_IMAGE = CoverageImage.COVERAGE_PACKAGE;
+
+ public NewCoveragePackageAction() {
+ super("Create New Coverage Package");
+ }
+
+ @Override
+ public ImageDescriptor getImageDescriptor() {
+ return ImageManager.getImageDescriptor(OSEE_IMAGE);
+ }
+
+ @Override
+ public void run() {
+ try {
+ if (!CoverageUtil.getBranchFromUser(false)) {
+ return;
+ }
+ EntryDialog dialog = new EntryDialog(getText(), "Enter Coverage Package Name");
+ if (dialog.open() == 0) {
+ CoveragePackage coveragePackage =
+ new CoveragePackage(dialog.getEntry(), CoverageOptionManagerDefault.instance());
+ SkynetTransaction transaction = new SkynetTransaction(CoverageUtil.getBranch(), "Add Coverage Package");
+ OseeCoveragePackageStore.get(coveragePackage).save(transaction);
+ transaction.execute();
+ CoverageEditor.open(new CoverageEditorInput(dialog.getEntry(),
+ OseeCoveragePackageStore.get(coveragePackage).getArtifact(false), coveragePackage, false));
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(Activator.class, OseeLevel.SEVERE_POPUP, ex);
+ }
+ }
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/OpenCoveragePackageAction.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/OpenCoveragePackageAction.java
new file mode 100644
index 00000000000..758e799195c
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/OpenCoveragePackageAction.java
@@ -0,0 +1,58 @@
+/*
+ * Created on Oct 9, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.action;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.osee.coverage.editor.CoverageEditor;
+import org.eclipse.osee.coverage.editor.CoverageEditorInput;
+import org.eclipse.osee.coverage.internal.Activator;
+import org.eclipse.osee.coverage.store.OseeCoveragePackageStore;
+import org.eclipse.osee.coverage.util.CoverageImage;
+import org.eclipse.osee.coverage.util.CoverageUtil;
+import org.eclipse.osee.coverage.util.dialog.CoveragePackageArtifactListDialog;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLevel;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.swt.ImageManager;
+import org.eclipse.osee.framework.ui.swt.KeyedImage;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class OpenCoveragePackageAction extends Action {
+
+ public static KeyedImage OSEE_IMAGE = CoverageImage.COVERAGE_PACKAGE;
+
+ public OpenCoveragePackageAction() {
+ super("Open Coverage Package");
+ }
+
+ @Override
+ public ImageDescriptor getImageDescriptor() {
+ return ImageManager.getImageDescriptor(CoverageImage.COVERAGE_PACKAGE);
+ }
+
+ @Override
+ public void run() {
+ try {
+ if (!CoverageUtil.getBranchFromUser(false)) {
+ return;
+ }
+ CoveragePackageArtifactListDialog dialog =
+ new CoveragePackageArtifactListDialog("Open Coverage Package", "Select Coverage Package");
+ dialog.setInput(OseeCoveragePackageStore.getCoveragePackageArtifacts());
+ if (dialog.open() == 0) {
+ Artifact coveragePackageArtifact = (Artifact) dialog.getResult()[0];
+ CoverageEditor.open(new CoverageEditorInput(coveragePackageArtifact.getName(), coveragePackageArtifact,
+ null, false));
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(Activator.class, OseeLevel.SEVERE_POPUP, ex);
+ }
+ }
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/SaveImportRecordAction.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/SaveImportRecordAction.java
new file mode 100644
index 00000000000..83edbad3d75
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/SaveImportRecordAction.java
@@ -0,0 +1,68 @@
+/*
+ * Created on Oct 9, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.action;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.osee.coverage.internal.Activator;
+import org.eclipse.osee.coverage.model.CoverageImport;
+import org.eclipse.osee.coverage.util.CoverageUtil;
+import org.eclipse.osee.coverage.util.ISaveable;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLevel;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.skynet.FrameworkImage;
+import org.eclipse.osee.framework.ui.swt.ImageManager;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class SaveImportRecordAction extends Action {
+ private final ISaveable saveable;
+ private final CoverageImport coverageImport;
+
+ public SaveImportRecordAction(CoverageImport coverageImport, ISaveable saveable) {
+ super("Save Coverage Import Record");
+ this.coverageImport = coverageImport;
+ this.saveable = saveable;
+ }
+
+ @Override
+ public ImageDescriptor getImageDescriptor() {
+ return ImageManager.getImageDescriptor(FrameworkImage.REPORT);
+ }
+
+ @Override
+ public void run() {
+ Result result = saveable.isEditable();
+ if (result.isFalse()) {
+ result.popup();
+ return;
+ }
+ if (MessageDialog.openConfirm(Display.getCurrent().getActiveShell(), "Save Coverage Import Record",
+ "Overwrite coverage import record with current import information?")) {
+ try {
+ SkynetTransaction transaction =
+ new SkynetTransaction(CoverageUtil.getBranch(), "Coverage - Save Import Record");
+ saveable.saveImportRecord(transaction, coverageImport);
+ transaction.execute();
+ } catch (OseeCoreException ex) {
+ OseeLog.log(Activator.class, OseeLevel.SEVERE_POPUP, ex);
+ return;
+ }
+ }
+ try {
+ saveable.save();
+ } catch (OseeCoreException ex) {
+ OseeLog.log(Activator.class, OseeLevel.SEVERE_POPUP, ex);
+ return;
+ }
+ }
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/ShowMergeDetailsAction.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/ShowMergeDetailsAction.java
new file mode 100644
index 00000000000..78bdb91de48
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/ShowMergeDetailsAction.java
@@ -0,0 +1,92 @@
+/*
+ * Created on Oct 9, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.action;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.osee.coverage.editor.xmerge.XCoverageMergeViewer;
+import org.eclipse.osee.coverage.internal.Activator;
+import org.eclipse.osee.coverage.merge.MatchItem;
+import org.eclipse.osee.coverage.merge.MergeItem;
+import org.eclipse.osee.coverage.merge.MergeItemGroup;
+import org.eclipse.osee.coverage.merge.MergeManager;
+import org.eclipse.osee.coverage.model.CoverageImport;
+import org.eclipse.osee.coverage.model.CoveragePackage;
+import org.eclipse.osee.coverage.model.ICoverage;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLevel;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.skynet.FrameworkImage;
+import org.eclipse.osee.framework.ui.skynet.results.XResultData;
+import org.eclipse.osee.framework.ui.swt.ImageManager;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class ShowMergeDetailsAction extends Action {
+ private CoveragePackage coveragePackage;
+ private CoverageImport coverageImport;
+ private XCoverageMergeViewer importXViewer;
+
+ public ShowMergeDetailsAction() {
+ super("Show Merge Details", Action.AS_PUSH_BUTTON);
+ }
+
+ @Override
+ public ImageDescriptor getImageDescriptor() {
+ return ImageManager.getImageDescriptor(FrameworkImage.REPORT);
+ }
+
+ @Override
+ public void run() {
+ try {
+ if (((ISelectedCoverageEditorItem) importXViewer.getXViewer()).getSelectedCoverageEditorItems().size() == 1) {
+ ICoverage importCoverageEditorItem =
+ ((ISelectedCoverageEditorItem) importXViewer.getXViewer()).getSelectedCoverageEditorItems().iterator().next();
+ // If mergeitemgroup, want to link with parent of one of the children items
+ if (importCoverageEditorItem instanceof MergeItemGroup) {
+ importCoverageEditorItem =
+ ((MergeItemGroup) importCoverageEditorItem).getMergeItems().iterator().next().getParent();
+ } else if (importCoverageEditorItem instanceof MergeItem) {
+ importCoverageEditorItem = ((MergeItem) importCoverageEditorItem).getImportItem().getParent();
+ } else {
+ AWorkbench.popup("Must select a Merge Item");
+ return;
+ }
+ MatchItem matchItem = MergeManager.getPackageCoverageItem(coveragePackage, importCoverageEditorItem);
+ if (matchItem != null && matchItem.getPackageItem() != null) {
+ MergeManager mergeManager = new MergeManager(coveragePackage, coverageImport);
+ XResultData resultData = mergeManager.getMergeDetails(importCoverageEditorItem, new XResultData(false));
+ resultData.report("Merge Details - " + importCoverageEditorItem.getName());
+ } else {
+ AWorkbench.popup("Can't find match item");
+ return;
+ }
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(Activator.class, OseeLevel.SEVERE_POPUP, ex);
+ }
+ }
+
+ public void setPackageXViewer(XCoverageMergeViewer packageXViewer, CoveragePackage coveragePackage) {
+ this.coveragePackage = coveragePackage;
+ }
+
+ public XCoverageMergeViewer getImportXViewer() {
+ return importXViewer;
+ }
+
+ public void setImportXViewer(XCoverageMergeViewer importXViewer, CoverageImport coverageImport) {
+ this.coverageImport = coverageImport;
+ this.importXViewer = importXViewer;
+ }
+
+ public CoverageImport getCoverageImport() {
+ return coverageImport;
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/ViewSourceAction.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/ViewSourceAction.java
new file mode 100644
index 00000000000..a2f3a74f7f9
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/action/ViewSourceAction.java
@@ -0,0 +1,67 @@
+/*
+ * Created on Oct 9, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.action;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.osee.coverage.internal.Activator;
+import org.eclipse.osee.coverage.model.ICoverage;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+import org.eclipse.osee.framework.logging.OseeLevel;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.skynet.FrameworkImage;
+import org.eclipse.osee.framework.ui.skynet.widgets.dialog.EntryDialog;
+import org.eclipse.osee.framework.ui.swt.ImageManager;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class ViewSourceAction extends Action {
+
+ private final ISelectedCoverageEditorItem selectedCoverageEditorItem;
+
+ public ViewSourceAction(ISelectedCoverageEditorItem selectedCoverageEditorItem) {
+ super("View Source");
+ this.selectedCoverageEditorItem = selectedCoverageEditorItem;
+ }
+
+ @Override
+ public ImageDescriptor getImageDescriptor() {
+ return ImageManager.getImageDescriptor(FrameworkImage.REPORT);
+ }
+
+ @Override
+ public void run() {
+ if (selectedCoverageEditorItem.getSelectedCoverageEditorItems().size() == 0) {
+ AWorkbench.popup("Select Coverage Item");
+ return;
+ }
+ if (selectedCoverageEditorItem.getSelectedCoverageEditorItems().size() > 0) {
+ ICoverage item = selectedCoverageEditorItem.getSelectedCoverageEditorItems().iterator().next();
+ EntryDialog ed = new EntryDialog(item.getName(), "");
+ ed.setFillVertically(true);
+ String text;
+ try {
+ text = item.getFileContents();
+ if (!Strings.isValid(text)) {
+ text = item.getParent().getFileContents();
+ if (!Strings.isValid(text)) {
+ AWorkbench.popup("No Text Available");
+ return;
+ }
+ }
+ ed.setEntry(text);
+ ed.open();
+ } catch (OseeCoreException ex) {
+ OseeLog.log(Activator.class, OseeLevel.SEVERE_POPUP, ex);
+ }
+
+ }
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/blam/AbstractCoverageBlam.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/blam/AbstractCoverageBlam.java
new file mode 100644
index 00000000000..07ccc871475
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/blam/AbstractCoverageBlam.java
@@ -0,0 +1,59 @@
+/*
+ * Created on Sep 23, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.blam;
+
+import org.eclipse.osee.coverage.editor.CoverageEditor;
+import org.eclipse.osee.coverage.model.CoverageImport;
+import org.eclipse.osee.framework.ui.skynet.blam.AbstractBlam;
+
+/**
+ * @author Donald G. Dunne
+ */
+public abstract class AbstractCoverageBlam extends AbstractBlam {
+
+ CoverageImport coverageImport;
+ CoverageEditor coverageEditor;
+
+ public CoverageImport getCoverageImport() {
+ return coverageImport;
+ }
+
+ public void setCoverageImport(CoverageImport coverageImport) {
+ this.coverageImport = coverageImport;
+ if (coverageEditor != null) {
+ coverageEditor.getCoverageEditorImportTab().setCoverageImportResults(getName(), coverageImport);
+ }
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((coverageImport.getName() == null) ? 0 : coverageImport.getName().hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) return true;
+ if (obj == null) return false;
+ if (getClass() != obj.getClass()) return false;
+ AbstractCoverageBlam other = (AbstractCoverageBlam) obj;
+ if (coverageImport == null) {
+ if (other.coverageImport != null) return false;
+ } else if (!coverageImport.getName().equals(other.coverageImport.getName())) return false;
+ return true;
+ }
+
+ public CoverageEditor getCoverageEditor() {
+ return coverageEditor;
+ }
+
+ public void setCoverageEditor(CoverageEditor coverageEditor) {
+ this.coverageEditor = coverageEditor;
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/CoverageEditor.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/CoverageEditor.java
new file mode 100644
index 00000000000..2f71d78b14d
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/CoverageEditor.java
@@ -0,0 +1,370 @@
+/*******************************************************************************
+ * 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.coverage.editor;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.logging.Level;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.osee.coverage.internal.Activator;
+import org.eclipse.osee.coverage.model.CoveragePackage;
+import org.eclipse.osee.coverage.model.CoveragePackageBase;
+import org.eclipse.osee.coverage.model.ICoverage;
+import org.eclipse.osee.coverage.store.OseeCoveragePackageStore;
+import org.eclipse.osee.coverage.util.CoverageImage;
+import org.eclipse.osee.coverage.util.CoverageUtil;
+import org.eclipse.osee.framework.core.enums.CoreRelationTypes;
+import org.eclipse.osee.framework.core.exception.OseeArgumentException;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.core.exception.OseeStateException;
+import org.eclipse.osee.framework.core.operation.AbstractOperation;
+import org.eclipse.osee.framework.core.operation.Operations;
+import org.eclipse.osee.framework.logging.OseeLevel;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.plugin.core.IActionable;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.event.FrameworkTransactionData;
+import org.eclipse.osee.framework.skynet.core.event.IArtifactsPurgedEventListener;
+import org.eclipse.osee.framework.skynet.core.event.IFrameworkTransactionEventListener;
+import org.eclipse.osee.framework.skynet.core.event.Sender;
+import org.eclipse.osee.framework.skynet.core.relation.RelationManager;
+import org.eclipse.osee.framework.skynet.core.utility.LoadedArtifacts;
+import org.eclipse.osee.framework.ui.plugin.OseeUiActions;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.plugin.util.Displays;
+import org.eclipse.osee.framework.ui.skynet.OseeContributionItem;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.ElapsedTime;
+import org.eclipse.osee.framework.ui.skynet.widgets.XDate;
+import org.eclipse.osee.framework.ui.swt.ImageManager;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorReference;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.forms.editor.FormEditor;
+import org.eclipse.ui.forms.editor.FormPage;
+import org.eclipse.ui.part.MultiPageEditorPart;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class CoverageEditor extends FormEditor implements IActionable, IFrameworkTransactionEventListener, IArtifactsPurgedEventListener {
+ public static final String EDITOR_ID = "org.eclipse.osee.coverage.editor.CoverageEditor";
+ private Integer startPage = null;
+ private CoverageEditorImportTab coverageEditorImportTab = null;
+ private CoverageEditorCoverageTab coverageEditorCoverageTab = null;
+ private CoverageEditorOverviewTab coverageEditorOverviewTab = null;
+ private CoverageEditorLoadingTab coverageEditorLoadingTab = null;
+
+ @Override
+ protected void addPages() {
+ try {
+ OseeContributionItem.addTo(this, true);
+ String loadingStr = "Loading Coverage Package \"" + getCoverageEditorInput().getPreLoadName() + "\" ...";
+ coverageEditorLoadingTab = new CoverageEditorLoadingTab(loadingStr, this);
+ addFormPage(coverageEditorLoadingTab);
+ setPartName("Loading " + getCoverageEditorInput().getPreLoadName());
+ setTitleImage(ImageManager.getImage(CoverageImage.COVERAGE));
+ setActivePage(startPage);
+ if (getCoverageEditorInput().isInTest()) {
+ new LoadCoverage(loadingStr).doWork(null);
+ } else {
+ Operations.executeAsJob(new LoadCoverage(loadingStr), true);
+ }
+ } catch (Exception ex) {
+ OseeLog.log(Activator.class, Level.SEVERE, ex);
+ }
+ }
+
+ private class LoadCoverage extends AbstractOperation {
+
+ public LoadCoverage(String operationName) {
+ super(operationName, Activator.PLUGIN_ID);
+ }
+
+ @Override
+ protected void doWork(IProgressMonitor monitor) throws Exception {
+ @SuppressWarnings("unused")
+ Collection<Artifact> artifactLoadCache = null;
+ System.out.println("Get Package Artifact " + XDate.getTimeStamp());
+ if (getCoverageEditorInput().getCoveragePackageArtifact() != null) {
+ try {
+ ElapsedTime elapsedTime = new ElapsedTime("Coverage - bulk load");
+ artifactLoadCache =
+ RelationManager.getRelatedArtifacts(
+ Collections.singleton(getCoverageEditorInput().getCoveragePackageArtifact()), 8,
+ CoreRelationTypes.Default_Hierarchical__Child);
+ // TODO Need to bulk load binary attributes also; Coverage Items are all binary attributes
+ // that are not bulk loaded with attributes
+ elapsedTime.end();
+ } catch (OseeCoreException ex) {
+ OseeLog.log(Activator.class, OseeLevel.SEVERE, ex);
+ }
+ }
+ if (getCoverageEditorInput().getCoveragePackageArtifact() != null) {
+ ElapsedTime elapsedTime = new ElapsedTime("Coverage - load model");
+ CoveragePackage coveragePackage =
+ OseeCoveragePackageStore.get(getCoverageEditorInput().getCoveragePackageArtifact());
+ getCoverageEditorInput().setCoveragePackageBase(coveragePackage);
+ elapsedTime.end();
+ }
+
+ if (getCoverageEditorInput().isInTest()) {
+ addPagesAfterLoad();
+ } else {
+ Displays.ensureInDisplayThread(new Runnable() {
+ @Override
+ public void run() {
+ addPagesAfterLoad();
+ }
+ });
+ }
+ }
+ };
+
+ protected void addPagesAfterLoad() {
+ try {
+ // remove loading page
+ removePage(0);
+ System.out.println("addPagesAfterLoad " + XDate.getTimeStamp());
+
+ coverageEditorOverviewTab = new CoverageEditorOverviewTab("Overview", this, getCoveragePackageBase());
+ addFormPage(coverageEditorOverviewTab);
+ coverageEditorCoverageTab = new CoverageEditorCoverageTab("Coverage Items", this, getCoveragePackageBase());
+ addFormPage(coverageEditorCoverageTab);
+ if (getCoveragePackageBase().isImportAllowed()) {
+ coverageEditorImportTab = new CoverageEditorImportTab(this);
+ addFormPage(coverageEditorImportTab);
+ }
+ setPartName(getCoveragePackageBase().getName());
+ setTitleImage(ImageManager.getImage(CoverageUtil.getCoveragePackageBaseImage(getCoveragePackageBase())));
+
+ setActivePage(startPage);
+ } catch (Exception ex) {
+ OseeLog.log(Activator.class, Level.SEVERE, ex);
+ }
+ }
+
+ public void simulateImport(String importName) throws OseeCoreException {
+ if (coverageEditorImportTab == null) {
+ throw new OseeStateException("Import page == null");
+ }
+ setActivePage(2);
+ coverageEditorImportTab.simulateImport(importName);
+ }
+
+ public void simulateImportPostRun() throws OseeArgumentException {
+ setActivePage(5);
+ coverageEditorImportTab.simulateImportSearch();
+ }
+
+ public int addFormPage(FormPage page) {
+ int pageIndex = 0;
+ try {
+ pageIndex = addPage(page);
+ if (startPage == null) {
+ startPage = pageIndex;
+ }
+ } catch (PartInitException ex) {
+ OseeLog.log(Activator.class, OseeLevel.SEVERE_POPUP, ex);
+ }
+ return pageIndex;
+ }
+
+ public static void addToToolBar(IToolBarManager manager, CoverageEditor coverageEditor) {
+ manager.add(OseeUiActions.createBugAction(SkynetGuiPlugin.getInstance(), coverageEditor, EDITOR_ID,
+ "Lba Code Promote"));
+ manager.update(true);
+ }
+
+ public void setEditorTitle(final String str) {
+ Displays.ensureInDisplayThread(new Runnable() {
+ @Override
+ public void run() {
+ setPartName(str);
+ firePropertyChange(IWorkbenchPart.PROP_TITLE);
+ }
+ });
+ }
+
+ public CoveragePackageBase getCoveragePackageBase() throws OseeCoreException {
+ return getCoverageEditorInput().getCoveragePackageBase();
+ }
+
+ public CoverageEditorInput getCoverageEditorInput() throws OseeCoreException {
+ IEditorInput editorInput = getEditorInput();
+ if (!(editorInput instanceof CoverageEditorInput)) {
+ throw new OseeArgumentException("Editor Input not CoverageEditorInput");
+ }
+ return (CoverageEditorInput) getEditorInput();
+ }
+
+ @Override
+ public void doSave(IProgressMonitor monitor) {
+ }
+
+ @Override
+ public boolean isSaveOnCloseNeeded() {
+ return isDirty();
+ }
+
+ public void refreshTitle() {
+ firePropertyChange(IWorkbenchPart.PROP_TITLE);
+ }
+
+ @Override
+ public void dispose() {
+ super.dispose();
+ }
+
+ @Override
+ public boolean isDirty() {
+ return false;
+ }
+
+ public static void open(final CoverageEditorInput coverageEditorInput) throws OseeCoreException {
+ open(coverageEditorInput, false);
+ }
+
+ public static void open(final CoverageEditorInput coverageEditorInput, boolean forcePend) throws OseeCoreException {
+ Displays.ensureInDisplayThread(new Runnable() {
+ public void run() {
+ IWorkbenchPage page = AWorkbench.getActivePage();
+ try {
+ page.openEditor(coverageEditorInput, EDITOR_ID);
+ } catch (PartInitException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, OseeLevel.SEVERE_POPUP, ex);
+ }
+ }
+ }, forcePend);
+ }
+
+ public void closeEditor() {
+ final MultiPageEditorPart editor = this;
+ Displays.ensureInDisplayThread(new Runnable() {
+ @Override
+ public void run() {
+ AWorkbench.getActivePage().closeEditor(editor, false);
+ }
+ });
+ }
+
+ public static Collection<CoverageEditor> getEditors() {
+ final List<CoverageEditor> editors = new ArrayList<CoverageEditor>();
+ Displays.ensureInDisplayThread(new Runnable() {
+ @Override
+ public void run() {
+ for (IEditorReference editor : AWorkbench.getEditors(EDITOR_ID)) {
+ editors.add((CoverageEditor) editor.getEditor(false));
+ }
+ }
+ }, true);
+ return editors;
+ }
+
+ public static void closeAll() {
+ Displays.ensureInDisplayThread(new Runnable() {
+ @Override
+ public void run() {
+ for (IEditorReference editor : AWorkbench.getEditors(EDITOR_ID)) {
+ AWorkbench.getActivePage().closeEditor(editor.getEditor(false), false);
+ }
+ }
+ });
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public Object getAdapter(Class adapter) {
+ if (IActionable.class.equals(adapter)) {
+ return new IActionable() {
+ @Override
+ public String getActionDescription() {
+ return "";
+ }
+ };
+ }
+ return super.getAdapter(adapter);
+ }
+
+ @Override
+ public String getActionDescription() {
+ return null;
+ }
+
+ @Override
+ public void doSaveAs() {
+ }
+
+ @Override
+ public boolean isSaveAsAllowed() {
+ return false;
+ }
+
+ @Override
+ public void handleFrameworkTransactionEvent(Sender sender, FrameworkTransactionData transData) throws OseeCoreException {
+ Integer branchId = transData.getBranchId();
+ if (branchId == null) {
+ return;
+ }
+ if (getCoverageEditorInput().getCoveragePackageArtifact() == null) {
+ return;
+ }
+ if (branchId != getCoverageEditorInput().getCoveragePackageArtifact().getBranch().getId()) {
+ return;
+ }
+ Artifact packageArt = getCoverageEditorInput().getCoveragePackageArtifact();
+ if (transData.isDeleted(packageArt)) {
+ Displays.ensureInDisplayThread(new Runnable() {
+ @Override
+ public void run() {
+ closeEditor();
+ }
+ });
+ return;
+ }
+ for (ICoverage coverage : getCoverageEditorInput().getCoveragePackageBase().getChildren(true)) {
+ // TODO finish this
+ }
+ }
+
+ public CoverageEditorImportTab getCoverageEditorImportTab() {
+ return coverageEditorImportTab;
+ }
+
+ public CoverageEditorOverviewTab getCoverageEditorOverviewTab() {
+ return coverageEditorOverviewTab;
+ }
+
+ @Override
+ public void handleArtifactsPurgedEvent(Sender sender, LoadedArtifacts loadedArtifacts) throws OseeCoreException {
+ if (getCoverageEditorInput().getCoveragePackageArtifact() == null) {
+ return;
+ }
+ try {
+ if (loadedArtifacts.getLoadedArtifacts().contains(getCoverageEditorInput().getCoveragePackageArtifact())) {
+ Displays.ensureInDisplayThread(new Runnable() {
+ @Override
+ public void run() {
+ closeEditor();
+ }
+ });
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+
+ }
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/CoverageEditorCoverageTab.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/CoverageEditorCoverageTab.java
new file mode 100644
index 00000000000..aca1b331503
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/CoverageEditorCoverageTab.java
@@ -0,0 +1,182 @@
+/*******************************************************************************
+ * 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
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.editor;
+
+import java.util.Collection;
+import java.util.Set;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.osee.coverage.editor.params.CoverageParameters;
+import org.eclipse.osee.coverage.editor.params.CoverageParametersComposite;
+import org.eclipse.osee.coverage.editor.params.CoverageParametersTextFilter;
+import org.eclipse.osee.coverage.editor.xcover.XCoverageViewer;
+import org.eclipse.osee.coverage.editor.xcover.XCoverageViewer.TableType;
+import org.eclipse.osee.coverage.model.CoverageImport;
+import org.eclipse.osee.coverage.model.CoveragePackage;
+import org.eclipse.osee.coverage.model.CoveragePackageBase;
+import org.eclipse.osee.coverage.model.ICoverage;
+import org.eclipse.osee.coverage.model.MessageCoverageItem;
+import org.eclipse.osee.coverage.store.OseeCoveragePackageStore;
+import org.eclipse.osee.coverage.util.CoverageUtil;
+import org.eclipse.osee.coverage.util.ISaveable;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.type.Pair;
+import org.eclipse.osee.framework.logging.OseeLevel;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.action.CollapseAllAction;
+import org.eclipse.osee.framework.ui.skynet.action.ExpandAllAction;
+import org.eclipse.osee.framework.ui.skynet.widgets.XDate;
+import org.eclipse.osee.framework.ui.swt.ALayout;
+import org.eclipse.osee.framework.ui.swt.ImageManager;
+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.Composite;
+import org.eclipse.ui.forms.IManagedForm;
+import org.eclipse.ui.forms.editor.FormEditor;
+import org.eclipse.ui.forms.editor.FormPage;
+import org.eclipse.ui.forms.widgets.ScrolledForm;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class CoverageEditorCoverageTab extends FormPage implements ISaveable {
+
+ private XCoverageViewer xCoverageViewer;
+ private ScrolledForm scrolledForm;
+ private final CoveragePackageBase coveragePackageBase;
+ private final CoverageEditor coverageEditor;
+ private CoverageParameters coverageParameters;
+ private CoverageParametersTextFilter parametersFilter;
+
+ public CoverageEditorCoverageTab(String name, CoverageEditor coverageEditor, CoveragePackageBase provider) {
+ super(coverageEditor, name, name);
+ this.coverageEditor = coverageEditor;
+ this.coveragePackageBase = provider;
+ }
+
+ @Override
+ protected void createFormContent(IManagedForm managedForm) {
+ super.createFormContent(managedForm);
+
+ scrolledForm = managedForm.getForm();
+ scrolledForm.setText(coveragePackageBase.getName() + " - " + XDate.getDateStr(coveragePackageBase.getDate(),
+ XDate.MMDDYYHHMM) + " - " + coveragePackageBase.getCoverageItems().size() + " Coverage Items");
+ scrolledForm.setImage(ImageManager.getImage(CoverageUtil.getCoveragePackageBaseImage(coveragePackageBase)));
+ scrolledForm.getBody().setLayout(new GridLayout(2, false));
+ Composite mainComp = scrolledForm.getBody();
+ coverageEditor.getToolkit().adapt(mainComp);
+ mainComp.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false));
+
+ coverageParameters = new CoverageParameters(coveragePackageBase);
+ new CoverageParametersComposite(mainComp, managedForm, coverageEditor, coverageParameters,
+ new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ handleSearchButtonPressed();
+ }
+ });
+
+ Composite tableComp = new Composite(mainComp, SWT.NONE);
+ tableComp.setLayout(ALayout.getZeroMarginLayout(1, false));
+ coverageEditor.getToolkit().adapt(tableComp);
+ GridData tableData = new GridData(SWT.FILL, SWT.FILL, true, true);
+ tableData.horizontalSpan = 2;
+ tableComp.setLayoutData(tableData);
+ coverageEditor.getToolkit().adapt(tableComp);
+
+ xCoverageViewer =
+ new XCoverageViewer(this, coveragePackageBase.getCoverageOptionManager(),
+ coveragePackageBase instanceof CoverageImport ? TableType.Import : TableType.Package);
+ xCoverageViewer.setDisplayLabel(false);
+ xCoverageViewer.createWidgets(managedForm, tableComp, 1);
+ xCoverageViewer.getXViewer().getTree().setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ createToolbar();
+ }
+
+ private void handleSearchButtonPressed() {
+ if (parametersFilter == null) {
+ parametersFilter = new CoverageParametersTextFilter(xCoverageViewer.getXViewer());
+ xCoverageViewer.getXViewer().addFilter(parametersFilter);
+ }
+ handleSearchButtonPressed(xCoverageViewer, coverageParameters, parametersFilter);
+ }
+
+ public static void handleSearchButtonPressed(XCoverageViewer xCoverageViewer, CoverageParameters coverageParameters, CoverageParametersTextFilter parametersFilter) {
+ try {
+ Result result = coverageParameters.isParameterSelectionValid();
+ if (result.isFalse()) {
+ result.popup();
+ return;
+ }
+ Pair<Set<ICoverage>, Set<ICoverage>> itemsAndParents = coverageParameters.performSearchGetResults();
+ if (itemsAndParents.getSecond().size() != 0) {
+ xCoverageViewer.loadTable(itemsAndParents.getSecond());
+ } else {
+ xCoverageViewer.getXViewer().setInput(new MessageCoverageItem("No Match"));
+ }
+ xCoverageViewer.refresh();
+ parametersFilter.setShowAll(coverageParameters.isShowAll());
+ parametersFilter.setShownCoverages(itemsAndParents.getFirst());
+ xCoverageViewer.getXViewer().refresh();
+
+ if (!coverageParameters.isShowAll()) {
+ // Don't reveal too low cause it's too much, just reveal to first non folder Coverage Unit
+ for (ICoverage coverage : CoverageUtil.getFirstNonFolderCoverageUnits(itemsAndParents.getFirst())) {
+ xCoverageViewer.getXViewer().setSelection(new StructuredSelection(coverage));
+ xCoverageViewer.getXViewer().reveal(new StructuredSelection(coverage));
+ }
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, OseeLevel.SEVERE_POPUP, ex);
+ }
+ }
+
+ public void createToolbar() {
+ IToolBarManager toolBarManager = scrolledForm.getToolBarManager();
+ toolBarManager.add(new CollapseAllAction(xCoverageViewer.getXViewer()));
+ toolBarManager.add(new ExpandAllAction(xCoverageViewer.getXViewer()));
+ toolBarManager.add(xCoverageViewer.getXViewer().getCustomizeAction());
+ CoverageEditor.addToToolBar(scrolledForm.getToolBarManager(), coverageEditor);
+ scrolledForm.updateToolBar();
+ }
+
+ @Override
+ public FormEditor getEditor() {
+ return super.getEditor();
+ }
+
+ @Override
+ public Result isEditable() {
+ return coveragePackageBase.isEditable();
+ }
+
+ @Override
+ public Result save() throws OseeCoreException {
+ return OseeCoveragePackageStore.get((CoveragePackage) coveragePackageBase).save();
+ }
+
+ @Override
+ public Result save(Collection<ICoverage> coverages) throws OseeCoreException {
+ return (OseeCoveragePackageStore.get((CoveragePackage) coveragePackageBase)).save(coverages);
+ }
+
+ @Override
+ public Result saveImportRecord(SkynetTransaction transaction, CoverageImport coverageImport) throws OseeCoreException {
+ return new Result(false, "Not valid for this tab.");
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/CoverageEditorHandler.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/CoverageEditorHandler.java
new file mode 100644
index 00000000000..42ba71cae59
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/CoverageEditorHandler.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * 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.coverage.editor;
+
+import java.util.logging.Level;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.ui.skynet.commandHandlers.renderer.handlers.AbstractEditorHandler;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class CoverageEditorHandler extends AbstractEditorHandler {
+
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ if (!artifacts.isEmpty()) {
+ CoverageRenderer renderer = new CoverageRenderer();
+ try {
+ renderer.open(artifacts);
+ } catch (OseeCoreException ex) {
+ OseeLog.log(CoverageEditorHandler.class, Level.SEVERE, ex);
+ }
+ dispose();
+ }
+ return null;
+ }
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/CoverageEditorImportTab.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/CoverageEditorImportTab.java
new file mode 100644
index 00000000000..1bf8356ca8a
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/CoverageEditorImportTab.java
@@ -0,0 +1,380 @@
+/*
+ * Created on Feb 5, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.editor;
+
+import java.util.logging.Level;
+import org.eclipse.core.runtime.AssertionFailedException;
+import org.eclipse.core.runtime.jobs.IJobChangeEvent;
+import org.eclipse.core.runtime.jobs.JobChangeAdapter;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.osee.coverage.CoverageManager;
+import org.eclipse.osee.coverage.blam.AbstractCoverageBlam;
+import org.eclipse.osee.coverage.internal.Activator;
+import org.eclipse.osee.coverage.model.CoverageImport;
+import org.eclipse.osee.coverage.model.CoveragePackage;
+import org.eclipse.osee.coverage.model.CoveragePackageBase;
+import org.eclipse.osee.coverage.util.CoverageUtil;
+import org.eclipse.osee.framework.core.exception.OseeArgumentException;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.core.exception.OseeStateException;
+import org.eclipse.osee.framework.jdk.core.util.Collections;
+import org.eclipse.osee.framework.jdk.core.util.Lib;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+import org.eclipse.osee.framework.logging.OseeLevel;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.ui.plugin.util.ArrayTreeContentProvider;
+import org.eclipse.osee.framework.ui.plugin.util.Displays;
+import org.eclipse.osee.framework.ui.skynet.FrameworkImage;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.blam.AbstractBlam;
+import org.eclipse.osee.framework.ui.skynet.blam.sections.BlamInputSection;
+import org.eclipse.osee.framework.ui.skynet.blam.sections.BlamOutputSection;
+import org.eclipse.osee.framework.ui.skynet.blam.sections.BlamUsageSection;
+import org.eclipse.osee.framework.ui.skynet.widgets.XComboViewer;
+import org.eclipse.osee.framework.ui.swt.ALayout;
+import org.eclipse.osee.framework.ui.swt.ImageManager;
+import org.eclipse.osee.framework.ui.swt.Widgets;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.forms.IManagedForm;
+import org.eclipse.ui.forms.editor.FormEditor;
+import org.eclipse.ui.forms.editor.FormPage;
+import org.eclipse.ui.forms.widgets.ScrolledForm;
+import org.eclipse.ui.forms.widgets.Section;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class CoverageEditorImportTab extends FormPage {
+
+ private final CoverageEditor coverageEditor;
+ private final CoveragePackageBase coveragePackageBase;
+ private XComboViewer combo;
+ private BlamUsageSection blamUsageSection;
+ private BlamInputSection blamInputSection;
+ private BlamOutputSection blamOutputSection;
+ private CoverageImport coverageImport;
+ private CoverageEditorCoverageTab coverageImportTab;
+ private CoverageEditorOverviewTab coverageImportOverviewTab;
+ private CoverageEditorMergeTab coverageEditorMergeTab;
+ private int coverageImportIndex, coverageImportOverviewIndex, coverageEditorMergeIndex;
+ private Composite destroyableComposite;
+ private boolean isSimulateImput = false;
+
+ public CoverageEditorImportTab(CoverageEditor coverageEditor) throws OseeCoreException {
+ super(coverageEditor, "Import", "Import");
+ this.coverageEditor = coverageEditor;
+ this.coveragePackageBase = coverageEditor.getCoveragePackageBase();
+ }
+
+ @Override
+ protected void createFormContent(IManagedForm managedForm) {
+ super.createFormContent(managedForm);
+
+ final ScrolledForm scrolledForm = managedForm.getForm();
+ scrolledForm.setText(coveragePackageBase.getName());
+ scrolledForm.setImage(ImageManager.getImage(CoverageUtil.getCoveragePackageBaseImage(coveragePackageBase)));
+
+ scrolledForm.getBody().setLayout(ALayout.getZeroMarginLayout());
+ CoverageEditor.addToToolBar(scrolledForm.getToolBarManager(), coverageEditor);
+
+ scrolledForm.getBody().setLayout(new GridLayout(1, false));
+ scrolledForm.getBody().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+ managedForm.getMessageManager().setAutoUpdate(false);
+
+ combo = new XComboViewer("Select Import Blam");
+ combo.setLabelProvider(labelProvider);
+ combo.setContentProvider(new ArrayTreeContentProvider());
+ combo.createWidgets(managedForm, scrolledForm.getBody(), 1);
+ combo.setInput(Collections.castAll(CoverageManager.getCoverageBlams()));
+ combo.getCombo().setLayoutData(new GridData(SWT.NONE, SWT.NONE, false, false));
+ combo.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ createBlamSections();
+ }
+ });
+
+ createDestroyableComposite();
+
+ }
+
+ public void simulateImport(String importName) throws OseeCoreException {
+ if (!Strings.isValid(importName)) {
+ throw new OseeStateException(String.format("Invalid importName [%s]", importName));
+ }
+ AbstractCoverageBlam blam = null;
+ for (AbstractCoverageBlam abstractCoverageBlam : CoverageManager.getCoverageBlams()) {
+ if (abstractCoverageBlam.getName().equals(importName)) {
+ blam = abstractCoverageBlam;
+ }
+ }
+ if (blam == null) {
+ throw new OseeArgumentException(String.format("Can't find blam matching name [%s]", importName));
+ }
+ blam.setCoverageEditor(coverageEditor);
+ combo.getComboViewer().setSelection(new StructuredSelection(blam), true);
+ createBlamSections();
+ blamOutputSection.simluateRun();
+ isSimulateImput = true;
+ }
+
+ public void simulateImportSearch() throws OseeArgumentException {
+ coverageEditorMergeTab.simulateSearchAll();
+ }
+
+ private AbstractCoverageBlam getBlam() {
+ if (combo.getSelected() != null) {
+ AbstractCoverageBlam blam = (AbstractCoverageBlam) combo.getSelected();
+ blam.setCoverageEditor(coverageEditor);
+ return blam;
+ }
+ return null;
+ }
+
+ private void createDestroyableComposite() {
+ if (destroyableComposite != null) {
+ destroyableComposite.dispose();
+ }
+ destroyableComposite =
+ getManagedForm().getToolkit().createComposite(getManagedForm().getForm().getBody(), SWT.NONE);
+ destroyableComposite.setLayout(new GridLayout());
+ destroyableComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+ }
+
+ private void createBlamSections() {
+ if (blamUsageSection != null) {
+ if (blamUsageSection != null) {
+ getManagedForm().removePart(blamUsageSection);
+ }
+ blamUsageSection.dispose();
+ if (blamInputSection != null) {
+ getManagedForm().removePart(blamInputSection);
+ blamInputSection.dispose();
+ }
+ if (blamOutputSection != null) {
+ getManagedForm().removePart(blamOutputSection);
+ blamOutputSection.dispose();
+ }
+ createDestroyableComposite();
+ }
+ int sectionStyle = Section.TITLE_BAR | Section.EXPANDED | Section.TWISTIE;
+ blamUsageSection =
+ new BlamUsageSection(getEditor(), getBlam(), destroyableComposite, getManagedForm().getToolkit(),
+ sectionStyle);
+
+ blamInputSection =
+ new BlamInputSection(getEditor(), getBlam(), destroyableComposite, getManagedForm().getToolkit(),
+ sectionStyle);
+
+ blamOutputSection =
+ new BlamOutputSection(getEditor(), getBlam(), destroyableComposite, getManagedForm().getToolkit(),
+ sectionStyle, new ExecuteBlamAction());
+
+ getManagedForm().addPart(blamUsageSection);
+ getManagedForm().addPart(blamInputSection);
+ blamInputSection.getSection().setExpanded(true);
+ getManagedForm().addPart(blamOutputSection);
+ blamInputSection.getSection().setExpanded(true);
+
+ getManagedForm().refresh();
+ getManagedForm().getForm().layout();
+
+ }
+ private final class BlamEditorExecutionAdapter extends JobChangeAdapter {
+ private long startTime = 0;
+ private final String name;
+
+ public BlamEditorExecutionAdapter(String name) {
+ this.name = name;
+ }
+
+ @Override
+ public void scheduled(IJobChangeEvent event) {
+ super.scheduled(event);
+ showBusy(true);
+ blamOutputSection.setText("Importing...\n");
+ }
+
+ @Override
+ public void aboutToRun(IJobChangeEvent event) {
+ super.aboutToRun(event);
+ startTime = System.currentTimeMillis();
+ blamOutputSection.setText(String.format("Starting [%s] BLAM at [%s]\n", name, Lib.getElapseString(startTime)));
+ }
+
+ @Override
+ public void done(IJobChangeEvent event) {
+ super.done(event);
+ }
+ }
+
+ public final class ExecuteBlamAction extends Action {
+
+ public ExecuteBlamAction() {
+ super("Run BLAM in Job", Action.AS_PUSH_BUTTON);
+ setImageDescriptor(ImageManager.getImageDescriptor(FrameworkImage.RUN_EXC));
+ setToolTipText("Executes the BLAM Operation");
+ }
+
+ @Override
+ public void run() {
+ try {
+ if (coverageEditorMergeTab != null) {
+ if (coverageEditorMergeIndex != 0) {
+ try {
+ coverageEditor.removePage(coverageEditorMergeIndex);
+ } catch (AssertionFailedException ex) {
+ // page already removed; do nothing
+ }
+ coverageEditorMergeIndex = 0;
+ }
+ }
+ if (coverageImportTab != null) {
+ if (coverageImportIndex != 0) {
+ try {
+ coverageEditor.removePage(coverageImportIndex);
+ } catch (AssertionFailedException ex) {
+ // page already removed; do nothing
+ }
+ coverageImportIndex = 0;
+ }
+ }
+ if (coverageImportOverviewTab != null) {
+ if (coverageImportOverviewIndex != 0) {
+ try {
+ coverageEditor.removePage(coverageImportOverviewIndex);
+ } catch (AssertionFailedException ex) {
+ // page already removed; do nothing
+ }
+ coverageImportOverviewIndex = 0;
+ }
+ }
+ coverageImport = null;
+
+ getBlam().execute(getBlam().getName(), blamOutputSection.getOutput(), blamInputSection.getData(),
+ new BlamEditorExecutionAdapter(getBlam().getName()));
+ } catch (Exception ex) {
+ OseeLog.log(getClass(), OseeLevel.SEVERE_POPUP, ex);
+ }
+ }
+ }
+
+ public void createImportParts() {
+ coverageImportOverviewTab = new CoverageEditorOverviewTab("Import Overview", coverageEditor, coverageImport);
+ coverageImportOverviewIndex = coverageEditor.addFormPage(coverageImportOverviewTab);
+
+ coverageImportTab =
+ new CoverageEditorCoverageTab(String.format("Import Items (%d)", coverageImport.getCoverageItems().size()),
+ coverageEditor, coverageImport);
+ coverageImportIndex = coverageEditor.addFormPage(coverageImportTab);
+
+ try {
+ coverageEditorMergeTab =
+ new CoverageEditorMergeTab("Import Merge", coverageEditor,
+ (CoveragePackage) coverageEditor.getCoveragePackageBase(), coverageImport);
+ } catch (OseeCoreException ex) {
+ OseeLog.log(Activator.class, OseeLevel.SEVERE, ex);
+ }
+ coverageEditorMergeIndex = coverageEditor.addFormPage(coverageEditorMergeTab);
+ }
+
+ @Override
+ public void showBusy(boolean busy) {
+ super.showBusy(busy);
+ if (Widgets.isAccessible(getManagedForm().getForm())) {
+ getManagedForm().getForm().getForm().setBusy(busy);
+ }
+ }
+
+ @Override
+ public FormEditor getEditor() {
+ return super.getEditor();
+ }
+
+ static ILabelProvider labelProvider = new ILabelProvider() {
+
+ public Image getImage(Object element) {
+ return null;
+ }
+
+ public String getText(Object element) {
+ if (element instanceof AbstractBlam) {
+ return ((AbstractBlam) element).getName();
+ }
+ return "Unknown";
+ }
+
+ public void addListener(ILabelProviderListener listener) {
+ }
+
+ public void dispose() {
+ }
+
+ public boolean isLabelProperty(Object element, String property) {
+ return false;
+ }
+
+ public void removeListener(ILabelProviderListener listener) {
+ }
+
+ };
+
+ public CoverageImport getCoverageImport() {
+ return coverageImport;
+ }
+
+ /**
+ * This method is called at the end of the import blam being run
+ */
+ public void setCoverageImportResults(final String blamName, final CoverageImport coverageImport) {
+ this.coverageImport = coverageImport;
+ showBusy(false);
+ Displays.ensureInDisplayThread(new Runnable() {
+ @Override
+ public void run() {
+ blamOutputSection.appendText("BLAM completed\n");
+ coverageImport.setBlamName(blamName);
+ createImportParts();
+
+ if (isSimulateImput) {
+ Thread thread = new Thread() {
+ @Override
+ public void run() {
+ try {
+ Thread.sleep(1000);
+ Displays.ensureInDisplayThread(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ coverageEditor.simulateImportPostRun();
+ isSimulateImput = false;
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ });
+ } catch (InterruptedException ex) {
+ OseeLog.log(Activator.class, Level.SEVERE, ex);
+ }
+ }
+ };
+ thread.start();
+ }
+ }
+ });
+ }
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/CoverageEditorInput.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/CoverageEditorInput.java
new file mode 100644
index 00000000000..3027013218f
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/CoverageEditorInput.java
@@ -0,0 +1,106 @@
+/*******************************************************************************
+ * 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.coverage.editor;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.osee.coverage.model.CoveragePackageBase;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IPersistableElement;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class CoverageEditorInput implements IEditorInput {
+
+ private CoveragePackageBase coveragePackageBase;
+ private Artifact coveragePackageArtifact;
+ private final String preLoadName;
+ private final boolean isInTest;
+
+ public CoverageEditorInput(String preLoadName, Artifact coveragePackageArtifact, CoveragePackageBase coveragePackageBase, boolean isInTest) {
+ this.preLoadName = preLoadName;
+ this.coveragePackageArtifact = coveragePackageArtifact;
+ this.coveragePackageBase = coveragePackageBase;
+ this.isInTest = isInTest;
+ }
+
+ @Override
+ public int hashCode() {
+ return coveragePackageBase.hashCode();
+ }
+
+ public boolean equals(Object obj) {
+ if (!(obj instanceof CoverageEditorInput)) return false;
+ CoverageEditorInput castObj = (CoverageEditorInput) obj;
+ if (castObj.getCoveragePackageBase() != null)
+ return castObj.getCoveragePackageBase().equals(this.coveragePackageBase);
+ else if (castObj.getCoveragePackageArtifact() != null) {
+ return castObj.getCoveragePackageArtifact().equals(this.coveragePackageArtifact);
+ }
+ return false;
+ }
+
+ public boolean exists() {
+ return false;
+ }
+
+ public ImageDescriptor getImageDescriptor() {
+ return null;
+ }
+
+ public IPersistableElement getPersistable() {
+ return null;
+ }
+
+ public String getToolTipText() {
+ return "";
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public Object getAdapter(Class adapter) {
+ return null;
+ }
+
+ @Override
+ public String getName() {
+ if (coveragePackageBase == null) {
+ return getPreLoadName();
+ }
+ return coveragePackageBase.getName();
+ }
+
+ public CoveragePackageBase getCoveragePackageBase() {
+ return coveragePackageBase;
+ }
+
+ public Artifact getCoveragePackageArtifact() {
+ return coveragePackageArtifact;
+ }
+
+ public String getPreLoadName() {
+ return preLoadName;
+ }
+
+ public void setCoveragePackageBase(CoveragePackageBase coveragePackageBase) {
+ this.coveragePackageBase = coveragePackageBase;
+ }
+
+ public boolean isInTest() {
+ return isInTest;
+ }
+
+ public void setCoveragePackageArtifact(Artifact coveragePackageArtifact) {
+ this.coveragePackageArtifact = coveragePackageArtifact;
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/CoverageEditorLoadingTab.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/CoverageEditorLoadingTab.java
new file mode 100644
index 00000000000..53c99e92aa7
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/CoverageEditorLoadingTab.java
@@ -0,0 +1,87 @@
+/*
+ * Created on Feb 5, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.editor;
+
+import org.eclipse.osee.coverage.util.CoverageImage;
+import org.eclipse.osee.framework.ui.plugin.util.Displays;
+import org.eclipse.osee.framework.ui.skynet.action.RefreshAction;
+import org.eclipse.osee.framework.ui.skynet.action.RefreshAction.IRefreshActionHandler;
+import org.eclipse.osee.framework.ui.skynet.results.XResultData;
+import org.eclipse.osee.framework.ui.skynet.results.html.XResultsComposite;
+import org.eclipse.osee.framework.ui.swt.ALayout;
+import org.eclipse.osee.framework.ui.swt.ImageManager;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.forms.IManagedForm;
+import org.eclipse.ui.forms.editor.FormEditor;
+import org.eclipse.ui.forms.editor.FormPage;
+import org.eclipse.ui.forms.widgets.ScrolledForm;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class CoverageEditorLoadingTab extends FormPage implements IRefreshActionHandler {
+
+ private final CoverageEditor coverageEditor;
+ XResultsComposite xResultsComp;
+
+ public CoverageEditorLoadingTab(String name, CoverageEditor coverageEditor) {
+ super(coverageEditor, name, name);
+ this.coverageEditor = coverageEditor;
+ }
+
+ @Override
+ protected void createFormContent(IManagedForm managedForm) {
+ super.createFormContent(managedForm);
+
+ final ScrolledForm scrolledForm = managedForm.getForm();
+ scrolledForm.setText(getTitle());
+ scrolledForm.setImage(ImageManager.getImage(CoverageImage.COVERAGE));
+
+ scrolledForm.getBody().setLayout(ALayout.getZeroMarginLayout());
+ createToolBar();
+ Composite composite = scrolledForm.getBody();
+ composite.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false));
+
+ xResultsComp = new XResultsComposite(composite, SWT.NONE);
+ xResultsComp.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.VERTICAL_ALIGN_BEGINNING));
+ GridData gd = new GridData(GridData.FILL_BOTH);
+ gd.heightHint = 500;
+ xResultsComp.setLayoutData(gd);
+ coverageEditor.getToolkit().adapt(xResultsComp);
+ getManagedForm().getForm().getForm().setBusy(true);
+
+ refreshHtml();
+ }
+
+ public void refreshHtml() {
+ final XResultData rd = new XResultData(false);
+ rd.log(getTitle());
+ Displays.ensureInDisplayThread(new Runnable() {
+ @Override
+ public void run() {
+ xResultsComp.setHtmlText(rd.getReport("").getManipulatedHtml(), "");
+ }
+ });
+ }
+
+ public void createToolBar() {
+ getManagedForm().getForm().getToolBarManager().add(new RefreshAction(this));
+ CoverageEditor.addToToolBar(getManagedForm().getForm().getToolBarManager(), coverageEditor);
+ }
+
+ @Override
+ public FormEditor getEditor() {
+ return super.getEditor();
+ }
+
+ @Override
+ public void refreshActionHandler() {
+ refreshHtml();
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/CoverageEditorMergeTab.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/CoverageEditorMergeTab.java
new file mode 100644
index 00000000000..7a81038966a
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/CoverageEditorMergeTab.java
@@ -0,0 +1,426 @@
+/*******************************************************************************
+ * 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
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.editor;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.jobs.IJobChangeEvent;
+import org.eclipse.core.runtime.jobs.IJobChangeListener;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.ActionContributionItem;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.osee.coverage.action.LinkWithImportItemAction;
+import org.eclipse.osee.coverage.action.ShowMergeDetailsAction;
+import org.eclipse.osee.coverage.editor.params.CoverageParameters;
+import org.eclipse.osee.coverage.editor.params.CoverageParametersComposite;
+import org.eclipse.osee.coverage.editor.params.CoverageParametersTextFilter;
+import org.eclipse.osee.coverage.editor.xcover.XCoverageViewer.TableType;
+import org.eclipse.osee.coverage.editor.xmerge.CoverageMergeXViewerFactoryImport;
+import org.eclipse.osee.coverage.editor.xmerge.CoverageMergeXViewerFactoryPackage;
+import org.eclipse.osee.coverage.editor.xmerge.XCoverageMergeViewer;
+import org.eclipse.osee.coverage.internal.Activator;
+import org.eclipse.osee.coverage.merge.IMergeItem;
+import org.eclipse.osee.coverage.merge.MergeImportManager;
+import org.eclipse.osee.coverage.merge.MergeManager;
+import org.eclipse.osee.coverage.merge.MessageMergeItem;
+import org.eclipse.osee.coverage.model.CoverageImport;
+import org.eclipse.osee.coverage.model.CoverageOption;
+import org.eclipse.osee.coverage.model.CoveragePackage;
+import org.eclipse.osee.coverage.model.ICoverage;
+import org.eclipse.osee.coverage.store.OseeCoveragePackageStore;
+import org.eclipse.osee.coverage.util.CoverageImage;
+import org.eclipse.osee.coverage.util.CoverageUtil;
+import org.eclipse.osee.coverage.util.ISaveable;
+import org.eclipse.osee.coverage.util.NotSaveable;
+import org.eclipse.osee.coverage.util.widget.XHyperlabelCoverageMethodSelection;
+import org.eclipse.osee.framework.core.exception.OseeArgumentException;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.core.operation.AbstractOperation;
+import org.eclipse.osee.framework.core.operation.Operations;
+import org.eclipse.osee.framework.logging.OseeLevel;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.plugin.util.Displays;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.skynet.FrameworkImage;
+import org.eclipse.osee.framework.ui.skynet.action.CollapseAllAction;
+import org.eclipse.osee.framework.ui.skynet.action.ExpandAllAction;
+import org.eclipse.osee.framework.ui.skynet.action.RefreshAction;
+import org.eclipse.osee.framework.ui.skynet.results.XResultData;
+import org.eclipse.osee.framework.ui.skynet.widgets.dialog.CheckBoxDialog;
+import org.eclipse.osee.framework.ui.swt.ALayout;
+import org.eclipse.osee.framework.ui.swt.ImageManager;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.SashForm;
+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.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.ui.forms.IManagedForm;
+import org.eclipse.ui.forms.editor.FormEditor;
+import org.eclipse.ui.forms.editor.FormPage;
+import org.eclipse.ui.forms.widgets.ScrolledForm;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class CoverageEditorMergeTab extends FormPage implements ISaveable {
+
+ private XCoverageMergeViewer xPackageViewer1;
+ private final CoveragePackage coveragePackage;
+ private XCoverageMergeViewer xImportViewer2;
+ private final CoverageImport coverageImport;
+ private ScrolledForm scrolledForm;
+ private Label titleLabel1, titleLabel2;
+ private final CoverageEditor coverageEditor;
+ private CoverageParametersComposite coverageParametersComposite;
+ private CoverageParameters coverageParameters;
+ LinkWithImportItemAction linkWithImportItemAction;
+ ShowMergeDetailsAction showMergeDetailsAction;
+ private MergeManager mergeManager;
+ private boolean loading = false;
+ private CoverageParametersTextFilter parametersFilter;
+
+ public CoverageEditorMergeTab(String name, CoverageEditor coverageEditor, CoveragePackage provider1, CoverageImport provider2) {
+ super(coverageEditor, name, name);
+ this.coverageEditor = coverageEditor;
+ this.coveragePackage = provider1;
+ this.coverageImport = provider2;
+ }
+
+ @Override
+ protected void createFormContent(IManagedForm managedForm) {
+ super.createFormContent(managedForm);
+
+ scrolledForm = managedForm.getForm();
+ scrolledForm.setText("Merge of " + coverageImport.getName());
+ scrolledForm.setImage(ImageManager.getImage(CoverageImage.COVERAGE_PACKAGE));
+
+ scrolledForm.getBody().setLayout(new GridLayout(2, false));
+ Composite mainComp = scrolledForm.getBody();
+ coverageEditor.getToolkit().adapt(mainComp);
+ mainComp.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false));
+
+ coverageParameters = new CoverageParameters(coveragePackage);
+ coverageParametersComposite =
+ new CoverageParametersComposite(mainComp, managedForm, coverageEditor, coverageParameters,
+ new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ handleSearchButtonPressed();
+ }
+ });
+
+ Composite tableComp = coverageEditor.getToolkit().createComposite(mainComp, SWT.NONE);
+ tableComp.setLayout(ALayout.getZeroMarginLayout(3, false));
+ GridData tableData = new GridData(SWT.FILL, SWT.FILL, true, true);
+ tableData.horizontalSpan = 2;
+ tableComp.setLayoutData(tableData);
+ coverageEditor.getToolkit().adapt(tableComp);
+
+ SashForm sashForm = new SashForm(tableComp, SWT.NONE);
+ sashForm.setLayout(new GridLayout());
+ sashForm.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ managedForm.getToolkit().adapt(sashForm);
+
+ Composite leftComp = coverageEditor.getToolkit().createComposite(sashForm, SWT.NONE);
+ leftComp.setLayout(ALayout.getZeroMarginLayout(1, false));
+ leftComp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+ Composite rightComp = coverageEditor.getToolkit().createComposite(sashForm, SWT.NONE);
+ rightComp.setLayout(ALayout.getZeroMarginLayout(1, false));
+ rightComp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+ createLeftComposite(managedForm, leftComp);
+ createRightComposite(managedForm, rightComp);
+
+ createEditorToolbar();
+ updateTitles();
+ }
+
+ private void handleImportSelected() {
+ Collection<IMergeItem> mergeItems = getSelectedMergeItems();
+ if (mergeItems.size() == 0) {
+ AWorkbench.popup("Select Items to Import via Import Column");
+ return;
+ }
+ try {
+ CheckBoxDialog dialog =
+ new CheckBoxDialog("Import Items", String.format("Importing [%d] items.", mergeItems.size()),
+ "Save Import Record?");
+ if (dialog.open() == 0) {
+ XResultData rd = new MergeImportManager(mergeManager).importItems(this, mergeItems);
+ rd.report("Import");
+ if (dialog.isChecked()) {
+ SkynetTransaction transaction = new SkynetTransaction(CoverageUtil.getBranch(), "Save Import Record");
+ saveImportRecord(transaction, coverageImport);
+ transaction.execute();
+ }
+ handleSearchButtonPressed();
+ updateTitles();
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(Activator.class, OseeLevel.SEVERE_POPUP, ex);
+ }
+ }
+
+ private void updateTitles() {
+ titleLabel1.setText(coveragePackage.getName());
+ titleLabel2.setText(coverageImport.getName());
+ }
+
+ private Collection<IMergeItem> getSelectedMergeItems() {
+ Collection<IMergeItem> selected = new ArrayList<IMergeItem>();
+ for (Object obj : (Collection<?>) xImportViewer2.getXViewer().getInput()) {
+ if (obj instanceof IMergeItem && ((IMergeItem) obj).isChecked()) {
+ selected.add((IMergeItem) obj);
+ }
+ }
+ return selected;
+ }
+
+ public void createLeftComposite(IManagedForm managedForm, Composite leftComp) {
+ // Fill LEFT Composite
+ titleLabel1 = managedForm.getToolkit().createLabel(leftComp, coveragePackage.getName());
+
+ ToolBar leftToolBar = new ToolBar(leftComp, SWT.FLAT | SWT.RIGHT);
+ leftToolBar.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ managedForm.getToolkit().adapt(leftToolBar);
+
+ xPackageViewer1 =
+ new XCoverageMergeViewer(null, this, new CoverageMergeXViewerFactoryPackage(),
+ coveragePackage.getCoverageOptionManager(), TableType.Package, TableType.Merge);
+ xPackageViewer1.setDisplayLabel(false);
+ xPackageViewer1.createWidgets(managedForm, leftComp, 1);
+ xPackageViewer1.getXViewer().getTree().setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ linkWithImportItemAction = new LinkWithImportItemAction();
+ linkWithImportItemAction.setPackageXViewer(xPackageViewer1, coveragePackage);
+
+ new ActionContributionItem(linkWithImportItemAction).fill(leftToolBar, 0);
+ new ActionContributionItem(new RefreshAction(xPackageViewer1)).fill(leftToolBar, 0);
+ new ActionContributionItem(xPackageViewer1.getXViewer().getCustomizeAction()).fill(leftToolBar, 0);
+ new ActionContributionItem(new CollapseAllAction(xPackageViewer1.getXViewer())).fill(leftToolBar, 0);
+ new ActionContributionItem(new ExpandAllAction(xPackageViewer1.getXViewer())).fill(leftToolBar, 0);
+ }
+
+ public void createRightComposite(IManagedForm managedForm, Composite rightComp) {
+ // Fill RIGHT Composite
+ titleLabel2 = managedForm.getToolkit().createLabel(rightComp, coverageImport.getName());
+
+ ToolBar rightToolBar = new ToolBar(rightComp, SWT.FLAT | SWT.RIGHT);
+ rightToolBar.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ managedForm.getToolkit().adapt(rightToolBar);
+
+ xImportViewer2 =
+ new XCoverageMergeViewer(mergeManager, new NotSaveable(), new CoverageMergeXViewerFactoryImport(),
+ coverageImport.getCoverageOptionManager(), TableType.Import, TableType.Merge);
+ xImportViewer2.setDisplayLabel(false);
+ xImportViewer2.createWidgets(managedForm, rightComp, 1);
+ xImportViewer2.getXViewer().getTree().setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ linkWithImportItemAction.setImportXViewer(xImportViewer2);
+
+ showMergeDetailsAction = new ShowMergeDetailsAction();
+ showMergeDetailsAction.setPackageXViewer(xPackageViewer1, coveragePackage);
+ showMergeDetailsAction.setImportXViewer(xImportViewer2, coverageImport);
+ new ActionContributionItem(showMergeDetailsAction).fill(rightToolBar, 0);
+ new ActionContributionItem(reloadAction).fill(rightToolBar, 0);
+ new ActionContributionItem(new RefreshAction(xPackageViewer1)).fill(rightToolBar, 0);
+ new ActionContributionItem(xImportViewer2.getXViewer().getCustomizeAction()).fill(rightToolBar, 0);
+ new ActionContributionItem(new CollapseAllAction(xImportViewer2.getXViewer())).fill(rightToolBar, 0);
+ new ActionContributionItem(new ExpandAllAction(xImportViewer2.getXViewer())).fill(rightToolBar, 0);
+ new ActionContributionItem(importAction).fill(rightToolBar, 0);
+
+ loadImportViewer(false);
+ }
+
+ private class ImportJobChangeListener implements IJobChangeListener {
+
+ @Override
+ public void aboutToRun(IJobChangeEvent event) {
+ }
+
+ @Override
+ public void awake(IJobChangeEvent event) {
+ }
+
+ @Override
+ public void done(IJobChangeEvent event) {
+ showBusy(false);
+ loading = false;
+ coverageEditor.getCoverageEditorOverviewTab().refreshHtml();
+ }
+
+ @Override
+ public void running(IJobChangeEvent event) {
+ }
+
+ @Override
+ public void scheduled(IJobChangeEvent event) {
+ showBusy(true);
+ }
+
+ @Override
+ public void sleeping(IJobChangeEvent event) {
+ }
+
+ }
+
+ private void loadImportViewer(boolean force) {
+ if (loading) {
+ AWorkbench.popup("Already Loading");
+ return;
+ }
+ if (force || mergeManager == null) {
+ mergeManager = new MergeManager(coveragePackage, coverageImport);
+ }
+ xImportViewer2.getXViewer().setInput(new MessageMergeItem("Loading..."));
+ xImportViewer2.getXViewer().refresh();
+ loading = true;
+ Operations.executeAsJob(new LoadImportViewerJob(), true, Job.LONG, new ImportJobChangeListener());
+ }
+
+ public class LoadImportViewerJob extends AbstractOperation {
+
+ public LoadImportViewerJob() {
+ super("Loading Coverage Import Viewer", Activator.PLUGIN_ID);
+ }
+
+ @Override
+ protected void doWork(IProgressMonitor monitor) throws Exception {
+ final List<IMergeItem> mergeItems = mergeManager.getMergeItems();
+ Displays.ensureInDisplayThread(new Runnable() {
+ @Override
+ public void run() {
+ xImportViewer2.getXViewer().setInput(mergeItems);
+ }
+ });
+ }
+ }
+
+ private final Action reloadAction = new Action() {
+ @Override
+ public void run() {
+ loadImportViewer(true);
+ }
+
+ @Override
+ public ImageDescriptor getImageDescriptor() {
+ return ImageManager.getImageDescriptor(FrameworkImage.LOAD);
+ }
+
+ @Override
+ public String getToolTipText() {
+ return "Re-Load";
+ }
+
+ };
+
+ private final Action importAction = new Action() {
+
+ @Override
+ public void run() {
+ try {
+ Artifact artifact = ((CoverageEditorInput) coverageEditor.getEditorInput()).getCoveragePackageArtifact();
+ if (artifact != null) {
+ CoverageUtil.setBranch(artifact.getBranch());
+ } else {
+ if (!CoverageUtil.getBranchFromUser(true)) {
+ return;
+ }
+ }
+ handleImportSelected();
+ loadImportViewer(true);
+ } catch (OseeCoreException ex) {
+ OseeLog.log(Activator.class, OseeLevel.SEVERE_POPUP, ex);
+ }
+ }
+
+ @Override
+ public org.eclipse.jface.resource.ImageDescriptor getImageDescriptor() {
+ return ImageManager.getImageDescriptor(FrameworkImage.ARROW_LEFT_YELLOW);
+ }
+
+ @Override
+ public String getToolTipText() {
+ return "Import Selected Items into Coverage Package";
+ };
+ };
+
+ public void simulateSearchAll() throws OseeArgumentException {
+ XHyperlabelCoverageMethodSelection methodSelectionWidget =
+ coverageParametersComposite.getCoverageMethodHyperlinkSelection();
+ List<CoverageOption> values = new ArrayList<CoverageOption>();
+ for (CoverageOption method : coveragePackage.getCoverageOptionManager().get()) {
+ values.add(method);
+ }
+ methodSelectionWidget.setSelectedCoverageMethods(values);
+ handleSearchButtonPressed();
+ }
+
+ public void createEditorToolbar() {
+ CoverageEditor.addToToolBar(scrolledForm.getToolBarManager(), coverageEditor);
+ scrolledForm.updateToolBar();
+ }
+
+ @Override
+ public FormEditor getEditor() {
+ return super.getEditor();
+ }
+
+ private void handleSearchButtonPressed() {
+ if (parametersFilter == null) {
+ parametersFilter = new CoverageParametersTextFilter(xPackageViewer1.getXViewer());
+ xPackageViewer1.getXViewer().addFilter(parametersFilter);
+ }
+ CoverageEditorCoverageTab.handleSearchButtonPressed(xPackageViewer1, coverageParameters, parametersFilter);
+ }
+
+ @Override
+ public Result isEditable() {
+ return coveragePackage.isEditable();
+ }
+
+ @Override
+ public Result save() throws OseeCoreException {
+ OseeCoveragePackageStore store = OseeCoveragePackageStore.get(coveragePackage);
+ Result result = store.save();
+ if (result.isFalse()) return result;
+ Artifact artifact = store.getArtifact(false);
+ coverageEditor.getCoverageEditorInput().setCoveragePackageArtifact(artifact);
+ return result;
+ }
+
+ @Override
+ public Result save(Collection<ICoverage> coverages) throws OseeCoreException {
+ OseeCoveragePackageStore store = OseeCoveragePackageStore.get(coveragePackage);
+ Result result = store.save(coverages);
+ if (result.isFalse()) return result;
+ Artifact artifact = store.getArtifact(false);
+ coverageEditor.getCoverageEditorInput().setCoveragePackageArtifact(artifact);
+ return result;
+ }
+
+ @Override
+ public Result saveImportRecord(SkynetTransaction transaction, CoverageImport coverageImport) throws OseeCoreException {
+ OseeCoveragePackageStore store = OseeCoveragePackageStore.get(coveragePackage);
+ Result result = store.saveImportRecord(transaction, coverageImport);
+ return result;
+ }
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/CoverageEditorOverviewTab.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/CoverageEditorOverviewTab.java
new file mode 100644
index 00000000000..0185064067a
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/CoverageEditorOverviewTab.java
@@ -0,0 +1,241 @@
+/*
+ * Created on Feb 5, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.editor;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.eclipse.osee.coverage.action.GenerateDetailedCoverageReportAction;
+import org.eclipse.osee.coverage.action.ICoveragePackageHandler;
+import org.eclipse.osee.coverage.model.CoverageOption;
+import org.eclipse.osee.coverage.model.CoveragePackageBase;
+import org.eclipse.osee.coverage.model.CoverageUnit;
+import org.eclipse.osee.coverage.util.CoverageUtil;
+import org.eclipse.osee.framework.jdk.core.util.AHTML;
+import org.eclipse.osee.framework.ui.plugin.util.Displays;
+import org.eclipse.osee.framework.ui.skynet.action.RefreshAction;
+import org.eclipse.osee.framework.ui.skynet.action.RefreshAction.IRefreshActionHandler;
+import org.eclipse.osee.framework.ui.skynet.action.browser.BrowserPrintAction;
+import org.eclipse.osee.framework.ui.skynet.action.browser.IBrowserActionHandler;
+import org.eclipse.osee.framework.ui.skynet.results.XResultData;
+import org.eclipse.osee.framework.ui.skynet.results.html.XResultsComposite;
+import org.eclipse.osee.framework.ui.swt.ALayout;
+import org.eclipse.osee.framework.ui.swt.ImageManager;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.browser.Browser;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.forms.IManagedForm;
+import org.eclipse.ui.forms.editor.FormEditor;
+import org.eclipse.ui.forms.editor.FormPage;
+import org.eclipse.ui.forms.widgets.ScrolledForm;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class CoverageEditorOverviewTab extends FormPage implements IRefreshActionHandler, ICoveragePackageHandler, IBrowserActionHandler {
+
+ private final CoverageEditor coverageEditor;
+ private final CoveragePackageBase coveragePackageBase;
+ XResultsComposite xResultsComp;
+ private static String ALL_COVERAGE_METHODS = " ALL Coverage Methods";
+ private static String ALL_TOP_FOLDERS = " ALL Top Folders";
+
+ public CoverageEditorOverviewTab(String name, CoverageEditor coverageEditor, CoveragePackageBase provider) {
+ super(coverageEditor, name, name);
+ this.coverageEditor = coverageEditor;
+ this.coveragePackageBase = provider;
+ }
+
+ @Override
+ protected void createFormContent(IManagedForm managedForm) {
+ super.createFormContent(managedForm);
+
+ final ScrolledForm scrolledForm = managedForm.getForm();
+ scrolledForm.setText(coveragePackageBase.getName());
+ scrolledForm.setImage(ImageManager.getImage(CoverageUtil.getCoveragePackageBaseImage(coveragePackageBase)));
+
+ scrolledForm.getBody().setLayout(ALayout.getZeroMarginLayout());
+ createToolBar();
+ Composite composite = scrolledForm.getBody();
+ composite.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false));
+
+ xResultsComp = new XResultsComposite(composite, SWT.NONE);
+ xResultsComp.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.VERTICAL_ALIGN_BEGINNING));
+ GridData gd = new GridData(GridData.FILL_BOTH);
+ gd.heightHint = 500;
+ xResultsComp.setLayoutData(gd);
+ coverageEditor.getToolkit().adapt(xResultsComp);
+
+ refreshHtml();
+ }
+
+ public void refreshHtml() {
+ final XResultData rd = new XResultData(false);
+ coveragePackageBase.getOverviewHtmlHeader(rd);
+ rd.log("");
+ rd.log(AHTML.getLabelValueStr("Total Coverage ",
+ CoverageUtil.getPercent(coveragePackageBase.getCoverageItemsCovered().size(),
+ coveragePackageBase.getCoverageItems().size(), true).getSecond()));
+ rd.log("");
+ rd.log(AHTML.getLabelValueStr("Coverage Breakdown", ""));
+ rd.addRaw(AHTML.beginMultiColumnTable(100, 1));
+
+ // Create headers
+ List<String> sortedHeaders = getSortedHeaders(coveragePackageBase);
+ rd.addRaw(AHTML.addHeaderRowMultiColumnTable(sortedHeaders));
+
+ for (String[] values : getRows(sortedHeaders, coveragePackageBase, true)) {
+ rd.addRaw(AHTML.addRowMultiColumnTable(values));
+ }
+
+ rd.addRaw(AHTML.endMultiColumnTable());
+ if (coveragePackageBase.getLog() != null) {
+ rd.log(AHTML.newline() + AHTML.bold("Log") + AHTML.newline());
+ rd.addRaw(coveragePackageBase.getLog().getReport("").getManipulatedHtml());
+ }
+
+ Displays.ensureInDisplayThread(new Runnable() {
+ @Override
+ public void run() {
+ xResultsComp.setHtmlText(rd.getReport(coveragePackageBase.getName()).getManipulatedHtml(),
+ coveragePackageBase.getName());
+ }
+ });
+ }
+
+ public static List<String[]> getRows(List<String> sortedHeaders, CoveragePackageBase coveragePackageBase, boolean html) {
+
+ Map<String, CoverageUnit> headerToCoverageUnit = new HashMap<String, CoverageUnit>();
+ for (CoverageUnit coverageUnit : coveragePackageBase.getCoverageUnits()) {
+ headerToCoverageUnit.put(coverageUnit.getName(), coverageUnit);
+ }
+
+ // Create rows
+ String rowsSorted[] = getRowNamesSorted(coveragePackageBase);
+ Map<String, CoverageOption> rowToCoverageOption = new HashMap<String, CoverageOption>();
+ for (CoverageOption option : coveragePackageBase.getCoverageOptionManager().get()) {
+ rowToCoverageOption.put(option.getName(), option);
+ }
+
+ List<String[]> rows = new ArrayList<String[]>();
+ for (String rowName : rowsSorted) {
+ List<String> values = new ArrayList<String>();
+ for (String header : sortedHeaders) {
+ if (header.equals("")) {
+ if (html) {
+ values.add(AHTML.bold(rowName));
+ } else
+ values.add(rowName);
+ }
+ // Show totals for ALL and Each CoverageOption
+ else if (header.equals(ALL_TOP_FOLDERS)) {
+ // Show totals for full coverage package
+ if (rowName.equals(ALL_COVERAGE_METHODS)) {
+ String percent =
+ CoverageUtil.getPercent(coveragePackageBase.getCoverageItemsCovered().size(),
+ coveragePackageBase.getCoverageItems().size(), true).getSecond();
+ if (html) {
+ values.add(AHTML.bold(percent));
+ } else
+ values.add(percent);
+ }
+ // Show totals for each coverage method
+ else {
+ int totalCoverageItems = coveragePackageBase.getCoverageItems().size();
+ if (totalCoverageItems == 0) {
+ values.add("0");
+ } else {
+ CoverageOption CoverageOption = rowToCoverageOption.get(rowName);
+ values.add(CoverageUtil.getPercent(
+ coveragePackageBase.getCoverageItemsCovered(CoverageOption).size(), totalCoverageItems,
+ false).getSecond());
+ }
+ }
+ }
+ // Show totals for ALL by top CoverageUnit and each CoverageOption by top CoverageUnit
+ else {
+ CoverageUnit coverageUnit = headerToCoverageUnit.get(header);
+ if (rowName.equals(ALL_COVERAGE_METHODS)) {
+ int totalCoverageItems = coverageUnit.getCoverageItems(true).size();
+ if (totalCoverageItems == 0) {
+ values.add("0");
+ } else {
+ values.add(CoverageUtil.getPercent(coverageUnit.getCoverageItemsCovered(true).size(),
+ totalCoverageItems, false).getSecond());
+ }
+ } else {
+ CoverageOption CoverageOption = rowToCoverageOption.get(rowName);
+ int totalCoverageItems = coverageUnit.getCoverageItems(true).size();
+ if (totalCoverageItems == 0) {
+ values.add("0");
+ } else {
+ values.add(CoverageUtil.getPercent(
+ coverageUnit.getCoverageItemsCovered(true, CoverageOption).size(), totalCoverageItems, false).getSecond());
+ }
+ }
+ }
+ }
+ rows.add(values.toArray(new String[values.size()]));
+ }
+ return rows;
+ }
+
+ public static String[] getRowNamesSorted(CoveragePackageBase coveragePackageBase) {
+ List<String> rowNames = new ArrayList<String>();
+ rowNames.add(ALL_COVERAGE_METHODS);
+ for (CoverageOption option : coveragePackageBase.getCoverageOptionManager().get()) {
+ rowNames.add(option.getName());
+ }
+ String rowsSorted[] = rowNames.toArray(new String[rowNames.size()]);
+ Arrays.sort(rowsSorted);
+ return rowsSorted;
+ }
+
+ public static List<String> getSortedHeaders(CoveragePackageBase coveragePackageBase) {
+ List<String> headers = new ArrayList<String>();
+ headers.add("");
+ if (coveragePackageBase.getChildren().size() > 1) {
+ headers.add(ALL_TOP_FOLDERS);
+ }
+ for (CoverageUnit coverageUnit : coveragePackageBase.getCoverageUnits()) {
+ headers.add(coverageUnit.getName());
+ }
+ String headersSorted[] = headers.toArray(new String[headers.size()]);
+ Arrays.sort(headersSorted);
+ return headers;
+ }
+
+ public void createToolBar() {
+ getManagedForm().getForm().getToolBarManager().add(new GenerateDetailedCoverageReportAction(this));
+ getManagedForm().getForm().getToolBarManager().add(new BrowserPrintAction(this));
+ getManagedForm().getForm().getToolBarManager().add(new RefreshAction(this));
+ CoverageEditor.addToToolBar(getManagedForm().getForm().getToolBarManager(), coverageEditor);
+ }
+
+ @Override
+ public FormEditor getEditor() {
+ return super.getEditor();
+ }
+
+ @Override
+ public void refreshActionHandler() {
+ refreshHtml();
+ }
+
+ @Override
+ public Browser getBrowser() {
+ return xResultsComp.getBrowser();
+ }
+
+ @Override
+ public CoveragePackageBase getCoveragePackageBase() {
+ return coveragePackageBase;
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/CoverageRenderer.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/CoverageRenderer.java
new file mode 100644
index 00000000000..3a2a8e17916
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/CoverageRenderer.java
@@ -0,0 +1,91 @@
+/*******************************************************************************
+ * 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.coverage.editor;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.eclipse.osee.coverage.store.CoverageArtifactTypes;
+import org.eclipse.osee.coverage.util.CoverageImage;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.access.AccessControlManager;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.skynet.render.DefaultArtifactRenderer;
+import org.eclipse.osee.framework.ui.skynet.render.PresentationType;
+import org.eclipse.osee.framework.ui.swt.ImageManager;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class CoverageRenderer extends DefaultArtifactRenderer {
+ private static final String COMMAND_ID = "org.eclipse.osee.coverage.editor.command";
+
+ @Override
+ public List<String> getCommandId(PresentationType presentationType) {
+ ArrayList<String> commandIds = new ArrayList<String>(1);
+
+ if (presentationType == PresentationType.SPECIALIZED_EDIT) {
+ commandIds.add(COMMAND_ID);
+ }
+
+ return commandIds;
+ }
+
+ @Override
+ public Image getImage(Artifact artifact) throws OseeCoreException {
+ return ImageManager.getImage(CoverageImage.COVERAGE_PACKAGE);
+ }
+
+ @Override
+ public String getName() {
+ return "Coverage Editor";
+ }
+
+ public CoverageRenderer() {
+ super();
+ }
+
+ @Override
+ public void open(List<Artifact> artifacts) throws OseeCoreException {
+ for (Artifact artifact : artifacts) {
+ if (artifact.isOfType(CoverageArtifactTypes.CoveragePackage)) {
+ CoverageEditor.open(new CoverageEditorInput(artifact.getName(), artifact, null, false));
+ }
+ }
+ }
+
+ @Override
+ public CoverageRenderer newInstance() throws OseeCoreException {
+ return new CoverageRenderer();
+ }
+
+ @Override
+ public int getApplicabilityRating(PresentationType presentationType, Artifact artifact) throws OseeCoreException {
+ if (artifact.isOfType(CoverageArtifactTypes.CoveragePackage) && !artifact.isHistorical()) {
+ return PRESENTATION_SUBTYPE_MATCH;
+ }
+ return NO_MATCH;
+ }
+
+ @Override
+ public void preview(List<Artifact> artifacts) throws OseeCoreException {
+ open(artifacts);
+ }
+
+ @Override
+ public int minimumRanking() throws OseeCoreException {
+ if (AccessControlManager.isOseeAdmin()) {
+ return NO_MATCH;
+ } else {
+ return PRESENTATION_TYPE;
+ }
+ }
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/params/CoverageParameters.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/params/CoverageParameters.java
new file mode 100644
index 00000000000..118beb1d63c
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/params/CoverageParameters.java
@@ -0,0 +1,321 @@
+/*******************************************************************************
+ * 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
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.editor.params;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import org.eclipse.osee.coverage.internal.Activator;
+import org.eclipse.osee.coverage.model.CoverageItem;
+import org.eclipse.osee.coverage.model.CoverageOption;
+import org.eclipse.osee.coverage.model.CoveragePackageBase;
+import org.eclipse.osee.coverage.model.CoverageUnit;
+import org.eclipse.osee.coverage.model.ICoverage;
+import org.eclipse.osee.coverage.store.OseeCoverageUnitStore;
+import org.eclipse.osee.coverage.util.CoverageUtil;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.type.Pair;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+import org.eclipse.osee.framework.logging.OseeLevel;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.User;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class CoverageParameters {
+
+ private final CoveragePackageBase coveragePackageBase;
+ private List<CoverageOption> coverageMethods = new ArrayList<CoverageOption>();
+ private String name;
+ private String namespace;
+ private String rationale;
+ private String notes;
+ private User assignee;
+ private boolean showAll = true;
+
+ public CoverageParameters(CoveragePackageBase coveragePackageBase) {
+ this.coveragePackageBase = coveragePackageBase;
+ }
+
+ /**
+ * Returns a collection of ICoverage items that matched and a collection of all top level ICoverage parents
+ */
+ public Pair<Set<ICoverage>, Set<ICoverage>> performSearchGetResults() throws OseeCoreException {
+ Set<ICoverage> items = new HashSet<ICoverage>();
+ for (ICoverage coverageItem : coveragePackageBase.getChildren(false)) {
+ performSearchGetResults(items, coverageItem);
+ }
+ Set<ICoverage> parents = new HashSet<ICoverage>();
+ for (ICoverage coverage : items) {
+ parents.add(CoverageUtil.getTopLevelCoverageUnit(coverage));
+ }
+ return new Pair<Set<ICoverage>, Set<ICoverage>>(items, parents);
+ }
+
+ // CoverageUnit - name, namespace, assignees, notes
+ // CoverageItem - name, namespace, rationale, coverageMethod
+ public void performSearchGetResults(Set<ICoverage> matchItems, ICoverage coverage) throws OseeCoreException {
+ if (coverage instanceof CoverageItem) {
+ if (isCoverageMethodMatch(coverage) &&
+ //
+ isRationaleMatch(coverage) &&
+ //
+ isNameMatch(coverage) &&
+ //
+ isNamespaceMatch(coverage)) {
+ // CoverageItem matches search criteria; validate CoverageUnits up the hierarchy
+ if (doesParentMatchCriteria(coverage.getParent())) {
+ matchItems.add(coverage);
+ }
+ }
+ } else if (coverage instanceof CoverageUnit) {
+ if (Strings.isValid(name) || Strings.isValid(namespace) || Strings.isValid(notes) || assignee != null) {
+ if (!((CoverageUnit) coverage).isFolder() && isNameMatch(coverage) && isNamespaceMatch(coverage) && isNotesMatch(coverage) && isAssigneeMatch(coverage)) {
+ matchItems.add(coverage);
+ // If CoverageUnit matches, include all coverage items in match
+ for (CoverageItem coverageItem : ((CoverageUnit) coverage).getCoverageItems(true)) {
+ // Don't check name cause name of coverge unit won't match name of item
+ // Checking namespace shouldn't matter cause children will have namespace of parent
+ if (isCoverageMethodMatch(coverageItem) &&
+ //
+ isRationaleMatch(coverageItem) &&
+ //
+ isNamespaceMatch(coverageItem)) {
+ matchItems.add(coverageItem);
+ }
+ }
+ }
+ }
+ }
+ for (ICoverage child : coverage.getChildren()) {
+ performSearchGetResults(matchItems, child);
+ }
+ }
+
+ /**
+ * Recurse up parent tree to ensure all parents match criteria
+ */
+ private boolean doesParentMatchCriteria(ICoverage coverage) throws OseeCoreException {
+ if ((isNameMatch(coverage) || isNamespaceMatch(coverage)) && isNotesMatch(coverage) && isAssigneeMatch(coverage)) {
+ return true;
+ } else if (coverage.getParent() instanceof CoverageUnit) {
+ return doesParentMatchCriteria(coverage.getParent());
+ }
+ return false;
+ }
+
+ /**
+ * Match if no assignee specified OR<br>
+ * coverage isn't CoverageUnit OR<br>
+ * CoverageUnit assignee equals search assignee
+ *
+ * @throws OseeCoreException
+ */
+ public boolean isAssigneeMatch(ICoverage coverage) throws OseeCoreException {
+ if (assignee == null || !(coverage instanceof CoverageUnit)) return true;
+ if (OseeCoverageUnitStore.getAssignees((CoverageUnit) coverage).contains(assignee)) {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Match if no notes specified OR<br>
+ * coverage isn't CoverageUnit OR<br>
+ * CoverageUnit notes contains search string
+ */
+ public boolean isNotesMatch(ICoverage coverage) {
+ if (!Strings.isValid(notes) || !(coverage instanceof CoverageUnit)) return true;
+ if (!Strings.isValid(((CoverageUnit) coverage).getNotes())) return false;
+ if (((CoverageUnit) coverage).getNotes().contains(notes)) {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Match if no name specified OR<br>
+ * item name contains search string
+ */
+ public boolean isNameMatch(ICoverage coverage) {
+ if (!Strings.isValid(name)) return true;
+ if (!Strings.isValid(coverage.getName())) return false;
+ if (coverage.getName().contains(name)) {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Match if no namespace specified OR<br>
+ * item namespace contains search string
+ */
+ public boolean isNamespaceMatch(ICoverage coverage) {
+ if (!Strings.isValid(namespace)) return true;
+ if (!Strings.isValid(coverage.getNamespace())) return false;
+ if (coverage.getNamespace().contains(namespace)) {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Match if no rationale specified OR<br>
+ * coverage isn't CoverageItem OR<br>
+ * CoverageItem rationale contains search string
+ */
+ public boolean isRationaleMatch(ICoverage coverage) {
+ if (!Strings.isValid(rationale) || !(coverage instanceof CoverageItem)) return true;
+ if (!Strings.isValid(((CoverageItem) coverage).getRationale())) return false;
+ if (((CoverageItem) coverage).getRationale().contains(rationale)) {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Match if no coverageMethods specified OR<br>
+ * coverage isn't CoverageItem OR<br>
+ * CoverageItem is method specified
+ */
+ public boolean isCoverageMethodMatch(ICoverage coverage) {
+ if (coverageMethods.size() == 0 || !(coverage instanceof CoverageItem)) return true;
+ if (coverageMethods.contains(((CoverageItem) coverage).getCoverageMethod())) {
+ return true;
+ }
+ return false;
+ }
+
+ public String getSelectedName(/*SearchType searchType*/) throws OseeCoreException {
+ StringBuffer sb = new StringBuffer();
+ if (getAssignee() != null) {
+ sb.append(" - Assignee: " + getAssignee());
+ }
+ if (Strings.isValid(getName())) {
+ sb.append(" - Name: " + getName());
+ }
+ if (Strings.isValid(getNamespace())) {
+ sb.append(" - Namespace: " + getNamespace());
+ }
+ if (Strings.isValid(getRationale())) {
+ sb.append(" - Rationale: " + getRationale());
+ }
+ if (Strings.isValid(getNotes())) {
+ sb.append(" - Notes: " + getNotes());
+ }
+ if (getSelectedCoverageMethods().size() > 1) {
+ sb.append(" - Coverage Method: " + org.eclipse.osee.framework.jdk.core.util.Collections.toString(", ",
+ getSelectedCoverageMethods()));
+ }
+ return "Coverage Items " + sb.toString();
+ }
+
+ public String getNotesStr() {
+ return notes;
+ }
+
+ public User getAssignee() {
+ return assignee;
+ }
+
+ public Collection<CoverageOption> getSelectedCoverageMethods() {
+ return coverageMethods;
+ }
+
+ public Result isParameterSelectionValid() throws OseeCoreException {
+ try {
+ return Result.TrueResult;
+ } catch (Exception ex) {
+ OseeLog.log(Activator.class, OseeLevel.SEVERE_POPUP, ex);
+ return new Result("Exception: " + ex.getLocalizedMessage());
+ }
+ }
+
+ public CoveragePackageBase getCoveragePackageBase() {
+ return coveragePackageBase;
+ }
+
+ public Collection<CoverageOption> getCoverageMethods() {
+ return coverageMethods;
+ }
+
+ public void setCoverageMethods(Collection<CoverageOption> coverageMethods) {
+ if (coverageMethods == null) {
+ this.coverageMethods.clear();
+ }
+ this.coverageMethods.clear();
+ this.coverageMethods.addAll(coverageMethods);
+ updateShowAll();
+ }
+
+ public String getNotes() {
+ return notes;
+ }
+
+ public void setNotes(String notes) {
+ this.notes = notes;
+ updateShowAll();
+ }
+
+ public void clearAll() {
+ setAssignee(null);
+ setNotes(null);
+ setNamespace(null);
+ setRationale(null);
+ setName(null);
+ this.coverageMethods.clear();
+ }
+
+ private void updateShowAll() {
+ this.showAll =
+ getSelectedCoverageMethods().size() == 0 && getAssignee() == null && !Strings.isValid(getNotesStr()) && !Strings.isValid(getNamespace()) && !Strings.isValid(getRationale()) && !Strings.isValid(getName());
+ }
+
+ public boolean isShowAll() {
+ return this.showAll;
+ }
+
+ public void setAssignee(User assignee) {
+ this.assignee = assignee;
+ updateShowAll();
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ updateShowAll();
+ }
+
+ public String getNamespace() {
+ return namespace;
+ }
+
+ public void setNamespace(String namespace) {
+ this.namespace = namespace;
+ updateShowAll();
+ }
+
+ public String getRationale() {
+ return rationale;
+ }
+
+ public void setRationale(String rationale) {
+ this.rationale = rationale;
+ updateShowAll();
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/params/CoverageParametersComposite.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/params/CoverageParametersComposite.java
new file mode 100644
index 00000000000..52f4111d562
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/params/CoverageParametersComposite.java
@@ -0,0 +1,281 @@
+/*******************************************************************************
+ * 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
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.editor.params;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.logging.Level;
+import org.eclipse.osee.coverage.editor.CoverageEditor;
+import org.eclipse.osee.coverage.model.CoverageOption;
+import org.eclipse.osee.coverage.util.widget.XHyperlabelCoverageMethodSelection;
+import org.eclipse.osee.framework.core.exception.OseeArgumentException;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLevel;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.User;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.widgets.XCheckBox;
+import org.eclipse.osee.framework.ui.skynet.widgets.XMembersCombo;
+import org.eclipse.osee.framework.ui.skynet.widgets.XModifiedListener;
+import org.eclipse.osee.framework.ui.skynet.widgets.XText;
+import org.eclipse.osee.framework.ui.skynet.widgets.XWidget;
+import org.eclipse.osee.framework.ui.skynet.widgets.workflow.DefaultXWidgetOptionResolver;
+import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkPage;
+import org.eclipse.osee.framework.ui.swt.ALayout;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+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.ui.forms.IManagedForm;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class CoverageParametersComposite extends Composite {
+
+ private WorkPage page;
+ private final CoverageParameters coverageParameters;
+
+ public CoverageParametersComposite(Composite mainComp, IManagedForm managedForm, CoverageEditor coverageEditor, final CoverageParameters coverageParameters, final SelectionListener selectionListener) {
+ super(mainComp, SWT.None);
+ this.coverageParameters = coverageParameters;
+ setLayout(new GridLayout(2, false));
+ coverageEditor.getToolkit().adapt(this);
+ setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false));
+
+ Composite buttonComp = new Composite(this, SWT.NONE);
+ buttonComp.setLayout(new GridLayout(1, false));
+ buttonComp.setLayoutData(new GridData(SWT.NONE, SWT.NONE, false, false));
+ coverageEditor.getToolkit().adapt(buttonComp);
+
+ Button runButton = new Button(buttonComp, SWT.PUSH);
+ runButton.setText("Search");
+ runButton.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING));
+ runButton.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ selectionListener.widgetSelected(e);
+ }
+ });
+ coverageEditor.getToolkit().adapt(runButton, true, true);
+
+ Button clearButton = new Button(buttonComp, SWT.PUSH);
+ clearButton.setText("Clear");
+ clearButton.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING));
+ clearButton.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ try {
+ getAssigeeCombo().clear();
+ getNotesXText().set("");
+ getNameXText().set("");
+ getNamespaceXText().set("");
+ getRationaleXText().set("");
+ getCoverageMethodHyperlinkSelection().clear();
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, OseeLevel.SEVERE_POPUP, ex);
+ }
+ }
+ });
+ coverageEditor.getToolkit().adapt(clearButton, true, true);
+
+ Composite paramComp = new Composite(this, SWT.NONE);
+ paramComp.setLayout(ALayout.getZeroMarginLayout(1, false));
+ paramComp.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false));
+ coverageEditor.getToolkit().adapt(paramComp);
+
+ try {
+ page = new WorkPage(getWidgetXml(), new DefaultXWidgetOptionResolver());
+ page.createBody(managedForm, paramComp, null, null, true);
+
+ getAssigeeCombo().addXModifiedListener(new XModifiedListener() {
+
+ @Override
+ public void widgetModified(XWidget widget) {
+ try {
+ coverageParameters.setAssignee(getAssignee());
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ });
+ getNotesXText().addXModifiedListener(new XModifiedListener() {
+
+ @Override
+ public void widgetModified(XWidget widget) {
+ try {
+ coverageParameters.setNotes(getNotesStr());
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ });
+ getNameXText().addXModifiedListener(new XModifiedListener() {
+
+ @Override
+ public void widgetModified(XWidget widget) {
+ try {
+ coverageParameters.setName(getNameXText().get());
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ });
+ getNamespaceXText().addXModifiedListener(new XModifiedListener() {
+
+ @Override
+ public void widgetModified(XWidget widget) {
+ try {
+ coverageParameters.setNamespace(getNamespaceStr());
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ });
+ getRationaleXText().addXModifiedListener(new XModifiedListener() {
+
+ @Override
+ public void widgetModified(XWidget widget) {
+ try {
+ coverageParameters.setRationale(getRationaleStr());
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ });
+ getCoverageMethodHyperlinkSelection().setCoverageOptionManager(
+ coverageEditor.getCoveragePackageBase().getCoverageOptionManager());
+ getCoverageMethodHyperlinkSelection().addXModifiedListener(new XModifiedListener() {
+
+ @Override
+ public void widgetModified(XWidget widget) {
+ try {
+ coverageParameters.setCoverageMethods(getCoverageMethodHyperlinkSelection().getSelectedCoverageMethods());
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ });
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+
+ public boolean isShowAll() throws OseeArgumentException {
+ if (getShowAllCheckbox() == null) {
+ return false;
+ }
+ return getShowAllCheckbox().isSelected();
+ }
+
+ public String getNotesStr() throws OseeArgumentException {
+ if (getNotesXText() != null) {
+ return getNotesXText().get();
+ }
+ return "";
+ }
+
+ public String getNameStr() throws OseeArgumentException {
+ if (getNameXText() != null) {
+ return getNameXText().get();
+ }
+ return "";
+ }
+
+ public String getNamespaceStr() throws OseeArgumentException {
+ if (getNamespaceXText() != null) {
+ return getNamespaceXText().get();
+ }
+ return "";
+ }
+
+ public String getRationaleStr() throws OseeArgumentException {
+ if (getRationaleXText() != null) {
+ return getRationaleXText().get();
+ }
+ return "";
+ }
+
+ public XMembersCombo getAssigeeCombo() throws OseeArgumentException {
+ return (XMembersCombo) getXWidget("Coverage Unit Assignee");
+ }
+
+ public XText getNotesXText() throws OseeArgumentException {
+ return (XText) getXWidget("Coverage Unit Notes");
+ }
+
+ public XText getNameXText() throws OseeArgumentException {
+ return (XText) getXWidget("Name");
+ }
+
+ public XText getNamespaceXText() throws OseeArgumentException {
+ return (XText) getXWidget("Namespace");
+ }
+
+ public XText getRationaleXText() throws OseeArgumentException {
+ return (XText) getXWidget("Rationale");
+ }
+
+ public XCheckBox getShowAllCheckbox() throws OseeArgumentException {
+ return (XCheckBox) getXWidget("Show All");
+ }
+
+ public User getAssignee() throws OseeArgumentException {
+ if (getAssigeeCombo() == null) {
+ return null;
+ }
+ return getAssigeeCombo().getUser();
+ }
+
+ public Collection<CoverageOption> getSelectedCoverageMethods() throws OseeArgumentException {
+ if (getCoverageMethodHyperlinkSelection() == null) {
+ return Collections.emptyList();
+ }
+ return getCoverageMethodHyperlinkSelection().getSelectedCoverageMethods();
+ }
+
+ public XWidget getXWidget(String attrName) throws OseeArgumentException {
+ if (page == null) {
+ throw new OseeArgumentException("WorkPage == null");
+ }
+ if (page.getLayoutData(attrName) == null) {
+ return null;
+ }
+ return page.getLayoutData(attrName).getXWidget();
+ }
+
+ public XHyperlabelCoverageMethodSelection getCoverageMethodHyperlinkSelection() throws OseeArgumentException {
+ return (XHyperlabelCoverageMethodSelection) getXWidget("Coverage Method");
+ }
+
+ public String getWidgetXml() {
+ StringBuffer sb = new StringBuffer("<xWidgets>");
+ sb.append("<XWidget xwidgetType=\"XHyperlabelCoverageMethodSelection\" displayName=\"Coverage Method\" horizontalLabel=\"true\"/>");
+ //
+ sb.append("<XWidget xwidgetType=\"XText\" beginComposite=\"6\" displayName=\"Name\" horizontalLabel=\"true\"/>");
+ //
+ sb.append("<XWidget xwidgetType=\"XText\" displayName=\"Namespace\" horizontalLabel=\"true\"/>");
+ //
+ sb.append("<XWidget xwidgetType=\"XText\" displayName=\"Rationale\" horizontalLabel=\"true\"/>");
+ //
+ //
+ if (coverageParameters.getCoveragePackageBase().isAssignable()) {
+ sb.append("<XWidget xwidgetType=\"XMembersCombo\" beginComposite=\"6\" displayName=\"Coverage Unit Assignee\" horizontalLabel=\"true\"/>");
+ }
+ //
+ sb.append("<XWidget xwidgetType=\"XText\" displayName=\"Coverage Unit Notes\" horizontalLabel=\"true\"/>");
+ sb.append("</xWidgets>");
+ return sb.toString();
+ }
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/params/CoverageParametersTextFilter.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/params/CoverageParametersTextFilter.java
new file mode 100644
index 00000000000..09a5e50b795
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/params/CoverageParametersTextFilter.java
@@ -0,0 +1,70 @@
+/*******************************************************************************
+ * 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.coverage.editor.params;
+
+import java.util.HashSet;
+import java.util.Set;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+import org.eclipse.nebula.widgets.xviewer.XViewer;
+import org.eclipse.osee.coverage.merge.MessageMergeItem;
+import org.eclipse.osee.coverage.model.ICoverage;
+import org.eclipse.osee.coverage.model.MessageCoverageItem;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class CoverageParametersTextFilter extends ViewerFilter {
+
+ private Set<ICoverage> shownCoverages;
+ private Set<ICoverage> parentCoverages = new HashSet<ICoverage>(1000);
+ private boolean showAll = true;
+
+ public CoverageParametersTextFilter(XViewer xViewer) {
+ }
+
+ @Override
+ public boolean select(Viewer viewer, Object parentElement, Object element) {
+ if (isShowAll()) return true;
+ if (shownCoverages.contains(element)) return true;
+ if (parentCoverages.contains(element)) return true;
+ if (element instanceof MessageCoverageItem || element instanceof MessageMergeItem) return true;
+ return false;
+ }
+
+ public void setShownCoverages(Set<ICoverage> shownCoverages) {
+ this.shownCoverages = shownCoverages;
+ computeParentCoverages();
+ }
+
+ public boolean isShowAll() {
+ return showAll;
+ }
+
+ public void setShowAll(boolean showAll) {
+ this.showAll = showAll;
+ }
+
+ private void computeParentCoverages() {
+ parentCoverages.clear();
+ for (ICoverage coverage : shownCoverages) {
+ computeParentCoverages(coverage.getParent());
+ }
+ }
+
+ private void computeParentCoverages(ICoverage coverage) {
+ if (coverage == null) return;
+ parentCoverages.add(coverage);
+ if (coverage.getParent() != null) {
+ computeParentCoverages(coverage.getParent());
+ }
+ }
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/xcover/CoverageContentProvider.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/xcover/CoverageContentProvider.java
new file mode 100644
index 00000000000..c11f4821d82
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/xcover/CoverageContentProvider.java
@@ -0,0 +1,84 @@
+/*******************************************************************************
+ * 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.coverage.editor.xcover;
+
+import java.util.Collection;
+import org.apache.commons.lang.ArrayUtils;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.osee.coverage.merge.MergeItem;
+import org.eclipse.osee.coverage.merge.MergeItemGroup;
+import org.eclipse.osee.coverage.merge.MessageMergeItem;
+import org.eclipse.osee.coverage.model.CoverageItem;
+import org.eclipse.osee.coverage.model.CoveragePackageBase;
+import org.eclipse.osee.coverage.model.CoverageUnit;
+import org.eclipse.osee.coverage.model.MessageCoverageItem;
+
+public class CoverageContentProvider implements ITreeContentProvider {
+
+ public CoverageContentProvider(CoverageXViewer coverageXViewer) {
+ super();
+ }
+
+ @SuppressWarnings("unchecked")
+ public Object[] getChildren(Object parentElement) {
+ if (parentElement instanceof CoveragePackageBase) {
+ Collection<?> children = ((CoveragePackageBase) parentElement).getChildren();
+ return children.toArray(new Object[children.size()]);
+ }
+ if (parentElement instanceof CoverageUnit) {
+ Collection<?> children = ((CoverageUnit) parentElement).getChildren();
+ return children.toArray(new Object[children.size()]);
+ }
+ if (parentElement instanceof MergeItem) {
+ Collection<?> children = ((MergeItem) parentElement).getChildren();
+ return children.toArray(new Object[children.size()]);
+ }
+ if (parentElement instanceof MergeItemGroup) {
+ Collection<?> children = ((MergeItemGroup) parentElement).getChildren();
+ return children.toArray(new Object[children.size()]);
+ }
+ if (parentElement instanceof Object[]) {
+ return (Object[]) parentElement;
+ }
+ if (parentElement instanceof Collection) {
+ return ((Collection) parentElement).toArray();
+ }
+ return ArrayUtils.EMPTY_OBJECT_ARRAY;
+ }
+
+ public Object getParent(Object element) {
+ if (element instanceof CoverageUnit) {
+ return ((CoverageUnit) element).getParent();
+ }
+ if (element instanceof CoverageItem) {
+ return ((CoverageItem) element).getParent();
+ }
+ return null;
+ }
+
+ public boolean hasChildren(Object element) {
+ return getChildren(element).length > 0;
+ }
+
+ public Object[] getElements(Object inputElement) {
+ if (inputElement instanceof MessageMergeItem) return new Object[] {inputElement};
+ if (inputElement instanceof MessageCoverageItem) return new Object[] {inputElement};
+ return getChildren(inputElement);
+ }
+
+ public void dispose() {
+ }
+
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/xcover/CoverageLabelProvider.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/xcover/CoverageLabelProvider.java
new file mode 100644
index 00000000000..abfdd065b7c
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/xcover/CoverageLabelProvider.java
@@ -0,0 +1,234 @@
+/*******************************************************************************
+ * 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.coverage.editor.xcover;
+
+import java.util.Collection;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.nebula.widgets.xviewer.XViewerColumn;
+import org.eclipse.nebula.widgets.xviewer.XViewerLabelProvider;
+import org.eclipse.osee.coverage.editor.xmerge.CoverageMergeXViewerFactory;
+import org.eclipse.osee.coverage.internal.Activator;
+import org.eclipse.osee.coverage.merge.MergeItem;
+import org.eclipse.osee.coverage.model.CoverageItem;
+import org.eclipse.osee.coverage.model.CoverageUnit;
+import org.eclipse.osee.coverage.model.ICoverage;
+import org.eclipse.osee.coverage.model.MessageCoverageItem;
+import org.eclipse.osee.coverage.store.OseeCoverageUnitStore;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.Collections;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+import org.eclipse.osee.framework.logging.OseeLevel;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.utility.Artifacts;
+import org.eclipse.osee.framework.skynet.core.utility.UsersByIds;
+import org.eclipse.osee.framework.ui.skynet.FrameworkArtifactImageProvider;
+import org.eclipse.osee.framework.ui.skynet.FrameworkImage;
+import org.eclipse.osee.framework.ui.swt.ImageManager;
+import org.eclipse.swt.graphics.Image;
+
+public class CoverageLabelProvider extends XViewerLabelProvider {
+
+ private final CoverageXViewer xViewer;
+
+ public CoverageLabelProvider(CoverageXViewer xViewer) {
+ super(xViewer);
+ this.xViewer = xViewer;
+ }
+
+ public static Image getCoverageItemUserImage(ICoverage coverageItem) {
+ try {
+ if (coverageItem.isAssignable() && Strings.isValid(coverageItem.getAssignees())) {
+ return FrameworkArtifactImageProvider.getUserImage(UsersByIds.getUsers(coverageItem.getAssignees()));
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(Activator.class, OseeLevel.SEVERE, ex);
+ }
+ return null;
+ }
+
+ @Override
+ public Image getColumnImage(Object element, XViewerColumn xCol, int columnIndex) throws OseeCoreException {
+ if (element instanceof MessageCoverageItem && xCol.equals(CoverageMergeXViewerFactory.Name)) {
+ return ImageManager.getImage(FrameworkImage.X_RED);
+ }
+ if (element instanceof MessageCoverageItem) {
+ return null;
+ }
+ ICoverage coverageItem = (ICoverage) element;
+ if (xCol.equals(CoverageXViewerFactory.Assignees_Col)) {
+ return getCoverageItemUserImage(coverageItem);
+ }
+ if (xCol.equals(CoverageXViewerFactory.Name)) {
+ return ImageManager.getImage(coverageItem.getOseeImage());
+ }
+ return null;
+ }
+
+ @Override
+ public String getColumnText(Object element, XViewerColumn xCol, int columnIndex) throws OseeCoreException {
+ ICoverage coverage = (ICoverage) element;
+ if (xCol.equals(CoverageXViewerFactory.Name)) {
+ return coverage.getName();
+ }
+ if (element instanceof MessageCoverageItem) {
+ return "";
+ }
+ if (xCol.equals(CoverageXViewerFactory.Assignees_Col)) {
+ if (element instanceof CoverageUnit) {
+ return Artifacts.toString("; ", OseeCoverageUnitStore.getAssignees((CoverageUnit) coverage));
+ }
+ return "";
+ }
+ if (xCol.equals(CoverageXViewerFactory.Notes_Col)) {
+ return coverage.getNotes();
+ }
+ if (xCol.equals(CoverageXViewerFactory.Coverage_Percent)) {
+ return coverage.getCoveragePercentStr();
+ }
+ if (xCol.equals(CoverageXViewerFactory.Location)) {
+ return coverage.getLocation();
+ }
+ if (xCol.equals(CoverageXViewerFactory.Namespace)) {
+ return coverage.getNamespace();
+ }
+ if (xCol.equals(CoverageXViewerFactory.Guid)) {
+ return coverage.getGuid();
+ }
+
+ if (coverage instanceof CoverageItem) {
+ CoverageItem coverageItem = (CoverageItem) coverage;
+ if (xCol.equals(CoverageXViewerFactory.Coverage_Rationale)) {
+ return coverageItem.getRationale();
+ }
+ if (xCol.equals(CoverageXViewerFactory.Method_Number)) {
+ return coverageItem.getParent().getOrderNumber();
+ }
+ if (xCol.equals(CoverageXViewerFactory.Execution_Number)) {
+ return coverageItem.getOrderNumber();
+ }
+ if (xCol.equals(CoverageXViewerFactory.Coverage_Method)) {
+ return coverageItem.getCoverageMethod().getName();
+ }
+ if (xCol.equals(CoverageXViewerFactory.Parent_Coverage_Unit)) {
+ return coverageItem.getCoverageUnit().getName();
+ }
+ if (xCol.equals(CoverageXViewerFactory.Coverage_Test_Units)) {
+ Collection<String> testUnits = coverageItem.getTestUnits();
+ if (testUnits == null) {
+ return "";
+ }
+ return Collections.toString(", ", testUnits);
+ }
+ return "";
+ }
+ if (coverage instanceof CoverageUnit || coverage instanceof MergeItem && ((MergeItem) coverage).getImportItem() instanceof CoverageUnit) {
+ CoverageUnit coverageUnit = null;
+ if (coverage instanceof CoverageUnit) {
+ coverageUnit = (CoverageUnit) coverage;
+ } else {
+ coverageUnit = (CoverageUnit) ((MergeItem) coverage).getImportItem();
+ }
+ if (xCol.equals(CoverageXViewerFactory.Parent_Coverage_Unit)) {
+ return coverageUnit.getParentCoverageUnit() == null ? "" : coverageUnit.getParentCoverageUnit().getName();
+ }
+ if (xCol.equals(CoverageXViewerFactory.Method_Number)) {
+ return coverageUnit.getOrderNumber();
+ }
+ }
+ if (coverage instanceof CoverageItem) {
+ CoverageItem coverageItem = (CoverageItem) coverage;
+ if (xCol.equals(CoverageXViewerFactory.Parent_Coverage_Unit)) {
+ return coverageItem.getParent() == null ? "" : coverageItem.getParent().getName();
+ }
+ if (xCol.equals(CoverageXViewerFactory.Method_Number)) {
+ return coverageItem.getParent() == null ? "" : coverageItem.getParent().getOrderNumber();
+ }
+ if (xCol.equals(CoverageXViewerFactory.Execution_Number)) {
+ return coverageItem.getOrderNumber();
+ }
+ if (xCol.equals(CoverageXViewerFactory.Coverage_Method)) {
+ return coverageItem.getCoverageMethod().getName();
+ }
+ }
+ if (coverage instanceof MergeItem && (((MergeItem) coverage).getImportItem() instanceof CoverageItem || ((MergeItem) coverage).getPackageItem() instanceof CoverageItem)) {
+ MergeItem mergeItem = (MergeItem) coverage;
+ System.out.println("MergeType " + mergeItem.getMergeType());
+ ICoverage importItem = mergeItem.getImportItem();
+ ICoverage packageItem = mergeItem.getPackageItem();
+ if (xCol.equals(CoverageXViewerFactory.Parent_Coverage_Unit)) {
+ if (importItem != null && importItem.getParent() != null)
+ return importItem.getParent().getName();
+ else if (packageItem != null && packageItem.getParent() != null) {
+ return packageItem.getParent().getName();
+ }
+ return "";
+ }
+ if (xCol.equals(CoverageXViewerFactory.Method_Number)) {
+ if (importItem != null && importItem.getParent() != null)
+ return importItem.getParent().getOrderNumber();
+ else if (packageItem != null && packageItem.getParent() != null) {
+ return packageItem.getParent().getOrderNumber();
+ }
+ return "";
+ }
+ if (xCol.equals(CoverageXViewerFactory.Execution_Number)) {
+ if (importItem != null)
+ return importItem.getOrderNumber();
+ else if (packageItem != null) {
+ return packageItem.getOrderNumber();
+ }
+ return "";
+ }
+ if (xCol.equals(CoverageXViewerFactory.Coverage_Method)) {
+ if (importItem != null)
+ return ((CoverageItem) importItem).getCoverageMethod().getName();
+ else if (packageItem != null) {
+ return ((CoverageItem) packageItem).getCoverageMethod().getName();
+ }
+ return "";
+ }
+ }
+ return "";
+
+ }
+
+ public void dispose() {
+ }
+
+ public boolean isLabelProperty(Object element, String property) {
+ return false;
+ }
+
+ public void addListener(ILabelProviderListener listener) {
+ }
+
+ public void removeListener(ILabelProviderListener listener) {
+ }
+
+ public CoverageXViewer getTreeViewer() {
+ return xViewer;
+ }
+
+ @Override
+ public int getColumnGradient(Object element, XViewerColumn xCol, int columnIndex) throws Exception {
+ if (element == null) {
+ return 0;
+ }
+ if (element instanceof MessageCoverageItem) {
+ return 0;
+ }
+ ICoverage coverageItem = (ICoverage) element;
+ if (xCol.equals(CoverageXViewerFactory.Coverage_Percent)) {
+ return coverageItem.getCoveragePercent();
+ }
+ return 0;
+ }
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/xcover/CoverageXViewer.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/xcover/CoverageXViewer.java
new file mode 100644
index 00000000000..ffdab1ad6e5
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/xcover/CoverageXViewer.java
@@ -0,0 +1,294 @@
+/*******************************************************************************
+ * 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.coverage.editor.xcover;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.nebula.widgets.xviewer.IXViewerFactory;
+import org.eclipse.nebula.widgets.xviewer.XViewer;
+import org.eclipse.nebula.widgets.xviewer.XViewerColumn;
+import org.eclipse.osee.coverage.action.DeleteCoverUnitAction;
+import org.eclipse.osee.coverage.action.EditAssigneesAction;
+import org.eclipse.osee.coverage.action.EditCoverageMethodAction;
+import org.eclipse.osee.coverage.action.EditCoverageNotesAction;
+import org.eclipse.osee.coverage.action.EditRationaleAction;
+import org.eclipse.osee.coverage.action.IRefreshable;
+import org.eclipse.osee.coverage.action.ISelectedCoverageEditorItem;
+import org.eclipse.osee.coverage.action.ViewSourceAction;
+import org.eclipse.osee.coverage.editor.xcover.XCoverageViewer.TableType;
+import org.eclipse.osee.coverage.editor.xmerge.CoverageMergeXViewerFactory;
+import org.eclipse.osee.coverage.internal.Activator;
+import org.eclipse.osee.coverage.model.CoverageImport;
+import org.eclipse.osee.coverage.model.CoverageItem;
+import org.eclipse.osee.coverage.model.CoverageOptionManager;
+import org.eclipse.osee.coverage.model.CoverageUnit;
+import org.eclipse.osee.coverage.model.ICoverage;
+import org.eclipse.osee.coverage.util.ISaveable;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLevel;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.skynet.util.ElapsedTime;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.TreeColumn;
+import org.eclipse.swt.widgets.TreeItem;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class CoverageXViewer extends XViewer implements ISelectedCoverageEditorItem, ISaveable, IRefreshable {
+
+ protected final XCoverageViewer xCoverageViewer;
+ Action editRationaleAction, editMethodAction, viewSourceAction, editAssigneesAction, editCoverageStatusAction,
+ deleteCoverUnitAction;
+
+ public CoverageXViewer(Composite parent, int style, XCoverageViewer xCoverageViewer) {
+ this(parent, style, new CoverageXViewerFactory(), xCoverageViewer);
+ }
+
+ public CoverageXViewer(Composite parent, int style, IXViewerFactory xViewerFactory, XCoverageViewer xCoverageViewer) {
+ super(parent, style, xViewerFactory, false, false);
+ this.xCoverageViewer = xCoverageViewer;
+ }
+
+ @Override
+ protected void createSupportWidgets(Composite parent) {
+ super.createSupportWidgets(parent);
+ createMenuActions();
+ }
+
+ public void createMenuActions() {
+ if (viewSourceAction == null) {
+ viewSourceAction = new ViewSourceAction(this);
+ editMethodAction = new EditCoverageMethodAction(this, this, this, this);
+ editAssigneesAction = new EditAssigneesAction(this, this, this);
+ editCoverageStatusAction = new EditCoverageNotesAction(this, this, this);
+ editRationaleAction = new EditRationaleAction(this, this, this);
+ deleteCoverUnitAction = new DeleteCoverUnitAction(this, this, this);
+ }
+ }
+
+ public CoverageOptionManager getCoverageOptionManager() {
+ return xCoverageViewer.getCoverageOptionManager();
+ }
+
+ private boolean isEditRationaleEnabled() {
+ if (xCoverageViewer.getSelectedCoverageItems().size() == 0) return false;
+ for (ICoverage item : xCoverageViewer.getSelectedCoverageItems()) {
+ if (!(item instanceof CoverageItem)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ private boolean isEditMethodEnabled() {
+ if (xCoverageViewer.getSelectedCoverageItems().size() == 0) return false;
+ for (ICoverage item : xCoverageViewer.getSelectedCoverageItems()) {
+ if (!(item instanceof CoverageItem)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ private boolean isDeleteCoverageUnitEnabled() {
+ if (xCoverageViewer.getSelectedCoverageItems().size() == 0) return false;
+ for (ICoverage item : xCoverageViewer.getSelectedCoverageItems()) {
+ if (!(item instanceof CoverageUnit)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ private boolean isEditMetricsEnabled() {
+ if (xCoverageViewer.getSelectedCoverageItems().size() == 0) return false;
+ for (ICoverage item : xCoverageViewer.getSelectedCoverageItems()) {
+ if (!(item instanceof CoverageUnit)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ public void updateEditMenuActions() {
+ MenuManager mm = getMenuManager();
+ // EDIT MENU BLOCK
+ if (xCoverageViewer.isType(TableType.Package)) {
+ mm.insertBefore(MENU_GROUP_PRE, editRationaleAction);
+ editRationaleAction.setEnabled(isEditRationaleEnabled());
+
+ mm.insertBefore(MENU_GROUP_PRE, editMethodAction);
+ editMethodAction.setEnabled(isEditMethodEnabled());
+
+ mm.insertBefore(MENU_GROUP_PRE, editAssigneesAction);
+ editAssigneesAction.setEnabled(isEditMetricsEnabled());
+
+ mm.insertBefore(MENU_GROUP_PRE, editCoverageStatusAction);
+ editCoverageStatusAction.setEnabled(isEditMetricsEnabled());
+
+ mm.insertBefore(MENU_GROUP_PRE, deleteCoverUnitAction);
+ editCoverageStatusAction.setEnabled(isDeleteCoverageUnitEnabled());
+
+ }
+ mm.insertBefore(MENU_GROUP_PRE, viewSourceAction);
+ editMethodAction.setEnabled(isEditMethodEnabled());
+ }
+
+ @Override
+ public void updateMenuActionsForTable() {
+ MenuManager mm = getMenuManager();
+ updateEditMenuActions();
+ mm.insertBefore(MENU_GROUP_PRE, new Separator());
+ mm.insertBefore(MENU_GROUP_PRE, new org.eclipse.osee.framework.ui.skynet.action.ExpandAllAction(
+ xCoverageViewer.getXViewer(), true));
+ }
+
+ @Override
+ public void dispose() {
+ // Dispose of the table objects is done through separate dispose listener off tree
+ // Tell the label provider to release its resources
+ getLabelProvider().dispose();
+ }
+
+ public ArrayList<ICoverage> getSelectedCoverageEditorItems() {
+ ArrayList<ICoverage> arts = new ArrayList<ICoverage>();
+ TreeItem items[] = getTree().getSelection();
+ if (items.length > 0) {
+ for (TreeItem item : items) {
+ arts.add((ICoverage) item.getData());
+ }
+ }
+ return arts;
+ }
+
+ @Override
+ public void handleColumnMultiEdit(TreeColumn treeColumn, Collection<TreeItem> treeItems) {
+ if (!xCoverageViewer.isEditable()) {
+ return;
+ }
+ ArrayList<ICoverage> coverageItems = new ArrayList<ICoverage>();
+ for (TreeItem item : treeItems) {
+ coverageItems.add((ICoverage) item.getData());
+ }
+ try {
+ promptChangeData((XViewerColumn) treeColumn.getData(), coverageItems, isColumnMultiEditEnabled());
+ } catch (OseeCoreException ex) {
+ OseeLog.log(Activator.class, OseeLevel.SEVERE_POPUP, ex);
+ }
+ }
+
+ @Override
+ public boolean handleLeftClickInIconArea(TreeColumn treeColumn, TreeItem treeItem) {
+ return false;
+ }
+
+ @Override
+ public boolean handleAltLeftClick(TreeColumn treeColumn, TreeItem treeItem) {
+ if (!xCoverageViewer.isEditable()) {
+ return false;
+ }
+ createMenuActions();
+ try {
+ XViewerColumn xCol = (XViewerColumn) treeColumn.getData();
+ if (xCol.equals(CoverageMergeXViewerFactory.Assignees_Col)) {
+ editAssigneesAction.run();
+ } else if (xCol.equals(CoverageMergeXViewerFactory.Notes_Col)) {
+ editCoverageStatusAction.run();
+ } else if (xCol.equals(CoverageMergeXViewerFactory.Coverage_Method)) {
+ editMethodAction.run();
+ } else if (xCol.equals(CoverageMergeXViewerFactory.Coverage_Rationale)) {
+ editRationaleAction.run();
+ } else if (xCol.equals(CoverageMergeXViewerFactory.Name)) {
+ viewSourceAction.run();
+ }
+ } catch (Exception ex) {
+ OseeLog.log(Activator.class, OseeLevel.SEVERE_POPUP, ex);
+ }
+ return false;
+ }
+
+ @Override
+ public void handleDoubleClick() {
+ createMenuActions();
+ if (getSelectedCoverageEditorItems().size() > 0) {
+ viewSourceAction.run();
+ }
+ }
+
+ public Result isEditable(Collection<ICoverage> coverageItems) {
+ for (ICoverage item : coverageItems) {
+ if (item.isEditable().isFalse()) {
+ return item.isEditable();
+ }
+ }
+ return Result.TrueResult;
+ }
+
+ public boolean promptChangeData(XViewerColumn xCol, Collection<ICoverage> coverageItems, boolean colMultiEdit) throws OseeCoreException {
+ boolean modified = false;
+ if (coverageItems != null && !coverageItems.isEmpty()) {
+ // ICoverage coverageItem = (ICoverage) coverageItems.toArray()[0];
+
+ if (isEditable(coverageItems).isFalse()) {
+ MessageDialog.openInformation(Display.getCurrent().getActiveShell(), "Coverage Item",
+ "Read-Only Field - One or more selected Coverage Items is Read-Only");
+ }
+ }
+ if (modified) {
+ // return executeTransaction(promoteItems);
+ }
+ return false;
+ }
+
+ @Override
+ public void update(Object element) {
+ ElapsedTime elapsedTime = new ElapsedTime(getClass().getSimpleName() + " - update");
+ xCoverageViewer.getXViewer().update(element, null);
+ elapsedTime.end();
+ }
+
+ @Override
+ public Result isEditable() {
+ return xCoverageViewer.getSaveable().isEditable();
+ }
+
+ @Override
+ public Result save() throws OseeCoreException {
+ return xCoverageViewer.getSaveable().save();
+ }
+
+ @Override
+ public void setSelectedCoverageEditorItem(ICoverage item) {
+ xCoverageViewer.getXViewer().setSelection(new StructuredSelection(item));
+ xCoverageViewer.getXViewer().reveal(new StructuredSelection(item));
+ xCoverageViewer.getXViewer().getTree().setFocus();
+ }
+
+ @Override
+ public Result save(Collection<ICoverage> coverages) throws OseeCoreException {
+ return xCoverageViewer.getSaveable().save(coverages);
+ }
+
+ @Override
+ public Result saveImportRecord(SkynetTransaction transaction, CoverageImport coverageImport) throws OseeCoreException {
+ return new Result(false, "Invalid for this.");
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/xcover/CoverageXViewerFactory.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/xcover/CoverageXViewerFactory.java
new file mode 100644
index 00000000000..969aa4cd387
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/xcover/CoverageXViewerFactory.java
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * 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.coverage.editor.xcover;
+
+import org.eclipse.nebula.widgets.xviewer.XViewerColumn;
+import org.eclipse.nebula.widgets.xviewer.XViewerColumn.SortDataType;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.skynet.SkynetXViewerFactory;
+import org.eclipse.swt.SWT;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class CoverageXViewerFactory extends SkynetXViewerFactory {
+
+ private static String NAMESPACE = "osee.ats.Coverage";
+
+ public static XViewerColumn Name =
+ new XViewerColumn(NAMESPACE + ".name", "Name", 180, SWT.LEFT, true, SortDataType.String, false, "");
+ public static XViewerColumn Namespace =
+ new XViewerColumn(NAMESPACE + ".namespace", "Namespace", 80, SWT.LEFT, true, SortDataType.String, false, "");
+ public static XViewerColumn Coverage_Percent =
+ new XViewerColumn(NAMESPACE + ".percentCoverage", "Percent Coverage", 80, SWT.LEFT, true,
+ SortDataType.Integer, false, "");
+ public static XViewerColumn Method_Number =
+ new XViewerColumn(NAMESPACE + ".methodNumber", "Method Number", 25, SWT.LEFT, true, SortDataType.Integer,
+ false, "");
+ public static XViewerColumn Execution_Number =
+ new XViewerColumn(NAMESPACE + ".executionNumber", "Execution Line Number", 25, SWT.LEFT, true,
+ SortDataType.Integer, false, "");
+ public static XViewerColumn Line_Number =
+ new XViewerColumn(NAMESPACE + ".lineNumber", "File Line Number", 80, SWT.LEFT, true, SortDataType.String,
+ false, "");
+ public static XViewerColumn Coverage_Method =
+ new XViewerColumn(NAMESPACE + ".coverateMethod", "Coverage Method", 100, SWT.LEFT, true, SortDataType.String,
+ false, "");
+ public static XViewerColumn Coverage_Rationale =
+ new XViewerColumn(NAMESPACE + ".coverageRationale", "Coverage Rationale", 100, SWT.LEFT, true,
+ SortDataType.String, false, "");
+ public static XViewerColumn Coverage_Test_Units =
+ new XViewerColumn(NAMESPACE + ".coverageTestUnits", "Coverage Test Units", 80, SWT.LEFT, true,
+ SortDataType.String, false, "");
+ public static XViewerColumn Assignees_Col =
+ new XViewerColumn(NAMESPACE + ".assignees", "Assignees", 100, SWT.LEFT, true, SortDataType.String, false, null);
+ public static XViewerColumn Notes_Col =
+ new XViewerColumn(NAMESPACE + ".notes", "Notes", 100, SWT.LEFT, true, SortDataType.String, false, null);
+ public static XViewerColumn Location =
+ new XViewerColumn(NAMESPACE + ".location", "Location", 80, SWT.LEFT, true, SortDataType.String, false, "");
+ public static XViewerColumn Parent_Coverage_Unit =
+ new XViewerColumn(NAMESPACE + ".parentCoverageUnit", "Parent Coverage Unit", 80, SWT.LEFT, true,
+ SortDataType.String, false, "");
+ public static XViewerColumn Guid =
+ new XViewerColumn(NAMESPACE + ".guid", "Guid", 80, SWT.LEFT, true, SortDataType.String, false, "");
+
+ public CoverageXViewerFactory() {
+ super(NAMESPACE);
+ registerColumns();
+ }
+
+ public void registerColumns() {
+ registerColumns(Name, Method_Number, Execution_Number, Namespace, Coverage_Percent, Coverage_Method,
+ Coverage_Rationale, Coverage_Test_Units, Assignees_Col, Notes_Col, Parent_Coverage_Unit, Line_Number,
+ Location, Guid);
+ }
+
+ @Override
+ public boolean isCellGradientOn() {
+ return true;
+ }
+
+ @Override
+ public boolean isFilterUiAvailable() {
+ return false;
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/xcover/XCoverageViewer.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/xcover/XCoverageViewer.java
new file mode 100644
index 00000000000..867b0e14684
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/xcover/XCoverageViewer.java
@@ -0,0 +1,230 @@
+/*******************************************************************************
+ * 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.coverage.editor.xcover;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.osee.coverage.model.CoverageOptionManager;
+import org.eclipse.osee.coverage.model.ICoverage;
+import org.eclipse.osee.coverage.util.ISaveable;
+import org.eclipse.osee.framework.jdk.core.util.AHTML;
+import org.eclipse.osee.framework.jdk.core.util.Collections;
+import org.eclipse.osee.framework.logging.OseeLevel;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.widgets.XWidget;
+import org.eclipse.osee.framework.ui.swt.ALayout;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.ui.forms.widgets.ScrolledForm;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XCoverageViewer extends XWidget {
+
+ protected CoverageXViewer xViewer;
+ public final static String normalColor = "#EEEEEE";
+ private Label extraInfoLabel;
+ private Tree tree;
+ private final Collection<TableType> tableTypes;
+ private final ISaveable saveable;
+ private final CoverageOptionManager coverageOptionManager;
+ public static enum TableType {
+ Package, Merge, Import
+ };
+
+ public XCoverageViewer(ISaveable saveable, CoverageOptionManager coverageOptionManager, TableType tableType, TableType... types) {
+ super("Coverage Items");
+ this.saveable = saveable;
+ this.coverageOptionManager = coverageOptionManager;
+ this.tableTypes = Collections.getAggregate(types);
+ this.tableTypes.add(tableType);
+ }
+
+ @Override
+ protected void createControls(Composite parent, int horizontalSpan) {
+ // Create Text Widgets
+ if (isDisplayLabel() && !getLabel().equals("")) {
+ labelWidget = new Label(parent, SWT.NONE);
+ labelWidget.setText(getLabel() + ":");
+ if (getToolTip() != null) {
+ labelWidget.setToolTipText(getToolTip());
+ }
+ }
+
+ Composite mainComp = new Composite(parent, SWT.BORDER);
+ mainComp.setLayoutData(new GridData(GridData.FILL_BOTH));
+ mainComp.setLayout(ALayout.getZeroMarginLayout());
+ if (toolkit != null) toolkit.paintBordersFor(mainComp);
+
+ createTaskActionBar(mainComp);
+
+ xViewer = new CoverageXViewer(mainComp, SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION, this);
+ xViewer.getTree().setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ xViewer.setContentProvider(new CoverageContentProvider(xViewer));
+ xViewer.setLabelProvider(new CoverageLabelProvider(xViewer));
+
+ if (toolkit != null) toolkit.adapt(xViewer.getStatusLabel(), false, false);
+
+ // NOTE: Don't adapt the tree using xToolkit cause will loose xViewer's context menu
+ updateExtraLabel();
+ }
+
+ public void updateExtraLabel() {
+ extraInfoLabel.setText("");
+ }
+
+ public void setXviewerTree(boolean expand) {
+ tree = xViewer.getTree();
+ GridData gridData = new GridData(GridData.FILL_BOTH);
+ gridData.widthHint = 50;
+ tree.setLayout(ALayout.getZeroMarginLayout());
+ tree.setLayoutData(gridData);
+ tree.setHeaderVisible(true);
+ tree.setLinesVisible(true);
+ }
+
+ public void createTaskActionBar(Composite parent) {
+
+ // Button composite for state transitions, etc
+ Composite composite = new Composite(parent, SWT.NONE);
+ composite.setLayout(ALayout.getZeroMarginLayout());
+ composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ extraInfoLabel = new Label(composite, SWT.NONE);
+ extraInfoLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ extraInfoLabel.setText("");
+ extraInfoLabel.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_RED));
+
+ }
+
+ public ScrolledForm getForm(Composite composite) {
+ ScrolledForm form = null;
+ if (composite == null) return null;
+ if (composite instanceof ScrolledForm) return (ScrolledForm) composite;
+ if (!(composite instanceof ScrolledForm)) {
+ form = getForm(composite.getParent());
+ }
+ return form;
+ }
+
+ public void loadTable(Collection<ICoverage> items) {
+ try {
+ xViewer.setInput(items);
+ xViewer.refresh();
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, OseeLevel.SEVERE_POPUP, ex);
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ public ArrayList<ICoverage> getSelectedCoverageItems() {
+ ArrayList<ICoverage> items = new ArrayList<ICoverage>();
+ if (xViewer == null) return items;
+ if (xViewer.getSelection().isEmpty()) return items;
+ Iterator i = ((IStructuredSelection) xViewer.getSelection()).iterator();
+ while (i.hasNext()) {
+ Object obj = i.next();
+ items.add((ICoverage) obj);
+ }
+ return items;
+ }
+
+ @Override
+ public Control getControl() {
+ return xViewer.getTree();
+ }
+
+ @Override
+ public void dispose() {
+ xViewer.dispose();
+ }
+
+ @Override
+ public void setFocus() {
+ xViewer.getTree().setFocus();
+ }
+
+ @Override
+ public void refresh() {
+ if (xViewer == null || xViewer.getTree() == null || xViewer.getTree().isDisposed()) return;
+ xViewer.refresh();
+ }
+
+ @Override
+ public IStatus isValid() {
+ return Status.OK_STATUS;
+ }
+
+ @Override
+ public void setXmlData(String str) {
+ }
+
+ @Override
+ public String getXmlData() {
+ return null;
+ }
+
+ @Override
+ public String toHTML(String labelFont) {
+ if (getXViewer().getTree().getItemCount() == 0) return "";
+ StringBuffer html = new StringBuffer();
+ html.append(AHTML.addSpace(1) + AHTML.getLabelStr(AHTML.LABEL_FONT, "Coverage"));
+ return html.toString();
+ }
+
+ @Override
+ public String getReportData() {
+ return null;
+ }
+
+ public CoverageXViewer getXViewer() {
+ return xViewer;
+ }
+
+ @Override
+ public Object getData() {
+ return xViewer.getInput();
+ }
+
+ @Override
+ public Control getErrorMessageControl() {
+ return labelWidget;
+ }
+
+ public boolean isType(TableType tableType) {
+ if (tableTypes.contains(tableType)) {
+ return true;
+ }
+ return false;
+ }
+
+ public ISaveable getSaveable() {
+ return saveable;
+ }
+
+ public CoverageOptionManager getCoverageOptionManager() {
+ return coverageOptionManager;
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/xmerge/CoverageMergeLabelProvider.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/xmerge/CoverageMergeLabelProvider.java
new file mode 100644
index 00000000000..e929717c25e
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/xmerge/CoverageMergeLabelProvider.java
@@ -0,0 +1,147 @@
+/*******************************************************************************
+ * 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.coverage.editor.xmerge;
+
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.nebula.widgets.xviewer.XViewerColumn;
+import org.eclipse.osee.coverage.editor.xcover.CoverageLabelProvider;
+import org.eclipse.osee.coverage.editor.xcover.CoverageXViewerFactory;
+import org.eclipse.osee.coverage.merge.IMergeItem;
+import org.eclipse.osee.coverage.merge.MergeItemGroup;
+import org.eclipse.osee.coverage.merge.MessageMergeItem;
+import org.eclipse.osee.coverage.model.CoverageUnit;
+import org.eclipse.osee.coverage.model.ICoverage;
+import org.eclipse.osee.coverage.store.OseeCoverageUnitStore;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.utility.Artifacts;
+import org.eclipse.osee.framework.ui.plugin.PluginUiImage;
+import org.eclipse.osee.framework.ui.skynet.FrameworkImage;
+import org.eclipse.osee.framework.ui.swt.ImageManager;
+import org.eclipse.swt.graphics.Image;
+
+public class CoverageMergeLabelProvider extends CoverageLabelProvider {
+
+ private final CoverageMergeXViewer mergeXViewer;
+
+ public CoverageMergeLabelProvider(CoverageMergeXViewer mergeXViewer) {
+ super(mergeXViewer);
+ this.mergeXViewer = mergeXViewer;
+ }
+
+ @Override
+ public Image getColumnImage(Object element, XViewerColumn xCol, int columnIndex) throws OseeCoreException {
+ if (element instanceof MessageMergeItem && xCol.equals(CoverageMergeXViewerFactory.Name)) {
+ return ImageManager.getImage(FrameworkImage.X_RED);
+ }
+ if (element instanceof MessageMergeItem) {
+ return null;
+ }
+ ICoverage coverageItem = (ICoverage) element;
+ if (xCol.equals(CoverageXViewerFactory.Assignees_Col)) {
+ return getCoverageItemUserImage(coverageItem);
+ }
+ if (xCol.equals(CoverageMergeXViewerFactory.Name)) {
+ return ImageManager.getImage(coverageItem.getOseeImage());
+ }
+ if (xCol.equals(CoverageMergeXViewerFactoryImport.Import) && element instanceof IMergeItem) {
+ if (!((IMergeItem) element).isImportAllowed() || !((IMergeItem) element).isCheckable()) {
+ return null;
+ }
+ if (((IMergeItem) element).isChecked()) {
+ return ImageManager.getImage(PluginUiImage.CHECKBOX_ENABLED);
+ }
+ return ImageManager.getImage(PluginUiImage.CHECKBOX_DISABLED);
+ }
+ return super.getColumnImage(element, xCol, columnIndex);
+ }
+
+ @Override
+ public String getColumnText(Object element, XViewerColumn xCol, int columnIndex) throws OseeCoreException {
+ ICoverage coverage = (ICoverage) element;
+ if (xCol.equals(CoverageMergeXViewerFactory.Name)) {
+ return coverage.getName();
+ }
+ if (element instanceof MessageMergeItem) {
+ return "";
+ }
+ if (xCol.equals(CoverageXViewerFactory.Guid)) {
+ return coverage.getGuid();
+ }
+ if (xCol.equals(CoverageXViewerFactory.Location)) {
+ return coverage.getLocation();
+ }
+ if (xCol.equals(CoverageXViewerFactory.Namespace)) {
+ return coverage.getNamespace();
+ }
+ if (xCol.equals(CoverageXViewerFactory.Notes_Col)) {
+ return coverage.getNotes();
+ }
+ if (xCol.equals(CoverageXViewerFactory.Coverage_Percent)) {
+ return coverage.getCoveragePercentStr();
+ }
+ if (xCol.equals(CoverageXViewerFactory.Assignees_Col)) {
+ if (coverage instanceof CoverageUnit) {
+ return Artifacts.toString("; ", OseeCoverageUnitStore.getAssignees((CoverageUnit) coverage));
+ }
+ return "";
+ }
+
+ if (xCol.equals(CoverageMergeXViewerFactoryImport.Import) && element instanceof IMergeItem) {
+ if (!((IMergeItem) element).isImportAllowed()) {
+ return "";
+ }
+ return ((IMergeItem) element).getMergeType().toString();
+ }
+ if (coverage instanceof MergeItemGroup) {
+ if (xCol.equals(CoverageXViewerFactory.Parent_Coverage_Unit)) {
+ ICoverage cov = ((MergeItemGroup) coverage).getParent();
+ return cov.getName();
+ }
+ }
+
+ return super.getColumnText(element, xCol, columnIndex);
+ }
+
+ @Override
+ public void dispose() {
+ }
+
+ @Override
+ public boolean isLabelProperty(Object element, String property) {
+ return false;
+ }
+
+ @Override
+ public void addListener(ILabelProviderListener listener) {
+ }
+
+ @Override
+ public void removeListener(ILabelProviderListener listener) {
+ }
+
+ @Override
+ public CoverageMergeXViewer getTreeViewer() {
+ return mergeXViewer;
+ }
+
+ @Override
+ public int getColumnGradient(Object element, XViewerColumn xCol, int columnIndex) throws Exception {
+ if (element instanceof MessageMergeItem) {
+ return 0;
+ }
+ ICoverage coverageItem = (ICoverage) element;
+ if (xCol.equals(CoverageXViewerFactory.Coverage_Percent)) {
+ return coverageItem.getCoveragePercent();
+ }
+ return 0;
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/xmerge/CoverageMergeXViewer.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/xmerge/CoverageMergeXViewer.java
new file mode 100644
index 00000000000..3ef70d5e3ab
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/xmerge/CoverageMergeXViewer.java
@@ -0,0 +1,114 @@
+/*
+ * Created on Oct 3, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.editor.xmerge;
+
+import java.util.HashMap;
+import java.util.Map;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.nebula.widgets.xviewer.IXViewerFactory;
+import org.eclipse.nebula.widgets.xviewer.XViewerColumn;
+import org.eclipse.osee.coverage.editor.xcover.CoverageXViewer;
+import org.eclipse.osee.coverage.editor.xcover.XCoverageViewer.TableType;
+import org.eclipse.osee.coverage.internal.Activator;
+import org.eclipse.osee.coverage.merge.IMergeItem;
+import org.eclipse.osee.coverage.merge.MergeManager;
+import org.eclipse.osee.coverage.model.ICoverage;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLevel;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.ui.skynet.results.XResultData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.TreeColumn;
+import org.eclipse.swt.widgets.TreeItem;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class CoverageMergeXViewer extends CoverageXViewer {
+
+ // public Map<ICoverage, Boolean> importChecked = new HashMap<ICoverage, Boolean>();
+ public Map<ICoverage, XResultData> importError = new HashMap<ICoverage, XResultData>();
+ Action toggleImport;
+ private final MergeManager mergeManager;
+ public static enum ImportType {
+ Add, Replace, Folder, Error, None
+ };
+
+ public CoverageMergeXViewer(MergeManager mergeManager, Composite parent, int style, IXViewerFactory xViewerFactory, XCoverageMergeViewer xCoverageMergeViewer) {
+ super(parent, style, xViewerFactory, xCoverageMergeViewer);
+ this.mergeManager = mergeManager;
+ }
+
+ @Override
+ public boolean handleLeftClickInIconArea(TreeColumn treeColumn, TreeItem treeItem) {
+ XViewerColumn xCol = (XViewerColumn) treeColumn.getData();
+ if (xCol.equals(CoverageMergeXViewerFactoryImport.Import)) {
+ try {
+ if (treeItem.getData() instanceof IMergeItem && ((IMergeItem) treeItem.getData()).isCheckable()) {
+ ((IMergeItem) treeItem.getData()).setChecked(!((IMergeItem) treeItem.getData()).isChecked());
+ xCoverageViewer.getXViewer().update(treeItem.getData());
+ }
+ return true;
+ } catch (OseeCoreException ex) {
+ OseeLog.log(Activator.class, OseeLevel.SEVERE_POPUP, ex);
+ }
+ }
+ return super.handleLeftClickInIconArea(treeColumn, treeItem);
+ }
+
+ @Override
+ public boolean handleLeftClick(TreeColumn treeColumn, TreeItem treeItem) {
+ // XViewerColumn xCol = (XViewerColumn) treeColumn.getData();
+ return super.handleLeftClick(treeColumn, treeItem);
+ }
+
+ @Override
+ public void updateEditMenuActions() {
+ MenuManager mm = getMenuManager();
+ if (xCoverageViewer.isType(TableType.Merge) && xCoverageViewer.isType(TableType.Import)) {
+ mm.insertBefore(MENU_GROUP_PRE, toggleImport);
+ toggleImport.setEnabled(isToggleImportEnabled());
+ }
+ super.updateEditMenuActions();
+ }
+
+ private boolean isToggleImportEnabled() {
+ if (xCoverageViewer.getSelectedCoverageItems().size() == 0) return false;
+ for (ICoverage item : xCoverageViewer.getSelectedCoverageItems()) {
+ if (item.isEditable().isFalse() || !(item instanceof IMergeItem) || !((IMergeItem) item).isImportAllowed()) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public void createMenuActions() {
+ super.createMenuActions();
+
+ toggleImport = new Action("Toggle Import", Action.AS_PUSH_BUTTON) {
+ @Override
+ public void run() {
+ try {
+ for (ICoverage coverageItem : xCoverageViewer.getSelectedCoverageItems()) {
+ if (coverageItem instanceof IMergeItem && ((IMergeItem) coverageItem).isCheckable()) {
+ ((IMergeItem) coverageItem).setChecked(!((IMergeItem) coverageItem).isChecked());
+ xCoverageViewer.getXViewer().update(coverageItem);
+ }
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(Activator.class, OseeLevel.SEVERE_POPUP, ex);
+ }
+ }
+ };
+ }
+
+ public MergeManager getMergeManager() {
+ return mergeManager;
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/xmerge/CoverageMergeXViewerFactory.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/xmerge/CoverageMergeXViewerFactory.java
new file mode 100644
index 00000000000..c4a3216b7e0
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/xmerge/CoverageMergeXViewerFactory.java
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * 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.coverage.editor.xmerge;
+
+import org.eclipse.nebula.widgets.xviewer.XViewerColumn;
+import org.eclipse.osee.coverage.editor.xcover.CoverageXViewerFactory;
+
+/**
+ * @author Donald G. Dunne
+ */
+public abstract class CoverageMergeXViewerFactory extends CoverageXViewerFactory {
+
+ public CoverageMergeXViewerFactory() {
+ super();
+ }
+
+ public void registerMergeColumns() {
+ registerColumns();
+ for (XViewerColumn xCol : getColumns()) {
+ overrideShowDefault(
+ xCol.getId(),
+ xCol.equals(CoverageXViewerFactory.Name) || xCol.equals(CoverageXViewerFactory.Notes_Col) || xCol.equals(CoverageXViewerFactory.Namespace) || xCol.equals(CoverageXViewerFactory.Coverage_Method));
+ }
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/xmerge/CoverageMergeXViewerFactoryImport.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/xmerge/CoverageMergeXViewerFactoryImport.java
new file mode 100644
index 00000000000..47769804561
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/xmerge/CoverageMergeXViewerFactoryImport.java
@@ -0,0 +1,52 @@
+/*******************************************************************************
+ * 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.coverage.editor.xmerge;
+
+import org.eclipse.nebula.widgets.xviewer.XViewerColumn;
+import org.eclipse.nebula.widgets.xviewer.XViewerColumn.SortDataType;
+import org.eclipse.osee.coverage.editor.xcover.CoverageXViewerFactory;
+import org.eclipse.swt.SWT;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class CoverageMergeXViewerFactoryImport extends CoverageMergeXViewerFactory {
+
+ protected static String NAMESPACE = "osee.ats.CoverageMergeImport";
+
+ public static XViewerColumn Import =
+ new XViewerColumn(NAMESPACE + ".name", "Import", 65, SWT.LEFT, true, SortDataType.Check, false, "");
+
+ public CoverageMergeXViewerFactoryImport() {
+ super();
+ clearColumnRegistration();
+ registerColumns(Name, Method_Number, Execution_Number, Import, Parent_Coverage_Unit, Namespace, Coverage_Percent,
+ Coverage_Method, Line_Number, Coverage_Test_Units, Assignees_Col, Location, Guid);
+ for (XViewerColumn xCol : getColumns()) {
+ overrideShowDefault(xCol.getId(), xCol.equals(CoverageXViewerFactory.Name) ||
+ //
+ xCol.equals(CoverageXViewerFactory.Method_Number) ||
+ //
+ xCol.equals(CoverageXViewerFactory.Execution_Number) ||
+ //
+ xCol.equals(CoverageXViewerFactory.Parent_Coverage_Unit) ||
+ //
+ xCol.equals(CoverageXViewerFactory.Coverage_Percent) ||
+ //
+ xCol.equals(CoverageXViewerFactory.Namespace) ||
+ //
+ xCol.equals(Import) ||
+ //
+ xCol.equals(CoverageXViewerFactory.Coverage_Method));
+ }
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/xmerge/CoverageMergeXViewerFactoryPackage.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/xmerge/CoverageMergeXViewerFactoryPackage.java
new file mode 100644
index 00000000000..d680e46eeaa
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/xmerge/CoverageMergeXViewerFactoryPackage.java
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * 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.coverage.editor.xmerge;
+
+import org.eclipse.nebula.widgets.xviewer.XViewerColumn;
+import org.eclipse.osee.coverage.editor.xcover.CoverageXViewerFactory;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class CoverageMergeXViewerFactoryPackage extends CoverageMergeXViewerFactory {
+
+ protected static String NAMESPACE = "osee.ats.CoverageMergePackage";
+
+ public CoverageMergeXViewerFactoryPackage() {
+ super();
+ clearColumnRegistration();
+ registerMergeColumns();
+ }
+
+ @Override
+ public void registerMergeColumns() {
+ super.registerMergeColumns();
+ for (XViewerColumn xCol : getColumns()) {
+ if (xCol.equals(CoverageXViewerFactory.Coverage_Rationale) ||
+ //
+ xCol.equals(CoverageXViewerFactory.Method_Number) ||
+ //
+ xCol.equals(CoverageXViewerFactory.Execution_Number) ||
+ //
+ //
+ xCol.equals(CoverageXViewerFactory.Coverage_Percent) ||
+ //
+ xCol.equals(CoverageXViewerFactory.Assignees_Col) ||
+ //
+ xCol.equals(CoverageXViewerFactory.Notes_Col)) {
+ overrideShowDefault(xCol.getId(), true);
+ }
+ }
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/xmerge/XCoverageMergeViewer.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/xmerge/XCoverageMergeViewer.java
new file mode 100644
index 00000000000..b241ce75244
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/editor/xmerge/XCoverageMergeViewer.java
@@ -0,0 +1,73 @@
+/*
+ * Created on Oct 3, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.editor.xmerge;
+
+import org.eclipse.osee.coverage.editor.xcover.CoverageContentProvider;
+import org.eclipse.osee.coverage.editor.xcover.XCoverageViewer;
+import org.eclipse.osee.coverage.merge.MergeManager;
+import org.eclipse.osee.coverage.model.CoverageOptionManager;
+import org.eclipse.osee.coverage.util.ISaveable;
+import org.eclipse.osee.framework.ui.skynet.action.RefreshAction.IRefreshActionHandler;
+import org.eclipse.osee.framework.ui.swt.ALayout;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XCoverageMergeViewer extends XCoverageViewer implements IRefreshActionHandler {
+
+ CoverageMergeXViewer mergeXViewer;
+ private final CoverageMergeXViewerFactory coverageMergeXViewerFactory;
+ private final MergeManager mergeManager;
+
+ public XCoverageMergeViewer(MergeManager mergeManager, ISaveable saveable, CoverageMergeXViewerFactory coverageMergeXViewerFactory, CoverageOptionManager coverageOptionManager, TableType tableType, TableType... types) {
+ super(saveable, coverageOptionManager, tableType, types);
+ this.mergeManager = mergeManager;
+ this.coverageMergeXViewerFactory = coverageMergeXViewerFactory;
+ }
+
+ @Override
+ protected void createControls(Composite parent, int horizontalSpan) {
+ // Create Text Widgets
+ if (isDisplayLabel() && !getLabel().equals("")) {
+ labelWidget = new Label(parent, SWT.NONE);
+ labelWidget.setText(getLabel() + ":");
+ if (getToolTip() != null) {
+ labelWidget.setToolTipText(getToolTip());
+ }
+ }
+
+ Composite mainComp = new Composite(parent, SWT.BORDER);
+ mainComp.setLayoutData(new GridData(GridData.FILL_BOTH));
+ mainComp.setLayout(ALayout.getZeroMarginLayout());
+ if (toolkit != null) toolkit.paintBordersFor(mainComp);
+
+ createTaskActionBar(mainComp);
+
+ xViewer =
+ new CoverageMergeXViewer(mergeManager, mainComp, SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION,
+ coverageMergeXViewerFactory, this);
+ mergeXViewer = (CoverageMergeXViewer) xViewer;
+ xViewer.getTree().setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ xViewer.setContentProvider(new CoverageContentProvider(mergeXViewer));
+ xViewer.setLabelProvider(new CoverageMergeLabelProvider(mergeXViewer));
+
+ if (toolkit != null) toolkit.adapt(xViewer.getStatusLabel(), false, false);
+
+ // NOTE: Don't adapt the tree using xToolkit cause will loose xViewer's context menu
+ updateExtraLabel();
+ }
+
+ @Override
+ public void refreshActionHandler() {
+ refresh();
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/internal/Activator.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/internal/Activator.java
new file mode 100644
index 00000000000..642b905f48b
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/internal/Activator.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * 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.coverage.internal;
+
+import org.eclipse.osee.framework.ui.plugin.OseeUiActivator;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class Activator extends OseeUiActivator {
+ private static Activator pluginInstance; // The shared instance.
+ public static final String PLUGIN_ID = "org.eclipse.osee.coverage";
+
+ public Activator() {
+ super();
+ pluginInstance = this;
+ }
+
+ @Override
+ protected String getPluginName() {
+ return PLUGIN_ID;
+ }
+
+ /**
+ * Returns the shared instance.
+ */
+ public static Activator getInstance() {
+ return pluginInstance;
+ }
+} \ No newline at end of file
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/internal/CoveragePerspectiveFactory.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/internal/CoveragePerspectiveFactory.java
new file mode 100644
index 00000000000..8452d86e95f
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/internal/CoveragePerspectiveFactory.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * 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.coverage.internal;
+
+import org.eclipse.osee.coverage.navigate.CoverageNavigateView;
+import org.eclipse.osee.coverage.util.CoverageUtil;
+import org.eclipse.osee.framework.ui.skynet.ArtifactExplorer;
+import org.eclipse.osee.framework.ui.skynet.search.QuickSearchView;
+import org.eclipse.osee.framework.ui.skynet.widgets.xBranch.BranchView;
+import org.eclipse.search.ui.NewSearchUI;
+import org.eclipse.ui.IFolderLayout;
+import org.eclipse.ui.IPageLayout;
+import org.eclipse.ui.IPerspectiveFactory;
+
+/**
+ * Perspective factory for the Coverage perspective.
+ *
+ * @author Donald G. Dunne
+ */
+public class CoveragePerspectiveFactory implements IPerspectiveFactory {
+
+ public void createInitialLayout(IPageLayout layout) {
+ final String editorArea = layout.getEditorArea();
+
+ final IFolderLayout left = layout.createFolder("left", IPageLayout.LEFT, 0.2f, editorArea);
+ final IFolderLayout bottom = layout.createFolder("bottom", IPageLayout.BOTTOM, 0.75f, editorArea);
+
+ // Add views to Window -> Show View
+ layout.addShowViewShortcut(ArtifactExplorer.VIEW_ID);
+ layout.addShowViewShortcut(QuickSearchView.VIEW_ID);
+ layout.addShowViewShortcut(BranchView.VIEW_ID);
+ layout.addShowViewShortcut(CoverageNavigateView.VIEW_ID);
+ layout.addShowViewShortcut("org.eclipse.pde.runtime.LogView");
+
+ left.addView(CoverageNavigateView.VIEW_ID);
+ left.addView(ArtifactExplorer.VIEW_ID + ":*");
+
+ if (CoverageUtil.isAdmin()) {
+ bottom.addView("org.eclipse.pde.runtime.LogView");
+ }
+ bottom.addPlaceholder(NewSearchUI.SEARCH_VIEW_ID);
+
+ final IFolderLayout bottomLeft =
+ layout.createFolder("bottomLeft", IPageLayout.BOTTOM, 0.6f, CoverageNavigateView.VIEW_ID);
+ bottomLeft.addView(QuickSearchView.VIEW_ID);
+ }
+} \ No newline at end of file
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/merge/IMergeItem.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/merge/IMergeItem.java
new file mode 100644
index 00000000000..1b69986da21
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/merge/IMergeItem.java
@@ -0,0 +1,26 @@
+/*
+ * Created on Dec 2, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.merge;
+
+import org.eclipse.osee.coverage.model.ICoverage;
+import org.eclipse.osee.framework.core.exception.OseeArgumentException;
+
+/**
+ * @author Donald G. Dunne
+ */
+public interface IMergeItem extends ICoverage {
+
+ public MergeType getMergeType();
+
+ public boolean isChecked();
+
+ public boolean isCheckable();
+
+ public void setChecked(boolean checked) throws OseeArgumentException;
+
+ public boolean isImportAllowed();
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/merge/MatchItem.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/merge/MatchItem.java
new file mode 100644
index 00000000000..2314f58ed4a
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/merge/MatchItem.java
@@ -0,0 +1,66 @@
+/*
+ * Created on Nov 3, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.merge;
+
+import java.util.Collection;
+import org.eclipse.osee.coverage.model.ICoverage;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class MatchItem {
+
+ private final MatchType matchType;
+ private final ICoverage packageItem;
+ private final ICoverage importItem;
+ public static MatchItem No_Match_Item = new MatchItem(MatchType.No_Match__Name_Or_Order_Num, null, null);
+
+ public MatchItem(MatchType matchType, ICoverage packageItem, ICoverage importItem) {
+ this.matchType = matchType;
+ this.packageItem = packageItem;
+ this.importItem = importItem;
+ }
+
+ public MatchType getMatchType() {
+ return matchType;
+ }
+
+ public ICoverage getPackageItem() {
+ return packageItem;
+ }
+
+ public ICoverage getImportItem() {
+ return importItem;
+ }
+
+ @Override
+ public String toString() {
+ return "Match Type>> " + matchType.toString() + " - Import Item>>" + importItem.toString() + ") - Package Item>>(" + (packageItem != null ? packageItem.toString() : "[null])");
+ }
+
+ public static boolean isAllMatchType(Collection<MatchType> matchTypes, Collection<MatchItem> matchItems) {
+ for (MatchItem matchItem : matchItems) {
+ if (!matchTypes.contains(matchItem.getMatchType())) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ public boolean isMatch() {
+ if (matchType.toString().startsWith("Match__")) {
+ return true;
+ }
+ return false;
+ }
+
+ public boolean isMatchType(Collection<MatchType> matchTypes) {
+ if (!matchTypes.contains(matchType)) {
+ return false;
+ }
+ return true;
+ }
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/merge/MatchType.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/merge/MatchType.java
new file mode 100644
index 00000000000..5d809b089c4
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/merge/MatchType.java
@@ -0,0 +1,104 @@
+package org.eclipse.osee.coverage.merge;
+
+import java.util.Arrays;
+import java.util.Collection;
+import org.eclipse.osee.coverage.model.CoverageImport;
+import org.eclipse.osee.coverage.model.CoverageItem;
+import org.eclipse.osee.coverage.model.CoveragePackage;
+import org.eclipse.osee.coverage.model.CoverageUnit;
+import org.eclipse.osee.coverage.model.ICoverage;
+import org.eclipse.osee.framework.core.exception.OseeStateException;
+
+public enum MatchType {
+ // Item matches in name only
+ Match__Folder,
+ // Item matches in name and order number
+ Match__Name_And_Order_Num,
+ // Items are CoveragePackageBase types
+ Match__Coverage_Base,
+
+ // Item has no match; __<reason>
+ No_Match__Namespace,
+ No_Match__Class,
+ No_Match__Name_Or_Order_Num;
+
+ public static Collection<MatchType> FullMatches =
+ Arrays.asList(Match__Folder, Match__Coverage_Base, Match__Name_And_Order_Num);
+
+ public static boolean isNoMatch(MatchType matchType) {
+ return matchType.toString().startsWith("No_Match__");
+ }
+
+ public static boolean isMatch(MatchType matchType) {
+ return FullMatches.contains(matchType);
+ }
+
+ public static MatchType getMatchType(ICoverage packageItem, ICoverage importItem) throws OseeStateException {
+ if (packageItem instanceof CoveragePackage && importItem instanceof CoverageImport) {
+ return MatchType.Match__Coverage_Base;
+ }
+ if (packageItem.getClass() != importItem.getClass()) return MatchType.No_Match__Class;
+ if (packageItem.getNamespace() == null || importItem.getNamespace() == null) throw new OseeStateException(
+ "Namespaces can't be null");
+ if (!packageItem.getNamespace().equals(importItem.getNamespace())) return MatchType.No_Match__Namespace;
+ if (packageItem instanceof CoverageUnit && importItem instanceof CoverageUnit) {
+ if (((CoverageUnit) packageItem).isFolder() && (((CoverageUnit) importItem).isFolder()) && packageItem.getName().equals(
+ importItem.getName())) {
+ return MatchType.Match__Folder;
+ }
+ if (((CoverageUnit) packageItem).isFolder() && !(((CoverageUnit) importItem).isFolder())) {
+ return MatchType.No_Match__Class;
+ }
+ if (!((CoverageUnit) packageItem).isFolder() && (((CoverageUnit) importItem).isFolder())) {
+ return MatchType.No_Match__Class;
+ }
+ // If names equal and method numbers equal
+ if (packageItem.getName().equals(importItem.getName()) && packageItem.getOrderNumber().equals(
+ importItem.getOrderNumber())) {
+ // parent's have to match also to be considered equal
+ MatchType matchType = getMatchType(packageItem.getParent(), importItem.getParent());
+ // if parents match, then this is a full match
+ if (MatchType.isMatch(matchType)) {
+ return MatchType.Match__Name_And_Order_Num;
+ }
+ // if parents don't match, then this is a full no-match
+ else {
+ return No_Match__Name_Or_Order_Num;
+ }
+ }
+ // If neither names or methods match
+ else if (!packageItem.getName().equals(importItem.getName()) && !packageItem.getOrderNumber().equals(
+ importItem.getOrderNumber())) {
+ return MatchType.No_Match__Name_Or_Order_Num;
+ }
+ } else if (packageItem instanceof CoverageItem && importItem instanceof CoverageItem) {
+ // If neither names or order match
+ if (!packageItem.getName().equals(importItem.getName()) && !packageItem.getOrderNumber().equals(
+ importItem.getOrderNumber())) {
+ return MatchType.No_Match__Name_Or_Order_Num;
+ }
+ // If names equal and order numbers equal
+ else if (packageItem.getName().equals(importItem.getName()) && packageItem.getOrderNumber().equals(
+ importItem.getOrderNumber())) {
+ // parent's have to match also to be considered equal
+ MatchType matchType = getMatchType(packageItem.getParent(), importItem.getParent());
+ // if parents match, then this is a full match
+ if (MatchType.isMatch(matchType)) {
+ return MatchType.Match__Name_And_Order_Num;
+ }
+ }
+ } else if (packageItem.getName().equals(importItem.getName())) {
+ if (packageItem.getParent() instanceof CoveragePackage && importItem.getParent() instanceof CoverageImport) {
+ return MatchType.Match__Name_And_Order_Num;
+ } else {
+ if (packageItem.getParent() == null && importItem.getParent() == null) {
+ return MatchType.Match__Coverage_Base;
+ }
+ MatchType matchType = getMatchType(packageItem.getParent(), importItem.getParent());
+ return matchType;
+ }
+ }
+ return MatchType.No_Match__Name_Or_Order_Num;
+ }
+
+};
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/merge/MergeImportManager.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/merge/MergeImportManager.java
new file mode 100644
index 00000000000..cb1306ce640
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/merge/MergeImportManager.java
@@ -0,0 +1,343 @@
+/*
+ * Created on Oct 5, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.merge;
+
+import java.util.Collection;
+import org.eclipse.osee.coverage.internal.Activator;
+import org.eclipse.osee.coverage.model.CoverageImport;
+import org.eclipse.osee.coverage.model.CoverageItem;
+import org.eclipse.osee.coverage.model.CoveragePackage;
+import org.eclipse.osee.coverage.model.CoverageUnit;
+import org.eclipse.osee.coverage.model.ICoverage;
+import org.eclipse.osee.coverage.model.ICoverageUnitProvider;
+import org.eclipse.osee.coverage.util.CoverageUtil;
+import org.eclipse.osee.coverage.util.ISaveable;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.core.exception.OseeStateException;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+import org.eclipse.osee.framework.logging.OseeLevel;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.skynet.results.XResultData;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class MergeImportManager {
+
+ private final CoveragePackage coveragePackage;
+ private final MergeManager mergeManager;
+
+ public MergeImportManager(MergeManager mergeManager) {
+ this.mergeManager = mergeManager;
+ this.coveragePackage = mergeManager.getCoveragePackage();
+ }
+
+ public XResultData importItems(ISaveable saveable, Collection<IMergeItem> mergeItems) throws OseeCoreException {
+ XResultData rd = new XResultData(false);
+ if (!validateEditable(rd, saveable)) return rd;
+ if (!validateMergeTypes(rd, mergeItems)) return rd;
+ if (!validateChildren(rd, mergeItems)) return rd;
+
+ for (IMergeItem mergeItem : mergeItems) {
+ if (mergeItem.getMergeType() == MergeType.CI_Changes) {
+ if (mergeItem instanceof MergeItemGroup) {
+ MergeItemGroup group = (MergeItemGroup) mergeItem;
+ for (IMergeItem childMergeItem : group.getMergeItems()) {
+ if (childMergeItem instanceof MergeItem && ((MergeItem) childMergeItem).getMergeType() == MergeType.CI_Add) {
+ addCoverageItem(childMergeItem, rd);
+ } else if (childMergeItem instanceof MergeItem && ((MergeItem) childMergeItem).getMergeType() == MergeType.CI_Renamed) {
+ renameCoverageItem(childMergeItem, rd);
+ } else if (childMergeItem instanceof MergeItem && ((MergeItem) childMergeItem).getMergeType() == MergeType.CI_Moved) {
+ updateOrder(mergeItem, childMergeItem, rd);
+ } else if (childMergeItem instanceof MergeItem && ((MergeItem) childMergeItem).getMergeType() == MergeType.CI_Delete) {
+ deleteCoverageItem(mergeItem, childMergeItem, rd);
+ } else {
+ rd.logError(String.format("Coverage_Item_Changes Group: Unsupported merge type [%s]",
+ childMergeItem.getMergeType()));
+ }
+ }
+ } else {
+ rd.logError(String.format("Coverage_Item_Changes: Unsupported mergeItem [%s]", mergeItem));
+ }
+ } else if (mergeItem.getMergeType() == MergeType.Add) {
+ if (mergeItem instanceof MergeItem) {
+ CoverageUnit coverageUnit = (CoverageUnit) ((MergeItem) mergeItem).getImportItem();
+ importCoverageUnitItem(rd, coverageUnit);
+ // add all children items
+ for (CoverageUnit childCoverageUnit : coverageUnit.getCoverageUnits(true)) {
+ importCoverageUnitItem(rd, childCoverageUnit);
+ }
+ } else {
+ rd.logError(String.format("Add: Unsupported mergeItem [%s]", mergeItem));
+ }
+ } else if (mergeItem.getMergeType() == MergeType.Add_With_Moves) {
+ if (mergeItem instanceof MergeItemGroup) {
+ MergeItemGroup group = (MergeItemGroup) mergeItem;
+ for (IMergeItem childMergeItem : group.getMergeItems()) {
+ if (childMergeItem.getMergeType() == MergeType.Add && childMergeItem instanceof MergeItem) {
+ CoverageUnit coverageUnit = (CoverageUnit) ((MergeItem) childMergeItem).getImportItem();
+ importCoverageUnitItem(rd, coverageUnit);
+ // add all children items
+ for (CoverageUnit childCoverageUnit : coverageUnit.getCoverageUnits(true)) {
+ importCoverageUnitItem(rd, childCoverageUnit);
+ }
+ }
+ // For moved items, Change order of package item to match import item
+ else if (childMergeItem.getMergeType() == MergeType.Moved_Due_To_Add && childMergeItem instanceof MergeItem) {
+ updateOrder(mergeItem, childMergeItem, rd);
+ } else {
+ rd.logError(String.format("Add_With_Moves Group: Unsupported merge type [%s]",
+ childMergeItem.getMergeType()));
+ }
+ }
+ } else {
+ rd.logError(String.format("Add_With_Moves: Unsupported mergeItem [%s]", mergeItem));
+ }
+ } else if (mergeItem.getMergeType() == MergeType.Delete_And_Reorder) {
+ if (mergeItem instanceof MergeItemGroup) {
+ MergeItemGroup group = (MergeItemGroup) mergeItem;
+ for (IMergeItem childMergeItem : group.getMergeItems()) {
+ if (childMergeItem.getMergeType() == MergeType.Delete && childMergeItem instanceof MergeItem) {
+ ICoverage packageCoverage = ((MergeItem) childMergeItem).getPackageItem();
+ ICoverage parentPackageCoverage = packageCoverage.getParent();
+ ((ICoverageUnitProvider) parentPackageCoverage).removeCoverageUnit((CoverageUnit) packageCoverage);
+ }
+ // For moved items, Change order of package item to match import item
+ else if (childMergeItem.getMergeType() == MergeType.Moved_Due_To_Delete && childMergeItem instanceof MergeItem) {
+ updateOrder(mergeItem, childMergeItem, rd);
+ } else {
+ rd.logError(String.format("Delete_And_Reorder Group: Unsupported merge type [%s]",
+ childMergeItem.getMergeType()));
+ }
+ }
+ } else {
+ rd.logError(String.format("Delete_And_Reorder: Unsupported mergeItem [%s]", mergeItem));
+ }
+ } else {
+ rd.logError(String.format("Unsupported merge type [%s]", mergeItem.getMergeType()));
+ }
+ }
+
+ if (rd.getNumErrors() > 0) {
+ if (!CoverageUtil.isInTest()) {
+ AWorkbench.popup(rd.getNumErrors() + " Errors Found; Not Persisting");
+ }
+ rd.logError(rd.getNumErrors() + " Errors Found; Not Persisting");
+ } else {
+ Result result = saveable.save();
+ if (result.isTrue()) {
+ rd.log("\nChanges Persisted");
+ } else {
+ rd.logError("\n" + result.getText());
+ }
+ }
+ return rd;
+ }
+
+ private void addCoverageItem(IMergeItem mergeItem, XResultData rd) throws OseeCoreException {
+ CoverageItem importItem = (CoverageItem) ((MergeItem) mergeItem).getImportItem();
+ MatchItem parentMatchItem = mergeManager.getPackageCoverageItem(importItem.getParent());
+ ICoverage parentPackageItem = parentMatchItem == null ? null : parentMatchItem.getPackageItem();
+ CoverageUnit parentPackageCoverageUnit = (CoverageUnit) parentPackageItem;
+ CoverageItem packageItem = importItem.copy(parentPackageCoverageUnit);
+ updateFileContents(packageItem, importItem);
+ }
+
+ private void deleteCoverageItem(IMergeItem mergeItem, IMergeItem childMergeItem, XResultData rd) throws OseeCoreException {
+ CoverageItem packageItem = (CoverageItem) ((MergeItem) childMergeItem).getPackageItem();
+ ((CoverageUnit) packageItem.getParent()).removeCoverageItem(packageItem);
+ updateFileContents((CoverageUnit) packageItem.getParent(),
+ (CoverageUnit) ((MergeItemGroup) mergeItem).getParent());
+ }
+
+ private void renameCoverageItem(IMergeItem mergeItem, XResultData rd) throws OseeCoreException {
+ CoverageItem importItem = (CoverageItem) ((MergeItem) mergeItem).getImportItem();
+ CoverageItem packageItem = (CoverageItem) ((MergeItem) mergeItem).getPackageItem();
+ packageItem.setName(importItem.getName());
+ if (Strings.isValid(packageItem.getRationale())) {
+ packageItem.setRationale("");
+ }
+ packageItem.setCoverageMethod(importItem.getCoverageMethod());
+ updateFileContents(packageItem, importItem);
+ }
+
+ private void updateFileContents(CoverageItem packageItem, CoverageItem importItem) throws OseeCoreException {
+ // Since items names changed, update parent coverage unit's file contents
+ if (packageItem.getParent() != null && packageItem.getParent() instanceof CoverageUnit) {
+ updateFileContents((CoverageUnit) packageItem.getParent(), (CoverageUnit) importItem.getParent());
+ }
+ }
+
+ private void updateFileContents(CoverageUnit packageUnit, CoverageUnit importUnit) throws OseeCoreException {
+ if (!packageUnit.getFileContents().equals(importUnit.getFileContents())) {
+ packageUnit.setFileContents(importUnit.getFileContents());
+ }
+ if (packageUnit.getParent() != null && packageUnit.getParent() instanceof CoverageUnit) {
+ CoverageUnit parentPackageCoverage = (CoverageUnit) packageUnit.getParent();
+ CoverageUnit parentImportCoverage = (CoverageUnit) importUnit.getParent();
+ if (!parentPackageCoverage.getFileContents().equals(parentImportCoverage.getFileContents())) {
+ parentPackageCoverage.setFileContents(parentImportCoverage.getFileContents());
+ }
+ }
+ }
+
+ private void updateOrder(IMergeItem mergeItem, IMergeItem childMergeItem, XResultData rd) throws OseeCoreException {
+ ICoverage packageCoverage = ((MergeItem) childMergeItem).getPackageItem();
+ ICoverage importCoverage = ((MergeItem) childMergeItem).getImportItem();
+ if (packageCoverage instanceof CoverageUnit) {
+ ((CoverageUnit) packageCoverage).setOrderNumber(((CoverageUnit) importCoverage).getOrderNumber());
+ } else if (packageCoverage instanceof CoverageItem) {
+ (((CoverageItem) packageCoverage)).setOrderNumber(((CoverageItem) importCoverage).getOrderNumber());
+ updateFileContents((CoverageItem) packageCoverage, (CoverageItem) importCoverage);
+ } else {
+ rd.logError(String.format("[%s] doesn't support merge item [%s] (1)", mergeItem.getClass().getSimpleName(),
+ MergeType.Add_With_Moves.toString(), mergeItem));
+ }
+
+ }
+
+ /**
+ * Takes import items from coverageImport and applies them to coveragePackage
+ */
+ private void importCoverageUnitItem(XResultData rd, CoverageUnit importItem) {
+ System.out.println("importItemsRecurse => " + importItem + " path " + CoverageUtil.getFullPath(importItem));
+ try {
+ rd.log("Processing " + importItem.getName());
+ // if (!(importItem instanceof CoverageUnit)) {
+ // rd.logError(String.format("[%s] invalid for Import; Only import CoverageUnits",
+ // importItem.getClass().getSimpleName()));
+ // }
+ CoverageUnit importCoverageUnit = (CoverageUnit) importItem;
+
+ MatchItem matchItem = mergeManager.getPackageCoverageItem(importItem);
+ // Determine if item already exists first
+ if (MatchType.isMatch(matchItem.getMatchType())) {
+ // save assignees and notes and RATIONALE before child overwrites
+ // ((CoverageUnit) importItem).updateAssigneesAndNotes((CoverageUnit) packageItem);
+ System.out.println("FOUND MATCH type " + matchItem.getMatchType());
+ System.out.println("FOUND MATCH pack " + matchItem.getPackageItem() + " path " + CoverageUtil.getFullPath(matchItem.getPackageItem()));
+ System.out.println("FOUND MATCH impt " + matchItem.getImportItem() + " path " + CoverageUtil.getFullPath(matchItem.getImportItem()));
+ }
+ // This is new item
+ else if (MatchType.isNoMatch(matchItem.getMatchType())) {
+ System.err.println("NEW ITEM " + matchItem.getMatchType());
+ // Check if parent item exists
+ ICoverage parentImportItem = importItem.getParent();
+ // If null, this is top level item, just add to package
+ if (parentImportItem instanceof CoverageImport) {
+ coveragePackage.addCoverageUnit(((CoverageUnit) importItem).copy(true));
+ rd.log(String.format("Added [%s] as top level CoverageUnit", importCoverageUnit));
+ rd.log("");
+ } else {
+ // Else, want to add item to same parent
+ CoverageUnit parentCoverageUnit = (CoverageUnit) importItem.getParent();
+ MatchItem parentMatchItem = mergeManager.getPackageCoverageItem(parentCoverageUnit);
+ CoverageUnit parentPackageItem = (CoverageUnit) parentMatchItem.getPackageItem();
+ parentPackageItem.addCoverageUnit(importCoverageUnit.copy(true));
+ rd.log(String.format("Added [%s] to parent [%s]", importCoverageUnit, parentCoverageUnit));
+ rd.log("");
+
+ // Since item was added, update parent coverage unit's file contents if necessary
+ parentPackageItem.setFileContents(parentImportItem.getFileContents());
+
+ }
+ }
+ } catch (Exception ex) {
+ rd.logError("Exception: " + ex.getLocalizedMessage());
+ OseeLog.log(Activator.class, OseeLevel.SEVERE_POPUP, ex);
+ }
+ }
+
+ private boolean validateEditable(XResultData rd, ISaveable saveable) throws OseeCoreException {
+ Result result = saveable.isEditable();
+ if (result.isFalse()) {
+ rd.logError(result.getText());
+ return false;
+ }
+ return true;
+ }
+
+ private boolean validateMergeTypes(XResultData rd, Collection<IMergeItem> mergeItems) throws OseeCoreException {
+ boolean valid = true;
+ for (IMergeItem mergeItem : mergeItems) {
+ if (mergeItem.getMergeType().isError()) {
+ rd.log(String.format("Can't merge item [%s] with error", mergeItem));
+ valid = false;
+ }
+ }
+ return valid;
+ }
+
+ public boolean validateChildren(XResultData rd, Collection<IMergeItem> mergeItems) throws OseeStateException {
+ boolean valid = true;
+ for (IMergeItem mergeItem : mergeItems) {
+ if (mergeItem instanceof MergeItem && ((MergeItem) mergeItem).getImportItem() != null) {
+ boolean isValid = validateChildrenAreUniqueRecurse(rd, ((MergeItem) mergeItem).getImportItem());
+ if (!isValid) valid = false;
+ isValid = validateChildrenFieldsRecurse(rd, ((MergeItem) mergeItem).getImportItem());
+ if (!isValid) valid = false;
+
+ } else if (mergeItem instanceof MergeItemGroup) {
+ boolean isValid = validateChildren(rd, ((MergeItemGroup) mergeItem).getMergeItems());
+ if (!isValid) valid = false;
+ }
+ }
+ return valid;
+ }
+
+ private boolean validateChildrenAreUniqueRecurse(XResultData rd, ICoverage coverage) throws OseeStateException {
+ boolean valid = true;
+ for (ICoverage importItem1 : coverage.getChildren()) {
+ for (ICoverage importItem2 : coverage.getChildren()) {
+
+ MatchType matchType = MatchType.getMatchType(importItem1, importItem2);
+ if ((matchType == MatchType.Match__Name_And_Order_Num) && importItem1 != importItem2) {
+ rd.logError(String.format("CoverageUnit [%s] has two equal children [%s][%s]; Can't import.", coverage,
+ importItem1, importItem2));
+ valid = false;
+ }
+ }
+ }
+ for (ICoverage childItem : coverage.getChildren()) {
+ if (childItem instanceof CoverageUnit) {
+ boolean isValid = validateChildrenAreUniqueRecurse(rd, (CoverageUnit) childItem);
+ if (!isValid) valid = false;
+ }
+ }
+ return valid;
+ }
+
+ private boolean validateChildrenFieldsRecurse(XResultData rd, ICoverage coverage) throws OseeStateException {
+ boolean valid = true;
+ for (ICoverage childCoverage : coverage.getChildren()) {
+ if (!Strings.isValid(childCoverage.getName())) {
+ rd.logError(String.format("ICoverage [%s] has no valid name. path [%s]; Can't import.", childCoverage,
+ CoverageUtil.getFullPath(childCoverage)));
+ valid = false;
+ }
+ if (!Strings.isValid(childCoverage.getNamespace())) {
+ rd.logError(String.format("ICoverage [%s] has no valid namespace. path [%s]; Can't import.",
+ childCoverage, CoverageUtil.getFullPath(childCoverage)));
+ valid = false;
+ }
+ if (childCoverage instanceof CoverageItem && !Strings.isValid(childCoverage.getOrderNumber())) {
+ rd.logError(String.format("ICoverage [%s] has no valid orderNumber. path [%s]; Can't import.",
+ childCoverage, CoverageUtil.getFullPath(childCoverage)));
+ valid = false;
+ }
+ }
+ for (ICoverage childItem : coverage.getChildren()) {
+ if (childItem instanceof CoverageUnit) {
+ boolean isValid = validateChildrenFieldsRecurse(rd, (CoverageUnit) childItem);
+ if (!isValid) valid = false;
+ }
+ }
+ return valid;
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/merge/MergeItem.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/merge/MergeItem.java
new file mode 100644
index 00000000000..da02ee0d355
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/merge/MergeItem.java
@@ -0,0 +1,158 @@
+/*
+ * Created on Nov 3, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.merge;
+
+import java.util.Collection;
+import java.util.Collections;
+import org.eclipse.osee.coverage.model.ICoverage;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.swt.KeyedImage;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class MergeItem extends MergeItemBase {
+
+ private final ICoverage packageItem;
+ private final ICoverage importItem;
+
+ public MergeItem(MergeType mergeType, ICoverage packageItem, ICoverage importItem, boolean isCheckable) {
+ super(mergeType, isCheckable);
+ this.packageItem = packageItem;
+ this.importItem = importItem;
+ }
+
+ public ICoverage getPackageItem() {
+ return packageItem;
+ }
+
+ public ICoverage getImportItem() {
+ return importItem;
+ }
+
+ @Override
+ public String getAssignees() throws OseeCoreException {
+ if (importItem != null) return importItem.getAssignees();
+ return "";
+ }
+
+ @Override
+ public Collection<? extends ICoverage> getChildren() {
+ if (importItem != null) return importItem.getChildren();
+ return Collections.emptyList();
+ }
+
+ @Override
+ public Collection<? extends ICoverage> getChildren(boolean recurse) {
+ if (importItem != null) return importItem.getChildren(recurse);
+ return Collections.emptyList();
+ }
+
+ @Override
+ public int getCoveragePercent() {
+ if (importItem != null) return importItem.getCoveragePercent();
+ return 0;
+ }
+
+ @Override
+ public String getCoveragePercentStr() {
+ if (importItem != null) return importItem.getCoveragePercentStr();
+ return "0";
+ }
+
+ @Override
+ public String getGuid() {
+ if (importItem != null) return importItem.getGuid();
+ return "";
+ }
+
+ @Override
+ public String getLocation() {
+ if (importItem != null) return importItem.getLocation();
+ return packageItem.getLocation();
+ }
+
+ @Override
+ public String getName() {
+ if (importItem != null)
+ return importItem.getName();
+ else
+ return String.format("Package [%s]", packageItem.getName());
+ }
+
+ @Override
+ public String getNamespace() {
+ if (importItem != null) return importItem.getNamespace();
+ return packageItem.getNamespace();
+ }
+
+ @Override
+ public String getNotes() {
+ if (importItem != null) return importItem.getNotes();
+ return String.format("Package [%s]", packageItem.getNotes());
+ }
+
+ @Override
+ public KeyedImage getOseeImage() {
+ if (importItem != null) return importItem.getOseeImage();
+ return packageItem.getOseeImage();
+ }
+
+ @Override
+ public ICoverage getParent() {
+ if (importItem != null) return importItem.getParent();
+ return packageItem.getParent();
+ }
+
+ @Override
+ public String getFileContents() throws OseeCoreException {
+ if (importItem != null) return importItem.getFileContents();
+ return packageItem.getFileContents();
+ }
+
+ @Override
+ public boolean isAssignable() {
+ if (importItem != null) return importItem.isAssignable();
+ return packageItem.isAssignable();
+ }
+
+ @Override
+ public boolean isCovered() {
+ if (importItem != null) return importItem.isCovered();
+ return packageItem.isCovered();
+ }
+
+ @Override
+ public Result isEditable() {
+ if (importItem != null) return importItem.isEditable();
+ return packageItem.isEditable();
+ }
+
+ @Override
+ public boolean isFolder() {
+ if (importItem != null) return importItem.isFolder();
+ return packageItem.isFolder();
+ }
+
+ @Override
+ public String toString() {
+ if (importItem != null) return getMergeType().toString() + " - " + importItem.toString();
+ return getMergeType().toString() + " - " + packageItem.toString();
+ }
+
+ @Override
+ public String getOrderNumber() {
+ if (Strings.isValid(importItem.getOrderNumber())) {
+ return importItem.getOrderNumber();
+ } else if (Strings.isValid(packageItem.getOrderNumber())) {
+ return packageItem.getOrderNumber();
+ }
+ return "";
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/merge/MergeItemBase.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/merge/MergeItemBase.java
new file mode 100644
index 00000000000..182e52bc6ee
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/merge/MergeItemBase.java
@@ -0,0 +1,52 @@
+/*
+ * Created on Nov 3, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.merge;
+
+import org.eclipse.osee.framework.core.exception.OseeArgumentException;
+
+/**
+ * @author Donald G. Dunne
+ */
+public abstract class MergeItemBase implements IMergeItem {
+
+ private final MergeType mergeType;
+ private boolean checked = false;
+ private boolean isCheckable = true;
+ private boolean importAllowed = true;
+
+ public MergeItemBase(MergeType mergeType, boolean isCheckable) {
+ this.mergeType = mergeType;
+ this.isCheckable = isCheckable;
+ }
+
+ public MergeType getMergeType() {
+ return mergeType;
+ }
+
+ public boolean isChecked() {
+ return checked;
+ }
+
+ public void setChecked(boolean checked) throws OseeArgumentException {
+ if (!isCheckable) {
+ throw new OseeArgumentException(String.format("Merge Item is not checkable [%s]", this));
+ }
+ this.checked = checked;
+ }
+
+ public boolean isImportAllowed() {
+ return importAllowed;
+ }
+
+ public void setImportAllowed(boolean importAllowed) {
+ this.importAllowed = importAllowed;
+ }
+
+ public boolean isCheckable() {
+ return isCheckable;
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/merge/MergeItemGroup.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/merge/MergeItemGroup.java
new file mode 100644
index 00000000000..3a40cd4bf7e
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/merge/MergeItemGroup.java
@@ -0,0 +1,153 @@
+/*
+ * Created on Nov 3, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.merge;
+
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+import org.eclipse.osee.coverage.model.ICoverage;
+import org.eclipse.osee.coverage.util.CoverageUtil;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.swt.KeyedImage;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class MergeItemGroup extends MergeItemBase {
+
+ private final Collection<IMergeItem> mergeItems;
+ private final ICoverage parentCoverage;
+
+ public MergeItemGroup(MergeType mergeType, ICoverage parentCoverage, Collection<IMergeItem> mergeItems, boolean isCheckable) {
+ super(mergeType, isCheckable);
+ this.parentCoverage = parentCoverage;
+ this.mergeItems = mergeItems;
+ }
+
+ @Override
+ public String toString() {
+ return getMergeType().toString() + " - " + mergeItems.toString();
+ }
+
+ @Override
+ public String getAssignees() throws OseeCoreException {
+ return "";
+ }
+
+ @Override
+ public Collection<? extends ICoverage> getChildren() {
+ return mergeItems;
+ }
+
+ @Override
+ public Collection<? extends ICoverage> getChildren(boolean recurse) {
+ Set<ICoverage> children = new HashSet<ICoverage>();
+ for (IMergeItem mergeItem : mergeItems) {
+ if (mergeItem instanceof MergeItem && ((MergeItem) mergeItem).getImportItem() != null) {
+ children.addAll(((MergeItem) mergeItem).getImportItem().getChildren(recurse));
+ }
+ }
+ return children;
+ }
+
+ @Override
+ public int getCoveragePercent() {
+ Collection<? extends ICoverage> children = getChildren(true);
+ Set<ICoverage> covered = new HashSet<ICoverage>();
+ for (ICoverage coverage : children) {
+ if (coverage.isCovered()) covered.add(coverage);
+ }
+ return CoverageUtil.getPercent(covered.size(), children.size(), true).getFirst();
+ }
+
+ @Override
+ public String getCoveragePercentStr() {
+ Collection<? extends ICoverage> children = getChildren(true);
+ Set<ICoverage> covered = new HashSet<ICoverage>();
+ for (ICoverage coverage : children) {
+ if (coverage.isCovered()) covered.add(coverage);
+ }
+ return CoverageUtil.getPercent(covered.size(), children.size(), true).getSecond();
+ }
+
+ @Override
+ public String getGuid() {
+ return "";
+ }
+
+ @Override
+ public String getLocation() {
+ return "";
+ }
+
+ @Override
+ public String getName() {
+ return getMergeType().toString() + " - " + CoverageUtil.getFullPath(parentCoverage) + "[" + parentCoverage.getName() + "]";
+ }
+
+ @Override
+ public String getNamespace() {
+ return parentCoverage.getNamespace();
+ }
+
+ @Override
+ public String getNotes() {
+ return "";
+ }
+
+ @Override
+ public KeyedImage getOseeImage() {
+ return mergeItems.iterator().next().getOseeImage();
+ }
+
+ @Override
+ public ICoverage getParent() {
+ return parentCoverage;
+ }
+
+ @Override
+ public String getFileContents() throws OseeCoreException {
+ String str = parentCoverage.getFileContents();
+ if (Strings.isValid(str)) {
+ return str;
+ }
+ if (parentCoverage.getParent() != null) {
+ return parentCoverage.getParent().getFileContents();
+ }
+ return "";
+ }
+
+ @Override
+ public boolean isAssignable() {
+ return false;
+ }
+
+ @Override
+ public boolean isCovered() {
+ return false;
+ }
+
+ @Override
+ public Result isEditable() {
+ return parentCoverage.isEditable();
+ }
+
+ @Override
+ public boolean isFolder() {
+ return false;
+ }
+
+ public Collection<IMergeItem> getMergeItems() {
+ return mergeItems;
+ }
+
+ @Override
+ public String getOrderNumber() {
+ return "";
+ }
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/merge/MergeManager.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/merge/MergeManager.java
new file mode 100644
index 00000000000..9f796ba3005
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/merge/MergeManager.java
@@ -0,0 +1,503 @@
+/*
+ * Created on Nov 3, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.merge;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.Map.Entry;
+import java.util.concurrent.CopyOnWriteArrayList;
+import org.eclipse.osee.coverage.model.CoverageImport;
+import org.eclipse.osee.coverage.model.CoverageItem;
+import org.eclipse.osee.coverage.model.CoveragePackage;
+import org.eclipse.osee.coverage.model.CoveragePackageBase;
+import org.eclipse.osee.coverage.model.ICoverage;
+import org.eclipse.osee.coverage.util.CoverageUtil;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.core.exception.OseeStateException;
+import org.eclipse.osee.framework.jdk.core.util.AHTML;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+import org.eclipse.osee.framework.ui.skynet.results.XResultData;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class MergeManager {
+ private final CoveragePackage coveragePackage;
+ private final CoverageImport coverageImport;
+ private Set<ICoverage> processedImportCoverages = new HashSet<ICoverage>(1000);
+
+ public MergeManager(CoveragePackage coveragePackage, CoverageImport coverageImport) {
+ this.coveragePackage = coveragePackage;
+ this.coverageImport = coverageImport;
+ }
+
+ public List<IMergeItem> getMergeItems() throws OseeCoreException {
+ List<IMergeItem> mergeItems = new ArrayList<IMergeItem>();
+ processedImportCoverages.clear();
+ for (ICoverage importCoverage : coverageImport.getChildren()) {
+ processImportCoverage(importCoverage, mergeItems, null);
+ }
+ if (mergeItems.size() == 0) {
+ mergeItems.add(new MessageMergeItem("Nothing to Import"));
+ }
+ return mergeItems;
+ }
+
+ public XResultData getMergeDetails(ICoverage importCoverageItem, XResultData resultData) throws OseeCoreException {
+ List<IMergeItem> mergeItems = new ArrayList<IMergeItem>();
+ processImportCoverage(importCoverageItem, mergeItems, resultData);
+ return resultData;
+ }
+
+ private void processImportCoverage(ICoverage importCoverage, List<IMergeItem> mergeItems, XResultData resultData) throws OseeCoreException {
+ boolean debug = false;
+ if (debug) {
+ System.err.println("Merging check " + importCoverage);
+ }
+ if (resultData != null) {
+ resultData.log("\n\nMerging check " + importCoverage);
+ }
+
+ MatchItem matchItem = getPackageCoverageItem(importCoverage);
+ // No matching coverage package item, Add this and all children
+ if (MatchType.isNoMatch(matchItem.getMatchType())) {
+ if (!processedImportCoverages.contains(importCoverage)) {
+ mergeItems.add(new MergeItem(MergeType.Add, null, importCoverage, true));
+ }
+ }
+ // Import item matched Package item, check children
+ else {
+ ICoverage packageICoverage = matchItem.getPackageItem();
+ ICoverage importICoverage = matchItem.getImportItem();
+
+ Collection<? extends ICoverage> packageItemChildren = packageICoverage.getChildren();
+ Collection<? extends ICoverage> importItemChildren = importICoverage.getChildren();
+ Map<ICoverage, MatchItem> importItemToMatchItem = new HashMap<ICoverage, MatchItem>(10);
+ boolean moreImportChildrenThanPackageChildren = importItemChildren.size() > packageItemChildren.size();
+ boolean morePackageChildrenThanImportChildren = packageItemChildren.size() > importItemChildren.size();
+ boolean sameNumberChildren = importItemChildren.size() == packageItemChildren.size();
+ if (resultData != null) {
+ resultData.log(String.format("Num Import Items: %d - Num Package Items: %d", importItemChildren.size(),
+ packageItemChildren.size()));
+ resultData.log(AHTML.getLabelValueStr("moreImportChildrenThanPackageChildren",
+ String.valueOf(moreImportChildrenThanPackageChildren)));
+ resultData.log(AHTML.getLabelValueStr("morePackageChildrenThanImportChildren",
+ String.valueOf(morePackageChildrenThanImportChildren)));
+ resultData.log(AHTML.getLabelValueStr("sameNumberChildren", String.valueOf(sameNumberChildren)));
+
+ resultData.log(AHTML.bold("Package Children:"));
+ for (ICoverage coverage : packageItemChildren) {
+ resultData.addRaw(AHTML.blockQuote(String.valueOf(coverage).replaceAll(" ", "&nbsp")));
+ }
+ resultData.log(AHTML.bold("Import Children:"));
+ for (ICoverage coverage : importItemChildren) {
+ resultData.addRaw(AHTML.blockQuote(String.valueOf(coverage).replaceAll(" ", "&nbsp")));
+ }
+ }
+
+ if (debug) {
+ if (importCoverage.getGuid().equals("AAte3i2bH3L1MvsFMqAA")) {
+ System.out.println("here");
+ }
+ if (importCoverage.getName().equals("FILTER_FAILURES")) {
+ System.out.println("here");
+ }
+ }
+
+ // Determine match for all import item children
+ for (ICoverage childCoverage : importItemChildren) {
+ MatchItem childMatchItem = getPackageCoverageItemRecurse(packageICoverage, childCoverage);
+ importItemToMatchItem.put(childCoverage, childMatchItem);
+ }
+
+ if (resultData != null) {
+ resultData.log(AHTML.bold("Match Items:"));
+ for (Entry<ICoverage, MatchItem> entry : importItemToMatchItem.entrySet()) {
+ resultData.addRaw(AHTML.blockQuote(String.valueOf(entry.getValue()).replaceAll(" ", "&nbsp")));
+ }
+ }
+ if (debug) {
+ for (Entry<ICoverage, MatchItem> entry : importItemToMatchItem.entrySet()) {
+ System.out.println(String.format("MatchItem[%s]", entry.getValue()));
+ }
+ }
+
+ // Case: All children all CoverageItems
+ // Action: process them separately
+ if (CoverageUtil.isAllCoverageItems(importItemChildren)) {
+ handleChildrenCoverageItems(mergeItems, packageItemChildren, importCoverage, importItemChildren,
+ importItemToMatchItem, resultData);
+ }
+
+ // Case: All match and package # children == import # children
+ // Action: continue and check children's children
+ else if (isAllMatchCase(sameNumberChildren, importItemToMatchItem)) {
+ handleAllMatchCase(mergeItems, importItemChildren, resultData);
+ }
+
+ // Case: All same except package item has more; possible deletion, attempt to handle
+ // Action: Attempt to determine deleted package item
+ else if (isPackageItemDeleted(morePackageChildrenThanImportChildren)) {
+ handlePackageItemDeleted(mergeItems, importCoverage, packageItemChildren, importItemChildren, resultData);
+ }
+
+ // Case: Import children all full match except Import has more that don't match, items added and moved
+ // Action: Process as Add / Move
+ else if (isImportItemsAddedOrMoved(moreImportChildrenThanPackageChildren, importItemToMatchItem)) {
+
+ // Determine number of No_Match items that are name-only match
+ Map<ICoverage, ICoverage> nameOnlyImportToPackageCoverage = new HashMap<ICoverage, ICoverage>();
+ for (Entry<ICoverage, MatchItem> pair : importItemToMatchItem.entrySet()) {
+ ICoverage importChild = pair.getKey();
+ if (pair.getValue().getMatchType() == MatchType.No_Match__Name_Or_Order_Num) {
+ // Try to find child that matches name
+ for (ICoverage packageChild : packageItemChildren) {
+ if (packageChild.getName().equals(importChild.getName())) {
+ nameOnlyImportToPackageCoverage.put(importChild, packageChild);
+ }
+ }
+ }
+ }
+
+ // Case: All match, some added, and none moved (name-only)
+ // Action: just add new ones and process all children
+ if (isOnlyAddNewOnes(nameOnlyImportToPackageCoverage, packageItemChildren, importItemToMatchItem)) {
+ handleOnlyAddNewOnes(mergeItems, importCoverage, importItemChildren, importItemToMatchItem, resultData);
+ }
+
+ // Case: All match, some added, and some moved
+ // Action: Process children of Matches; Add ones that were not Name-Only; Move ones that were
+ else {
+ handleSomeAddedSomeMoved(mergeItems, nameOnlyImportToPackageCoverage, packageItemChildren,
+ importCoverage, importItemChildren, importItemToMatchItem, resultData);
+ }
+
+ }
+ // Case: Unhandled
+ // Action: Mark as UnMergeable
+ else {
+ mergeItems.add(new MergeItem(MergeType.Error__UnMergable, null, importCoverage, false));
+ }
+ }
+ return;
+ }
+
+ private List<ICoverage> getUnMatchedImportCoverageItems(Map<ICoverage, MatchItem> importItemToMatchItem) throws OseeCoreException {
+ List<ICoverage> unMatchedCoverageItems = new ArrayList<ICoverage>();
+ for (Entry<ICoverage, MatchItem> coverageToMatchItem : importItemToMatchItem.entrySet()) {
+ MatchItem childMatchItem = coverageToMatchItem.getValue();
+ ICoverage childICoverage = coverageToMatchItem.getKey();
+ if (!childMatchItem.isMatch()) {
+ unMatchedCoverageItems.add(childICoverage);
+ }
+ }
+ return unMatchedCoverageItems;
+ }
+
+ private List<ICoverage> getMatchedPackageCoverageItems(Map<ICoverage, MatchItem> importItemToMatchItem) throws OseeCoreException {
+ List<ICoverage> matchedPackageCoverageItems = new ArrayList<ICoverage>();
+ for (Entry<ICoverage, MatchItem> coverageToMatchItem : importItemToMatchItem.entrySet()) {
+ MatchItem childMatchItem = coverageToMatchItem.getValue();
+ if (childMatchItem.isMatch()) {
+ matchedPackageCoverageItems.add(childMatchItem.getPackageItem());
+ }
+ }
+ return matchedPackageCoverageItems;
+ }
+
+ private void handleChildrenCoverageItems(List<IMergeItem> mergeItems, Collection<? extends ICoverage> packageItemChildren, ICoverage importCoverage, Collection<? extends ICoverage> importItemChildren, Map<ICoverage, MatchItem> importItemToMatchItem, XResultData resultData) throws OseeCoreException {
+ List<IMergeItem> groupMergeItems = new ArrayList<IMergeItem>();
+ boolean unMergeableExists = false;
+ // Get all Import CoverageItems that do not match package CoverageItems
+ List<ICoverage> unMatchedImportCoverageItems = getUnMatchedImportCoverageItems(importItemToMatchItem);
+ // List package coverageItems that have been processed; list should be empty at end
+ List<ICoverage> packageItemsProcessed = getMatchedPackageCoverageItems(importItemToMatchItem);
+
+ for (ICoverage childICoverage : new CopyOnWriteArrayList<ICoverage>(unMatchedImportCoverageItems)) {
+ MatchItem childMatchItem = importItemToMatchItem.get(childICoverage);
+ if (childMatchItem.isMatch()) {
+ throw new OseeStateException("unMatchedCoverageItems shouldn't contain matched items");
+ }
+
+ // Check for rename
+ ICoverage packageMatch = isCoverageItemRenamed(packageItemChildren, childICoverage);
+ if (packageMatch != null) {
+ groupMergeItems.add(new MergeItem(MergeType.CI_Renamed, packageMatch, childICoverage, false));
+ packageItemsProcessed.add(packageMatch);
+ unMatchedImportCoverageItems.remove(childICoverage);
+ }
+
+ // Check for an add
+ else if (isCoverageItemAdded(packageItemChildren, childICoverage)) {
+ groupMergeItems.add(new MergeItem(MergeType.CI_Add, null, childICoverage, false));
+ unMatchedImportCoverageItems.remove(childICoverage);
+ }
+
+ }
+
+ // Check for moves in any items left unhandled by above renames and adds
+ for (ICoverage childICoverage : new CopyOnWriteArrayList<ICoverage>(unMatchedImportCoverageItems)) {
+ for (ICoverage packageItemChild : packageItemChildren) {
+ // name equals package item not yet processed
+ if (!packageItemsProcessed.contains(packageItemChild) && packageItemChild.getName().equals(
+ childICoverage.getName())) {
+ groupMergeItems.add(new MergeItem(MergeType.CI_Moved, packageItemChild, childICoverage, false));
+ packageItemsProcessed.add(packageItemChild);
+ unMatchedImportCoverageItems.add(childICoverage);
+ }
+ }
+ }
+
+ // Check for deletions
+ for (ICoverage packageItemChild : packageItemChildren) {
+ if (!packageItemsProcessed.contains(packageItemChild)) {
+ groupMergeItems.add(new MergeItem(MergeType.CI_Delete, packageItemChild, null, false));
+ packageItemsProcessed.add(packageItemChild);
+ }
+ }
+
+ // Error on any remaining import CoverageItems
+ for (ICoverage coverage : unMatchedImportCoverageItems) {
+ groupMergeItems.add(new MergeItem(MergeType.Error__UnMergable, null, coverage, false));
+ }
+ // Error on any un-handled package CoverageItems
+ for (ICoverage packageItemChild : packageItemChildren) {
+ if (!packageItemsProcessed.contains(packageItemChild)) {
+ groupMergeItems.add(new MergeItem(MergeType.Error__UnMergable, packageItemChild, null, false));
+ }
+ }
+
+ if (groupMergeItems.size() > 0) {
+ mergeItems.add(new MergeItemGroup(MergeType.CI_Changes, importCoverage, groupMergeItems, !unMergeableExists));
+ }
+
+ }
+
+ private boolean isCoverageItemAdded(Collection<? extends ICoverage> packageItemChildren, ICoverage importItemChild) {
+ // Only valid for coverage items
+ if (!(importItemChild instanceof CoverageItem)) return false;
+ // Make sure there is no package item with same order number
+ for (ICoverage packageItemChild : packageItemChildren) {
+ if (packageItemChild.getOrderNumber().equals(importItemChild.getOrderNumber())) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ private ICoverage isCoverageItemRenamed(Collection<? extends ICoverage> packageItemChildren, ICoverage importItemChild) {
+ // Only valid for coverage items
+ if (!(importItemChild instanceof CoverageItem)) return null;
+ // Make sure there is a package item with same order number
+ ICoverage packageItemChild =
+ CoverageUtil.getCoverageItemMatchingOrder(packageItemChildren, (CoverageItem) importItemChild);
+ return packageItemChild;
+ }
+
+ private void handleSomeAddedSomeMoved(List<IMergeItem> mergeItems, Map<ICoverage, ICoverage> nameOnlyImportToPackageCoverage, Collection<? extends ICoverage> packageItemChildren, ICoverage importCoverage, Collection<? extends ICoverage> importItemChildren, Map<ICoverage, MatchItem> importItemToMatchItem, XResultData resultData) throws OseeCoreException {
+ List<IMergeItem> groupMergeItems = new ArrayList<IMergeItem>();
+ List<ICoverage> processChildrenItems = new ArrayList<ICoverage>();
+ for (ICoverage childCoverage : importItemChildren) {
+ MatchItem childMatchItem = importItemToMatchItem.get(childCoverage);
+ // This child matches fully, just process children
+ if (childMatchItem.getMatchType() == MatchType.Match__Name_And_Order_Num) {
+ processChildrenItems.add(childCoverage);
+ }
+ // This child is moved, mark as modified; process children cause they existed before
+ else if (nameOnlyImportToPackageCoverage.keySet().contains(childCoverage)) {
+ groupMergeItems.add(new MergeItem(MergeType.Moved_Due_To_Add,
+ nameOnlyImportToPackageCoverage.get(childMatchItem.getImportItem()), childMatchItem.getImportItem(),
+ false));
+ processedImportCoverages.add(childMatchItem.getImportItem());
+ processChildrenItems.add(childCoverage);
+ }
+ // This child is new, mark as added; no need to process children cause their new
+ else {
+ groupMergeItems.add(new MergeItem(MergeType.Add, null, childMatchItem.getImportItem(), false));
+ processedImportCoverages.add(childMatchItem.getImportItem());
+ }
+ }
+ mergeItems.add(new MergeItemGroup(MergeType.Add_With_Moves, importCoverage, groupMergeItems, true));
+ // Process children that should be processed
+ for (ICoverage childCoverage : processChildrenItems) {
+ processImportCoverage(childCoverage, mergeItems, resultData);
+ }
+
+ }
+
+ private boolean isOnlyAddNewOnes(Map<ICoverage, ICoverage> nameOnlyImportToPackageCoverage, Collection<? extends ICoverage> packageItemChildren, Map<ICoverage, MatchItem> importItemToMatchItem) {
+ // If no items match name-only then potential add
+ if (nameOnlyImportToPackageCoverage.size() != 0) return false;
+ // If any of the No_Match import order number match package number, than not an addOnly
+ for (Entry<ICoverage, MatchItem> pair : importItemToMatchItem.entrySet()) {
+ ICoverage importChild = pair.getKey();
+ if (!Strings.isValid(importChild.getOrderNumber())) continue;
+ if (pair.getValue().getMatchType() == MatchType.No_Match__Name_Or_Order_Num) {
+ for (ICoverage packageItem : packageItemChildren) {
+ if (packageItem.getOrderNumber().equals(importChild.getOrderNumber())) {
+ return false;
+ }
+ }
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Only add new ones to end and process all children
+ */
+ private void handleOnlyAddNewOnes(List<IMergeItem> mergeItems, ICoverage importCoverage, Collection<? extends ICoverage> importItemChildren, Map<ICoverage, MatchItem> importItemToMatchItem, XResultData resultData) throws OseeCoreException {
+ List<IMergeItem> groupMergeItems = new ArrayList<IMergeItem>();
+ for (ICoverage childCoverage : importItemChildren) {
+ MatchItem childMatchItem = importItemToMatchItem.get(childCoverage);
+ // This child matches, just process children
+ if (childMatchItem.getMatchType() == MatchType.Match__Name_And_Order_Num) {
+ processImportCoverage(childCoverage, mergeItems, resultData);
+ }
+ // This child is new, mark as added; no need to process children cause their new
+ if (childMatchItem.getMatchType() == MatchType.No_Match__Name_Or_Order_Num) {
+ if (childMatchItem.getImportItem() instanceof CoverageItem) {
+ groupMergeItems.add(new MergeItem(MergeType.Add, null, childMatchItem.getImportItem(), false));
+ } else {
+ mergeItems.add(new MergeItem(MergeType.Add, null, childMatchItem.getImportItem(), true));
+ }
+ processedImportCoverages.add(childMatchItem.getImportItem());
+ }
+ }
+ if (groupMergeItems.size() > 0) {
+ mergeItems.add(new MergeItemGroup(MergeType.Add, importCoverage, groupMergeItems, true));
+ }
+
+ }
+
+ /**
+ * If import has more all existing match and all new ones don't have same method number
+ */
+ private boolean isImportItemsAddedOrMoved(boolean moreImportChildrenThanPackageChildren, Map<ICoverage, MatchItem> importItemToMatchItem) {
+ boolean result =
+ moreImportChildrenThanPackageChildren && MatchItem.isAllMatchType(Arrays.asList(
+ MatchType.Match__Name_And_Order_Num, MatchType.No_Match__Name_Or_Order_Num, MatchType.Match__Folder),
+ importItemToMatchItem.values());
+ return result;
+ }
+
+ /**
+ * All same except package item has more; possible deletion, attempt to handle
+ */
+ private boolean isPackageItemDeleted(boolean morePackageChildrenThanImportChildren) {
+ return morePackageChildrenThanImportChildren;
+ }
+
+ /**
+ * Attempt to determine deleted package item
+ */
+ private void handlePackageItemDeleted(List<IMergeItem> mergeItems, ICoverage importCoverage, Collection<? extends ICoverage> packageItemChildren, Collection<? extends ICoverage> importItemChildren, XResultData resultData) {
+ // If all import match package items, but there are more package items, delete package items
+ List<IMergeItem> groupMergeItems = new ArrayList<IMergeItem>();
+ boolean unmergeable = false;
+ // Discover which packageItems don't have matches
+ for (ICoverage packageItem : packageItemChildren) {
+ Collection<ICoverage> matches = getNameMatchItems(packageItem, importItemChildren);
+ // If matches > 1 can't perform merge
+ if (matches.size() > 1) {
+ // Case Else - unhandled cases
+ unmergeable = true;
+ mergeItems.add(new MergeItem(MergeType.Error__UnMergable, null, importCoverage, false));
+ break;
+ }
+ // If matches == 0, this is a deletion
+ else if (matches.size() == 0) {
+ groupMergeItems.add(new MergeItem(MergeType.Delete, packageItem, null, false));
+ }
+ // Else matches == 1, check the order; if different order, this is a Move_Due_To_Delete
+ else {
+ if (!packageItem.getOrderNumber().equals(matches.iterator().next().getOrderNumber())) {
+ groupMergeItems.add(new MergeItem(MergeType.Moved_Due_To_Delete, packageItem, matches.iterator().next(),
+ false));
+ }
+ }
+ }
+ if (!unmergeable) {
+ mergeItems.add(new MergeItemGroup(MergeType.Delete_And_Reorder, importCoverage, groupMergeItems, true));
+ }
+ }
+
+ /**
+ * All match and package # children == import # children<br>
+ * continue and check children's children
+ */
+ private boolean isAllMatchCase(boolean sameNumberChildren, Map<ICoverage, MatchItem> importItemToMatchItem) {
+ return (sameNumberChildren && MatchItem.isAllMatchType(MatchType.FullMatches, importItemToMatchItem.values()));
+ }
+
+ /**
+ * Continue and check children's children
+ */
+ private void handleAllMatchCase(List<IMergeItem> mergeItems, Collection<? extends ICoverage> importItemChildren, XResultData resultData) throws OseeCoreException {
+ // process all children
+ for (ICoverage childCoverage : importItemChildren) {
+ processImportCoverage(childCoverage, mergeItems, resultData);
+ }
+ }
+
+ private List<ICoverage> getNameMatchItems(ICoverage coverage, Collection<? extends ICoverage> toMatch) {
+ List<ICoverage> matches = new ArrayList<ICoverage>();
+ for (ICoverage item : toMatch) {
+ if (item.getName().equals(coverage.getName())) {
+ matches.add(item);
+ }
+ }
+ return matches;
+ }
+
+ public MatchItem getPackageCoverageItem(ICoverage importItem) throws OseeStateException {
+ return getPackageCoverageItem(coveragePackage, importItem);
+ }
+
+ /**
+ * Recurse through coverage package to find importItem equivalent
+ */
+ public static MatchItem getPackageCoverageItem(CoveragePackageBase coveragePackageBase, ICoverage importItem) throws OseeStateException {
+ for (ICoverage childCoverage : coveragePackageBase.getChildren(false)) {
+ MatchItem matchItem = getPackageCoverageItemRecurse(childCoverage, importItem);
+ if (matchItem.isMatch()) {
+ return matchItem;
+ }
+ }
+ return new MatchItem(MatchType.No_Match__Name_Or_Order_Num, null, importItem);
+ }
+
+ /**
+ * Recurse through package item and children to find importItem equivalent
+ */
+ public static MatchItem getPackageCoverageItemRecurse(ICoverage packageItem, ICoverage importItem) throws OseeStateException {
+ MatchType matchType = MatchType.getMatchType(packageItem, importItem);
+ if (MatchType.isMatch(matchType)) {
+ return new MatchItem(matchType, packageItem, importItem);
+ }
+ // Only check children if importItem should be child of packageItem by namespace
+ if (importItem.getNamespace().startsWith(packageItem.getNamespace())) {
+ for (ICoverage childPackageItem : packageItem.getChildren(false)) {
+ MatchItem childMatchItem = getPackageCoverageItemRecurse(childPackageItem, importItem);
+ if (childMatchItem != null && (MatchType.isMatch(childMatchItem.getMatchType()))) {
+ return childMatchItem;
+ }
+ }
+ }
+ return new MatchItem(MatchType.No_Match__Name_Or_Order_Num, null, importItem);
+ }
+
+ public CoveragePackage getCoveragePackage() {
+ return coveragePackage;
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/merge/MergeType.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/merge/MergeType.java
new file mode 100644
index 00000000000..5079e2fe689
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/merge/MergeType.java
@@ -0,0 +1,43 @@
+/*
+ * Created on Nov 3, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.merge;
+
+/**
+ * @author Donald G. Dunne
+ */
+public enum MergeType {
+
+ // This will result in adding this and all children with all attributes
+ Add,
+ // This will result in adding this and all children with all attributes
+ Add_With_Moves,
+ // This will result in deleting this child and re-ordering
+ Delete,
+ // This will result in adding this and all children with all attributes
+ CI_Add,
+ // This will result in deleting this child and re-ordering
+ CI_Delete,
+ // This will result in changing name of package to match import, clearing rationale and setting coverage method
+ CI_Renamed,
+ // This will result in changing name of package to match import, clearing rationale and setting coverage method
+ CI_Moved,
+ // Group option containing Add, Rename of coverage items
+ CI_Changes,
+ // Group option that contains deletions and re-order items
+ Delete_And_Reorder,
+ // Just update package item's order with import item's order
+ Moved_Due_To_Delete,
+ // This will result in updating the package item method number of the imported method number
+ Moved_Due_To_Add,
+ // Used to display "Nothing to Import" message
+ Error__Message,
+ // Shows that a item is un-mergeable and needs to be handled manually or have the merge case added
+ Error__UnMergable;
+
+ public boolean isError() {
+ return toString().startsWith("Error__");
+ }
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/merge/MessageMergeItem.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/merge/MessageMergeItem.java
new file mode 100644
index 00000000000..8bb0b34116f
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/merge/MessageMergeItem.java
@@ -0,0 +1,39 @@
+/*
+ * Created on Nov 5, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.merge;
+
+import java.util.Collection;
+import java.util.Collections;
+import org.eclipse.osee.coverage.model.ICoverage;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class MessageMergeItem extends MergeItem {
+
+ private final String message;
+
+ public MessageMergeItem(String message) {
+ super(MergeType.Error__Message, null, null, false);
+ this.message = message;
+ }
+
+ @Override
+ public String getName() {
+ return message;
+ }
+
+ @Override
+ public Collection<? extends ICoverage> getChildren() {
+ return Collections.emptyList();
+ }
+
+ @Override
+ public Collection<? extends ICoverage> getChildren(boolean recurse) {
+ return Collections.emptyList();
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/CoverageImport.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/CoverageImport.java
new file mode 100644
index 00000000000..2ee2d9b4fc4
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/CoverageImport.java
@@ -0,0 +1,122 @@
+/*******************************************************************************
+ * 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.coverage.model;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import org.eclipse.osee.framework.core.exception.OseeArgumentException;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.AHTML;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+import org.eclipse.osee.framework.skynet.core.artifact.KeyValueArtifact;
+import org.eclipse.osee.framework.ui.skynet.results.XResultData;
+import org.eclipse.osee.framework.ui.skynet.widgets.XDate;
+
+/**
+ * Single import of coverage information that includes
+ *
+ * @author Donald G. Dunne
+ */
+public class CoverageImport extends CoveragePackageBase implements ICoverage {
+
+ private Date runDate;
+ private String location = "";
+ private String blamName = "";
+ private List<File> importRecordFiles = new ArrayList<File>();
+ private String importDirectory = null;
+
+ public CoverageImport(String name) {
+ this(name, new Date());
+ }
+
+ public CoverageImport(String name, Date runDate) {
+ super(name, CoverageOptionManagerDefault.instance());
+ this.runDate = runDate;
+ }
+
+ public Date getRunDate() {
+ return runDate;
+ }
+
+ public String getName() {
+ return super.getName() + " - " + XDate.getDateStr(runDate, XDate.MMDDYYHHMM) + " - " + getCoverageItems().size() + " Coverage Items";
+ }
+
+ @Override
+ public void getOverviewHtmlHeader(XResultData xResultData) {
+ xResultData.log(AHTML.bold("Coverage Import for " + XDate.getDateStr(getRunDate(), XDate.HHMMSSSS)) + AHTML.newline());
+ xResultData.log(AHTML.getLabelValueStr("Location", location));
+ if (Strings.isValid(getBlamName())) {
+ xResultData.log(AHTML.getLabelValueStr("Blam Name", getBlamName()));
+ }
+ xResultData.log(AHTML.getLabelValueStr("Run Date", XDate.getDateStr(getRunDate(), XDate.MMDDYYHHMM)));
+ }
+
+ public String getLocation() {
+ return location;
+ }
+
+ public void setLocation(String location) {
+ this.location = location;
+ }
+
+ public String getBlamName() {
+ return blamName;
+ }
+
+ public void setBlamName(String blamName) {
+ this.blamName = blamName;
+ }
+
+ @Override
+ public void loadKeyValues(KeyValueArtifact keyValueArtifact) throws OseeCoreException {
+ if (Strings.isValid(keyValueArtifact.getValue("location"))) {
+ setLocation(keyValueArtifact.getValue("location"));
+ }
+ if (Strings.isValid(keyValueArtifact.getValue("blamName"))) {
+ setBlamName(keyValueArtifact.getValue("blamName"));
+ }
+ }
+
+ @Override
+ public void saveKeyValues(KeyValueArtifact keyValueArtifact) throws OseeCoreException {
+ keyValueArtifact.setValue("location", location);
+ keyValueArtifact.setValue("blamName", blamName);
+ }
+
+ public void setRunDate(Date runDate) {
+ this.runDate = runDate;
+ }
+
+ @Override
+ public Date getDate() {
+ return getRunDate();
+ }
+
+ public void addImportRecordFile(File file) throws OseeArgumentException {
+ if (!file.exists()) throw new OseeArgumentException(String.format("Import Record file [%s] doesn't exist.", file));
+ importRecordFiles.add(file);
+ }
+
+ public List<File> getImportRecordFiles() {
+ return importRecordFiles;
+ }
+
+ public String getImportDirectory() {
+ return importDirectory;
+ }
+
+ public void setImportDirectory(String importDirectory) {
+ this.importDirectory = importDirectory;
+ }
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/CoverageItem.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/CoverageItem.java
new file mode 100644
index 00000000000..1947fbcbe4b
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/CoverageItem.java
@@ -0,0 +1,338 @@
+/*******************************************************************************
+ * 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.coverage.model;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import org.eclipse.osee.coverage.util.CoverageImage;
+import org.eclipse.osee.coverage.util.CoverageUtil;
+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.jdk.core.type.PropertyStore;
+import org.eclipse.osee.framework.jdk.core.util.Collections;
+import org.eclipse.osee.framework.jdk.core.util.GUID;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.swt.KeyedImage;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class CoverageItem implements ICoverage {
+
+ CoverageOption coverageMethod = CoverageOptionManager.Not_Covered;
+ String rationale;
+ String orderNumber;
+ String name;
+ private final CoverageUnit coverageUnit;
+ String guid = GUID.create();
+ private static String PROPERTY_STORE_ID = "coverage.item";
+ private ITestUnitProvider testUnitProvider;
+
+ public CoverageItem(CoverageUnit coverageUnit, CoverageOption coverageMethod, String orderNumber) {
+ super();
+ this.coverageUnit = coverageUnit;
+ this.coverageMethod = coverageMethod;
+ this.orderNumber = orderNumber;
+ if (coverageUnit != null) {
+ ((ICoverageItemProvider) coverageUnit).addCoverageItem(this);
+ }
+ }
+
+ public CoverageItem(CoverageUnit parentCoverageUnit, String xml, CoverageOptionManager coverageOptionManager, ITestUnitProvider testUnitProvider) throws OseeCoreException {
+ this(parentCoverageUnit, CoverageOptionManager.Not_Covered, "0");
+ this.testUnitProvider = testUnitProvider;
+ fromXml(xml, coverageOptionManager);
+ }
+
+ /**
+ * Copies the coverage unit. Does not copy test units.
+ */
+ public CoverageItem copy(CoverageUnit parent) throws OseeCoreException {
+ CoverageItem coverageitem = new CoverageItem(parent, coverageMethod, orderNumber);
+ coverageitem.setGuid(guid);
+ coverageitem.setName(name);
+ coverageitem.setOrderNumber(orderNumber);
+ coverageitem.setRationale(rationale);
+ coverageitem.setTestUnitProvider(testUnitProvider);
+ return coverageitem;
+ }
+
+ public Collection<String> getTestUnits() throws OseeCoreException {
+ if (testUnitProvider == null) {
+ return java.util.Collections.emptyList();
+ }
+ return testUnitProvider.getTestUnits(this);
+ }
+
+ public void addTestUnitName(String testUnitName) throws OseeCoreException {
+ if (testUnitProvider == null) {
+ testUnitProvider = new SimpleTestUnitProvider();
+ }
+ testUnitProvider.addTestUnit(this, testUnitName);
+ }
+
+ public void setTestUnits(Collection<String> testUnitNames) throws OseeCoreException {
+ if (testUnitProvider == null) {
+ return;
+ }
+ testUnitProvider.setTestUnits(this, testUnitNames);
+ }
+
+ public CoverageOption getCoverageMethod() {
+ return coverageMethod;
+ }
+
+ public void setCoverageMethod(CoverageOption coverageMethod) {
+ this.coverageMethod = coverageMethod;
+ }
+
+ public CoverageUnit getCoverageUnit() {
+ return coverageUnit;
+ }
+
+ @Override
+ public String toString() {
+ return String.format("[Item : [%s][M: %s][E: %s][%s][Name: %s][Path: %s]]", getCoverageMethod(),
+ getCoverageUnit().getOrderNumber(), getOrderNumber(), getGuid(), getName(), CoverageUtil.getFullPath(this));
+ }
+
+ @Override
+ public Result isEditable() {
+ return Result.FalseResult;
+ }
+
+ public String getNameFull() {
+ return String.format("%s:%s [%s]", getCoverageUnit().getOrderNumber(), orderNumber, name);
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ @Override
+ public KeyedImage getOseeImage() {
+ if (isCovered()) {
+ return CoverageImage.ITEM_GREEN;
+ }
+ return CoverageImage.ITEM_RED;
+ }
+
+ @Override
+ public boolean isCovered() {
+ return !getCoverageMethod().getName().equals(CoverageOptionManager.Not_Covered.getName());
+ }
+
+ public String getGuid() {
+ return guid;
+ }
+
+ @Override
+ public ICoverage getParent() {
+ return coverageUnit;
+ }
+
+ public void setGuid(String guid) {
+ this.guid = guid;
+ }
+
+ public String getTestUnitNames(Collection<CoverageTestUnit> testUnits) {
+ List<String> guids = new ArrayList<String>();
+ for (CoverageTestUnit testUnit : testUnits) {
+ guids.add(testUnit.getGuid());
+ }
+ return Collections.toString(guids, ",");
+ }
+
+ public String getRationale() {
+ return rationale;
+ }
+
+ public void setRationale(String rationale) {
+ this.rationale = rationale;
+ }
+
+ public String getFileContents() throws OseeCoreException {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @Override
+ public String getLocation() {
+ return "";
+ }
+
+ @Override
+ public String getNamespace() {
+ if (getParent() != null && Strings.isValid(getParent().getNamespace())) {
+ return getParent().getNamespace();
+ }
+ return "";
+ }
+
+ @Override
+ public boolean isAssignable() {
+ return false;
+ }
+
+ @Override
+ public String getAssignees() throws OseeCoreException {
+ return "";
+ }
+
+ @Override
+ public String getNotes() {
+ return null;
+ }
+
+ @Override
+ public int getCoveragePercent() {
+ return isCovered() ? 100 : 0;
+ }
+
+ @Override
+ public Collection<? extends ICoverage> getChildren() {
+ return java.util.Collections.emptyList();
+ }
+
+ @Override
+ public Collection<? extends ICoverage> getChildren(boolean recurse) {
+ return java.util.Collections.emptyList();
+ }
+
+ @Override
+ public String getCoveragePercentStr() {
+ return isCovered() ? "100" : "0";
+ }
+
+ @Override
+ public boolean isFolder() {
+ return false;
+ }
+
+ @Override
+ public String getOrderNumber() {
+ return orderNumber;
+ }
+
+ public void setOrderNumber(String orderNumber) {
+ this.orderNumber = Strings.intern(orderNumber);
+ }
+
+ /**
+ * Provide test unit provider. SimpleTestUnitProvider will be used by default.
+ */
+ public void setTestUnitProvider(ITestUnitProvider testUnitProvider) {
+ this.testUnitProvider = testUnitProvider;
+ }
+
+ public void fromXml(String xml, CoverageOptionManager coverageOptionManager) throws OseeCoreException {
+ PropertyStore store = new PropertyStore();
+ // PropertyStoreRegEx store = new PropertyStoreRegEx();
+ try {
+ store.load(xml);
+ } catch (Exception ex) {
+ OseeExceptions.wrapAndThrow(ex);
+ }
+ if (!store.getId().equals(PROPERTY_STORE_ID)) {
+ throw new OseeArgumentException(String.format("Invalid store id [%s] for CoverageItem", store.getId()));
+ }
+ setCoverageMethod(coverageOptionManager.get(store.get("methodType")));
+ if (Strings.isValid(store.get("order"))) {
+ setOrderNumber(store.get("order"));
+ }
+ setGuid(store.get("guid"));
+ if (Strings.isValid(store.get("name"))) {
+ setName(store.get("name"));
+ }
+ if (Strings.isValid(store.get("rationale"))) {
+ setRationale(store.get("rationale"));
+ }
+ if (testUnitProvider == null) {
+ testUnitProvider = new SimpleTestUnitProvider();
+ }
+ String testUnitsStr = store.get("testUnits");
+ if (Strings.isValid(testUnitsStr)) {
+ testUnitProvider.fromXml(this, testUnitsStr);
+ }
+ }
+
+ public String toXml() throws OseeCoreException {
+ return toXml(testUnitProvider);
+ }
+
+ public String toXml(ITestUnitProvider testUnitProvider) throws OseeCoreException {
+ PropertyStore store = new PropertyStore(PROPERTY_STORE_ID);
+ store.put("guid", guid);
+ if (Strings.isValid(getRationale())) {
+ store.put("rationale", rationale);
+ }
+ if (Strings.isValid(orderNumber)) {
+ store.put("order", orderNumber);
+ }
+ store.put("methodType", coverageMethod.getName());
+ if (testUnitProvider != null) {
+ if (Strings.isValid(testUnitProvider.toXml(this))) {
+ store.put("testUnits", testUnitProvider.toXml(this));
+ }
+ }
+ if (Strings.isValid(name)) {
+ store.put("name", name);
+ }
+ String toReturn = null;
+ try {
+ toReturn = store.save();
+ } catch (Exception ex) {
+ OseeExceptions.wrapAndThrow(ex);
+ }
+ return toReturn;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + (guid == null ? 0 : guid.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ CoverageItem other = (CoverageItem) obj;
+ if (guid == null) {
+ if (other.guid != null) {
+ return false;
+ }
+ } else if (!guid.equals(other.guid)) {
+ return false;
+ }
+ return true;
+ }
+
+ public ITestUnitProvider getTestUnitProvider() {
+ return testUnitProvider;
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/CoverageOption.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/CoverageOption.java
new file mode 100644
index 00000000000..501b3905253
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/CoverageOption.java
@@ -0,0 +1,89 @@
+/*
+ * Created on Dec 21, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.model;
+
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class CoverageOption {
+
+ public String name;
+ public String description;
+ public boolean enabled;
+ public static String TAG = "CvgOpt";
+
+ public CoverageOption(String name, String description, boolean enabled) {
+ this.name = name;
+ this.description = description;
+ this.enabled = enabled;
+ }
+
+ public CoverageOption(String name, String description) {
+ this(name, description, true);
+ }
+
+ public CoverageOption(String name) {
+ this(name, "", true);
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public String getNameDesc() {
+ if (Strings.isValid(description)) {
+ return String.format("%s - %s", name, description);
+ }
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ public boolean isEnabled() {
+ return enabled;
+ }
+
+ public void setEnabled(boolean enabled) {
+ this.enabled = enabled;
+ }
+
+ public String toString() {
+ return String.format("[%s-%s]", name, enabled);
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((name == null) ? 0 : name.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) return true;
+ if (obj == null) return false;
+ if (getClass() != obj.getClass()) return false;
+ CoverageOption other = (CoverageOption) obj;
+ if (name == null) {
+ if (other.name != null) return false;
+ } else if (!name.equals(other.name)) return false;
+ return true;
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/CoverageOptionManager.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/CoverageOptionManager.java
new file mode 100644
index 00000000000..653f77370a7
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/CoverageOptionManager.java
@@ -0,0 +1,116 @@
+/*
+ * Created on Dec 21, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.model;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.logging.Level;
+import org.eclipse.osee.coverage.internal.Activator;
+import org.eclipse.osee.framework.core.exception.OseeArgumentException;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+import org.eclipse.osee.framework.jdk.core.util.xml.Jaxp;
+import org.eclipse.osee.framework.logging.OseeLevel;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class CoverageOptionManager {
+ private static String MGR_TAG = "options";
+ private static String ITEM_TAG = "option";
+
+ public List<CoverageOption> options;
+ public static CoverageOption Deactivated_Code = new CoverageOption("Deactivated_Code");
+ public static CoverageOption Dead_Code = new CoverageOption("Dead_Code");
+ public static CoverageOption Exception_Handling = new CoverageOption("Exception_Handling");
+ public static CoverageOption Test_Unit = new CoverageOption("Test_Unit");
+ public static CoverageOption Not_Covered = new CoverageOption("Not_Covered");
+
+ public CoverageOptionManager(List<CoverageOption> options) {
+ this.options = options;
+ }
+
+ public CoverageOptionManager() {
+ this.options = new ArrayList<CoverageOption>();
+ }
+
+ public CoverageOptionManager(String xml) {
+ fromXml(xml);
+ }
+
+ public Collection<CoverageOption> getEnabled() {
+ List<CoverageOption> enabled = new ArrayList<CoverageOption>();
+ for (CoverageOption option : options) {
+ if (option.isEnabled()) {
+ enabled.add(option);
+ }
+ }
+ return enabled;
+ }
+
+ public void add(CoverageOption coverageOption) throws OseeArgumentException {
+ if (get(coverageOption.getName()) != null) throw new OseeArgumentException(String.format(
+ "Option with name [%s] already exists", coverageOption.getName()));
+ options.add(coverageOption);
+ }
+
+ public CoverageOption get(String name) {
+ for (CoverageOption option : options) {
+ if (option.getName().equals(name)) {
+ return option;
+ }
+ }
+ return null;
+ }
+
+ public void fromXml(String xml) {
+ if (options == null) {
+ options = new ArrayList<CoverageOption>();
+ } else {
+ options.clear();
+ }
+ if (Strings.isValid(xml)) {
+ NodeList nodes;
+ try {
+ nodes = Jaxp.readXmlDocument(xml).getElementsByTagName(ITEM_TAG);
+ for (int i = 0; i < nodes.getLength(); i++) {
+ Element element = (Element) nodes.item(i);
+ options.add(new CoverageOption(element.getAttribute("name"), element.getAttribute("desc"),
+ element.getAttribute("enabled").equals("true")));
+ }
+ } catch (Exception ex) {
+ OseeLog.log(Activator.class, Level.SEVERE, ex.toString(), ex);
+ }
+ }
+ }
+
+ public String toXml() {
+ try {
+ Document doc = Jaxp.newDocument();
+ Element rootElement = doc.createElement(MGR_TAG);
+ doc.appendChild(rootElement);
+ for (CoverageOption item : options) {
+ Element element = doc.createElement(ITEM_TAG);
+ element.setAttribute("name", item.getName());
+ element.setAttribute("enabled", String.valueOf(item.isEnabled()));
+ element.setAttribute("desc", item.getDescription());
+ rootElement.appendChild(element);
+ }
+ return Jaxp.getDocumentXml(doc);
+ } catch (Exception ex) {
+ OseeLog.log(Activator.class, OseeLevel.SEVERE_POPUP, "Can't create coverage options document", ex);
+ }
+ return null;
+ }
+
+ public List<CoverageOption> get() {
+ return options;
+ }
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/CoverageOptionManagerDefault.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/CoverageOptionManagerDefault.java
new file mode 100644
index 00000000000..8856463b716
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/CoverageOptionManagerDefault.java
@@ -0,0 +1,34 @@
+/*
+ * Created on Dec 22, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.model;
+
+import java.util.Arrays;
+import java.util.List;
+import org.eclipse.osee.framework.core.exception.OseeArgumentException;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class CoverageOptionManagerDefault extends CoverageOptionManager {
+
+ public static List<CoverageOption> defaultOptions =
+ Arrays.asList(Deactivated_Code, Dead_Code, Exception_Handling, Test_Unit, Not_Covered);
+ private static CoverageOptionManagerDefault instance = new CoverageOptionManagerDefault();
+
+ private CoverageOptionManagerDefault() {
+ super(defaultOptions);
+ }
+
+ public static CoverageOptionManagerDefault instance() {
+ return instance;
+ }
+
+ @Override
+ public void add(CoverageOption coverageOption) throws OseeArgumentException {
+ throw new OseeArgumentException("Not supported for CoverageOptionManagerDefault");
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/CoveragePackage.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/CoveragePackage.java
new file mode 100644
index 00000000000..eda4a3d1f8e
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/CoveragePackage.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.coverage.model;
+
+import java.util.Date;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.AHTML;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+import org.eclipse.osee.framework.skynet.core.artifact.KeyValueArtifact;
+import org.eclipse.osee.framework.ui.skynet.results.XResultData;
+import org.eclipse.osee.framework.ui.skynet.widgets.XDate;
+
+public class CoveragePackage extends CoveragePackageBase implements ICoverage {
+
+ Date creationDate;
+
+ public CoveragePackage(String name, CoverageOptionManager coverageOptionManager) {
+ this(name, new Date(), coverageOptionManager);
+ }
+
+ public CoveragePackage(String name, Date runDate, CoverageOptionManager coverageOptionManager) {
+ super(name, coverageOptionManager);
+ this.creationDate = runDate;
+ }
+
+ public void clearCoverageUnits() {
+ coverageUnits.clear();
+ }
+
+ public Date getRunDate() {
+ return creationDate;
+ }
+
+ @Override
+ public void getOverviewHtmlHeader(XResultData xResultData) {
+ xResultData.log(AHTML.bold("Coverage Package " + getName() + " as of " + XDate.getDateStr(new Date(),
+ XDate.MMDDYYHHMM)) + AHTML.newline());
+ }
+
+ public void setCreationDate(Date creationDate) {
+ this.creationDate = creationDate;
+ }
+
+ @Override
+ public void saveKeyValues(KeyValueArtifact keyValueArtifact) throws OseeCoreException {
+ keyValueArtifact.setValue("date", String.valueOf(creationDate.getTime()));
+ }
+
+ @Override
+ public void loadKeyValues(KeyValueArtifact keyValueArtifact) throws OseeCoreException {
+ if (Strings.isValid(keyValueArtifact.getValue("date"))) {
+ Date date = new Date();
+ date.setTime(new Long(keyValueArtifact.getValue("date")).longValue());
+ setCreationDate(date);
+ }
+ }
+
+ @Override
+ public Date getDate() {
+ return getRunDate();
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/CoveragePackageBase.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/CoveragePackageBase.java
new file mode 100644
index 00000000000..15de0e5d067
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/CoveragePackageBase.java
@@ -0,0 +1,303 @@
+/*
+ * Created on Oct 16, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.model;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.concurrent.CopyOnWriteArrayList;
+import org.eclipse.osee.coverage.util.CoverageUtil;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.GUID;
+import org.eclipse.osee.framework.skynet.core.artifact.KeyValueArtifact;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.skynet.results.XResultData;
+import org.eclipse.osee.framework.ui.swt.KeyedImage;
+
+/**
+ * @author Donald G. Dunne
+ */
+public abstract class CoveragePackageBase implements ICoverage, ICoverageUnitProvider {
+ List<CoverageUnit> coverageUnits = new ArrayList<CoverageUnit>();
+ final XResultData logResultData = new XResultData(false);
+ String guid = GUID.create();
+ String name;
+ boolean editable = true;
+ protected final CoverageOptionManager coverageOptionManager;
+ protected ICoverageUnitFileContentsProvider coverageUnitFileContentsProvider;
+
+ public CoveragePackageBase(String name, CoverageOptionManager coverageOptionManager) {
+ this.name = name;
+ this.coverageOptionManager = coverageOptionManager;
+ }
+
+ public abstract Date getDate();
+
+ public void addCoverageUnit(CoverageUnit coverageUnit) {
+ coverageUnit.setParent(this);
+ if (!coverageUnits.contains(coverageUnit)) {
+ coverageUnits.add(coverageUnit);
+ }
+ }
+
+ public List<CoverageUnit> getCoverageUnits() {
+ return coverageUnits;
+ }
+
+ public abstract void getOverviewHtmlHeader(XResultData xResultData);
+
+ public List<CoverageItem> getCoverageItems() {
+ List<CoverageItem> items = new ArrayList<CoverageItem>();
+ for (CoverageUnit coverageUnit : coverageUnits) {
+ items.addAll(coverageUnit.getCoverageItems(true));
+ }
+ return items;
+ }
+
+ @Override
+ public String getCoveragePercentStr() {
+ return CoverageUtil.getPercent(getCoverageItemsCovered().size(), getCoverageItems().size(), true).getSecond();
+ }
+
+ public int getCoveragePercent() {
+ return CoverageUtil.getPercent(getCoverageItemsCovered().size(), getCoverageItems().size(), true).getFirst();
+ }
+
+ public List<CoverageItem> getCoverageItemsCovered() {
+ List<CoverageItem> items = new ArrayList<CoverageItem>();
+ for (CoverageItem coverageItem : getCoverageItems()) {
+ if (!coverageItem.getCoverageMethod().getName().equals(CoverageOptionManager.Not_Covered.name)) {
+ items.add(coverageItem);
+ }
+ }
+ return items;
+ }
+
+ public List<CoverageItem> getCoverageItemsCovered(CoverageOption... CoverageOption) {
+ return CoverageUtil.getCoverageItemsCovered(getCoverageItems(), CoverageOption);
+ }
+
+ @Override
+ public Collection<? extends ICoverage> getChildren(boolean recurse) {
+ Set<ICoverage> items = new HashSet<ICoverage>();
+ for (CoverageUnit coverageUnit : getCoverageUnits()) {
+ items.add(coverageUnit);
+ if (recurse) {
+ items.addAll(coverageUnit.getChildren(recurse));
+ }
+ }
+ return items;
+ }
+
+ public CoverageUnit getOrCreateParent(String namespace) {
+ // Look for already existing CU
+ for (ICoverage item : new CopyOnWriteArrayList<ICoverage>(getChildren(true))) {
+ if (!(item instanceof CoverageUnit)) continue;
+ CoverageUnit coverageUnit = (CoverageUnit) item;
+ if (coverageUnit.getName().equals(namespace)) {
+ return coverageUnit;
+ }
+ }
+ // Create
+ String[] names = namespace.split("\\.");
+ String nameStr = "";
+ for (String name : names) {
+ if (nameStr.equals("")) {
+ nameStr = name;
+ } else {
+ nameStr = nameStr + "." + name;
+ }
+ if (getCoverageUnits().size() == 0) {
+ CoverageUnit newCoverageUnit = new CoverageUnit(this, nameStr, "", coverageUnitFileContentsProvider);
+ newCoverageUnit.setFolder(true);
+ newCoverageUnit.setNamespace(nameStr);
+ addCoverageUnit(newCoverageUnit);
+ if (nameStr.equals(namespace)) return newCoverageUnit;
+ continue;
+ }
+
+ // Look for already existing CU
+ boolean found = false;
+ for (ICoverage item : new CopyOnWriteArrayList<ICoverage>(getChildren(true))) {
+ if (!(item instanceof CoverageUnit)) continue;
+ if (item.getName().equals(nameStr)) {
+ found = true;
+ break;
+ }
+ }
+ if (found) continue;
+
+ // Create one if not exists
+
+ // Find parent
+ ICoverage parent = null;
+ if (nameStr.equals(name)) {
+ parent = this;
+ } else {
+ String parentNamespace = nameStr.replaceFirst("\\." + name + ".*$", "");
+ parent = getOrCreateParent(parentNamespace);
+ }
+ // Create new coverage unit
+ CoverageUnit newCoverageUnit = new CoverageUnit(parent, nameStr, "", coverageUnitFileContentsProvider);
+ newCoverageUnit.setNamespace(nameStr);
+ newCoverageUnit.setFolder(true);
+ // Add to parent
+ ((ICoverageUnitProvider) parent).addCoverageUnit(newCoverageUnit);
+ // Return if this is our coverage unit
+ if (nameStr.equals(namespace)) return newCoverageUnit;
+ }
+ return null;
+ }
+
+ public String getGuid() {
+ return guid;
+ }
+
+ public void setCoverageUnits(List<CoverageUnit> coverageUnits) {
+ this.coverageUnits = coverageUnits;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public XResultData getLog() {
+ return logResultData;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public boolean isImportAllowed() {
+ return isEditable().isTrue();
+ }
+
+ @Override
+ public boolean isAssignable() {
+ return isEditable().isTrue();
+ }
+
+ public void setGuid(String guid) {
+ this.guid = guid;
+ }
+
+ @Override
+ public Collection<? extends ICoverage> getChildren() {
+ return getChildren(false);
+ }
+
+ @Override
+ public boolean isCovered() {
+ for (CoverageUnit coverageUnit : coverageUnits) {
+ if (!coverageUnit.isCovered()) return false;
+ }
+ return true;
+ }
+
+ @Override
+ public Result isEditable() {
+ if (!editable) return new Result("CoveragePackage locked for edits.");
+ return Result.TrueResult;
+ }
+
+ public void setEditable(boolean editable) {
+ this.editable = editable;
+ }
+
+ public void removeCoverageUnit(CoverageUnit coverageUnit) {
+ coverageUnits.remove(coverageUnit);
+ }
+
+ @Override
+ public KeyedImage getOseeImage() {
+ return null;
+ }
+
+ @Override
+ public String getLocation() {
+ return "";
+ }
+
+ @Override
+ public String getFileContents() throws OseeCoreException {
+ return "";
+ }
+
+ @Override
+ public String getNamespace() {
+ return "";
+ }
+
+ @Override
+ public String getNotes() {
+ return null;
+ }
+
+ @Override
+ public ICoverage getParent() {
+ return null;
+ }
+
+ @Override
+ public String getAssignees() throws OseeCoreException {
+ return "";
+ }
+
+ public abstract void saveKeyValues(KeyValueArtifact keyValueArtifact) throws OseeCoreException;
+
+ public abstract void loadKeyValues(KeyValueArtifact keyValueArtifact) throws OseeCoreException;
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((getGuid() == null) ? 0 : getGuid().hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) return true;
+ if (obj == null) return false;
+ if (getClass() != obj.getClass()) return false;
+ CoveragePackageBase other = (CoveragePackageBase) obj;
+ if (getGuid() == null) {
+ if (other.getGuid() != null) return false;
+ } else if (!getGuid().equals(other.getGuid())) return false;
+ return true;
+ }
+
+ @Override
+ public boolean isFolder() {
+ return false;
+ }
+
+ @Override
+ public String getOrderNumber() {
+ return "";
+ }
+
+ public CoverageOptionManager getCoverageOptionManager() {
+ return coverageOptionManager;
+ }
+
+ public ICoverageUnitFileContentsProvider getCoverageUnitFileContentsProvider() {
+ return coverageUnitFileContentsProvider;
+ }
+
+ public void setCoverageUnitFileContentsProvider(ICoverageUnitFileContentsProvider coverageUnitFileContentsProvider) {
+ this.coverageUnitFileContentsProvider = coverageUnitFileContentsProvider;
+ }
+
+ public CoverageUnit createCoverageUnit(ICoverage parent, String name, String location) {
+ return new CoverageUnit(parent, name, location, coverageUnitFileContentsProvider);
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/CoverageTestUnit.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/CoverageTestUnit.java
new file mode 100644
index 00000000000..5614f280b86
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/CoverageTestUnit.java
@@ -0,0 +1,134 @@
+/*
+ * Created on Sep 17, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.model;
+
+import java.util.Collection;
+import org.eclipse.osee.coverage.util.CoverageImage;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.GUID;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.swt.KeyedImage;
+
+/**
+ * Single test that can cover multiple Coverage Items
+ *
+ * @author Donald G. Dunne
+ */
+public class CoverageTestUnit implements ICoverage {
+
+ String name;
+ String guid = GUID.create();
+
+ public CoverageTestUnit(String name) {
+ super();
+ this.name = name;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getGuid() {
+ return guid;
+ }
+
+ @Override
+ public String toString() {
+ return getName();
+ }
+
+ @Override
+ public String getAssignees() throws OseeCoreException {
+ return "";
+ }
+
+ @Override
+ public Result isEditable() {
+ return Result.FalseResult;
+ }
+
+ @Override
+ public KeyedImage getOseeImage() {
+ if (isCovered()) {
+ return CoverageImage.TEST_UNIT_GREEN;
+ }
+ return CoverageImage.TEST_UNIT_RED;
+ }
+
+ @Override
+ public boolean isCovered() {
+ return false;
+ }
+
+ @Override
+ public ICoverage getParent() {
+ return null;
+ }
+
+ public void setGuid(String guid) {
+ this.guid = guid;
+ }
+
+ @Override
+ public boolean isAssignable() {
+ return false;
+ }
+
+ @Override
+ public String getNotes() {
+ return null;
+ }
+
+ @Override
+ public int getCoveragePercent() {
+ return 0;
+ }
+
+ @Override
+ public Collection<? extends ICoverage> getChildren(boolean recurse) {
+ return java.util.Collections.emptyList();
+ }
+
+ @Override
+ public String getCoveragePercentStr() {
+ return "";
+ }
+
+ @Override
+ public boolean isFolder() {
+ return false;
+ }
+
+ @Override
+ public Collection<? extends ICoverage> getChildren() {
+ return getChildren(false);
+ }
+
+ @Override
+ public String getLocation() {
+ return "";
+ }
+
+ @Override
+ public String getNamespace() {
+ return "";
+ }
+
+ @Override
+ public String getFileContents() throws OseeCoreException {
+ return "";
+ }
+
+ @Override
+ public String getOrderNumber() {
+ return "";
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/CoverageUnit.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/CoverageUnit.java
new file mode 100644
index 00000000000..6ffdf217483
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/CoverageUnit.java
@@ -0,0 +1,393 @@
+/*******************************************************************************
+ * 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.coverage.model;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import org.eclipse.osee.coverage.util.CoverageImage;
+import org.eclipse.osee.coverage.util.CoverageUtil;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.core.exception.OseeStateException;
+import org.eclipse.osee.framework.jdk.core.util.Collections;
+import org.eclipse.osee.framework.jdk.core.util.GUID;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.swt.KeyedImage;
+
+/**
+ * Single code unit (file/procedure/function) that can contain other Coverage Unit or Coverage Items
+ *
+ * @author Donald G. Dunne
+ */
+public class CoverageUnit implements ICoverage, ICoverageUnitProvider, ICoverageItemProvider {
+
+ String name;
+ String namespace;
+ boolean folder;
+ String notes;
+ String assignees;
+ String guid = GUID.create();
+ final List<CoverageItem> coverageItems = new ArrayList<CoverageItem>();
+ String location;
+ String orderNumber = "";
+ final List<CoverageUnit> coverageUnits = new ArrayList<CoverageUnit>();
+ ICoverage parent;
+ ICoverageUnitFileContentsProvider fileContentsProvider;
+
+ public CoverageUnit(ICoverage parent, String name, String location, ICoverageUnitFileContentsProvider coverageUnitFileContentsProvider) {
+ super();
+ this.parent = parent;
+ this.name = name;
+ this.location = location;
+ this.fileContentsProvider = coverageUnitFileContentsProvider;
+ if (parent != null && parent instanceof ICoverageUnitProvider) {
+ ((ICoverageUnitProvider) parent).addCoverageUnit(this);
+ }
+ }
+
+ public void clearCoverageUnits() {
+ coverageUnits.clear();
+ }
+
+ public void clearCoverageItems() {
+ coverageItems.clear();
+ }
+
+ public void addCoverageUnit(CoverageUnit coverageUnit) {
+ coverageUnit.setParent(this);
+ if (!coverageUnits.contains(coverageUnit)) {
+ coverageUnits.add(coverageUnit);
+ }
+ }
+
+ public List<CoverageUnit> getCoverageUnits() {
+ return getCoverageUnits(false);
+ }
+
+ public List<CoverageUnit> getCoverageUnits(boolean recurse) {
+ if (!recurse) {
+ return coverageUnits;
+ }
+ List<CoverageUnit> units = new ArrayList<CoverageUnit>(coverageUnits);
+ for (CoverageUnit coverageUnit : coverageUnits) {
+ units.addAll(coverageUnit.getCoverageUnits(recurse));
+ }
+ return units;
+ }
+
+ public void addCoverageItem(CoverageItem coverageItem) {
+ if (!coverageItems.contains(coverageItem)) {
+ coverageItems.add(coverageItem);
+ }
+ }
+
+ public List<CoverageItem> getCoverageItems(boolean recurse) {
+ if (!recurse) {
+ return coverageItems;
+ }
+ List<CoverageItem> items = new ArrayList<CoverageItem>(coverageItems);
+ for (CoverageUnit coverageUnit : coverageUnits) {
+ items.addAll(coverageUnit.getCoverageItems(true));
+ }
+ return items;
+ }
+
+ public CoverageItem getCoverageItem(String childUnitOrderNum, String itemOrderNumber) {
+ for (CoverageUnit coverageUnit : coverageUnits) {
+ if (coverageUnit.getOrderNumber().equals(childUnitOrderNum)) {
+ for (CoverageItem coverageItem : coverageUnit.getCoverageItems()) {
+ if (coverageItem.getOrderNumber().equals(itemOrderNumber)) {
+ return coverageItem;
+ }
+ }
+ }
+ }
+ return null;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getLocation() {
+ return location;
+ }
+
+ public void setLocation(String location) {
+ this.location = location;
+ }
+
+ public String getFileContents() throws OseeCoreException {
+ if (fileContentsProvider == null) {
+ throw new OseeStateException("No File Contents Provider Specified");
+ }
+ return fileContentsProvider.getFileContents(this);
+ }
+
+ public void setFileContents(String fileContents) throws OseeStateException {
+ if (fileContentsProvider == null) {
+ throw new OseeStateException("No File Contents Provider Specified");
+ }
+ this.fileContentsProvider.setFileContents(this, fileContents);
+ }
+
+ public String getGuid() {
+ return guid;
+ }
+
+ public CoverageUnit getParentCoverageUnit() {
+ if (parent instanceof CoverageUnit) {
+ return (CoverageUnit) parent;
+ }
+ return null;
+ }
+
+ @Override
+ public String toString() {
+ return String.format("[Unit [%s][M: %s][%s][Path: %s]]", getName(), getOrderNumber(), getGuid(),
+ CoverageUtil.getFullPath(this));
+ }
+
+ @Override
+ public Result isEditable() {
+ return Result.TrueResult;
+ }
+
+ @Override
+ public KeyedImage getOseeImage() {
+ boolean covered = isCovered();
+ if (isFolder()) {
+ if (covered) {
+ return CoverageImage.FOLDER_GREEN;
+ } else {
+ return CoverageImage.FOLDER_RED;
+ }
+ } else if (covered) {
+ return CoverageImage.UNIT_GREEN;
+ }
+ return CoverageImage.UNIT_RED;
+ }
+
+ @Override
+ public boolean isCovered() {
+ for (CoverageItem coverageItem : getCoverageItems(true)) {
+ if (!coverageItem.isCovered()) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + (guid == null ? 0 : guid.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ CoverageUnit other = (CoverageUnit) obj;
+ if (guid == null) {
+ if (other.guid != null) {
+ return false;
+ }
+ } else if (!guid.equals(other.guid)) {
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public ICoverage getParent() {
+ return parent;
+ }
+
+ public void setGuid(String guid) {
+ this.guid = guid;
+ }
+
+ public String getNamespace() {
+ if (namespace == null) {
+ return getParent() == null ? null : getParent().getNamespace();
+ }
+ return namespace;
+ }
+
+ public void setNamespace(String namespace) {
+ if (namespace == null) {
+ this.namespace = null;
+ } else {
+ this.namespace = Strings.intern(namespace);
+ }
+ }
+
+ public String getAssignees() {
+ return assignees;
+ }
+
+ public void setAssignees(String assignees) {
+ this.assignees = assignees;
+ }
+
+ @Override
+ public boolean isAssignable() {
+ return true;
+ }
+
+ @Override
+ public String getNotes() {
+ return notes;
+ }
+
+ public void setNotes(String notes) {
+ this.notes = notes;
+ }
+
+ public List<CoverageItem> getCoverageItemsCovered(boolean recurse) {
+ List<CoverageItem> items = new ArrayList<CoverageItem>();
+ for (CoverageItem coverageItem : getCoverageItems(recurse)) {
+ if (coverageItem.isCovered()) {
+ items.add(coverageItem);
+ }
+ }
+ return items;
+ }
+
+ public List<CoverageItem> getCoverageItemsCovered(boolean recurse, CoverageOption... CoverageOption) {
+ List<CoverageOption> coverageMethods = Collections.getAggregate(CoverageOption);
+ List<CoverageItem> items = new ArrayList<CoverageItem>();
+ for (CoverageItem coverageItem : getCoverageItems(recurse)) {
+ if (coverageMethods.contains(coverageItem.getCoverageMethod())) {
+ items.add(coverageItem);
+ }
+ }
+ return items;
+ }
+
+ @Override
+ public Collection<? extends ICoverage> getChildren() {
+ return getChildren(false);
+ }
+
+ @Override
+ public Collection<? extends ICoverage> getChildren(boolean recurse) {
+ Set<ICoverage> items = new HashSet<ICoverage>(coverageItems);
+ for (CoverageUnit coverageUnit : getCoverageUnits()) {
+ items.add(coverageUnit);
+ if (recurse) {
+ items.addAll(coverageUnit.getChildren(recurse));
+ }
+ }
+ return items;
+ }
+
+ @Override
+ public void removeCoverageUnit(CoverageUnit coverageUnit) {
+ coverageUnits.remove(coverageUnit);
+ }
+
+ @Override
+ public List<CoverageItem> getCoverageItems() {
+ return coverageItems;
+ }
+
+ @Override
+ public void removeCoverageItem(CoverageItem coverageItem) {
+ coverageItems.remove(coverageItem);
+ }
+
+ public CoverageUnit copy(boolean includeItems) throws OseeCoreException {
+ CoverageUnit coverageUnit = new CoverageUnit(parent, name, location, fileContentsProvider);
+ coverageUnit.setGuid(guid);
+ coverageUnit.setNamespace(namespace);
+ coverageUnit.setNotes(notes);
+ coverageUnit.setOrderNumber(orderNumber);
+ coverageUnit.setFolder(folder);
+ coverageUnit.setAssignees(assignees);
+ coverageUnit.setLocation(location);
+ if (includeItems) {
+ for (CoverageItem coverageItem : coverageItems) {
+ CoverageItem newCoverageItem =
+ new CoverageItem(coverageUnit, coverageItem.toXml(), CoverageOptionManagerDefault.instance(),
+ coverageItem.getTestUnitProvider());
+ newCoverageItem.setTestUnitProvider(coverageItem.getTestUnitProvider());
+ coverageUnit.addCoverageItem(newCoverageItem);
+ }
+ }
+ coverageUnit.setFileContentsProvider(fileContentsProvider);
+ return coverageUnit;
+ }
+
+ @Override
+ public String getCoveragePercentStr() {
+ return CoverageUtil.getPercent(getCoverageItemsCovered(true).size(), getCoverageItems(true).size(), true).getSecond();
+ }
+
+ public int getCoveragePercent() {
+ return CoverageUtil.getPercent(getCoverageItemsCovered(true).size(), getCoverageItems(true).size(), true).getFirst();
+ }
+
+ public boolean isFolder() {
+ return folder;
+ }
+
+ public void setFolder(boolean folder) {
+ this.folder = folder;
+ }
+
+ public List<CoverageItem> getCoverageItemsCovered(CoverageOption... CoverageOption) {
+ return CoverageUtil.getCoverageItemsCovered(getCoverageItems(), CoverageOption);
+ }
+
+ public void updateAssigneesAndNotes(CoverageUnit coverageUnit) {
+ setNotes(coverageUnit.getNotes());
+ setAssignees(coverageUnit.getAssignees());
+ }
+
+ public void setParent(ICoverage parent) {
+ this.parent = parent;
+ }
+
+ public String getOrderNumber() {
+ return orderNumber;
+ }
+
+ public void setOrderNumber(String orderNumber) {
+ this.orderNumber = Strings.intern(orderNumber);
+ }
+
+ public void setFileContentsProvider(ICoverageUnitFileContentsProvider fileContentsProvider) {
+ this.fileContentsProvider = fileContentsProvider;
+ }
+
+ public ICoverageUnitFileContentsProvider getFileContentsProvider() {
+ return fileContentsProvider;
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/ICoverage.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/ICoverage.java
new file mode 100644
index 00000000000..6b8659f7914
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/ICoverage.java
@@ -0,0 +1,52 @@
+/*
+ * Created on Sep 28, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.model;
+
+import java.util.Collection;
+import org.eclipse.osee.framework.core.data.Identity;
+import org.eclipse.osee.framework.core.data.Named;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.swt.KeyedImage;
+
+/**
+ * @author Donald G. Dunne
+ */
+public interface ICoverage extends Named, Identity {
+
+ public String getNotes();
+
+ public String getAssignees() throws OseeCoreException;
+
+ public boolean isAssignable();
+
+ public Result isEditable();
+
+ public Collection<? extends ICoverage> getChildren();
+
+ public Collection<? extends ICoverage> getChildren(boolean recurse);
+
+ public KeyedImage getOseeImage();
+
+ public boolean isCovered();
+
+ public ICoverage getParent();
+
+ public String getFileContents() throws OseeCoreException;
+
+ public String getLocation();
+
+ public String getNamespace();
+
+ public int getCoveragePercent();
+
+ public String getCoveragePercentStr();
+
+ public boolean isFolder();
+
+ public String getOrderNumber();
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/ICoverageItemProvider.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/ICoverageItemProvider.java
new file mode 100644
index 00000000000..3ac93e10ccd
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/ICoverageItemProvider.java
@@ -0,0 +1,21 @@
+/*
+ * Created on Oct 14, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.model;
+
+import java.util.List;
+
+/**
+ * @author Donald G. Dunne
+ */
+public interface ICoverageItemProvider {
+
+ public List<CoverageItem> getCoverageItems();
+
+ public void addCoverageItem(CoverageItem coverageItem);
+
+ public void removeCoverageItem(CoverageItem coverageItem);
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/ICoverageUnit.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/ICoverageUnit.java
new file mode 100644
index 00000000000..4e0fb3dfa32
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/ICoverageUnit.java
@@ -0,0 +1,117 @@
+/*******************************************************************************
+ * 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.coverage.model;
+
+import java.util.Collection;
+import java.util.List;
+import org.eclipse.osee.framework.core.data.Identity;
+import org.eclipse.osee.framework.core.data.Named;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.swt.KeyedImage;
+
+/**
+ * Single code unit (file/procedure/function) that can contain other Coverage Unit or Coverage Items
+ *
+ * @author Donald G. Dunne
+ */
+public interface ICoverageUnit extends Named, Identity {
+
+ public void clearCoverageUnits();
+
+ public void clearCoverageItems();
+
+ public void addCoverageUnit(ICoverageUnit coverageUnit);
+
+ public List<ICoverageUnit> getCoverageUnits();
+
+ public List<ICoverageUnit> getCoverageUnits(boolean recurse);
+
+ public void addCoverageItem(CoverageItem coverageItem);
+
+ public List<CoverageItem> getCoverageItems(boolean recurse);
+
+ public CoverageItem getCoverageItem(String childUnitOrderNum, String itemOrderNumber);
+
+ public void setName(String name);
+
+ public String getLocation();
+
+ public void setLocation(String location);
+
+ public String getFileContents();
+
+ public void setFileContents(String fileContents);
+
+ public ICoverageUnit getParentCoverageUnit();
+
+ public Result isEditable();
+
+ public KeyedImage getOseeImage();
+
+ public boolean isCovered();
+
+ public ICoverage getParent();
+
+ public void setGuid(String guid);
+
+ public String getNamespace();
+
+ public void setNamespace(String namespace);
+
+ public String getAssignees();
+
+ public void setAssignees(String assignees);
+
+ public boolean isAssignable();
+
+ public String getNotes();
+
+ public void setNotes(String notes);
+
+ public List<CoverageItem> getCoverageItemsCovered(boolean recurse);
+
+ public List<CoverageItem> getCoverageItemsCovered(boolean recurse, CoverageOption... CoverageOption);
+
+ public Collection<? extends ICoverage> getChildren();
+
+ public Collection<? extends ICoverage> getChildren(boolean recurse);
+
+ public void removeCoverageUnit(ICoverageUnit coverageUnit);
+
+ public List<CoverageItem> getCoverageItems();
+
+ public void removeCoverageItem(CoverageItem coverageItem);
+
+ public ICoverageUnit copy(boolean includeItems) throws OseeCoreException;
+
+ public String getCoveragePercentStr();
+
+ public int getCoveragePercent();
+
+ public boolean isFolder();
+
+ public void setFolder(boolean folder);
+
+ public List<CoverageItem> getCoverageItemsCovered(CoverageOption... CoverageOption);
+
+ public void updateAssigneesAndNotes(ICoverageUnit coverageUnit);
+
+ public void setParent(ICoverage parent);
+
+ public String getOrderNumber();
+
+ public void setOrderNumber(String orderNumber);
+
+ public void setFileContentsProvider(ICoverageUnitFileContentsProvider fileContentsProvider);
+
+ public ICoverageUnitFileContentsProvider getFileContentsProvider();
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/ICoverageUnitFileContentsProvider.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/ICoverageUnitFileContentsProvider.java
new file mode 100644
index 00000000000..04ec1ee5e81
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/ICoverageUnitFileContentsProvider.java
@@ -0,0 +1,20 @@
+/*
+ * Created on Jan 2, 2010
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.model;
+
+/**
+ * Allow external mecahnism for coverage unit file contents to be provided to UI. This provides for late loading of
+ * large amounts of data that isn't needed often.
+ *
+ * @author Donald G. Dunne
+ */
+public interface ICoverageUnitFileContentsProvider {
+
+ public String getFileContents(CoverageUnit coverageUnit);
+
+ public void setFileContents(CoverageUnit coverageUnit, String fileContents);
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/ICoverageUnitProvider.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/ICoverageUnitProvider.java
new file mode 100644
index 00000000000..49271debd4c
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/ICoverageUnitProvider.java
@@ -0,0 +1,21 @@
+/*
+ * Created on Oct 14, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.model;
+
+import java.util.List;
+
+/**
+ * @author Donald G. Dunne
+ */
+public interface ICoverageUnitProvider {
+
+ public List<CoverageUnit> getCoverageUnits();
+
+ public void addCoverageUnit(CoverageUnit coverageUnit);
+
+ public void removeCoverageUnit(CoverageUnit coverageUnit);
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/ITestUnitProvider.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/ITestUnitProvider.java
new file mode 100644
index 00000000000..81519c809ac
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/ITestUnitProvider.java
@@ -0,0 +1,29 @@
+/*
+ * Created on Jan 2, 2010
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.model;
+
+import java.util.Collection;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+
+/**
+ * Allow external mechnism for test units to be provided to UI
+ *
+ * @author Donald G. Dunne
+ */
+public interface ITestUnitProvider {
+
+ public Collection<String> getTestUnits(CoverageItem coverageItem) throws OseeCoreException;
+
+ public void addTestUnit(CoverageItem coverageItem, String testUnitName) throws OseeCoreException;
+
+ public void removeTestUnit(CoverageItem coverageItem, String testUnitName) throws OseeCoreException;
+
+ public void setTestUnits(CoverageItem coverageItem, Collection<String> testUnitNames) throws OseeCoreException;
+
+ public String toXml(CoverageItem coverageItem) throws OseeCoreException;
+
+ public void fromXml(CoverageItem coverageItem, String xml) throws OseeCoreException;
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/MessageCoverageItem.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/MessageCoverageItem.java
new file mode 100644
index 00000000000..617a363f523
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/MessageCoverageItem.java
@@ -0,0 +1,115 @@
+/*
+ * Created on Nov 5, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.model;
+
+import java.util.Collection;
+import java.util.Collections;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.swt.KeyedImage;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class MessageCoverageItem implements ICoverage {
+
+ private final String message;
+
+ public MessageCoverageItem(String message) {
+ this.message = message;
+ }
+
+ @Override
+ public String getName() {
+ return message;
+ }
+
+ @Override
+ public Collection<? extends ICoverage> getChildren() {
+ return Collections.emptyList();
+ }
+
+ @Override
+ public Collection<? extends ICoverage> getChildren(boolean recurse) {
+ return Collections.emptyList();
+ }
+
+ @Override
+ public String getAssignees() throws OseeCoreException {
+ return "";
+ }
+
+ @Override
+ public int getCoveragePercent() {
+ return 0;
+ }
+
+ @Override
+ public String getCoveragePercentStr() {
+ return "";
+ }
+
+ @Override
+ public String getFileContents() throws OseeCoreException {
+ return null;
+ }
+
+ @Override
+ public String getGuid() {
+ return null;
+ }
+
+ @Override
+ public String getLocation() {
+ return null;
+ }
+
+ @Override
+ public String getNamespace() {
+ return null;
+ }
+
+ @Override
+ public String getNotes() {
+ return null;
+ }
+
+ @Override
+ public KeyedImage getOseeImage() {
+ return null;
+ }
+
+ @Override
+ public ICoverage getParent() {
+ return null;
+ }
+
+ @Override
+ public boolean isAssignable() {
+ return false;
+ }
+
+ @Override
+ public boolean isCovered() {
+ return false;
+ }
+
+ @Override
+ public Result isEditable() {
+ return null;
+ }
+
+ @Override
+ public boolean isFolder() {
+ return false;
+ }
+
+ @Override
+ public String getOrderNumber() {
+ return "";
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/SimpleCoverageUnitFileContentsProvider.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/SimpleCoverageUnitFileContentsProvider.java
new file mode 100644
index 00000000000..4dd4aebecc7
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/SimpleCoverageUnitFileContentsProvider.java
@@ -0,0 +1,28 @@
+/*
+ * Created on Jan 2, 2010
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.model;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class SimpleCoverageUnitFileContentsProvider implements ICoverageUnitFileContentsProvider {
+
+ Map<CoverageUnit, String> unitToContents = new HashMap<CoverageUnit, String>(1000);
+
+ @Override
+ public String getFileContents(CoverageUnit coverageUnit) {
+ return unitToContents.get(coverageUnit);
+ }
+
+ @Override
+ public void setFileContents(CoverageUnit coverageUnit, String fileContents) {
+ unitToContents.put(coverageUnit, fileContents);
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/SimpleTestUnitProvider.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/SimpleTestUnitProvider.java
new file mode 100644
index 00000000000..29fb0bbffec
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/model/SimpleTestUnitProvider.java
@@ -0,0 +1,71 @@
+/*
+ * Created on Jan 2, 2010
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.model;
+
+import java.util.Collection;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.type.HashCollection;
+import org.eclipse.osee.framework.jdk.core.util.Collections;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+
+/**
+ * Simple provider that optimizes how test units are stored by sharing test unit names.
+ *
+ * @author Donald G. Dunne
+ */
+public class SimpleTestUnitProvider implements ITestUnitProvider {
+
+ // Since test units will cover many coverage items (sometimes thousands), it is more cost effective
+ // to store single test script name shared by use of string.intern() rather than
+ // create a new string for each coverage item.
+ final HashCollection<CoverageItem, String> coverageItemToTestUnits = new HashCollection<CoverageItem, String>(1000);
+
+ public SimpleTestUnitProvider() {
+ }
+
+ @Override
+ public void addTestUnit(CoverageItem coverageItem, String testUnitName) throws OseeCoreException {
+ if (!getTestUnits(coverageItem).contains(testUnitName)) {
+ coverageItemToTestUnits.put(coverageItem, Strings.intern(testUnitName));
+ }
+ }
+
+ @Override
+ public Collection<String> getTestUnits(CoverageItem coverageItem) throws OseeCoreException {
+ if (coverageItemToTestUnits.containsKey(coverageItem)) {
+ return coverageItemToTestUnits.getValues(coverageItem);
+ }
+ return java.util.Collections.emptyList();
+ }
+
+ @Override
+ public String toXml(CoverageItem coverageItem) throws OseeCoreException {
+ return Collections.toString(";", getTestUnits(coverageItem));
+ }
+
+ @Override
+ public void fromXml(CoverageItem coverageItem, String testUnitNames) throws OseeCoreException {
+ if (Strings.isValid(testUnitNames)) {
+ for (String testName : testUnitNames.split(";")) {
+ addTestUnit(coverageItem, testName);
+ }
+ }
+ }
+
+ @Override
+ public void setTestUnits(CoverageItem coverageItem, Collection<String> testUnitNames) throws OseeCoreException {
+ coverageItemToTestUnits.removeValues(coverageItem);
+ for (String testUnitName : testUnitNames) {
+ addTestUnit(coverageItem, testUnitName);
+ }
+ }
+
+ @Override
+ public void removeTestUnit(CoverageItem coverageItem, String testUnitName) throws OseeCoreException {
+ coverageItemToTestUnits.removeValue(coverageItem, testUnitName);
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/navigate/CoverageNavigateView.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/navigate/CoverageNavigateView.java
new file mode 100644
index 00000000000..97d13154f48
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/navigate/CoverageNavigateView.java
@@ -0,0 +1,192 @@
+/*******************************************************************************
+ * 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.coverage.navigate;
+
+import java.util.logging.Level;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.IRegistryEventListener;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.osee.coverage.internal.Activator;
+import org.eclipse.osee.coverage.util.CoverageUtil;
+import org.eclipse.osee.framework.core.client.ClientSessionManager;
+import org.eclipse.osee.framework.core.model.Branch;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.plugin.core.IActionable;
+import org.eclipse.osee.framework.skynet.core.UserManager;
+import org.eclipse.osee.framework.ui.plugin.OseeUiActions;
+import org.eclipse.osee.framework.ui.plugin.PluginUiImage;
+import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateComposite;
+import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItem;
+import org.eclipse.osee.framework.ui.skynet.OseeContributionItem;
+import org.eclipse.osee.framework.ui.skynet.util.DbConnectionExceptionComposite;
+import org.eclipse.osee.framework.ui.skynet.widgets.XBranchSelectWidget;
+import org.eclipse.osee.framework.ui.swt.ImageManager;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.ui.part.ViewPart;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class CoverageNavigateView extends ViewPart implements IActionable {
+
+ public static final String VIEW_ID = "org.eclipse.osee.coverage.navigate.CoverageNavigateView";
+ private XNavigateComposite xNavComp;
+ private XBranchSelectWidget xBranchSelectWidget;
+
+ public CoverageNavigateView() {
+ }
+
+ @Override
+ public void setFocus() {
+ }
+
+ @Override
+ public void createPartControl(Composite parent) {
+ if (!DbConnectionExceptionComposite.dbConnectionIsOk(parent)) {
+ return;
+ }
+
+ OseeContributionItem.addTo(this, false);
+
+ Composite comp = new Composite(parent, SWT.None);
+ comp.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false));
+
+ xBranchSelectWidget = new XBranchSelectWidget("");
+ xBranchSelectWidget.setDisplayLabel(false);
+ if (CoverageUtil.getBranch() != null) {
+ xBranchSelectWidget.setSelection(CoverageUtil.getBranch());
+ }
+ xBranchSelectWidget.createWidgets(comp, 1);
+ xBranchSelectWidget.addListener(new Listener() {
+ @Override
+ public void handleEvent(Event event) {
+ try {
+ Branch selectedBranch = xBranchSelectWidget.getData();
+ if (selectedBranch != null) {
+ CoverageUtil.setBranch(selectedBranch);
+ }
+ } catch (Exception ex) {
+ OseeLog.log(getClass(), Level.SEVERE, ex);
+ }
+ }
+
+ });
+ CoverageUtil.addBranchChangeListener(new Listener() {
+ @Override
+ public void handleEvent(Event event) {
+ xBranchSelectWidget.setSelection(CoverageUtil.getBranch());
+ }
+ });
+ xNavComp = new XNavigateComposite(new CoverageNavigateViewItems(), comp, SWT.NONE);
+
+ createActions();
+ xNavComp.refresh();
+
+ Label label = new Label(xNavComp, SWT.None);
+ String str = getWhoAmI();
+ if (CoverageUtil.isAdmin()) {
+ str += " - Admin";
+ }
+ if (!str.equals("")) {
+ if (CoverageUtil.isAdmin()) {
+ label.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_RED));
+ } else {
+ label.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_BLUE));
+ }
+ }
+ label.setText(str);
+ label.setToolTipText(str);
+ GridData gridData = new GridData(GridData.HORIZONTAL_ALIGN_CENTER | GridData.VERTICAL_ALIGN_CENTER);
+ gridData.heightHint = 15;
+ label.setLayoutData(gridData);
+
+ addExtensionPointListenerBecauseOfWorkspaceLoading();
+ }
+
+ private String getWhoAmI() {
+ try {
+ String userName = UserManager.getUser().getName();
+ return String.format("%s - %s:%s", userName, ClientSessionManager.getDataStoreName(),
+ ClientSessionManager.getDataStoreLoginName());
+ } catch (Exception ex) {
+ OseeLog.log(Activator.class, Level.SEVERE, ex);
+ return "Exception: " + ex.getLocalizedMessage();
+ }
+ }
+
+ private void addExtensionPointListenerBecauseOfWorkspaceLoading() {
+ IExtensionRegistry extensionRegistry = Platform.getExtensionRegistry();
+ extensionRegistry.addListener(new IRegistryEventListener() {
+ @Override
+ public void added(IExtension[] extensions) {
+ refresh();
+ }
+
+ @Override
+ public void added(IExtensionPoint[] extensionPoints) {
+ refresh();
+ }
+
+ @Override
+ public void removed(IExtension[] extensions) {
+ refresh();
+ }
+
+ @Override
+ public void removed(IExtensionPoint[] extensionPoints) {
+ refresh();
+ }
+ }, "org.eclipse.osee.coverage.CoverageNavigateItem");
+ }
+
+ protected void createActions() {
+ Action refreshAction = new Action("Refresh") {
+
+ @Override
+ public void run() {
+ xNavComp.refresh();
+ }
+ };
+ refreshAction.setImageDescriptor(ImageManager.getImageDescriptor(PluginUiImage.REFRESH));
+ refreshAction.setToolTipText("Refresh");
+ getViewSite().getActionBars().getMenuManager().add(refreshAction);
+
+ OseeUiActions.addBugToViewToolbar(this, this, Activator.getInstance(), VIEW_ID, "Coverage Navigator");
+
+ }
+
+ public String getActionDescription() {
+ IStructuredSelection sel = (IStructuredSelection) xNavComp.getFilteredTree().getViewer().getSelection();
+ if (sel.iterator().hasNext()) {
+ return String.format("Currently Selected - %s", ((XNavigateItem) sel.iterator().next()).getName());
+ }
+ return "";
+ }
+
+ public void refresh() {
+ Display.getDefault().asyncExec(new Runnable() {
+ public void run() {
+ xNavComp.refresh();
+ }
+ });
+ }
+
+} \ No newline at end of file
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/navigate/CoverageNavigateViewItems.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/navigate/CoverageNavigateViewItems.java
new file mode 100644
index 00000000000..f27acb9eff9
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/navigate/CoverageNavigateViewItems.java
@@ -0,0 +1,121 @@
+/*******************************************************************************
+ * 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.coverage.navigate;
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.Level;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.osee.coverage.CoverageManager;
+import org.eclipse.osee.coverage.action.ConfigureCoverageMethodsAction;
+import org.eclipse.osee.coverage.action.DeleteCoveragePackageAction;
+import org.eclipse.osee.coverage.action.NewCoveragePackageAction;
+import org.eclipse.osee.coverage.action.OpenCoveragePackageAction;
+import org.eclipse.osee.coverage.blam.AbstractCoverageBlam;
+import org.eclipse.osee.coverage.util.CoverageUtil;
+import org.eclipse.osee.framework.core.exception.OseeArgumentException;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.plugin.core.util.ExtensionPoints;
+import org.eclipse.osee.framework.skynet.core.SystemGroup;
+import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItem;
+import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItemAction;
+import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateViewItems;
+import org.eclipse.osee.framework.ui.skynet.FrameworkImage;
+import org.eclipse.osee.framework.ui.skynet.action.CompareTwoStringsAction;
+import org.eclipse.osee.framework.ui.skynet.widgets.xnavigate.XNavigateItemBlam;
+import org.osgi.framework.Bundle;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class CoverageNavigateViewItems extends XNavigateViewItems {
+ private static CoverageNavigateViewItems navigateItems = new CoverageNavigateViewItems();
+
+ public CoverageNavigateViewItems() {
+ super();
+ }
+
+ public static CoverageNavigateViewItems getInstance() {
+ return navigateItems;
+ }
+
+ @Override
+ public List<XNavigateItem> getSearchNavigateItems() {
+ List<XNavigateItem> items = new ArrayList<XNavigateItem>();
+ addExtensionPointItems(items);
+ return items;
+ }
+
+ private void addExtensionPointItems(List<XNavigateItem> items) {
+ items.add(new XNavigateItemAction(null, new NewCoveragePackageAction(), NewCoveragePackageAction.OSEE_IMAGE));
+ items.add(new XNavigateItemAction(null, new OpenCoveragePackageAction(), OpenCoveragePackageAction.OSEE_IMAGE));
+ items.add(new XNavigateItemAction(null, new DeleteCoveragePackageAction(), DeleteCoveragePackageAction.OSEE_IMAGE));
+ items.add(new XNavigateItemAction(null, new ConfigureCoverageMethodsAction(),
+ ConfigureCoverageMethodsAction.OSEE_IMAGE));
+ items.add(new XNavigateItemAction(null, new CompareTwoStringsAction(), FrameworkImage.EDIT));
+
+ try {
+ if (SystemGroup.OseeAdmin.isCurrentUserMember()) {
+ for (ICoverageNavigateItem navigateItem : getExtensionPointNavigateItems()) {
+ try {
+ items.addAll(navigateItem.getNavigateItems());
+ } catch (Throwable th) {
+ OseeLog.log(CoverageNavigateViewItems.class, Level.SEVERE, th);
+ }
+ }
+
+ for (AbstractCoverageBlam blam : CoverageManager.getCoverageBlams()) {
+ items.add(new XNavigateItemBlam(null, blam));
+ }
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(CoverageNavigateViewItems.class, Level.SEVERE, ex);
+ }
+ if (CoverageUtil.isAdmin()) {
+ items.add(new DoesNotWorkItemCoverage());
+ items.add(new CreateTestCoverageUnits());
+ }
+ }
+
+ private List<ICoverageNavigateItem> getExtensionPointNavigateItems() throws OseeCoreException {
+ List<ICoverageNavigateItem> data = new ArrayList<ICoverageNavigateItem>();
+ List<IConfigurationElement> elements =
+ ExtensionPoints.getExtensionElements("org.eclipse.osee.coverage.CoverageNavigateItem",
+ "ICoverageNavigateItem");
+ for (IConfigurationElement element : elements) {
+ String className = element.getAttribute("classname");
+ String bundleName = element.getContributor().getName();
+
+ if (Strings.isValid(bundleName) && Strings.isValid(className)) {
+ try {
+ Bundle bundle = Platform.getBundle(bundleName);
+ Class<?> taskClass = bundle.loadClass(className);
+ Object object;
+ try {
+ Method getInstance = taskClass.getMethod("getInstance", new Class[] {});
+ object = getInstance.invoke(null, new Object[] {});
+ } catch (Exception ex) {
+ object = taskClass.newInstance();
+ }
+ data.add((ICoverageNavigateItem) object);
+ } catch (Exception ex) {
+ throw new OseeArgumentException(String.format("Unable to Load: [%s - %s]" + ex.getLocalizedMessage(),
+ bundleName, className));
+ }
+ }
+ }
+ return data;
+ }
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/navigate/CreateTestCoverageUnits.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/navigate/CreateTestCoverageUnits.java
new file mode 100644
index 00000000000..44d318adee1
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/navigate/CreateTestCoverageUnits.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.coverage.navigate;
+
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.osee.coverage.internal.Activator;
+import org.eclipse.osee.coverage.model.CoverageItem;
+import org.eclipse.osee.coverage.model.CoverageOptionManager;
+import org.eclipse.osee.coverage.model.CoveragePackage;
+import org.eclipse.osee.coverage.model.CoverageUnit;
+import org.eclipse.osee.coverage.model.ICoverage;
+import org.eclipse.osee.coverage.store.OseeCoveragePackageStore;
+import org.eclipse.osee.coverage.util.CoverageUtil;
+import org.eclipse.osee.coverage.util.dialog.CoveragePackageArtifactListDialog;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.core.exception.OseeStateException;
+import org.eclipse.osee.framework.logging.OseeLevel;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.plugin.PluginUiImage;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItemAction;
+import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateComposite.TableLoadOption;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class CreateTestCoverageUnits extends XNavigateItemAction {
+
+ public CreateTestCoverageUnits() {
+ super(null, "Create Test CoverageUnits", PluginUiImage.ADMIN);
+ }
+
+ @Override
+ public void run(TableLoadOption... tableLoadOptions) throws OseeCoreException {
+ if (!MessageDialog.openConfirm(Display.getCurrent().getActiveShell(), getName(),
+ getName() + "\n\nThis will create test CoverageUnits to an existing Coverage Package.")) {
+ return;
+ }
+
+ try {
+ if (!CoverageUtil.getBranchFromUser(false)) return;
+ CoveragePackageArtifactListDialog dialog =
+ new CoveragePackageArtifactListDialog(getName(), "Select Coverage Package");
+ dialog.setInput(OseeCoveragePackageStore.getCoveragePackageArtifacts());
+ if (dialog.open() == 0) {
+ Artifact coveragePackageArtifact = (Artifact) dialog.getResult()[0];
+ OseeCoveragePackageStore store = new OseeCoveragePackageStore(coveragePackageArtifact);
+ CoveragePackage coveragePackage = store.getCoveragePackage();
+ for (ICoverage coverage : coveragePackage.getChildren()) {
+ if (coverage.getName().equals("test")) {
+ throw new OseeStateException("test Coverage Folder already exists; can't create");
+ }
+ }
+ CoverageUnit topCoverageUnit = new CoverageUnit(coveragePackage, "test", "C:/This is a test", null);
+ topCoverageUnit.setNamespace("test");
+ topCoverageUnit.setFolder(true);
+
+ CoverageUnit test1CU = new CoverageUnit(topCoverageUnit, "test1.ada", "C:\\UserData\\", null);
+ test1CU.setOrderNumber("1");
+ test1CU.setNamespace("test");
+ CoverageItem item = new CoverageItem(test1CU, CoverageOptionManager.Exception_Handling, "1");
+ item.setName(" System.out.println(\"this is a test\");");
+ item = new CoverageItem(test1CU, CoverageOptionManager.Test_Unit, "2");
+ item.setName(" System.out.println(\"this is a another test\");");
+ item = new CoverageItem(test1CU, CoverageOptionManager.Not_Covered, "3");
+ item.setName(" System.out.println(\"this is a third test\");");
+
+ CoverageUnit test2CU = new CoverageUnit(topCoverageUnit, "test2.ada", "C:\\UserData\\", null);
+ test2CU.setOrderNumber("2");
+ test2CU.setNamespace("test");
+ item = new CoverageItem(test2CU, CoverageOptionManager.Exception_Handling, "1");
+ item.setName(" System.out.println(\"this is just a test\");");
+
+ store.save();
+ }
+ } catch (Exception ex) {
+ OseeLog.log(Activator.class, OseeLevel.SEVERE_POPUP, ex);
+ }
+
+ AWorkbench.popup("Completed", "Complete");
+ }
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/navigate/DoesNotWorkItemCoverage.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/navigate/DoesNotWorkItemCoverage.java
new file mode 100644
index 00000000000..6a6c4a5101a
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/navigate/DoesNotWorkItemCoverage.java
@@ -0,0 +1,233 @@
+/*******************************************************************************
+ * 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.coverage.navigate;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+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.jface.dialogs.MessageDialog;
+import org.eclipse.osee.coverage.internal.Activator;
+import org.eclipse.osee.coverage.model.CoverageItem;
+import org.eclipse.osee.coverage.model.CoverageOptionManagerDefault;
+import org.eclipse.osee.coverage.model.SimpleTestUnitProvider;
+import org.eclipse.osee.coverage.store.CoverageAttributes;
+import org.eclipse.osee.coverage.store.DbTestUnitProvider;
+import org.eclipse.osee.coverage.store.OseeCoveragePackageStore;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.core.model.Branch;
+import org.eclipse.osee.framework.jdk.core.type.PropertyStore;
+import org.eclipse.osee.framework.jdk.core.util.Collections;
+import org.eclipse.osee.framework.jdk.core.util.Lib;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+import org.eclipse.osee.framework.logging.OseeLevel;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.Attribute;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
+import org.eclipse.osee.framework.skynet.core.attribute.StringAttribute;
+import org.eclipse.osee.framework.skynet.core.attribute.providers.DefaultAttributeDataProvider;
+import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction;
+import org.eclipse.osee.framework.ui.plugin.PluginUiImage;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItemAction;
+import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateComposite.TableLoadOption;
+import org.eclipse.osee.framework.ui.skynet.results.XResultData;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class DoesNotWorkItemCoverage extends XNavigateItemAction {
+
+ public DoesNotWorkItemCoverage() {
+ super(null, "Does Not Work - Coverage - Zip VCast", PluginUiImage.ADMIN);
+ }
+
+ @Override
+ public void run(TableLoadOption... tableLoadOptions) throws OseeCoreException {
+ if (!MessageDialog.openConfirm(Display.getCurrent().getActiveShell(), getName(), getName())) {
+ return;
+ }
+
+ // Artifact artifact = ArtifactQuery.getArtifactFromId("AFLY_zvqoHPNSwfetyQA", BranchManager.getBranch(3308));
+ // System.out.println("print got it " + artifact);
+ try {
+ zipVcastFiles();
+ // fixCoverageItemNames();
+ // fixCoverageInformation();
+ // importTestUnitNamesToDbTables();
+ } catch (Exception ex) {
+ OseeLog.log(Activator.class, OseeLevel.SEVERE_POPUP, ex);
+ }
+
+ AWorkbench.popup("Completed", "Complete");
+ }
+
+ private void zipVcastFiles() throws IOException {
+ String base = "I:\\links\\lba_mp\\us\\code\\v01_\\msm.ss\\user\\jmckinne\\msm_FTB4\\msm.ftb4_2.wrk\\";
+ String vcastBase = base + "vcast\\";
+ String resultsBase = base + "vcast\\results\\";
+ List<File> files = new ArrayList<File>();
+ files.add(new File(base + "vcast.vcp"));
+ files.add(new File(base + "CCAST_.CFG"));
+ files.add(new File(vcastBase + "build_info.xml"));
+ files.add(new File(resultsBase + "lba.test.script.qual.msm.asm.MSM_ASM_ac_bus_tie_indication_MSM_1_01052010.DAT"));
+
+ Lib.compressFiles(base, files, "C://UserData//try.zip");
+ }
+
+ @SuppressWarnings("unused")
+ private void importTestUnitNamesToDbTables() throws Exception {
+ // BlkII Code Coverage Branch
+ Branch branch = BranchManager.getBranchByGuid("QyUb5GYLbDS3AmXKZWgA");
+ Set<String> allTestUnitNames = new HashSet<String>();
+ int fixCount = 0, binaryMoveCount = 0, totalCoverageUnits = 0, totalCoverageItems = 0;
+ XResultData rd = new XResultData();
+ SkynetTransaction transaction = new SkynetTransaction(branch, "Coverage Item to name_id");
+ for (Artifact artifact : ArtifactQuery.getArtifactListFromType("Coverage Unit", branch)) {
+ System.out.println("Processing Item " + artifact);
+ totalCoverageUnits++;
+ for (Attribute<?> attr : artifact.getAttributes(CoverageAttributes.COVERAGE_ITEM.getStoreName())) {
+ totalCoverageItems++;
+ String xml = (String) attr.getValue();
+ CoverageItem coverageItem =
+ new CoverageItem(null, xml, CoverageOptionManagerDefault.instance(), new SimpleTestUnitProvider());
+ allTestUnitNames.addAll(coverageItem.getTestUnits());
+ if (coverageItem.getTestUnits().size() > 0) {
+ fixCount++;
+ Collection<String> testUnitNames = coverageItem.getTestUnits();
+ coverageItem.setTestUnitProvider(DbTestUnitProvider.instance());
+ coverageItem.setTestUnits(testUnitNames);
+ String newXml = coverageItem.toXml();
+ ((StringAttribute) attr).setValue(newXml);
+ rd.log("Num Test Units " + testUnitNames.size() + " Pre-size " + xml.length() + " Post-size " + newXml.length());
+ if (newXml.length() > DefaultAttributeDataProvider.MAX_VARCHAR_LENGTH) {
+ rd.logError("Still too big " + newXml.length());
+ }
+ if (xml.length() > DefaultAttributeDataProvider.MAX_VARCHAR_LENGTH && newXml.length() < DefaultAttributeDataProvider.MAX_VARCHAR_LENGTH) {
+ binaryMoveCount++;
+ }
+ artifact.persist(transaction);
+ }
+ }
+ }
+ transaction.execute();
+ rd.log(Collections.toString(allTestUnitNames, "\n"));
+ rd.log("Num Coverage Units " + totalCoverageUnits + " Num Coverage Items " + totalCoverageItems);
+ rd.log("Fixed " + fixCount + " Binary Moved " + binaryMoveCount);
+ rd.report("Test Unit Import");
+ }
+
+ @SuppressWarnings("unused")
+ private void fixCoverageItemNames() throws Exception {
+ Pattern linePattern = Pattern.compile("^[0-9]+ [0-9]+(.*?)$");
+ // BlkII Code Coverage Branch
+ Branch branch = BranchManager.getBranchByGuid("QyUb5GYLbDS3AmXKZWgA");
+ Artifact msmCoveragePackageArt = ArtifactQuery.getArtifactFromId("AA6+z8QPbToPZSn9tAgA", branch);
+ OseeCoveragePackageStore packageStore = new OseeCoveragePackageStore(msmCoveragePackageArt);
+ // Don Coverage Branch
+ PropertyStore store = new PropertyStore();
+ // Branch branch = BranchManager.getBranchByGuid("ANPixlmF+BNVrPJIUvQA");
+ SkynetTransaction transaction = new SkynetTransaction(branch, "Fix coverage item names");
+
+ boolean persist = true;
+ for (Artifact artifact : ArtifactQuery.getArtifactListFromType("Coverage Unit", branch)) {
+ System.out.println("Processing Item " + artifact);
+ for (Attribute<?> attr : artifact.getAttributes(CoverageAttributes.COVERAGE_ITEM.getStoreName())) {
+ String attrStr = (String) attr.getValue();
+ store.load(attrStr);
+ CoverageItem item =
+ new CoverageItem(null, attrStr, packageStore.getCoverageOptionManager(), new SimpleTestUnitProvider());
+ String name = store.get("name");
+ if (!Strings.isValid(name)) {
+ System.err.println(String.format("Invalid name [%s] for item [%s]", name, item));
+ continue;
+ }
+ System.out.println(String.format("Old [%s]", name));
+
+ Matcher m = linePattern.matcher(name);
+ if (m.find()) {
+ item.setName(m.group(1));
+ System.out.println(String.format("New [%s]", item.getName()));
+ attr.setFromString(item.toXml());
+ } else {
+ System.err.println(String.format("Error: name [%s] doesn't match", name));
+ }
+ }
+ if (persist) artifact.persist(transaction);
+ }
+
+ transaction.execute();
+ }
+
+ @SuppressWarnings("unused")
+ private void fixCoverageInformation() throws Exception {
+ // BlkII Code Coverage Branch
+ Branch branch = BranchManager.getBranchByGuid("QyUb5GYLbDS3AmXKZWgA");
+ // Don Coverage Branch
+ PropertyStore store = new PropertyStore();
+ // Branch branch = BranchManager.getBranchByGuid("ANPixlmF+BNVrPJIUvQA");
+ SkynetTransaction transaction = new SkynetTransaction(branch, "Add missing Decision Reviews");
+
+ boolean persist = true;
+ Set<Artifact> coverageUnitsFixed = new HashSet<Artifact>();
+ for (Artifact artifact : ArtifactQuery.getArtifactListFromType("Coverage Unit", branch)) {
+ System.out.println("Processing Item " + artifact);
+ for (Attribute<?> attr : artifact.getAttributes(CoverageAttributes.COVERAGE_ITEM.getStoreName())) {
+ String str = (String) attr.getValue();
+ store.load(str);
+ CoverageItem item =
+ new CoverageItem(null, str, CoverageOptionManagerDefault.instance(), new SimpleTestUnitProvider());
+
+ String executeNum = store.get("executeNum");
+ if (!Strings.isValid(executeNum)) {
+ System.err.println("Invalid executeNum from artifact " + artifact + " item " + str);
+ continue;
+ }
+ item.setOrderNumber(executeNum);
+ System.out.println(String.format("Setting order to %s", executeNum));
+
+ String text = store.get("text");
+ if (!Strings.isValid(text)) {
+ System.err.println("Invalid text from artifact " + artifact + " item " + str);
+ continue;
+ }
+ item.setName(text);
+ System.out.println(String.format("Setting text to %s", text));
+
+ attr.setFromString(item.toXml());
+
+ // Update this artifact's method Num, if not already set
+ if (!coverageUnitsFixed.contains(artifact)) {
+ // Update this artifact's method Num, if not already set
+ String methodNum = store.get("methodNum");
+ if (!Strings.isValid(methodNum)) {
+ System.err.println("Invalid method from artifact " + artifact + " item " + str);
+ continue;
+ }
+ artifact.addAttribute(CoverageAttributes.ORDER.getStoreName(), methodNum);
+ coverageUnitsFixed.add(artifact);
+ System.out.println(String.format("Adding method num [%s] to unit [%s]", methodNum, artifact));
+ }
+ }
+ if (persist) artifact.persist(transaction);
+ }
+
+ transaction.execute();
+ }
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/navigate/ICoverageNavigateItem.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/navigate/ICoverageNavigateItem.java
new file mode 100644
index 00000000000..44b54bd24da
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/navigate/ICoverageNavigateItem.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * 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.coverage.navigate;
+
+import java.util.List;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItem;
+
+/**
+ * @author Donald G. Dunne
+ */
+public interface ICoverageNavigateItem {
+
+ public List<XNavigateItem> getNavigateItems() throws OseeCoreException;
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/store/CoverageArtifactImageProvider.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/store/CoverageArtifactImageProvider.java
new file mode 100644
index 00000000000..7c58e056dad
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/store/CoverageArtifactImageProvider.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2009 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.coverage.store;
+
+import org.eclipse.osee.coverage.util.CoverageImage;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.ui.plugin.PluginUiImage;
+import org.eclipse.osee.framework.ui.skynet.ArtifactImageManager;
+import org.eclipse.osee.framework.ui.skynet.ArtifactImageProvider;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class CoverageArtifactImageProvider extends ArtifactImageProvider {
+
+ @Override
+ public void init() throws OseeCoreException {
+ ArtifactImageManager.registerBaseImage(CoverageArtifactTypes.CoveragePackage.getName(),
+ CoverageImage.COVERAGE_PACKAGE, this);
+ ArtifactImageManager.registerBaseImage(CoverageArtifactTypes.CoverageUnit.getName(), CoverageImage.COVERAGE, this);
+ ArtifactImageManager.registerBaseImage(CoverageArtifactTypes.CoverageFolder.getName(), PluginUiImage.FOLDER, this);
+ }
+
+} \ No newline at end of file
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/store/CoverageArtifactTypes.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/store/CoverageArtifactTypes.java
new file mode 100644
index 00000000000..6b75815976f
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/store/CoverageArtifactTypes.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2009 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.coverage.store;
+
+import org.eclipse.osee.framework.core.data.IArtifactType;
+import org.eclipse.osee.framework.core.data.NamedIdentity;
+
+/**
+ * @author Don Dunne
+ */
+public class CoverageArtifactTypes extends NamedIdentity implements IArtifactType {
+ public static final CoverageArtifactTypes CoveragePackage =
+ new CoverageArtifactTypes("AARFcyA9zyD3uEK8akgA", "Coverage Package");
+ public static final CoverageArtifactTypes CoverageUnit =
+ new CoverageArtifactTypes("ALZS3MQdCCIUvEYlZeAA", "Coverage Unit");
+ public static final CoverageArtifactTypes CoverageFolder =
+ new CoverageArtifactTypes("ALZR_AbpJTTf6QQn2iAA", "Coverage Folder");
+
+ private CoverageArtifactTypes(String guid, String name) {
+ super(guid, name);
+ }
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/store/CoverageAttributes.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/store/CoverageAttributes.java
new file mode 100644
index 00000000000..1de9210f506
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/store/CoverageAttributes.java
@@ -0,0 +1,67 @@
+package org.eclipse.osee.coverage.store;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class CoverageAttributes {
+ private final String displayName;
+ private final String storeName;
+ private final String description;
+ private static Map<String, CoverageAttributes> attrNameToAttr = new HashMap<String, CoverageAttributes>();
+
+ public enum Namespace {
+ Coverage("coverage."), None("");
+ private final String prefix;
+
+ private Namespace(String prefix) {
+ this.prefix = prefix;
+ }
+
+ public String getPrefix() {
+ return prefix;
+ }
+ };
+
+ public static final CoverageAttributes ACTIVE = new CoverageAttributes(Namespace.None, "Active");
+
+ public static final CoverageAttributes NOTES = new CoverageAttributes(Namespace.Coverage, "Notes");
+ public static final CoverageAttributes FILE_CONTENTS = new CoverageAttributes(Namespace.Coverage, "File Contents");
+ public static final CoverageAttributes ASSIGNEES = new CoverageAttributes(Namespace.Coverage, "Assignees");
+ public static final CoverageAttributes NAMESPACE = new CoverageAttributes(Namespace.Coverage, "Namespace");
+ public static final CoverageAttributes LOCATION = new CoverageAttributes(Namespace.Coverage, "Location");
+ public static final CoverageAttributes ORDER = new CoverageAttributes(Namespace.Coverage, "Order");
+ public static final CoverageAttributes COVERAGE_ITEM = new CoverageAttributes(Namespace.Coverage, "Coverage Item");
+ public static final CoverageAttributes COVERAGE_OPTIONS =
+ new CoverageAttributes(Namespace.Coverage, "Coverage Options");
+
+ protected CoverageAttributes(String displayName, String storeName, String description) {
+ this.displayName = displayName;
+ this.storeName = storeName;
+ this.description = description;
+ attrNameToAttr.put(getStoreName(), this);
+ }
+
+ private CoverageAttributes(String displayName, String storeName) {
+ this(displayName, storeName, "");
+ }
+
+ private CoverageAttributes(Namespace namespace, String name) {
+ this(name, namespace.prefix + name);
+ }
+
+ public String getDisplayName() {
+ return displayName;
+ }
+
+ public String getStoreName() {
+ return storeName;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/store/CoverageStore.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/store/CoverageStore.java
new file mode 100644
index 00000000000..2638d32b4d2
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/store/CoverageStore.java
@@ -0,0 +1,21 @@
+/*
+ * Created on Oct 28, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.store;
+
+import org.eclipse.osee.coverage.model.ICoverage;
+
+/**
+ * @author Donald G. Dunne
+ */
+public abstract class CoverageStore implements ICoverageStore {
+
+ protected final ICoverage coverage;
+
+ public CoverageStore(ICoverage coverage) {
+ this.coverage = coverage;
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/store/DbTestUnitProvider.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/store/DbTestUnitProvider.java
new file mode 100644
index 00000000000..3faa3bc0ab4
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/store/DbTestUnitProvider.java
@@ -0,0 +1,131 @@
+/*
+ * Created on Jan 20, 2010
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.store;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+import org.eclipse.osee.coverage.internal.Activator;
+import org.eclipse.osee.coverage.model.CoverageItem;
+import org.eclipse.osee.coverage.model.ITestUnitProvider;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.type.HashCollection;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+import org.eclipse.osee.framework.logging.OseeLevel;
+import org.eclipse.osee.framework.logging.OseeLog;
+
+/**
+ * This provider takes test unit names and converts them to ids and adds name/id entry to db table. It uses the
+ * SimpleTestUnitProvider implementation to store off the nameIds instead of the names.<br>
+ * <br>
+ * This saves space and allows CoverageItems meta-data to be stored in DB versus slow/non-bulk-loading binary attribute.
+ *
+ * @author Donald G. Dunne
+ */
+public class DbTestUnitProvider implements ITestUnitProvider {
+ private static DbTestUnitProvider instance = new DbTestUnitProvider();
+ // This structure will store the nameIds that map to DB name table
+ final HashCollection<CoverageItem, Integer> coverageItemToTestUnits =
+ new HashCollection<CoverageItem, Integer>(1000);
+
+ private DbTestUnitProvider() {
+ instance = this;
+ }
+
+ public static DbTestUnitProvider instance() {
+ return instance;
+ }
+
+ @Override
+ public void setTestUnits(CoverageItem coverageItem, Collection<String> testUnitNames) throws OseeCoreException {
+ coverageItemToTestUnits.removeValues(coverageItem);
+ for (String testUnitName : testUnitNames) {
+ addTestUnit(coverageItem, testUnitName);
+ }
+ }
+
+ public void removeTestUnits(CoverageItem coverageItem) throws OseeCoreException {
+ removeTestUnits(coverageItem, null);
+ }
+
+ /**
+ * @param testUnitNames if null, removes all names
+ */
+ public void removeTestUnits(CoverageItem coverageItem, Collection<String> testUnitNames) throws OseeCoreException {
+ if (testUnitNames == null) {
+ for (String name : getTestUnits(coverageItem)) {
+ Integer nameId = TestUnitStore.getTestUnitId(name, false);
+ if (nameId != null) {
+ coverageItemToTestUnits.removeValue(coverageItem, nameId);
+ }
+ }
+ } else {
+ for (String testUnitName : testUnitNames) {
+ Integer nameId = TestUnitStore.getTestUnitId(testUnitName, false);
+ if (nameId != null) {
+ coverageItemToTestUnits.removeValue(coverageItem, nameId);
+ }
+ }
+ }
+ }
+
+ @Override
+ public void addTestUnit(CoverageItem coverageItem, String testUnitName) throws OseeCoreException {
+ Collection<String> testUnitNames = getTestUnits(coverageItem);
+ if (!testUnitNames.contains(testUnitName)) {
+ Integer nameId = TestUnitStore.getTestUnitId(testUnitName, true);
+ coverageItemToTestUnits.put(coverageItem, nameId);
+ }
+ }
+
+ @Override
+ public Collection<String> getTestUnits(CoverageItem coverageItem) {
+ try {
+ Collection<Integer> testUnitNameIds = coverageItemToTestUnits.getValues(coverageItem);
+ if (testUnitNameIds != null) {
+ Set<String> names = new HashSet<String>();
+ for (Integer nameId : testUnitNameIds) {
+ String name = TestUnitStore.getTestUnitName(nameId);
+ if (Strings.isValid(name)) {
+ names.add(name);
+ }
+ }
+ return names;
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(Activator.class, OseeLevel.SEVERE, ex);
+ }
+ return Collections.emptyList();
+ }
+
+ @Override
+ public void fromXml(CoverageItem coverageItem, String xml) throws OseeCoreException {
+ removeTestUnits(coverageItem);
+ for (String nameIdStr : xml.split(";")) {
+ try {
+ coverageItemToTestUnits.put(coverageItem, new Integer(nameIdStr));
+ } catch (NumberFormatException ex) {
+ OseeLog.log(Activator.class, OseeLevel.SEVERE, ex);
+ }
+ }
+ }
+
+ @Override
+ public String toXml(CoverageItem coverageItem) throws OseeCoreException {
+ Collection<Integer> testUnitNameIds = coverageItemToTestUnits.getValues(coverageItem);
+ if (testUnitNameIds == null) {
+ return "";
+ }
+ return org.eclipse.osee.framework.jdk.core.util.Collections.toString(testUnitNameIds, ";");
+ }
+
+ @Override
+ public void removeTestUnit(CoverageItem coverageItem, String testUnitName) throws OseeCoreException {
+ removeTestUnits(coverageItem, Arrays.asList(testUnitName));
+ }
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/store/ICoverageStore.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/store/ICoverageStore.java
new file mode 100644
index 00000000000..ac7ec449956
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/store/ICoverageStore.java
@@ -0,0 +1,23 @@
+/*
+ * Created on Oct 28, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.store;
+
+import org.eclipse.osee.coverage.model.CoverageOptionManager;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+
+/**
+ * @author Donald G. Dunne
+ */
+public interface ICoverageStore {
+
+ public abstract void load(CoverageOptionManager coverageOptionManager) throws OseeCoreException;
+
+ public abstract Result save() throws OseeCoreException;
+
+ public void delete(boolean purge) throws OseeCoreException;
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/store/OseeCoveragePackageStore.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/store/OseeCoveragePackageStore.java
new file mode 100644
index 00000000000..32c60a1c46b
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/store/OseeCoveragePackageStore.java
@@ -0,0 +1,207 @@
+/*
+ * Created on Oct 28, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.store;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.util.Collection;
+import org.eclipse.osee.coverage.internal.Activator;
+import org.eclipse.osee.coverage.model.CoverageImport;
+import org.eclipse.osee.coverage.model.CoverageItem;
+import org.eclipse.osee.coverage.model.CoverageOptionManager;
+import org.eclipse.osee.coverage.model.CoverageOptionManagerDefault;
+import org.eclipse.osee.coverage.model.CoveragePackage;
+import org.eclipse.osee.coverage.model.CoverageUnit;
+import org.eclipse.osee.coverage.model.ICoverage;
+import org.eclipse.osee.coverage.util.CoverageUtil;
+import org.eclipse.osee.coverage.util.ISaveable;
+import org.eclipse.osee.framework.core.enums.CoreArtifactTypes;
+import org.eclipse.osee.framework.core.enums.CoreAttributeTypes;
+import org.eclipse.osee.framework.core.exception.OseeArgumentException;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.Lib;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+import org.eclipse.osee.framework.logging.OseeLevel;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.plugin.core.util.OseeData;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTypeManager;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
+import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.skynet.util.ElapsedTime;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class OseeCoveragePackageStore extends OseeCoverageStore implements ISaveable {
+ private final CoveragePackage coveragePackage;
+ private CoverageOptionManager coverageOptionManager = CoverageOptionManagerDefault.instance();
+ public static String IMPORT_RECORD_NAME = "Coverage Import Record";
+
+ public OseeCoveragePackageStore(Artifact artifact) throws OseeCoreException {
+ super(null, CoverageArtifactTypes.CoveragePackage);
+
+ String coverageOptions =
+ artifact.getSoleAttributeValueAsString(CoverageAttributes.COVERAGE_OPTIONS.getStoreName(), null);
+ if (Strings.isValid(coverageOptions)) {
+ coverageOptionManager = new CoverageOptionManager(coverageOptions);
+ }
+
+ this.artifact = artifact;
+ this.coveragePackage = new CoveragePackage(artifact.getName(), getCoverageOptionManager());
+ load(coverageOptionManager);
+ }
+
+ public OseeCoveragePackageStore(CoveragePackage coveragePackage) {
+ super(coveragePackage, CoverageArtifactTypes.CoveragePackage);
+ this.coveragePackage = coveragePackage;
+ }
+
+ public CoveragePackage getCoveragePackage() {
+ return coveragePackage;
+ }
+
+ public static OseeCoveragePackageStore get(CoveragePackage coveragePackage) {
+ return new OseeCoveragePackageStore(coveragePackage);
+ }
+
+ public static CoveragePackage get(Artifact artifact) throws OseeCoreException {
+ OseeCoveragePackageStore packageStore = new OseeCoveragePackageStore(artifact);
+ return packageStore.getCoveragePackage();
+ }
+
+ public void load(CoverageOptionManager coverageOptionManager) throws OseeCoreException {
+ coveragePackage.clearCoverageUnits();
+ getArtifact(false);
+ if (artifact != null) {
+ coveragePackage.setGuid(artifact.getGuid());
+ coveragePackage.setName(artifact.getName());
+ coveragePackage.setEditable(artifact.getSoleAttributeValue(CoverageAttributes.ACTIVE.getStoreName(), true));
+ for (Artifact childArt : artifact.getChildren()) {
+ if (childArt.isOfType(CoverageArtifactTypes.CoverageUnit) || childArt.isOfType(CoverageArtifactTypes.CoverageFolder)) {
+ coveragePackage.addCoverageUnit(OseeCoverageUnitStore.get(coveragePackage, childArt,
+ coverageOptionManager));
+ }
+ }
+ }
+ }
+
+ public Result save(SkynetTransaction transaction) throws OseeCoreException {
+ getArtifact(true);
+ ElapsedTime elapsedTime = new ElapsedTime(getClass().getSimpleName() + " - save");
+ artifact.setName(coveragePackage.getName());
+ artifact.setSoleAttributeValue(CoverageAttributes.ACTIVE.getStoreName(), coveragePackage.isEditable().isTrue());
+ for (CoverageUnit coverageUnit : coveragePackage.getCoverageUnits()) {
+ OseeCoverageStore store = new OseeCoverageUnitStore(coverageUnit);
+ store.save(transaction);
+ Artifact childArt = store.getArtifact(false);
+ if (childArt.getParent() == null && !(artifact.getChildren().contains(childArt))) {
+ artifact.addChild(store.getArtifact(false));
+ }
+ }
+ artifact.persist(transaction);
+ elapsedTime.end();
+ return Result.TrueResult;
+ }
+
+ public Result save(SkynetTransaction transaction, Collection<ICoverage> coverages) throws OseeCoreException {
+ ElapsedTime elapsedTime = new ElapsedTime(getClass().getSimpleName() + " - save(coverages)");
+ for (ICoverage coverage : coverages) {
+ CoverageUnit coverageUnit = null;
+ if (coverage instanceof CoverageItem) {
+ coverageUnit = ((CoverageItem) coverage).getCoverageUnit();
+ } else if (coverage instanceof CoverageUnit) {
+ coverageUnit = ((CoverageUnit) coverage);
+ } else {
+ throw new OseeArgumentException("Unhandled coverage type");
+ }
+ OseeCoverageUnitStore store = new OseeCoverageUnitStore(coverageUnit);
+ store.save(transaction);
+ }
+ elapsedTime.end();
+ return Result.TrueResult;
+ }
+
+ public Result saveImportRecord(SkynetTransaction transaction, CoverageImport coverageImport) throws OseeCoreException {
+ if (coverageImport == null) return Result.FalseResult;
+ Artifact importRecordArt = null;
+ for (Artifact artifact : getArtifact(false).getChildren()) {
+ if (artifact.getName().equals(IMPORT_RECORD_NAME)) {
+ importRecordArt = artifact;
+ break;
+ }
+ }
+ if (importRecordArt == null) {
+ importRecordArt =
+ ArtifactTypeManager.addArtifact(CoreArtifactTypes.GeneralDocument, artifact.getBranch(),
+ IMPORT_RECORD_NAME);
+ // must set the extension before setting content
+ importRecordArt.setSoleAttributeFromString(CoreAttributeTypes.NATIVE_EXTENSION, "zip");
+ getArtifact(false).addChild(importRecordArt);
+ getArtifact(false).persist(transaction);
+ }
+ importRecordArt.setSoleAttributeFromStream(CoreAttributeTypes.NATIVE_CONTENT, getInputStream(coverageImport));
+ importRecordArt.persist(transaction);
+ return Result.TrueResult;
+ }
+
+ public static InputStream getInputStream(CoverageImport coverageImport) {
+ try {
+ File zipFile = OseeData.getFile("coverage.zip");
+ Lib.compressFiles(coverageImport.getImportDirectory(), coverageImport.getImportRecordFiles(),
+ zipFile.getAbsolutePath());
+ return new FileInputStream(zipFile);
+ } catch (Exception ex) {
+ OseeLog.log(Activator.class, OseeLevel.SEVERE, ex);
+ }
+ return null;
+ }
+
+ public void delete(SkynetTransaction transaction, boolean purge) throws OseeCoreException {
+ if (getArtifact(false) != null) {
+ if (purge)
+ getArtifact(false).purgeFromBranch();
+ else
+ getArtifact(false).deleteAndPersist(transaction);
+ }
+ for (CoverageUnit childCoverageUnit : coveragePackage.getCoverageUnits()) {
+ new OseeCoverageUnitStore(childCoverageUnit).delete(transaction, purge);
+ }
+ }
+
+ @Override
+ public Result isEditable() {
+ return coveragePackage.isEditable();
+ }
+
+ public static Collection<Artifact> getCoveragePackageArtifacts() throws OseeCoreException {
+ return ArtifactQuery.getArtifactListFromType(CoverageArtifactTypes.CoveragePackage, CoverageUtil.getBranch());
+ }
+
+ public Result save(Collection<ICoverage> coverages) throws OseeCoreException {
+ try {
+ SkynetTransaction transaction = new SkynetTransaction(CoverageUtil.getBranch(), "Coverage Save");
+ save(transaction, coverages);
+ transaction.execute();
+ } catch (OseeCoreException ex) {
+ OseeLog.log(Activator.class, OseeLevel.SEVERE, ex);
+ return new Result("Save Failed: " + ex.getLocalizedMessage());
+ }
+ return Result.TrueResult;
+
+ }
+
+ public CoverageOptionManager getCoverageOptionManager() {
+ return coverageOptionManager;
+ }
+
+ public void setCoverageOptionManager(CoverageOptionManager coverageOptionManager) {
+ this.coverageOptionManager = coverageOptionManager;
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/store/OseeCoverageStore.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/store/OseeCoverageStore.java
new file mode 100644
index 00000000000..404d5ea921b
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/store/OseeCoverageStore.java
@@ -0,0 +1,80 @@
+/*
+ * Created on Oct 28, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.store;
+
+import org.eclipse.osee.coverage.internal.Activator;
+import org.eclipse.osee.coverage.model.CoverageOptionManager;
+import org.eclipse.osee.coverage.model.ICoverage;
+import org.eclipse.osee.coverage.util.CoverageUtil;
+import org.eclipse.osee.framework.core.data.IArtifactType;
+import org.eclipse.osee.framework.core.exception.ArtifactDoesNotExist;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLevel;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTypeManager;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
+import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+
+/**
+ * @author Donald G. Dunne
+ */
+public abstract class OseeCoverageStore extends CoverageStore {
+ protected Artifact artifact;
+ private final IArtifactType artifactType;
+ private final ICoverage coverage;
+
+ public OseeCoverageStore(ICoverage coverage, IArtifactType artifactType) {
+ super(coverage);
+ this.coverage = coverage;
+ this.artifactType = artifactType;
+ }
+
+ public Artifact getArtifact(boolean create) throws OseeCoreException {
+ if (artifact == null) {
+ try {
+ artifact = ArtifactQuery.getArtifactFromId(coverage.getGuid(), CoverageUtil.getBranch());
+ } catch (ArtifactDoesNotExist ex) {
+ // do nothing
+ }
+ if (artifact == null && create) {
+ artifact =
+ ArtifactTypeManager.addArtifact(artifactType, CoverageUtil.getBranch(), coverage.getGuid(), null);
+ }
+ }
+ return artifact;
+
+ }
+
+ public abstract void delete(SkynetTransaction transaction, boolean purge) throws OseeCoreException;
+
+ @Override
+ public abstract void load(CoverageOptionManager coverageOptionManager) throws OseeCoreException;
+
+ @Override
+ public Result save() throws OseeCoreException {
+ try {
+ SkynetTransaction transaction = new SkynetTransaction(CoverageUtil.getBranch(), "Coverage Save");
+ save(transaction);
+ transaction.execute();
+ } catch (OseeCoreException ex) {
+ OseeLog.log(Activator.class, OseeLevel.SEVERE, ex);
+ return new Result("Save Failed: " + ex.getLocalizedMessage());
+ }
+ return Result.TrueResult;
+ }
+
+ @Override
+ public void delete(boolean purge) throws OseeCoreException {
+ SkynetTransaction transaction = new SkynetTransaction(CoverageUtil.getBranch(), "Coverage Save");
+ delete(transaction, purge);
+ transaction.execute();
+ }
+
+ public abstract Result save(SkynetTransaction transaction) throws OseeCoreException;
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/store/OseeCoverageUnitFileContentsProvider.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/store/OseeCoverageUnitFileContentsProvider.java
new file mode 100644
index 00000000000..d5bc32a1aaa
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/store/OseeCoverageUnitFileContentsProvider.java
@@ -0,0 +1,57 @@
+/*
+ * Created on Jan 2, 2010
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.store;
+
+import java.util.logging.Level;
+import org.eclipse.osee.coverage.internal.Activator;
+import org.eclipse.osee.coverage.model.CoverageUnit;
+import org.eclipse.osee.coverage.model.ICoverageUnitFileContentsProvider;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class OseeCoverageUnitFileContentsProvider implements ICoverageUnitFileContentsProvider {
+
+ private static OseeCoverageUnitFileContentsProvider instance = new OseeCoverageUnitFileContentsProvider();
+
+ private OseeCoverageUnitFileContentsProvider() {
+ }
+
+ public static OseeCoverageUnitFileContentsProvider getInstance() {
+ return instance;
+ }
+
+ @Override
+ public String getFileContents(CoverageUnit coverageUnit) {
+ try {
+ OseeCoverageUnitStore store = new OseeCoverageUnitStore(coverageUnit);
+ Artifact artifact = store.getArtifact(false);
+ if (artifact != null) {
+ return artifact.getSoleAttributeValue(CoverageAttributes.FILE_CONTENTS.getStoreName(), "");
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(Activator.class, Level.SEVERE, ex);
+ }
+ return "";
+ }
+
+ @Override
+ public void setFileContents(CoverageUnit coverageUnit, String fileContents) {
+ try {
+ OseeCoverageUnitStore store = new OseeCoverageUnitStore(coverageUnit);
+ Artifact artifact = store.getArtifact(false);
+ if (artifact != null) {
+ artifact.setSoleAttributeValue(CoverageAttributes.FILE_CONTENTS.getStoreName(), fileContents);
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(Activator.class, Level.SEVERE, ex);
+ }
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/store/OseeCoverageUnitStore.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/store/OseeCoverageUnitStore.java
new file mode 100644
index 00000000000..bfff32aeb91
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/store/OseeCoverageUnitStore.java
@@ -0,0 +1,197 @@
+/*
+ * Created on Oct 28, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.store;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import org.eclipse.osee.coverage.model.CoverageItem;
+import org.eclipse.osee.coverage.model.CoverageOptionManager;
+import org.eclipse.osee.coverage.model.CoverageOptionManagerDefault;
+import org.eclipse.osee.coverage.model.CoverageUnit;
+import org.eclipse.osee.coverage.model.ICoverage;
+import org.eclipse.osee.coverage.util.CoverageUtil;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+import org.eclipse.osee.framework.skynet.core.User;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
+import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction;
+import org.eclipse.osee.framework.skynet.core.utility.UsersByIds;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class OseeCoverageUnitStore extends OseeCoverageStore {
+
+ private final CoverageUnit coverageUnit;
+
+ public OseeCoverageUnitStore(ICoverage parent, Artifact artifact, CoverageOptionManager coverageOptionManager) throws OseeCoreException {
+ super(null, artifact.getArtifactType());
+ this.artifact = artifact;
+ this.coverageUnit =
+ new CoverageUnit(parent, artifact.getName(), "", OseeCoverageUnitFileContentsProvider.getInstance());
+ load(coverageOptionManager);
+ }
+
+ public OseeCoverageUnitStore(CoverageUnit coverageUnit) {
+ super(coverageUnit,
+ coverageUnit.isFolder() ? CoverageArtifactTypes.CoverageFolder : CoverageArtifactTypes.CoverageUnit);
+ this.coverageUnit = coverageUnit;
+ }
+
+ public static CoverageUnit get(ICoverage parent, Artifact artifact, CoverageOptionManager coverageOptionManager) throws OseeCoreException {
+ OseeCoverageUnitStore unitStore = new OseeCoverageUnitStore(parent, artifact, coverageOptionManager);
+ return unitStore.getCoverageUnit();
+ }
+
+ public static OseeCoverageUnitStore get(CoverageUnit coverageUnit) throws OseeCoreException {
+ return new OseeCoverageUnitStore(coverageUnit);
+ }
+
+ public void delete(SkynetTransaction transaction, boolean purge) throws OseeCoreException {
+ if (getArtifact(false) != null) {
+ if (purge)
+ getArtifact(false).purgeFromBranch();
+ else
+ getArtifact(false).deleteAndPersist(transaction);
+ }
+ for (CoverageUnit childCoverageUnit : coverageUnit.getCoverageUnits()) {
+ new OseeCoverageUnitStore(childCoverageUnit).delete(transaction, purge);
+ }
+ }
+
+ public void load(CoverageOptionManager coverageOptionManager) throws OseeCoreException {
+ coverageUnit.clearCoverageUnits();
+ coverageUnit.clearCoverageItems();
+ Artifact artifact = getArtifact(false);
+ if (artifact != null) {
+ coverageUnit.setName(artifact.getName());
+ coverageUnit.setGuid(artifact.getGuid());
+ for (String value : artifact.getAttributesToStringList(CoverageAttributes.COVERAGE_ITEM.getStoreName())) {
+ CoverageItem item =
+ new CoverageItem(coverageUnit, value, coverageOptionManager, DbTestUnitProvider.instance());
+ coverageUnit.addCoverageItem(item);
+ }
+ // Don't load file contents until needed
+ coverageUnit.setFileContentsProvider(OseeCoverageUnitFileContentsProvider.getInstance());
+ coverageUnit.setNotes(artifact.getSoleAttributeValueAsString(CoverageAttributes.NOTES.getStoreName(), ""));
+ coverageUnit.setFolder(artifact.isOfType(CoverageArtifactTypes.CoverageFolder));
+ coverageUnit.setAssignees(artifact.getSoleAttributeValueAsString(CoverageAttributes.ASSIGNEES.getStoreName(),
+ ""));
+ coverageUnit.setNamespace(artifact.getSoleAttributeValueAsString(CoverageAttributes.NAMESPACE.getStoreName(),
+ ""));
+ coverageUnit.setOrderNumber(artifact.getSoleAttributeValueAsString(CoverageAttributes.ORDER.getStoreName(), ""));
+ coverageUnit.setLocation(artifact.getSoleAttributeValueAsString(CoverageAttributes.LOCATION.getStoreName(), ""));
+ for (Artifact childArt : artifact.getChildren()) {
+ if (childArt.isOfType(CoverageArtifactTypes.CoverageUnit) || childArt.isOfType(CoverageArtifactTypes.CoverageFolder)) {
+ coverageUnit.addCoverageUnit(OseeCoverageUnitStore.get(coverageUnit, childArt, coverageOptionManager));
+ }
+ }
+ }
+ }
+
+ @Override
+ public Result save(SkynetTransaction transaction) throws OseeCoreException {
+ Artifact artifact = getArtifact(true);
+ artifact.setName(coverageUnit.getName());
+
+ List<String> items = new ArrayList<String>();
+ for (CoverageItem coverageItem : coverageUnit.getCoverageItems()) {
+ if (!(coverageItem.getTestUnitProvider() instanceof DbTestUnitProvider)) {
+ // Get test names from coverageItem
+ Collection<String> testUnitNames = coverageItem.getTestUnits();
+ // Set provider to db provider
+ coverageItem.setTestUnitProvider(DbTestUnitProvider.instance());
+ // store off testUnitNames; this will add to db and replace names with db nameId
+ coverageItem.setTestUnits(testUnitNames);
+ }
+ items.add(coverageItem.toXml());
+ }
+ artifact.setAttributeValues(CoverageAttributes.COVERAGE_ITEM.getStoreName(), items);
+ if (coverageUnit.getNotes() != null) {
+ artifact.setSoleAttributeFromString(CoverageAttributes.NOTES.getStoreName(), coverageUnit.getNotes());
+ }
+ if (Strings.isValid(coverageUnit.getNamespace())) {
+ artifact.setSoleAttributeFromString(CoverageAttributes.NAMESPACE.getStoreName(), coverageUnit.getNamespace());
+ }
+ if (coverageUnit.getFileContentsProvider() != null && coverageUnit.getFileContentsProvider() != OseeCoverageUnitFileContentsProvider.getInstance()) {
+ String fileContents = coverageUnit.getFileContents();
+ if (Strings.isValid(fileContents)) {
+ coverageUnit.setFileContentsProvider(OseeCoverageUnitFileContentsProvider.getInstance());
+ coverageUnit.setFileContents(fileContents);
+ }
+ }
+ if (Strings.isValid(coverageUnit.getOrderNumber())) {
+ artifact.setSoleAttributeFromString(CoverageAttributes.ORDER.getStoreName(), coverageUnit.getOrderNumber());
+ }
+ if (Strings.isValid(coverageUnit.getAssignees())) {
+ artifact.setSoleAttributeFromString(CoverageAttributes.ASSIGNEES.getStoreName(), coverageUnit.getAssignees());
+ }
+ if (Strings.isValid(coverageUnit.getLocation())) {
+ artifact.setSoleAttributeFromString(CoverageAttributes.LOCATION.getStoreName(), coverageUnit.getLocation());
+ }
+ if (coverageUnit.getParent() != null) {
+ Artifact parentArt =
+ ArtifactQuery.getArtifactFromId(coverageUnit.getParent().getGuid(), CoverageUtil.getBranch());
+ if (artifact.getParent() == null && !parentArt.getChildren().contains(artifact)) {
+ parentArt.addChild(artifact);
+ }
+ }
+ // Save current/new coverage items
+ for (CoverageUnit childCoverageUnit : coverageUnit.getCoverageUnits()) {
+ new OseeCoverageUnitStore(childCoverageUnit).save(transaction);
+ }
+ // Delete removed coverage units and folders
+ for (Artifact childArt : artifact.getChildren()) {
+ if (childArt.isOfType(CoverageArtifactTypes.CoverageUnit) || childArt.isOfType(CoverageArtifactTypes.CoverageFolder)) {
+ boolean found = false;
+ for (CoverageUnit childCoverageUnit : coverageUnit.getCoverageUnits()) {
+ if (childCoverageUnit.getGuid().equals(childArt.getGuid())) {
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ new OseeCoverageUnitStore(coverageUnit, childArt, CoverageOptionManagerDefault.instance()).delete(
+ transaction, false);
+ }
+ }
+ }
+
+ artifact.persist(transaction);
+ return Result.TrueResult;
+ }
+
+ public CoverageUnit getCoverageUnit() {
+ return coverageUnit;
+ }
+
+ public static void setAssignees(CoverageUnit coverageUnit, User user) throws OseeCoreException {
+ setAssignees(coverageUnit, Collections.singleton(user));
+ }
+
+ public static void setAssignees(CoverageUnit coverageUnit, Collection<User> users) throws OseeCoreException {
+ coverageUnit.setAssignees(getAssigneesToString(users));
+ }
+
+ private static String getAssigneesToString(Collection<User> users) throws OseeCoreException {
+ return UsersByIds.getStorageString(users);
+ }
+
+ public static Collection<User> getAssignees(CoverageUnit coverageUnit) throws OseeCoreException {
+ return getAssigneesFromString(coverageUnit.getAssignees());
+ }
+
+ private static Collection<User> getAssigneesFromString(String string) throws OseeCoreException {
+ if (!Strings.isValid(string)) {
+ return Collections.emptyList();
+ }
+ return UsersByIds.getUsers(string);
+ }
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/store/TestUnitStore.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/store/TestUnitStore.java
new file mode 100644
index 00000000000..d8267ffb6f8
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/store/TestUnitStore.java
@@ -0,0 +1,111 @@
+/*
+ * Created on Jan 20, 2010
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.store;
+
+import java.util.HashMap;
+import java.util.Map;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.database.core.ConnectionHandler;
+import org.eclipse.osee.framework.database.core.IOseeStatement;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class TestUnitStore {
+ private static String TEST_UNIT_NAME_QUERY = "select name from osee_cvg_testunits where name_id = ?";
+ private static String TEST_UNIT_ID_QUERY = "select name_id from osee_cvg_testunits where name = ?";
+ private static String INSERT_TEST_UNIT_NAME = "insert into osee_cvg_testunits (name_id, name) values (?,?)";
+ private static String DELETE_ALL_TEST_NAMES = "delete from osee_cvg_testunits";
+ private static String TEST_UNIT_COUNT_QUERY = "SELECT count(name) from osee_cvg_testunits";
+ private static TestUnitStore instance = new TestUnitStore();
+ final Map<String, Integer> nameToId = new HashMap<String, Integer>(1000);
+ final Map<Integer, String> idToName = new HashMap<Integer, String>(1000);
+
+ private TestUnitStore() {
+ instance = this;
+ }
+
+ private int addTestUnitNameToDb(String name) throws OseeCoreException {
+ IOseeStatement chStmt = ConnectionHandler.getStatement();
+ int nextId = getNextTestUnitNameId();
+ try {
+ chStmt.runCallableStatement(INSERT_TEST_UNIT_NAME, nextId, name);
+ } finally {
+ chStmt.close();
+ }
+ return nextId;
+ }
+
+ public static void clearStore() throws OseeCoreException {
+ instance.nameToId.clear();
+ instance.idToName.clear();
+ IOseeStatement chStmt = ConnectionHandler.getStatement();
+ try {
+ chStmt.runCallableStatement(DELETE_ALL_TEST_NAMES);
+ } finally {
+ chStmt.close();
+ }
+ }
+
+ private int getNextTestUnitNameId() throws OseeCoreException {
+ return getTestUnitCount() + 1;
+ }
+
+ public static int getTestUnitCount() throws OseeCoreException {
+ IOseeStatement chStmt = ConnectionHandler.getStatement();
+ try {
+ chStmt.runPreparedQuery(TEST_UNIT_COUNT_QUERY);
+ chStmt.next();
+ return chStmt.getInt(1);
+ } finally {
+ chStmt.close();
+ }
+ }
+
+ private void cacheName(String name, Integer idInt) {
+ nameToId.put(name, idInt);
+ idToName.put(idInt, name);
+ }
+
+ public static Integer getTestUnitId(String name, boolean add) throws OseeCoreException {
+ if (instance.nameToId.containsKey(name)) return instance.nameToId.get(name);
+ IOseeStatement chStmt = ConnectionHandler.getStatement();
+ try {
+ chStmt.runPreparedQuery(TEST_UNIT_ID_QUERY, name);
+ if (chStmt.next()) {
+ Integer nameId = chStmt.getInt(1);
+ instance.cacheName(name, nameId);
+ return nameId;
+ }
+ if (add) {
+ int nameId = instance.addTestUnitNameToDb(name);
+ instance.cacheName(name, nameId);
+ return nameId;
+ } else {
+ return null;
+ }
+ } finally {
+ chStmt.close();
+ }
+ }
+
+ public static String getTestUnitName(Integer nameId) throws OseeCoreException {
+ if (instance.idToName.containsKey(nameId)) return instance.idToName.get(nameId);
+ IOseeStatement chStmt = ConnectionHandler.getStatement();
+ try {
+ chStmt.runPreparedQuery(TEST_UNIT_NAME_QUERY, nameId);
+ if (chStmt.next()) {
+ String name = chStmt.getString(1);
+ instance.cacheName(name, nameId);
+ return name;
+ }
+ } finally {
+ chStmt.close();
+ }
+ return null;
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/util/CoverageImage.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/util/CoverageImage.java
new file mode 100644
index 00000000000..d7731252d02
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/util/CoverageImage.java
@@ -0,0 +1,56 @@
+/*******************************************************************************
+ * Copyright (c) 2009 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.coverage.util;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.osee.coverage.internal.Activator;
+import org.eclipse.osee.framework.ui.swt.ImageManager;
+import org.eclipse.osee.framework.ui.swt.KeyedImage;
+
+/**
+ * @author Donald G. Dunne
+ */
+public enum CoverageImage implements KeyedImage {
+ COVERAGE("coverage.gif"),
+ COVERAGE_IMPORT("coverageImport.gif"),
+ COVERAGE_PACKAGE("coveragePackage.gif"),
+ LINK("link.gif"),
+ FOLDER_GREEN("folderGreenPlus.gif"),
+ FOLDER_RED("folderRedX.gif"),
+ UNIT("unit.gif"),
+ UNIT_EDIT("unitEdit.gif"),
+ UNIT_GREEN("unitGreenPlus.gif"),
+ UNIT_RED("unitRedPlus.gif"),
+ TEST_UNIT("testUnit.gif"),
+ TEST_UNIT_GREEN("testUnitGreenPlus.gif"),
+ TEST_UNIT_RED("testUnitRedPlus.gif"),
+ ITEM("item.gif"),
+ ITEMS("items.gif"),
+ ITEM_EDIT("itemEdit.gif"),
+ ITEM_GREEN("itemGreenPlus.gif"),
+ ITEM_RED("itemRedPlus.gif");
+
+ private final String fileName;
+
+ private CoverageImage(String fileName) {
+ this.fileName = fileName;
+ }
+
+ @Override
+ public ImageDescriptor createImageDescriptor() {
+ return ImageManager.createImageDescriptor(Activator.PLUGIN_ID, "images", fileName);
+ }
+
+ @Override
+ public String getImageKey() {
+ return Activator.PLUGIN_ID + "." + fileName;
+ }
+} \ No newline at end of file
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/util/CoverageUtil.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/util/CoverageUtil.java
new file mode 100644
index 00000000000..db73051acdf
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/util/CoverageUtil.java
@@ -0,0 +1,260 @@
+/*
+ * Created on Oct 13, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.util;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.logging.Level;
+import org.eclipse.osee.coverage.internal.Activator;
+import org.eclipse.osee.coverage.merge.MatchItem;
+import org.eclipse.osee.coverage.merge.MergeManager;
+import org.eclipse.osee.coverage.model.CoverageImport;
+import org.eclipse.osee.coverage.model.CoverageItem;
+import org.eclipse.osee.coverage.model.CoverageOption;
+import org.eclipse.osee.coverage.model.CoveragePackageBase;
+import org.eclipse.osee.coverage.model.CoverageUnit;
+import org.eclipse.osee.coverage.model.ICoverage;
+import org.eclipse.osee.coverage.model.ICoverageItemProvider;
+import org.eclipse.osee.coverage.model.ICoverageUnitProvider;
+import org.eclipse.osee.framework.core.enums.BranchArchivedState;
+import org.eclipse.osee.framework.core.enums.BranchControlled;
+import org.eclipse.osee.framework.core.enums.BranchType;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.core.exception.OseeStateException;
+import org.eclipse.osee.framework.core.model.Branch;
+import org.eclipse.osee.framework.jdk.core.type.Pair;
+import org.eclipse.osee.framework.jdk.core.util.Collections;
+import org.eclipse.osee.framework.jdk.core.util.Lib;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.SystemGroup;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.ui.skynet.branch.BranchSelectionDialog;
+import org.eclipse.osee.framework.ui.swt.KeyedImage;
+import org.eclipse.swt.widgets.Listener;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class CoverageUtil {
+
+ private static Branch branch = null;
+ private static List<Listener> branchChangeListeners = new ArrayList<Listener>();
+
+ public static boolean getBranchFromUser(boolean force) throws OseeCoreException {
+ if (force || CoverageUtil.getBranch() == null) {
+ Collection<Branch> branches =
+ BranchManager.getBranches(BranchArchivedState.UNARCHIVED, BranchControlled.ALL, BranchType.WORKING);
+ if (isAdmin()) {
+ branches.add(BranchManager.getCommonBranch());
+ }
+ BranchSelectionDialog dialog = new BranchSelectionDialog("Select Branch", branches);
+ if (dialog.open() != 0) {
+ return false;
+ }
+ CoverageUtil.setBranch(dialog.getSelected());
+ }
+ return true;
+ }
+
+ public static CoverageItem getCoverageItemMatchingOrder(Collection<? extends ICoverage> items, CoverageItem coverageItem) {
+ for (ICoverage coverage : items) {
+ if (coverage instanceof CoverageItem && ((CoverageItem) coverage).getOrderNumber().equals(
+ coverageItem.getOrderNumber())) {
+ return (CoverageItem) coverage;
+ }
+ }
+ return null;
+ }
+
+ public static KeyedImage getCoveragePackageBaseImage(CoveragePackageBase coveragePackageBase) {
+ if (coveragePackageBase instanceof CoverageImport) {
+ return CoverageImage.COVERAGE_IMPORT;
+ }
+ return CoverageImage.COVERAGE_PACKAGE;
+ }
+
+ public static boolean isInTest() {
+ return Boolean.valueOf(System.getProperty("osee.isInTest"));
+ }
+
+ public static void setIsInTest(boolean isInTest) {
+ System.setProperty("osee.isInTest", String.valueOf(isInTest));
+ }
+
+ public static CoveragePackageBase getParentCoveragePackageBase(ICoverage coverage) {
+ if (coverage.getParent() instanceof CoveragePackageBase) {
+ return (CoveragePackageBase) coverage.getParent();
+ }
+ return getParentCoveragePackageBase(coverage.getParent());
+ }
+
+ public static CoverageUnit getTopLevelCoverageUnit(ICoverage coverage) {
+ if (coverage instanceof CoverageUnit && coverage.getParent() instanceof CoveragePackageBase) {
+ return (CoverageUnit) coverage;
+ }
+ return getTopLevelCoverageUnit(coverage.getParent());
+ }
+
+ public static Collection<ICoverage> getFirstNonFolderCoverageUnits(Collection<ICoverage> coverages) {
+ Set<ICoverage> firstNonFolderCoverageUnits = new HashSet<ICoverage>();
+ for (ICoverage coverage : coverages) {
+ firstNonFolderCoverageUnits.add(CoverageUtil.getFirstNonFolderCoverageUnit(coverage));
+ }
+ return firstNonFolderCoverageUnits;
+ }
+
+ public static CoverageUnit getFirstNonFolderCoverageUnit(ICoverage coverage) {
+ if (coverage instanceof CoverageUnit) {
+ if (coverage.getParent() instanceof CoveragePackageBase) {
+ return (CoverageUnit) coverage;
+ }
+ if (((CoverageUnit) coverage.getParent()).isFolder()) {
+ return (CoverageUnit) coverage;
+ }
+ }
+ ICoverage parentCovergeUnit = getFirstNonFolderCoverageUnit(coverage.getParent());
+ if (parentCovergeUnit != null) {
+ return (CoverageUnit) parentCovergeUnit;
+ } else {
+ return (CoverageUnit) coverage;
+ }
+ }
+
+ public static void getParentCoverageUnits(ICoverage coverage, Set<CoverageUnit> parents) {
+ if (coverage.getParent() == null) {
+ return;
+ }
+ if (coverage.getParent() instanceof CoverageUnit) {
+ parents.add((CoverageUnit) coverage.getParent());
+ getParentCoverageUnits(coverage.getParent(), parents);
+ }
+ }
+
+ public static Branch getBranch() {
+ return branch;
+ }
+
+ public static void setBranch(Branch branch) {
+ CoverageUtil.branch = branch;
+ for (Listener listener : branchChangeListeners) {
+ listener.handleEvent(null);
+ }
+ }
+
+ public static void addBranchChangeListener(Listener listener) {
+ branchChangeListeners.add(listener);
+ }
+
+ public static boolean isAdmin() {
+ try {
+ return SystemGroup.OseeAdmin.isCurrentUserMember();
+ } catch (OseeCoreException ex) {
+ OseeLog.log(Activator.class, Level.SEVERE, ex);
+ return false;
+ }
+ }
+
+ /**
+ * Returns string of all parent ICoverage items up the tree
+ */
+ public static String getFullPath(ICoverage coverage) {
+ StringBuffer sb = new StringBuffer();
+ getFullPathRecurse(coverage.getParent(), sb);
+ return sb.toString();
+ }
+
+ public static void getFullPathRecurse(ICoverage coverage, StringBuffer sb) {
+ if (coverage == null) return;
+ getFullPathRecurse(coverage.getParent(), sb);
+ if (coverage instanceof CoverageImport) {
+ sb.append("[Import]");
+ } else {
+ sb.append("[" + coverage.getName() + "]");
+ }
+ }
+
+ public static void printCoverageItemDiffs(CoveragePackageBase coveragePackage, CoveragePackageBase coverageImport) throws OseeStateException {
+ for (CoverageItem importItem : coverageImport.getCoverageItems()) {
+ MatchItem item = MergeManager.getPackageCoverageItem(coveragePackage, importItem);
+ if (!item.isMatch()) {
+ System.out.println(String.format("No Match for item [%s] path [%s]", importItem,
+ CoverageUtil.getFullPath(importItem)));
+ }
+ }
+ }
+
+ public static String printTree(ICoverage coverage) throws OseeStateException {
+ StringBuffer sb = new StringBuffer();
+ printTreeRecurse(coverage, sb, 0);
+ return sb.toString();
+ }
+
+ public static void printTreeRecurse(ICoverage coverage, StringBuffer sb, int pad) throws OseeStateException {
+ if (coverage == null) return;
+ sb.append(Lib.getSpace(pad * 3) + coverage.toString() + "\n");
+ if (coverage instanceof ICoverageUnitProvider) {
+ for (CoverageUnit childCoverageUnit : ((ICoverageUnitProvider) coverage).getCoverageUnits()) {
+ printTreeRecurse(childCoverageUnit, sb, pad + 1);
+ }
+ }
+ if (coverage instanceof ICoverageItemProvider) {
+ for (CoverageItem childCoverageItem : ((ICoverageItemProvider) coverage).getCoverageItems()) {
+ printTreeRecurse(childCoverageItem, sb, pad + 1);
+ }
+ }
+ }
+
+ public static List<CoverageItem> getCoverageItemsCovered(List<CoverageItem> coverageItems, CoverageOption... CoverageOption) {
+ List<CoverageOption> coverageMethods = Collections.getAggregate(CoverageOption);
+ List<CoverageItem> items = new ArrayList<CoverageItem>();
+ for (CoverageItem coverageItem : coverageItems) {
+ if (coverageMethods.contains(coverageItem.getCoverageMethod())) {
+ items.add(coverageItem);
+ }
+ }
+ return items;
+ }
+
+ public static Pair<Integer, String> getPercent(int complete, int total, boolean showZero) {
+ if (total == 0 || complete == 0) return new Pair<Integer, String>(0, getPercentString(0, complete, total,
+ showZero));
+ Double percent = new Double(complete);
+ percent = percent / total;
+ percent = percent * 100;
+ return new Pair<Integer, String>(percent.intValue(), getPercentString(percent.intValue(), complete, total,
+ showZero));
+ }
+
+ public static String getPercentString(int percent, int complete, int total, boolean showZero) {
+ if (!showZero && percent == 0) {
+ return "0%";
+ }
+ return String.format("%d%% - %d / %d", percent, complete, total);
+ }
+
+ public static boolean isAllCoverageItems(Collection<? extends ICoverage> coverages) throws OseeCoreException {
+ boolean coverageItemFound = false;
+ boolean nonCoverageItemFound = false;
+ for (ICoverage coverage : coverages) {
+ if (coverage instanceof CoverageItem) {
+ coverageItemFound = true;
+ if (nonCoverageItemFound) {
+ throw new OseeStateException("Coverages can only be all CoverageItem or all !CoverageItem");
+ }
+ } else {
+ nonCoverageItemFound = true;
+ if (coverageItemFound) {
+ throw new OseeStateException("Coverages can only be all CoverageItem or all !CoverageItem");
+ }
+ return false;
+ }
+ }
+ return true;
+ }
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/util/ISaveable.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/util/ISaveable.java
new file mode 100644
index 00000000000..d4ebe42e1c3
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/util/ISaveable.java
@@ -0,0 +1,27 @@
+/*
+ * Created on Oct 8, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.util;
+
+import java.util.Collection;
+import org.eclipse.osee.coverage.model.CoverageImport;
+import org.eclipse.osee.coverage.model.ICoverage;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+
+/**
+ * @author Donald G. Dunne
+ */
+public interface ISaveable {
+
+ public Result save() throws OseeCoreException;
+
+ public Result save(Collection<ICoverage> coverages) throws OseeCoreException;
+
+ public Result saveImportRecord(SkynetTransaction transaction, CoverageImport coverageImport) throws OseeCoreException;
+
+ public Result isEditable();
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/util/NotSaveable.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/util/NotSaveable.java
new file mode 100644
index 00000000000..6d6a072d28b
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/util/NotSaveable.java
@@ -0,0 +1,40 @@
+/*
+ * Created on Oct 8, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.util;
+
+import java.util.Collection;
+import org.eclipse.osee.coverage.model.CoverageImport;
+import org.eclipse.osee.coverage.model.ICoverage;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class NotSaveable implements ISaveable {
+
+ @Override
+ public Result isEditable() {
+ return new Result("Not Editable");
+ }
+
+ @Override
+ public Result save() {
+ return new Result("Not Saveable");
+ }
+
+ @Override
+ public Result save(Collection<ICoverage> coverages) throws OseeCoreException {
+ return new Result("Not Saveable");
+ }
+
+ @Override
+ public Result saveImportRecord(SkynetTransaction transaction, CoverageImport coverageImport) throws OseeCoreException {
+ return new Result("Not Saveable");
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/util/dialog/CoverageListDialog.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/util/dialog/CoverageListDialog.java
new file mode 100644
index 00000000000..a5ed8cc2a59
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/util/dialog/CoverageListDialog.java
@@ -0,0 +1,47 @@
+/*
+ * Created on Oct 6, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.util.dialog;
+
+import java.util.Collection;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.osee.coverage.model.ICoverage;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class CoverageListDialog extends org.eclipse.ui.dialogs.ListDialog {
+
+ public CoverageListDialog(String title, String message) {
+ super(Display.getCurrent().getActiveShell());
+ setTitle(title);
+ setMessage(message);
+ setContentProvider(new IStructuredContentProvider() {
+ @SuppressWarnings("unchecked")
+ public Object[] getElements(Object arg0) {
+ return ((Collection) arg0).toArray();
+ }
+
+ public void dispose() {
+ }
+
+ public void inputChanged(Viewer arg0, Object arg1, Object arg2) {
+ }
+ });
+ setLabelProvider(new LabelProvider() {
+ @Override
+ public String getText(Object element) {
+ if (element instanceof ICoverage) {
+ return ((ICoverage) element).getName();
+ }
+ return "Unknown";
+ }
+ });
+
+ }
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/util/dialog/CoverageMethodListDialog.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/util/dialog/CoverageMethodListDialog.java
new file mode 100644
index 00000000000..aac5b091331
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/util/dialog/CoverageMethodListDialog.java
@@ -0,0 +1,86 @@
+/*******************************************************************************
+ * 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.coverage.util.dialog;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.osee.coverage.internal.Activator;
+import org.eclipse.osee.coverage.model.CoverageOption;
+import org.eclipse.osee.framework.logging.OseeLevel;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.ui.plugin.util.ArrayTreeContentProvider;
+import org.eclipse.osee.framework.ui.skynet.util.ArtifactNameSorter;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.dialogs.CheckedTreeSelectionDialog;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class CoverageMethodListDialog extends CheckedTreeSelectionDialog {
+
+ public CoverageMethodListDialog(Collection<CoverageOption> values) {
+ this(values, new ArrayList<CoverageOption>());
+ }
+
+ public CoverageMethodListDialog(Collection<CoverageOption> values, Collection<CoverageOption> selected) {
+ super(Display.getCurrent().getActiveShell(), labelProvider, new ArrayTreeContentProvider());
+ setTitle("Select Coverage Method(s)");
+ setMessage("Select Coverage Method(s)");
+ setComparator(new ArtifactNameSorter());
+ try {
+ setInput(values.toArray(new CoverageOption[values.size()]));
+ } catch (Exception ex) {
+ OseeLog.log(Activator.class, OseeLevel.SEVERE_POPUP, ex);
+ }
+ setInitialSelections(selected.toArray(new CoverageOption[selected.size()]));
+ }
+
+ public Set<CoverageOption> getSelected() {
+ Set<CoverageOption> selected = new HashSet<CoverageOption>();
+ for (Object obj : getResult())
+ selected.add((CoverageOption) obj);
+ return selected;
+ }
+
+ static ILabelProvider labelProvider = new ILabelProvider() {
+
+ public Image getImage(Object element) {
+ return null;
+ }
+
+ public String getText(Object element) {
+ if (element instanceof CoverageOption) {
+ return ((CoverageOption) element).getNameDesc();
+ }
+ return "Unknown";
+ }
+
+ public void addListener(ILabelProviderListener listener) {
+ }
+
+ public void dispose() {
+ }
+
+ public boolean isLabelProperty(Object element, String property) {
+ return false;
+ }
+
+ public void removeListener(ILabelProviderListener listener) {
+ }
+
+ };
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/util/dialog/CoveragePackageArtifactListDialog.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/util/dialog/CoveragePackageArtifactListDialog.java
new file mode 100644
index 00000000000..25671e92b84
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/util/dialog/CoveragePackageArtifactListDialog.java
@@ -0,0 +1,47 @@
+/*
+ * Created on Oct 6, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.util.dialog;
+
+import java.util.Collection;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class CoveragePackageArtifactListDialog extends org.eclipse.ui.dialogs.ListDialog {
+
+ public CoveragePackageArtifactListDialog(String title, String message) {
+ super(Display.getCurrent().getActiveShell());
+ setTitle(title);
+ setMessage(message);
+ setContentProvider(new IStructuredContentProvider() {
+ @SuppressWarnings("unchecked")
+ public Object[] getElements(Object arg0) {
+ return ((Collection) arg0).toArray();
+ }
+
+ public void dispose() {
+ }
+
+ public void inputChanged(Viewer arg0, Object arg1, Object arg2) {
+ }
+ });
+ setLabelProvider(new LabelProvider() {
+ @Override
+ public String getText(Object element) {
+ if (element instanceof Artifact) {
+ return ((Artifact) element).getName();
+ }
+ return "Unknown";
+ }
+ });
+
+ }
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/util/widget/CoverageXWidgetFactory.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/util/widget/CoverageXWidgetFactory.java
new file mode 100644
index 00000000000..aef8cbe606a
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/util/widget/CoverageXWidgetFactory.java
@@ -0,0 +1,25 @@
+/*
+ * Created on Jan 16, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.util.widget;
+
+import org.eclipse.osee.framework.ui.skynet.widgets.XWidget;
+import org.eclipse.osee.framework.ui.skynet.widgets.workflow.DynamicXWidgetLayoutData;
+import org.eclipse.osee.framework.ui.skynet.widgets.workflow.IXWidgetProvider;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class CoverageXWidgetFactory implements IXWidgetProvider {
+
+ @Override
+ public XWidget createXWidget(String widgetName, String name, DynamicXWidgetLayoutData widgetLayoutData) {
+ if (widgetName.equals("XHyperlabelCoverageMethodSelection")) {
+ return new XHyperlabelCoverageMethodSelection();
+ }
+ return null;
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/util/widget/XHyperlabelCoverageMethodSelection.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/util/widget/XHyperlabelCoverageMethodSelection.java
new file mode 100644
index 00000000000..cdf33d2cdfd
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/util/widget/XHyperlabelCoverageMethodSelection.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.coverage.util.widget;
+
+import java.util.Collection;
+import java.util.HashSet;
+import org.eclipse.osee.coverage.model.CoverageOption;
+import org.eclipse.osee.coverage.model.CoverageOptionManager;
+import org.eclipse.osee.coverage.util.dialog.CoverageMethodListDialog;
+import org.eclipse.osee.framework.jdk.core.util.Collections;
+import org.eclipse.osee.framework.logging.OseeLevel;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.widgets.XHyperlinkLabelCmdValueSelection;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XHyperlabelCoverageMethodSelection extends XHyperlinkLabelCmdValueSelection {
+
+ public static final String WIDGET_ID = XHyperlabelCoverageMethodSelection.class.getSimpleName();
+ Collection<CoverageOption> selectedCoverageMethods = new HashSet<CoverageOption>();
+ CoverageMethodListDialog dialog = null;
+ CoverageOptionManager coverageOptionManager;
+
+ public XHyperlabelCoverageMethodSelection() {
+ super("Coverage Methods", true, 80);
+ }
+
+ public XHyperlabelCoverageMethodSelection(String label, CoverageOptionManager coverageOptionManager) {
+ super(label, true, 80);
+ this.coverageOptionManager = coverageOptionManager;
+ }
+
+ public Collection<CoverageOption> getSelectedCoverageMethods() {
+ return selectedCoverageMethods;
+ }
+
+ @Override
+ public String getCurrentValue() {
+ return Collections.toString(selectedCoverageMethods, ", ");
+ }
+
+ public void setSelectedCoverageMethods(Collection<CoverageOption> selectedCoverageMethods) {
+ this.selectedCoverageMethods = selectedCoverageMethods;
+ notifyXModifiedListeners();
+ refresh();
+ }
+
+ @Override
+ public boolean handleClear() {
+ selectedCoverageMethods.clear();
+ notifyXModifiedListeners();
+ return true;
+ }
+
+ @Override
+ public boolean handleSelection() {
+ try {
+ dialog = new CoverageMethodListDialog(coverageOptionManager.getEnabled(), selectedCoverageMethods);
+ int result = dialog.open();
+ if (result == 0) {
+ selectedCoverageMethods.clear();
+ for (Object obj : dialog.getSelected()) {
+ selectedCoverageMethods.add((CoverageOption) obj);
+ }
+ notifyXModifiedListeners();
+ }
+ return true;
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, OseeLevel.SEVERE_POPUP, ex);
+ }
+ return false;
+ }
+
+ public CoverageOptionManager getCoverageOptionManager() {
+ return coverageOptionManager;
+ }
+
+ public void setCoverageOptionManager(CoverageOptionManager coverageOptionManager) {
+ this.coverageOptionManager = coverageOptionManager;
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/AggregateCoverageUnitResult.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/AggregateCoverageUnitResult.java
new file mode 100644
index 00000000000..b57a07b89f0
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/AggregateCoverageUnitResult.java
@@ -0,0 +1,44 @@
+package org.eclipse.osee.coverage.vcast;
+
+public class AggregateCoverageUnitResult {
+ private String name;
+ private Integer numLines = null;
+ private Integer numCovered = null;
+ private String notes = "";
+
+ public AggregateCoverageUnitResult(String name) {
+ this.name = name;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public Integer getNumLines() {
+ return numLines;
+ }
+
+ public void setNumLines(Integer numLines) {
+ this.numLines = numLines;
+ }
+
+ public Integer getNumCovered() {
+ return numCovered;
+ }
+
+ public void setNumCovered(Integer numCovered) {
+ this.numCovered = numCovered;
+ }
+
+ public String toString() {
+ return String.format("Aggregate Result [%s] - [%d] of [%d] [%s]", name, numCovered, numLines, notes);
+ }
+
+ public String getNotes() {
+ return notes;
+ }
+
+ public void setNotes(String notes) {
+ this.notes = notes;
+ }
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/CoverageDataFile.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/CoverageDataFile.java
new file mode 100644
index 00000000000..ba3f6cc8d8d
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/CoverageDataFile.java
@@ -0,0 +1,93 @@
+/*
+ * Created on Sep 26, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.vcast;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.osee.coverage.vcast.CoverageDataUnit.CoverageDataType;
+import org.eclipse.osee.framework.core.exception.OseeArgumentException;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.AFile;
+import org.eclipse.osee.framework.jdk.core.util.xml.Jaxp;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class CoverageDataFile {
+
+ public List<CoverageDataUnit> coverageDataUnits = new ArrayList<CoverageDataUnit>();
+ private static final Pattern lineNumToBranchesPattern = Pattern.compile("\\{([0-9]+);\\s*([0-9]+)\\}");
+ private final String coverageDataFilename;
+
+ public CoverageDataFile(String coverageDataFilename) throws OseeCoreException {
+
+ this.coverageDataFilename = coverageDataFilename;
+ File coverageDataFile = getFile();
+ if (!coverageDataFile.exists()) {
+ throw new OseeArgumentException(String.format("VectorCast coverage data file doesn't exist [%s]",
+ coverageDataFilename));
+ }
+ String fileStr = AFile.readFile(coverageDataFile);
+ try {
+ Document document = Jaxp.readXmlDocument(fileStr);
+ List<Element> unitElements = Jaxp.findElements(document.getDocumentElement(), "unit");
+ for (Element unitElement : unitElements) {
+ CoverageDataUnit coverageDataUnit = new CoverageDataUnit(Jaxp.getChildText(unitElement, "name"));
+ coverageDataUnit.setIndex(new Integer(unitElement.getAttribute("index")).intValue());
+ coverageDataUnit.setCoverageType(CoverageDataType.valueOf(unitElement.getAttribute("coverage_type")));
+
+ List<Element> subprograms = Jaxp.findElements(unitElement, "subprogram");
+ for (Element subprogram : subprograms) {
+ String subprogramName = Jaxp.getChildText(subprogram, "name");
+ CoverageDataSubProgram coverageDataSubProgram = new CoverageDataSubProgram(subprogramName);
+ String lineNumbersToBranches = Jaxp.getChildText(subprogram, "line_numbers_to_branches");
+ Matcher m = lineNumToBranchesPattern.matcher(lineNumbersToBranches);
+ while (m.find()) {
+ // Don't know what to do with >0 branches yet; assume branch coverage (future)
+ if (!m.group(2).equals("0")) {
+ System.out.println(String.format("Unhandled branches [%s] for lineNum [%s] subprogram [%s]",
+ m.group(1), m.group(1), subprogramName));
+ }
+ coverageDataSubProgram.addLineNumToBranches(new Integer(m.group(1)).intValue(), new Integer(
+ m.group(2)));
+ }
+
+ Element metricsElement = Jaxp.getChild(subprogram, "metrics");
+ String complexity = Jaxp.getChildText(metricsElement, "complexity");
+ Element coverageElement = Jaxp.getChild(metricsElement, "coverage");
+ if (!coverageElement.getAttribute("coverage_type").equals("STATEMENT")) {
+ System.out.println(String.format("Unhandled coverage_type [%s] for subprogram [%s]. Skipping",
+ coverageElement.getAttribute("coverage_type"), subprogramName));
+ continue;
+ }
+ String coveredElement = Jaxp.getChildText(coverageElement, "covered");
+ String totalElement = Jaxp.getChildText(coverageElement, "total");
+ coverageDataSubProgram.setComplexity(new Integer(complexity).intValue());
+ coverageDataSubProgram.setCovered(new Integer(coveredElement).intValue());
+ coverageDataSubProgram.setTotal(new Integer(totalElement).intValue());
+ coverageDataUnit.addSubProgram(coverageDataSubProgram);
+ }
+ coverageDataUnits.add(coverageDataUnit);
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ public File getFile() {
+ return new File(coverageDataFilename);
+ }
+
+ public List<CoverageDataUnit> getCoverageDataUnits() {
+ return coverageDataUnits;
+ }
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/CoverageDataSubProgram.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/CoverageDataSubProgram.java
new file mode 100644
index 00000000000..51f744e4fc3
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/CoverageDataSubProgram.java
@@ -0,0 +1,63 @@
+/*
+ * Created on Sep 27, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.vcast;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class CoverageDataSubProgram {
+
+ private final String name;
+ private int complexity;
+ private int covered;
+ private int total;
+ private final List<LineNumToBranches> lineNumToBranches = new ArrayList<LineNumToBranches>();
+
+ public CoverageDataSubProgram(String name) {
+ super();
+ this.name = name;
+ }
+
+ public int getComplexity() {
+ return complexity;
+ }
+
+ public void setComplexity(int complexity) {
+ this.complexity = complexity;
+ }
+
+ public int getCovered() {
+ return covered;
+ }
+
+ public void setCovered(int covered) {
+ this.covered = covered;
+ }
+
+ public int getTotal() {
+ return total;
+ }
+
+ public void setTotal(int total) {
+ this.total = total;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void addLineNumToBranches(int lineNum, int branches) {
+ lineNumToBranches.add(new LineNumToBranches(lineNum, branches));
+ }
+
+ public List<LineNumToBranches> getLineNumToBranches() {
+ return lineNumToBranches;
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/CoverageDataUnit.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/CoverageDataUnit.java
new file mode 100644
index 00000000000..3119648c180
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/CoverageDataUnit.java
@@ -0,0 +1,61 @@
+/*
+ * Created on Sep 27, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.vcast;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class CoverageDataUnit {
+
+ public static enum CoverageDataType {
+ STATEMENT, BRANCH
+ };
+ public String name;
+ public int index;
+ public CoverageDataType coverageType;
+ public List<CoverageDataSubProgram> subPrograms = new ArrayList<CoverageDataSubProgram>();
+
+ public CoverageDataUnit(String name) {
+ super();
+ this.name = name;
+ }
+
+ public int getIndex() {
+ return index;
+ }
+
+ public void setIndex(int index) {
+ this.index = index;
+ }
+
+ public CoverageDataType getCoverageType() {
+ return coverageType;
+ }
+
+ public void setCoverageType(CoverageDataType coverageType) {
+ this.coverageType = coverageType;
+ }
+
+ public void addSubProgram(CoverageDataSubProgram coverageDataSubProgram) {
+ subPrograms.add(coverageDataSubProgram);
+ }
+
+ public List<CoverageDataSubProgram> getSubPrograms() {
+ return subPrograms;
+ }
+
+ @Override
+ public String toString() {
+ return name;
+ }
+
+ public String getName() {
+ return name;
+ }
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/IVectorCastCoverageImportProvider.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/IVectorCastCoverageImportProvider.java
new file mode 100644
index 00000000000..8a1841d01ba
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/IVectorCastCoverageImportProvider.java
@@ -0,0 +1,23 @@
+/*
+ * Created on Oct 15, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.vcast;
+
+
+/**
+ * @author Donald G. Dunne
+ */
+public interface IVectorCastCoverageImportProvider {
+
+ public String getVCastDirectory();
+
+ public String getFileNamespace(String filename);
+
+ /**
+ * true if importer should automatically set known exception handling cases
+ */
+ public boolean isResolveExceptionHandling();
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/LineNumToBranches.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/LineNumToBranches.java
new file mode 100644
index 00000000000..a2b4b76ed70
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/LineNumToBranches.java
@@ -0,0 +1,41 @@
+/*
+ * Created on Sep 28, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.vcast;
+
+
+/**
+ * @author Donald G. Dunne
+ */
+public class LineNumToBranches {
+
+ private int lineNum;
+ private int branches;
+
+ public LineNumToBranches() {
+ }
+
+ public LineNumToBranches(int lineNum, int branches) {
+ this.lineNum = lineNum;
+ this.branches = branches;
+ }
+
+ public int getLineNum() {
+ return lineNum;
+ }
+
+ public void setLineNum(int lineNum) {
+ this.lineNum = lineNum;
+ }
+
+ public int getBranches() {
+ return branches;
+ }
+
+ public void setBranches(int branches) {
+ this.branches = branches;
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/VCastAggregateReport.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/VCastAggregateReport.java
new file mode 100644
index 00000000000..346f420247e
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/VCastAggregateReport.java
@@ -0,0 +1,90 @@
+/*
+ * Created on Sep 23, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.vcast;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.osee.framework.core.exception.OseeArgumentException;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.core.exception.OseeStateException;
+import org.eclipse.osee.framework.core.exception.OseeWrappedException;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class VCastAggregateReport {
+
+ private final String vcastDirectory;
+ Pattern coverageUnitPattern = Pattern.compile("Code&nbsp;Coverage&nbsp;for&nbsp;Unit:&nbsp;(.*?)<");
+ Pattern resultsPattern = Pattern.compile("&nbsp;([0-9]+)&nbsp;of&nbsp;([0-9]+)&nbsp;Lines&nbsp;Covered&nbsp;");
+ String NO_COVERAGE_DATA_EXISTS = "No&nbsp;Coverage&nbsp;Data&nbsp;Exists";
+
+ public VCastAggregateReport(String vcastDirectory) throws OseeCoreException {
+ this.vcastDirectory = vcastDirectory;
+ }
+
+ public List<AggregateCoverageUnitResult> getResults() throws OseeCoreException {
+ File reportHtmlFile = getFile();
+ if (!reportHtmlFile.exists()) {
+ throw new OseeArgumentException(String.format(
+ "VectorCast vcast_aggregate_coverage_report.html file doesn't exist [%s]", vcastDirectory));
+ }
+ List<AggregateCoverageUnitResult> results = new ArrayList<AggregateCoverageUnitResult>();
+ try {
+ Reader inStream = new InputStreamReader(new FileInputStream(reportHtmlFile), "UTF-8");
+ BufferedReader bufferedReader = new BufferedReader(inStream);
+ String line;
+
+ AggregateCoverageUnitResult result = null;
+ while ((line = bufferedReader.readLine()) != null) {
+ for (String subStr : line.split("<strong>")) {
+ Matcher m = coverageUnitPattern.matcher(subStr);
+ if (m.find()) {
+ if (result != null) {
+ throw new OseeStateException("Found coverage begin before last coverage end");
+ }
+ result = new AggregateCoverageUnitResult(m.group(1));
+ results.add(result);
+ // System.out.println("Found name " + m.group(1));
+ }
+ m = resultsPattern.matcher(subStr);
+ if (m.find()) {
+ if (result == null) {
+ throw new OseeStateException("Found coverage end before begin");
+ }
+ result.setNumCovered(new Integer(m.group(1)));
+ result.setNumLines(new Integer(m.group(2)));
+ // System.out.println("Found covered " + result.getNumCovered() + " of " + result.getNumLines());
+ result = null;
+ }
+ if (subStr.contains(NO_COVERAGE_DATA_EXISTS)) {
+ if (result == null) {
+ throw new OseeStateException("Found \"No Coverage Data Exists\" before result begin");
+ }
+ result.setNotes("No Coverage Data Exists");
+ result = null;
+ }
+ }
+ }
+ bufferedReader.close();
+ } catch (Exception ex) {
+ throw new OseeWrappedException("Error parsing aggregate report", ex);
+ }
+ return results;
+ }
+
+ public File getFile() {
+ return new File(vcastDirectory + "/vcast/vcast_aggregate_coverage_report.html");
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/VCastVcp.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/VCastVcp.java
new file mode 100644
index 00000000000..9b8ac0c1db7
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/VCastVcp.java
@@ -0,0 +1,73 @@
+/*
+ * Created on Sep 23, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.vcast;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import org.eclipse.osee.coverage.vcast.VcpSourceFile.SourceValue;
+import org.eclipse.osee.framework.core.exception.OseeArgumentException;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.AFile;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class VCastVcp {
+
+ List<VcpSourceFile> sourceFiles = new ArrayList<VcpSourceFile>();
+ List<VcpResultsFile> resultsFiles = new ArrayList<VcpResultsFile>();
+ private final String vcastDirectory;
+
+ public VCastVcp(String vcastDirectory) throws OseeCoreException {
+ this.vcastDirectory = vcastDirectory;
+ File vCastVcpFile = getFile();
+ if (!vCastVcpFile.exists()) {
+ throw new OseeArgumentException(String.format("VectorCast vcast.vcp file doesn't exist [%s]", vcastDirectory));
+ }
+ VcpSourceFile vcpSourceFile = null;
+ VcpResultsFile vcpResultsFile = null;
+ for (String line : AFile.readFile(vCastVcpFile).split("\n")) {
+ if (line.startsWith("SOURCE_FILE_BEGIN")) {
+ vcpSourceFile = new VcpSourceFile(vcastDirectory);
+ } else if (line.startsWith("SOURCE_FILE_END")) {
+ sourceFiles.add(vcpSourceFile);
+ vcpSourceFile = null;
+ } else if (vcpSourceFile != null) {
+ vcpSourceFile.addLine(line);
+ } else if (line.startsWith("RESULT_FILE_BEGIN")) {
+ vcpResultsFile = new VcpResultsFile(vcastDirectory);
+ } else if (line.startsWith("RESULT_FILE_END")) {
+ resultsFiles.add(vcpResultsFile);
+ vcpResultsFile = null;
+ } else if (vcpResultsFile != null) {
+ vcpResultsFile.addLine(line);
+ }
+ }
+ }
+
+ public File getFile() {
+ return new File(vcastDirectory + "/vcast.vcp");
+ }
+
+ public VcpSourceFile getSourceFile(int index) {
+ for (VcpSourceFile vcpSourceFile : sourceFiles) {
+ if (vcpSourceFile.getValue(SourceValue.UNIT_NUMBER).equals(String.valueOf(index))) {
+ return vcpSourceFile;
+ }
+ }
+ return null;
+ }
+
+ public List<VcpSourceFile> getSourceFiles() {
+ return sourceFiles;
+ }
+
+ public List<VcpResultsFile> getResultsFiles() {
+ return resultsFiles;
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/VcpResultsDatFile.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/VcpResultsDatFile.java
new file mode 100644
index 00000000000..c9bef29728d
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/VcpResultsDatFile.java
@@ -0,0 +1,90 @@
+/*
+ * Created on Sep 23, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.vcast;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.osee.coverage.internal.Activator;
+import org.eclipse.osee.coverage.vcast.VcpResultsFile.ResultsValue;
+import org.eclipse.osee.framework.core.exception.OseeArgumentException;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.type.CompositeKeyHashMap;
+import org.eclipse.osee.framework.jdk.core.type.Pair;
+import org.eclipse.osee.framework.jdk.core.util.AFile;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+import org.eclipse.osee.framework.logging.OseeLog;
+
+/**
+ * Reads results.dat file that contains <file num> <procedure num> <execution line num>
+ *
+ * @author Donald G. Dunne
+ */
+public class VcpResultsDatFile {
+
+ private final CompositeKeyHashMap<String, String, HashSet<String>> resultsValues =
+ new CompositeKeyHashMap<String, String, HashSet<String>>(1000, true);
+ Pattern valuePattern = Pattern.compile("\\s+([0-9]+)\\s+([0-9]+)\\s+([0-9]+)");
+ String resultFilename = null;
+
+ public VcpResultsDatFile(String vcastDirectory, VcpResultsFile vcpResultsFile) throws OseeCoreException {
+ resultFilename = vcastDirectory + "/vcast/results/" + vcpResultsFile.getValue(ResultsValue.FILENAME);
+ File resultsFile = getFile();
+ if (!resultsFile.exists()) {
+ throw new OseeArgumentException(
+ String.format("VectorCast resultsFile file doesn't exist [%s]", resultFilename));
+ }
+ for (String resultsLine : AFile.readFile(resultsFile).split("\n")) {
+ if (Strings.isValid(resultsLine)) {
+ addLine(resultsLine);
+ }
+ }
+ }
+
+ public File getFile() {
+ return new File(resultFilename);
+ }
+
+ public void addLine(String line) {
+ Matcher m = valuePattern.matcher(line);
+ if (m.find()) {
+ HashSet<String> values = resultsValues.get(m.group(1), m.group(2));
+ if (values == null) {
+ values = new HashSet<String>();
+ resultsValues.put(m.group(1), m.group(2), values);
+ }
+ values.add(m.group(3));
+ } else {
+ OseeLog.log(Activator.class, Level.SEVERE, String.format("Unhandled VcpResultsDatFile line [%s]", line));
+ }
+ }
+
+ public Collection<String> getFileNumbers() {
+ List<String> fileNumbers = new ArrayList<String>();
+ for (Pair<String, String> pair : resultsValues.keySet()) {
+ if (!fileNumbers.contains(pair.getFirst())) {
+ fileNumbers.add(pair.getFirst());
+ }
+ }
+ return fileNumbers;
+ }
+
+ public Collection<Pair<String, HashSet<String>>> getMethodExecutionPairs(String fileNumber) {
+ List<Pair<String, HashSet<String>>> methodExecutionPairs = new ArrayList<Pair<String, HashSet<String>>>();
+ for (Pair<String, String> pair : resultsValues.keySet()) {
+ if (fileNumber.equals(pair.getFirst())) {
+ methodExecutionPairs.add(new Pair<String, HashSet<String>>(pair.getSecond(), resultsValues.get(fileNumber,
+ pair.getSecond())));
+ }
+ }
+ return methodExecutionPairs;
+ }
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/VcpResultsFile.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/VcpResultsFile.java
new file mode 100644
index 00000000000..d3d17166120
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/VcpResultsFile.java
@@ -0,0 +1,64 @@
+/*
+ * Created on Sep 23, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.vcast;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.osee.coverage.internal.Activator;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class VcpResultsFile {
+
+ private final Map<ResultsValue, String> resultsValues = new HashMap<ResultsValue, String>(20);
+ Pattern valuePattern = Pattern.compile("(.*?):(.*?)$");
+ private VcpResultsDatFile vcpResultsDatFile;
+ private final String vcastDirectory;
+
+ public static enum ResultsValue {
+ FILENAME, DIRECTORY, DISPLAY_NAME, RESULT_TYPE, ADDITION_TIME, IS_SELECTED, HAD_COVERAGE_REMOVED
+ };
+
+ public VcpResultsFile(String vcastDirectory) {
+ this.vcastDirectory = vcastDirectory;
+ }
+
+ public String getValue(ResultsValue resultsValue) {
+ return resultsValues.get(resultsValue);
+ }
+
+ public void addLine(String line) {
+ Matcher m = valuePattern.matcher(line);
+ if (m.find()) {
+ ResultsValue resultsValue = ResultsValue.valueOf(m.group(1));
+ if (resultsValue == null) {
+ OseeLog.log(Activator.class, Level.SEVERE, String.format("Unhandled VcpResultsFile value [%s]", m.group(1)));
+ } else {
+ resultsValues.put(resultsValue, m.group(2));
+ }
+ } else {
+ OseeLog.log(Activator.class, Level.SEVERE, String.format("Unhandled VcpResultsFile line [%s]", line));
+ }
+ }
+
+ public VcpResultsDatFile getVcpResultsDatFile() throws OseeCoreException {
+ if (vcpResultsDatFile == null) {
+ vcpResultsDatFile = new VcpResultsDatFile(vcastDirectory, this);
+ }
+ return vcpResultsDatFile;
+ }
+
+ @Override
+ public String toString() {
+ return getValue(ResultsValue.FILENAME);
+ }
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/VcpSourceFile.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/VcpSourceFile.java
new file mode 100644
index 00000000000..faaaef7f24f
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/VcpSourceFile.java
@@ -0,0 +1,94 @@
+/*
+ * Created on Sep 23, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.vcast;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.osee.coverage.internal.Activator;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class VcpSourceFile {
+
+ private final Map<SourceValue, String> sourceValues = new HashMap<SourceValue, String>(20);
+ Pattern valuePattern = Pattern.compile("(.*?):(.*?)$");
+ private VcpSourceLineFile vcpSourceLineFile = null;
+ private VcpSourceLisFile vcpSourceLisFile = null;
+ private CoverageDataFile coverageDataFile = null;
+ private final String vcastDirectory;
+
+ public static enum SourceValue {
+ SOURCE_FILENAME,
+ SOURCE_DIRECTORY,
+ DEST_FILENAME,
+ DEST_DIRECTORY,
+ DISPLAY_NAME,
+ UNIT_NUMBER,
+ FILE_TYPE,
+ IS_BACKUP,
+ COVERAGE,
+ COVERAGE_IO_TYPE,
+ ADDITION_TIME,
+ MODIFIED_TIME,
+ CHECKSUM,
+ UNINSTR_CHECKSUM
+ };
+
+ public VcpSourceFile(String vcastDirectory) {
+ this.vcastDirectory = vcastDirectory;
+ }
+
+ public String getValue(SourceValue sourceValue) {
+ return sourceValues.get(sourceValue);
+ }
+
+ public void addLine(String line) {
+ Matcher m = valuePattern.matcher(line);
+ if (m.find()) {
+ SourceValue sourceValue = SourceValue.valueOf(m.group(1));
+ if (sourceValue == null) {
+ OseeLog.log(Activator.class, Level.SEVERE, String.format("Unhandled VcpSourceFile value [%s]", m.group(1)));
+ } else {
+ sourceValues.put(sourceValue, m.group(2));
+ }
+ } else {
+ OseeLog.log(Activator.class, Level.SEVERE, String.format("Unhandled VcpSourceFile line [%s]", line));
+ }
+ }
+
+ public VcpSourceLineFile getVcpSourceLineFile() throws OseeCoreException {
+ if (vcpSourceLineFile == null) {
+ vcpSourceLineFile = new VcpSourceLineFile(vcastDirectory, this);
+ }
+ return vcpSourceLineFile;
+ }
+
+ public VcpSourceLisFile getVcpSourceLisFile() throws OseeCoreException {
+ if (vcpSourceLisFile == null) {
+ vcpSourceLisFile = new VcpSourceLisFile(vcastDirectory, this);
+ }
+ return vcpSourceLisFile;
+ }
+
+ public CoverageDataFile getCoverageDataFile() throws OseeCoreException {
+ if (coverageDataFile == null) {
+ coverageDataFile =
+ new CoverageDataFile(vcastDirectory + "/vcast/" + getValue(SourceValue.SOURCE_FILENAME).replaceAll(
+ "\\.(ada|adb)", "\\.xml"));
+ }
+ return coverageDataFile;
+ }
+
+ public String toString() {
+ return getValue(SourceValue.SOURCE_FILENAME);
+ }
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/VcpSourceLineFile.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/VcpSourceLineFile.java
new file mode 100644
index 00000000000..024d08c5570
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/VcpSourceLineFile.java
@@ -0,0 +1,52 @@
+/*
+ * Created on Sep 23, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.vcast;
+
+import java.io.File;
+import java.util.Arrays;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.osee.coverage.model.CoverageUnit;
+import org.eclipse.osee.coverage.model.ICoverageUnitFileContentsProvider;
+import org.eclipse.osee.coverage.vcast.VcpSourceFile.SourceValue;
+import org.eclipse.osee.framework.core.exception.OseeArgumentException;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.AFile;
+
+/**
+ * Reads results.dat file that contains <file num> <procedure num> <execution line num>
+ *
+ * @author Donald G. Dunne
+ */
+public class VcpSourceLineFile {
+
+ Pattern pattern = Pattern.compile("NAME:(\\w*)\\s+FILE:\\s*(.+?)\\s+START:\\s*([0-9]+)\\s+END:\\s*([0-9]+)");
+ File resultsFile = null;
+ private final VcpSourceFile vcpSourceFile;
+
+ public VcpSourceLineFile(String vcastDirectory, VcpSourceFile vcpSourceFile) throws OseeCoreException {
+ this.vcpSourceFile = vcpSourceFile;
+ String lineFilename = vcastDirectory + "/vcast/LINE." + vcpSourceFile.getValue(SourceValue.UNIT_NUMBER);
+ resultsFile = new File(lineFilename);
+ if (!resultsFile.exists()) {
+ throw new OseeArgumentException(String.format("VectorCast LINE.<num> file doesn't exist [%s]", lineFilename));
+ }
+ }
+
+ public void createCoverageUnits(CoverageUnit parentCoverageUnit, ICoverageUnitFileContentsProvider fileContentsProvider) throws OseeCoreException {
+ VcpSourceLisFile vcpSourceLisFile = vcpSourceFile.getVcpSourceLisFile();
+ String contents = AFile.readFile(resultsFile);
+ Matcher m = pattern.matcher(contents);
+ while (m.find()) {
+ CoverageUnit coverageUnit =
+ new CoverageUnit(parentCoverageUnit, m.group(1), m.group(2) + ":" + m.group(3) + "-" + m.group(4),
+ fileContentsProvider);
+ String source = Arrays.toString(vcpSourceLisFile.getSection(m.group(3), m.group(4)));
+ coverageUnit.setFileContents(source);
+ parentCoverageUnit.addCoverageUnit(coverageUnit);
+ }
+ }
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/VcpSourceLisFile.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/VcpSourceLisFile.java
new file mode 100644
index 00000000000..486ea54dbb3
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/VcpSourceLisFile.java
@@ -0,0 +1,95 @@
+/*
+ * Created on Sep 23, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.coverage.vcast;
+
+import java.io.File;
+import java.util.Arrays;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.osee.coverage.vcast.VcpSourceFile.SourceValue;
+import org.eclipse.osee.framework.core.exception.OseeArgumentException;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.type.Pair;
+import org.eclipse.osee.framework.jdk.core.util.AFile;
+
+/**
+ * Reads <filename>.LIS file associated with a source file
+ *
+ * @author Donald G. Dunne
+ */
+public class VcpSourceLisFile {
+
+ File listFile = null;
+ String[] lines = null;
+ String text = null;
+ String lisFilename = null;
+
+ public VcpSourceLisFile(String vcastDirectory, VcpSourceFile vcpSourceFile) throws OseeCoreException {
+ lisFilename =
+ vcastDirectory + "/vcast/" + vcpSourceFile.getValue(SourceValue.SOURCE_FILENAME).replaceFirst("(.*)\\..*",
+ "$1") + ".LIS";
+ listFile = getFile();
+ if (!listFile.exists()) {
+ throw new OseeArgumentException(
+ String.format("VectorCast <filename>.LIS file doesn't exist [%s]", lisFilename));
+ }
+ text = AFile.readFile(listFile);
+ lines = text.split("\n");
+ }
+
+ public File getFile() {
+ return new File(lisFilename);
+ }
+
+ public String[] getSection(String startLine, String endLine) {
+ return Arrays.copyOfRange(lines, new Integer(startLine), new Integer(endLine));
+ }
+
+ public String[] get() {
+ return lines;
+ }
+
+ public String getText() {
+ return text;
+ }
+
+ public String getPackage() {
+ return "unknown - tbd";
+ }
+
+ private static Pattern exceptionPattern = Pattern.compile("^\\s+EXCEPTION\\s*$");
+ private static Pattern endMethodPattern = Pattern.compile("^\\s*END\\s+(.*);\\s*$");
+
+ public Pair<String, Boolean> getExecutionLine(String method, String executionLine) {
+ String startsWith = method + " " + executionLine + " ";
+ boolean exceptionLine = false;
+ for (String line : lines) {
+ if (line.startsWith(startsWith)) {
+ return new Pair<String, Boolean>(line, exceptionLine);
+ }
+ Matcher m = exceptionPattern.matcher(line);
+ if (m.find()) {
+ exceptionLine = true;
+ } else {
+ m = endMethodPattern.matcher(line);
+ if (m.find()) {
+ exceptionLine = false;
+ }
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public String toString() {
+ try {
+ return listFile.getCanonicalPath();
+ } catch (Exception ex) {
+ // do nothing
+ }
+ return super.toString();
+ }
+}
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/VectorCastAdaCoverageImporter.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/VectorCastAdaCoverageImporter.java
new file mode 100644
index 00000000000..bf3936669c9
--- /dev/null
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/VectorCastAdaCoverageImporter.java
@@ -0,0 +1,303 @@
+/*******************************************************************************
+ * 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.coverage.vcast;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.Map.Entry;
+import java.util.logging.Level;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.coverage.ICoverageImporter;
+import org.eclipse.osee.coverage.internal.Activator;
+import org.eclipse.osee.coverage.model.CoverageImport;
+import org.eclipse.osee.coverage.model.CoverageItem;
+import org.eclipse.osee.coverage.model.CoverageOptionManager;
+import org.eclipse.osee.coverage.model.CoverageOptionManagerDefault;
+import org.eclipse.osee.coverage.model.CoverageUnit;
+import org.eclipse.osee.coverage.model.SimpleCoverageUnitFileContentsProvider;
+import org.eclipse.osee.coverage.vcast.VcpResultsFile.ResultsValue;
+import org.eclipse.osee.coverage.vcast.VcpSourceFile.SourceValue;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.type.Pair;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+import org.eclipse.osee.framework.logging.OseeLog;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class VectorCastAdaCoverageImporter implements ICoverageImporter {
+
+ private CoverageImport coverageImport;
+ private final IVectorCastCoverageImportProvider vectorCastCoverageImportProvider;
+ Pattern sourceLinePattern = Pattern.compile("^[0-9]+ [0-9]+(.*?)$");
+
+ public VectorCastAdaCoverageImporter(IVectorCastCoverageImportProvider vectorCastCoverageImportProvider) {
+ this.vectorCastCoverageImportProvider = vectorCastCoverageImportProvider;
+ }
+
+ @Override
+ public CoverageImport run(IProgressMonitor progressMonitor) {
+ coverageImport = new CoverageImport("VectorCast Import");
+ coverageImport.setCoverageUnitFileContentsProvider(new SimpleCoverageUnitFileContentsProvider());
+
+ if (!Strings.isValid(vectorCastCoverageImportProvider.getVCastDirectory())) {
+ coverageImport.getLog().logError("VectorCast directory must be specified");
+ return coverageImport;
+ }
+
+ File file = new File(vectorCastCoverageImportProvider.getVCastDirectory());
+ if (!file.exists()) {
+ coverageImport.getLog().logError(
+ String.format("VectorCast directory doesn't exist [%s]",
+ vectorCastCoverageImportProvider.getVCastDirectory()));
+ return coverageImport;
+ }
+
+ coverageImport.setImportDirectory(vectorCastCoverageImportProvider.getVCastDirectory());
+ // Add config files to import record
+ try {
+ coverageImport.addImportRecordFile(new File(
+ vectorCastCoverageImportProvider.getVCastDirectory() + "\\CCAST_.CFG"));
+ } catch (Exception ex) {
+ coverageImport.getLog().logError("Error Adding Import Record File: " + ex.getLocalizedMessage());
+ }
+ try {
+ coverageImport.addImportRecordFile(new File(
+ vectorCastCoverageImportProvider.getVCastDirectory() + "\\build_info.xml"));
+ } catch (Exception ex) {
+ coverageImport.getLog().logError("Error Adding Import Record File: " + ex.getLocalizedMessage());
+ }
+
+ VCastVcp vCastVcp = null;
+ try {
+ vCastVcp = new VCastVcp(vectorCastCoverageImportProvider.getVCastDirectory());
+ } catch (Exception ex) {
+ coverageImport.getLog().logError("Exception reading vcast.vcp file: " + ex.getLocalizedMessage());
+ return coverageImport;
+ }
+ try {
+ coverageImport.addImportRecordFile(vCastVcp.getFile());
+ } catch (Exception ex) {
+ coverageImport.getLog().logError("Error Adding Import Record File: " + ex.getLocalizedMessage());
+ }
+ coverageImport.setLocation(vectorCastCoverageImportProvider.getVCastDirectory());
+
+ // Create file and subprogram Coverage Units and execution line Coverage Items
+ Map<String, CoverageUnit> fileNumToCoverageUnit = new HashMap<String, CoverageUnit>();
+ Map<String, CoverageUnit> coverageNameToCoverageUnit = new HashMap<String, CoverageUnit>();
+ Map<CoverageUnit, CoverageDataSubProgram> methodCoverageUnitToCoverageDataSubProgram =
+ new HashMap<CoverageUnit, CoverageDataSubProgram>();
+ List<VcpSourceFile> vcpSourceFiles = vCastVcp.sourceFiles;
+ if (progressMonitor != null) {
+ progressMonitor.beginTask("Importing Source File Data", vcpSourceFiles.size());
+ }
+ int x = 1;
+ for (VcpSourceFile vcpSourceFile : vCastVcp.sourceFiles) {
+ String str =
+ String.format("Processing VcpSourceFile %d/%d [%s]...", x++, vcpSourceFiles.size(), vcpSourceFile);
+ // System.out.println(str);
+ if (progressMonitor != null) {
+ progressMonitor.worked(1);
+ progressMonitor.subTask(str);
+ }
+ try {
+ CoverageDataFile coverageDataFile = vcpSourceFile.getCoverageDataFile();
+ try {
+ coverageImport.addImportRecordFile(coverageDataFile.getFile());
+ } catch (Exception ex) {
+ coverageImport.getLog().logError("Error Adding Import Record File: " + ex.getLocalizedMessage());
+ }
+ for (CoverageDataUnit coverageDataUnit : coverageDataFile.getCoverageDataUnits()) {
+ CoverageUnit fileCoverageUnit =
+ coverageImport.createCoverageUnit(null, vcpSourceFile.getValue(SourceValue.SOURCE_FILENAME), "");
+ String fileNamespace = vectorCastCoverageImportProvider.getFileNamespace(coverageDataUnit.getName());
+ fileCoverageUnit.setNamespace(fileNamespace);
+ CoverageUnit parent = coverageImport.getOrCreateParent(fileCoverageUnit.getNamespace());
+ if (parent != null) {
+ parent.addCoverageUnit(fileCoverageUnit);
+ } else {
+ coverageImport.addCoverageUnit(fileCoverageUnit);
+ }
+ VcpSourceLisFile vcpSourceLisFile = vcpSourceFile.getVcpSourceLisFile();
+ try {
+ coverageImport.addImportRecordFile(vcpSourceLisFile.getFile());
+ } catch (Exception ex) {
+ coverageImport.getLog().logError("Error Adding Import Record File: " + ex.getLocalizedMessage());
+ }
+
+ fileCoverageUnit.setFileContents(vcpSourceLisFile.getText());
+ int methodNum = 0;
+ for (CoverageDataSubProgram coverageDataSubProgram : coverageDataUnit.getSubPrograms()) {
+ methodNum++;
+ CoverageUnit methodCoverageUnit =
+ coverageImport.createCoverageUnit(fileCoverageUnit, coverageDataSubProgram.getName(), "");
+ // Store this mapping so can check covered/totals later
+ methodCoverageUnitToCoverageDataSubProgram.put(methodCoverageUnit, coverageDataSubProgram);
+ fileCoverageUnit.addCoverageUnit(methodCoverageUnit);
+ methodCoverageUnit.setOrderNumber(String.valueOf(methodNum));
+ for (LineNumToBranches lineNumToBranches : coverageDataSubProgram.getLineNumToBranches()) {
+ CoverageItem coverageItem =
+ new CoverageItem(methodCoverageUnit, CoverageOptionManager.Not_Covered,
+ String.valueOf(lineNumToBranches.getLineNum()));
+ Pair<String, Boolean> lineData =
+ vcpSourceLisFile.getExecutionLine(String.valueOf(methodNum),
+ String.valueOf(lineNumToBranches.getLineNum()));
+ String sourceLine = lineData.getFirst();
+ // Need to get rid of line method num and line num before storing
+ Matcher m = sourceLinePattern.matcher(sourceLine);
+ if (m.find()) {
+ coverageItem.setName(m.group(1));
+ } else {
+ coverageImport.getLog().logError(
+ String.format("Coverage line doesn't match \"n n <line>\" [%s]. " + sourceLine));
+ continue;
+ }
+ if (vectorCastCoverageImportProvider.isResolveExceptionHandling() && lineData.getSecond()) {
+ coverageItem.setCoverageMethod(CoverageOptionManager.Exception_Handling);
+ }
+ methodCoverageUnit.addCoverageItem(coverageItem);
+ }
+ }
+ fileNumToCoverageUnit.put(String.valueOf(coverageDataUnit.getIndex()), fileCoverageUnit);
+ coverageNameToCoverageUnit.put(fileCoverageUnit.getName(), fileCoverageUnit);
+ }
+ } catch (Exception ex) {
+ coverageImport.getLog().logError(
+ String.format("Error processing coverage for [%s]. " + ex.getLocalizedMessage(), vcpSourceFile));
+ continue;
+ }
+ }
+
+ // Process all results files and map to coverage units
+ List<VcpResultsFile> vcpResultsFiles = vCastVcp.resultsFiles;
+ if (progressMonitor != null) {
+ progressMonitor.beginTask("Importing Test Unit Data", vcpResultsFiles.size());
+ }
+ x = 1;
+ for (VcpResultsFile vcpResultsFile : vcpResultsFiles) {
+ String str =
+ String.format("Processing VcpResultsFile %d/%d [%s]...", x++, vcpResultsFiles.size(), vcpResultsFile);
+ // System.out.println(str);
+ if (progressMonitor != null) {
+ progressMonitor.worked(1);
+ progressMonitor.subTask(str);
+ }
+ String testUnitName = vcpResultsFile.getValue(ResultsValue.FILENAME);
+ try {
+ coverageImport.addImportRecordFile(vcpResultsFile.getVcpResultsDatFile().getFile());
+ } catch (Exception ex) {
+ coverageImport.getLog().logError("Error Adding Import Record File: " + ex.getLocalizedMessage());
+ }
+
+ try {
+ for (String fileNum : vcpResultsFile.getVcpResultsDatFile().getFileNumbers()) {
+ CoverageUnit coverageUnit = fileNumToCoverageUnit.get(fileNum);
+ if (coverageUnit == null) {
+ coverageImport.getLog().logError(
+ String.format("coverageUnit doesn't exist for unit_number [%s]", fileNum));
+ continue;
+ }
+ for (Pair<String, HashSet<String>> methodExecutionPair : vcpResultsFile.getVcpResultsDatFile().getMethodExecutionPairs(
+ fileNum)) {
+ String methodNum = methodExecutionPair.getFirst();
+ Set<String> executeNums = methodExecutionPair.getSecond();
+ for (String executeNum : executeNums) {
+ // Find or create new coverage item for method num /execution line
+ CoverageItem coverageItem = coverageUnit.getCoverageItem(methodNum, executeNum);
+ if (coverageItem == null) {
+ coverageImport.getLog().logError(
+ String.format("Can't retrieve method [%s] from coverageUnit [%s] for test unit [%s]",
+ methodNum, coverageUnit, testUnitName));
+ } else {
+ coverageItem.setCoverageMethod(CoverageOptionManager.Test_Unit);
+ try {
+ coverageItem.addTestUnitName(testUnitName);
+ } catch (OseeCoreException ex) {
+ coverageImport.getLog().logError(
+ String.format("Can't store test unit [%s] for coverageUnit [%s]; exception [%s]",
+ testUnitName, coverageUnit, ex.getLocalizedMessage()));
+
+ }
+ }
+ }
+ }
+ }
+ } catch (Exception ex) {
+ coverageImport.getLog().logError("Error Adding Import Record File: " + ex.getLocalizedMessage());
+ }
+ }
+
+ // Validate VectorCast covered/total from <unit>.xml files with imported results files above
+ for (Entry<CoverageUnit, CoverageDataSubProgram> entry : methodCoverageUnitToCoverageDataSubProgram.entrySet()) {
+ CoverageUnit methodCoverageUnit = entry.getKey();
+ CoverageDataSubProgram coverageDataSubProgram = entry.getValue();
+ if (methodCoverageUnit.getCoverageItems(false).size() != coverageDataSubProgram.getTotal()) {
+ coverageImport.getLog().logError(
+ String.format(
+ "Imported number of lines [%s] doesn't match VectorCast number of lines [%s] for coverage unit [%s]",
+ methodCoverageUnit.getCoverageItems(false).size(), coverageDataSubProgram.getTotal(),
+ methodCoverageUnit));
+ }
+ if (methodCoverageUnit.getCoverageItemsCovered(false, CoverageOptionManager.Test_Unit).size() != coverageDataSubProgram.getCovered()) {
+ coverageImport.getLog().logError(
+ String.format(
+ "Imported covered items [%s] doesn't match VectorCast covered items [%s] for coverage unit [%s]",
+ methodCoverageUnit.getCoverageItems(false).size(), coverageDataSubProgram.getCovered(),
+ methodCoverageUnit));
+ }
+ }
+
+ try {
+ coverageImport.getLog().log("\nPerforming Aggregate <-> Import Verification");
+ // Retrieve and process Aggregate file compared with import results
+ VCastAggregateReport report = new VCastAggregateReport(vectorCastCoverageImportProvider.getVCastDirectory());
+ for (AggregateCoverageUnitResult result : report.getResults()) {
+ // System.out.println(result);
+ CoverageUnit coverageUnit = coverageNameToCoverageUnit.get(result.getName());
+ if (coverageUnit == null) {
+ coverageImport.getLog().logError(
+ String.format("Aggregate Check: Can't locate Coverage Unit for Aggregate unit [%s]",
+ result.getName()));
+ } else {
+ int importCuItems = coverageUnit.getCoverageItems(true).size();
+ int importCuCovered =
+ coverageUnit.getCoverageItemsCovered(true, CoverageOptionManagerDefault.Test_Unit).size();
+ if ((result.getNumLines() == null || result.getNumLines() != importCuItems) || (result.getNumCovered() == null || result.getNumCovered() != importCuCovered)) {
+ coverageImport.getLog().logError(
+ String.format(
+ "Aggregate Check: Unit [%s] Import [%d] of [%d] doesn't match Aggregate [%d] of [%d] [%s]",
+ result.getName(), importCuCovered, importCuItems, result.getNumCovered(),
+ result.getNumLines(), Strings.isValid(result.getNotes()) ? " - " + result.getNotes() : ""));
+ }
+ }
+ }
+ coverageImport.getLog().log("Completed Aggregate <-> Import Verification");
+
+ } catch (Exception ex) {
+ OseeLog.log(Activator.class, Level.SEVERE, ex);
+ coverageImport.getLog().logError("\nError Processing Aggregate File: " + ex.getLocalizedMessage());
+ }
+
+ return coverageImport;
+ }
+
+ @Override
+ public String getName() {
+ return "VectorCast Import";
+ }
+
+}

Back to the top