Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrescobar2009-04-16 00:53:42 +0000
committerrescobar2009-04-16 00:53:42 +0000
commitf16b27dbda45dc54cf5ce25d8b7c8e35098d121e (patch)
treeb860b32f1195be621992b471e0d27eff5a90740f /org.eclipse.osee.define/src/org/eclipse/osee/define/traceability/blam/RemoveTraceMarksFromTraceUnits.java
parent2e38ff2a6f25a37b622f8f8ac494be0de2c2ad51 (diff)
downloadorg.eclipse.osee-f16b27dbda45dc54cf5ce25d8b7c8e35098d121e.tar.gz
org.eclipse.osee-f16b27dbda45dc54cf5ce25d8b7c8e35098d121e.tar.xz
org.eclipse.osee-f16b27dbda45dc54cf5ce25d8b7c8e35098d121e.zip
"Team Workflow" - 5HPLV - "Import Test Script Traceability for Block III"
Created trace removal blam.
Diffstat (limited to 'org.eclipse.osee.define/src/org/eclipse/osee/define/traceability/blam/RemoveTraceMarksFromTraceUnits.java')
-rw-r--r--org.eclipse.osee.define/src/org/eclipse/osee/define/traceability/blam/RemoveTraceMarksFromTraceUnits.java238
1 files changed, 198 insertions, 40 deletions
diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/traceability/blam/RemoveTraceMarksFromTraceUnits.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/traceability/blam/RemoveTraceMarksFromTraceUnits.java
index 23c422b4231..2d99cdc0e04 100644
--- a/org.eclipse.osee.define/src/org/eclipse/osee/define/traceability/blam/RemoveTraceMarksFromTraceUnits.java
+++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/traceability/blam/RemoveTraceMarksFromTraceUnits.java
@@ -19,23 +19,40 @@ import java.util.Collection;
import java.util.List;
import java.util.logging.Level;
import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.SubProgressMonitor;
+import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.nebula.widgets.xviewer.XViewerColumn;
+import org.eclipse.nebula.widgets.xviewer.XViewerColumn.SortDataType;
import org.eclipse.osee.define.DefinePlugin;
import org.eclipse.osee.define.traceability.ITraceParser;
import org.eclipse.osee.define.traceability.ITraceUnitResourceLocator;
import org.eclipse.osee.define.traceability.TraceUnitExtensionManager;
import org.eclipse.osee.define.traceability.TraceUnitExtensionManager.TraceHandler;
-import org.eclipse.osee.define.traceability.data.TraceMark;
import org.eclipse.osee.define.utility.IResourceHandler;
import org.eclipse.osee.define.utility.UriResourceContentFinder;
import org.eclipse.osee.framework.db.connection.exception.OseeArgumentException;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.type.MutableBoolean;
import org.eclipse.osee.framework.jdk.core.util.Lib;
import org.eclipse.osee.framework.jdk.core.util.Strings;
import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.plugin.core.util.IExceptionableRunnable;
+import org.eclipse.osee.framework.plugin.core.util.Jobs;
import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
import org.eclipse.osee.framework.ui.skynet.blam.operation.AbstractBlam;
-import org.eclipse.ui.PlatformUI;
+import org.eclipse.osee.framework.ui.skynet.results.IResultsEditorProvider;
+import org.eclipse.osee.framework.ui.skynet.results.IResultsEditorTab;
+import org.eclipse.osee.framework.ui.skynet.results.ResultsEditor;
+import org.eclipse.osee.framework.ui.skynet.results.html.ResultsEditorHtmlTab;
+import org.eclipse.osee.framework.ui.skynet.results.table.IResultsXViewerRow;
+import org.eclipse.osee.framework.ui.skynet.results.table.ResultsEditorTableTab;
+import org.eclipse.osee.framework.ui.skynet.results.table.ResultsXViewerRow;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.progress.UIJob;
/**
* @author Roberto E. Escobar
@@ -73,7 +90,9 @@ public class RemoveTraceMarksFromTraceUnits extends AbstractBlam {
public String getXWidgetsXml() {
StringBuilder builder = new StringBuilder();
builder.append("<xWidgets>");
- builder.append("<XWidget xwidgetType=\"XFileSelectionDialog\" displayName=\"Select Path\" />");
+ builder.append("<XWidget xwidgetType=\"XLabel\" displayName=\"Select File Or Folder (file can have a list of folders separated by newlines)\"/>");
+ builder.append("<XWidget xwidgetType=\"XFileSelectionDialog\" displayName=\"Select File\" />");
+ builder.append("<XWidget xwidgetType=\"XDirectorySelectionDialog\" displayName=\"Select Folder\" />");
builder.append("<XWidget xwidgetType=\"XLabel\" displayName=\"Select Trace Types:\"/>");
for (TraceHandler handler : getTraceHandlers()) {
builder.append(getOperationsCheckBoxes(handler.getName()));
@@ -100,47 +119,75 @@ public class RemoveTraceMarksFromTraceUnits extends AbstractBlam {
return toReturn.get(0);
}
+ private void checkPath(String filePath, String type) throws OseeArgumentException {
+ if (!Strings.isValid(filePath)) {
+ throw new OseeArgumentException(String.format("Please enter a valid %s path", type));
+ }
+ File file = new File(filePath);
+ if (file == null || !file.exists()) {
+ throw new OseeArgumentException(String.format("%s path [%s] is not accessible", type, filePath));
+ }
+ }
+
+ private URI getSourceURI(VariableMap variableMap) throws OseeArgumentException {
+ String filePath = variableMap.getString("Select File");
+ String folderPath = variableMap.getString("Select Folder");
+
+ String pathToUse = null;
+ if (Strings.isValid(folderPath) && Strings.isValid(filePath)) {
+ throw new OseeArgumentException("Enter file or folder but not both");
+ } else if (Strings.isValid(folderPath)) {
+ checkPath(folderPath, "folder");
+ pathToUse = folderPath;
+ } else {
+ checkPath(filePath, "file");
+ pathToUse = filePath;
+ }
+ return new File(pathToUse).toURI();
+ }
+
/* (non-Javadoc)
* @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#runOperation(org.eclipse.osee.framework.ui.skynet.blam.VariableMap, org.eclipse.core.runtime.IProgressMonitor)
*/
@Override
public void runOperation(VariableMap variableMap, IProgressMonitor monitor) throws Exception {
try {
- String filePath = variableMap.getString("Select Path");
- if (!Strings.isValid(filePath)) {
- throw new OseeArgumentException("Please enter a valid path");
- }
- File file = new File(filePath);
- if (file == null || !file.exists()) {
- throw new OseeArgumentException("UI list file not accessible");
- }
- URI source = file.toURI();
-
- TraceHandler handler = getCheckedTraceHandler(variableMap);
-
- boolean isInPlaceStorageAllowed = variableMap.getBoolean("Persist Changes");
- boolean isRecursionAllowed = variableMap.getBoolean("Include Sub-Folders");
- boolean isFileWithMultiplePaths = variableMap.getBoolean("File With Embedded Paths");
-
- isInPlaceStorageAllowed = false; // TODO Remember to enable or nothing will be saved;
+ final URI source = getSourceURI(variableMap);
+ final TraceHandler handler = getCheckedTraceHandler(variableMap);
+ final boolean isInPlaceStorageAllowed = variableMap.getBoolean("Persist Changes");
+ final boolean isRecursionAllowed = variableMap.getBoolean("Include Sub-Folders");
+ final boolean isFileWithMultiplePaths = variableMap.getBoolean("File With Embedded Paths");
final int TOTAL_WORK = Integer.MAX_VALUE;
monitor.beginTask(getName(), TOTAL_WORK);
- boolean result =
- isInPlaceStorageAllowed ? MessageDialog.openConfirm(
- PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), getName(),
- "Are you sure you want to remove trace marks from files?") : true;
- if (result) {
+ final MutableBoolean isProcessingAllowed = new MutableBoolean(false);
+ Job job = new UIJob(getName()) {
+
+ @Override
+ public IStatus runInUIThread(IProgressMonitor monitor) {
+ isProcessingAllowed.setValue(isInPlaceStorageAllowed ? MessageDialog.openConfirm(new Shell(), getName(),
+ "Are you sure you want to remove trace marks from files?") : true);
+ return Status.OK_STATUS;
+ }
+ };
+ Jobs.startJob(job, true);
+ job.join();
+
+ if (isProcessingAllowed.getValue()) {
ITraceUnitResourceLocator locator = handler.getLocator();
ITraceParser parser = handler.getParser();
+ ReportCreator reportCreator = new ReportCreator(monitor);
UriResourceContentFinder resourceFinder =
new UriResourceContentFinder(source, isRecursionAllowed, isFileWithMultiplePaths);
- resourceFinder.addLocator(locator, new TraceRemover(isInPlaceStorageAllowed, locator, parser));
+ resourceFinder.addLocator(locator,
+ new TraceRemover(isInPlaceStorageAllowed, locator, parser, reportCreator));
SubProgressMonitor subMonitor = new SubProgressMonitor(monitor, TOTAL_WORK);
resourceFinder.execute(subMonitor);
+
+ reportCreator.openReport();
}
} finally {
monitor.done();
@@ -168,15 +215,18 @@ public class RemoveTraceMarksFromTraceUnits extends AbstractBlam {
}
return handlers;
}
+
private final class TraceRemover implements IResourceHandler {
private final ITraceParser traceParser;
private final ITraceUnitResourceLocator traceUnitLocator;
private final boolean isStorageAllowed;
+ private final ReportCreator reportCreator;
- public TraceRemover(boolean isStorageAllowed, ITraceUnitResourceLocator traceUnitLocator, ITraceParser traceParser) {
+ public TraceRemover(boolean isStorageAllowed, ITraceUnitResourceLocator traceUnitLocator, ITraceParser traceParser, ReportCreator reportCreator) {
this.isStorageAllowed = isStorageAllowed;
this.traceParser = traceParser;
this.traceUnitLocator = traceUnitLocator;
+ this.reportCreator = reportCreator;
}
/* (non-Javadoc)
@@ -187,24 +237,132 @@ public class RemoveTraceMarksFromTraceUnits extends AbstractBlam {
String traceUnitType = traceUnitLocator.getTraceUnitType(name, fileBuffer);
if (Strings.isValid(traceUnitType) && !traceUnitType.equalsIgnoreCase(ITraceUnitResourceLocator.UNIT_TYPE_UNKNOWN)) {
if (traceParser.isTraceRemovalAllowed()) {
- Collection<TraceMark> traceMarks = traceParser.getTraceMarks(fileBuffer);
- if (!traceMarks.isEmpty()) {
- CharBuffer modifiedBuffer = traceParser.removeTraceMarks(fileBuffer);
- if (modifiedBuffer != null) {
- if (isStorageAllowed) {
- try {
- Lib.writeCharBufferToFile(modifiedBuffer, new File(uriPath));
- // Report files Changed
- } catch (Exception ex) {
- OseeLog.log(DefinePlugin.class, Level.SEVERE, ex);
- }
+ CharBuffer modifiedBuffer = traceParser.removeTraceMarks(fileBuffer);
+ if (modifiedBuffer != null) {
+ reportCreator.addModifiedItem(name, fileBuffer, modifiedBuffer);
+ if (isStorageAllowed) {
+ try {
+ Lib.writeCharBufferToFile(modifiedBuffer, new File(uriPath));
+ } catch (Exception ex) {
+ OseeLog.log(DefinePlugin.class, Level.SEVERE, ex);
}
- } else {
- // Report no change
}
+ } else {
+ reportCreator.addNoChangeItem(name);
}
}
}
}
}
+
+ private final class ReportCreator {
+ private List<IResultsXViewerRow> modifiedRows;
+ private List<IResultsXViewerRow> noChangeRows;
+ private final IProgressMonitor monitor;
+
+ public ReportCreator(IProgressMonitor monitor) {
+ this.modifiedRows = null;
+ this.noChangeRows = null;
+ this.monitor = monitor;
+ }
+
+ public void addModifiedItem(String name, CharBuffer original, CharBuffer modified) {
+ if (modifiedRows == null) {
+ modifiedRows = new ArrayList<IResultsXViewerRow>();
+ }
+ String delta = getDelta(original, modified);
+ String[] entries = delta.split("\n");
+ for (String diff : entries) {
+ modifiedRows.add(new ResultsXViewerRow(new String[] {name, diff}));
+ }
+ }
+
+ private String getDelta(CharBuffer original, CharBuffer modified) {
+ StringBuilder buffer = new StringBuilder();
+ int originalLength = original.length();
+ int modifiedLength = modified.length();
+
+ int origIndex = 0;
+ int modIndex = 0;
+ while (origIndex < originalLength || modIndex < modifiedLength) {
+ char origChar = original.get(origIndex);
+ char modChar = modified.get(modIndex);
+ if (origChar != modChar) {
+ buffer.append(origChar);
+ if (originalLength > modifiedLength) {
+ origIndex++;
+ } else {
+ modIndex++;
+ }
+ } else {
+ origIndex++;
+ modIndex++;
+ }
+ if (monitor.isCanceled()) {
+ break;
+ }
+ }
+ return buffer.toString();
+ }
+
+ public void addNoChangeItem(String... name) {
+ if (noChangeRows == null) {
+ noChangeRows = new ArrayList<IResultsXViewerRow>();
+ }
+ noChangeRows.add(new ResultsXViewerRow(name));
+ }
+
+ private List<XViewerColumn> getNoChangeHeaders() {
+ return createColumnHelper("Trace Unit Without Change");
+ }
+
+ private List<XViewerColumn> getModifiedHeaders() {
+ return createColumnHelper("Modified Trace Unit", "Removed");
+ }
+
+ private List<XViewerColumn> createColumnHelper(String... headers) {
+ List<XViewerColumn> columns = new ArrayList<XViewerColumn>();
+ for (String name : headers) {
+ columns.add(new XViewerColumn(name, name, 80, SWT.LEFT, true, SortDataType.String, false, ""));
+ }
+ return columns;
+ }
+
+ public void openReport() {
+ IExceptionableRunnable runnable = new IExceptionableRunnable() {
+
+ @Override
+ public void run(IProgressMonitor monitor) throws Exception {
+ try {
+ ResultsEditor.open(new IResultsEditorProvider() {
+ @Override
+ public String getEditorName() throws OseeCoreException {
+ return getName();
+ }
+
+ @Override
+ public List<IResultsEditorTab> getResultsEditorTabs() throws OseeCoreException {
+ List<IResultsEditorTab> resultsTabs = new ArrayList<IResultsEditorTab>();
+ if (modifiedRows != null && !modifiedRows.isEmpty()) {
+ resultsTabs.add(new ResultsEditorTableTab("Modified Trace Units", getModifiedHeaders(),
+ modifiedRows));
+ }
+ if (noChangeRows != null && !noChangeRows.isEmpty()) {
+ resultsTabs.add(new ResultsEditorTableTab("Unmodified Items", getNoChangeHeaders(),
+ noChangeRows));
+ }
+ if (resultsTabs.isEmpty()) {
+ resultsTabs.add(new ResultsEditorHtmlTab(getName(), getName(), "No changes Reported"));
+ }
+ return resultsTabs;
+ }
+ });
+ } catch (OseeCoreException ex) {
+ OseeLog.log(DefinePlugin.class, Level.SEVERE, ex);
+ }
+ }
+ };
+ Jobs.run(getName(), runnable, DefinePlugin.class, DefinePlugin.PLUGIN_ID);
+ }
+ }
}

Back to the top