Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorddunne2008-02-08 02:13:02 +0000
committerddunne2008-02-08 02:13:02 +0000
commitb0843b33c33d8c4e703ee765ba55466b1dc1e359 (patch)
tree62acda15cda508e4e88991de62b95b4f301f80c5
parentde999f189ce84357b0a23bf5e9f954a8b6361fda (diff)
downloadorg.eclipse.osee-b0843b33c33d8c4e703ee765ba55466b1dc1e359.tar.gz
org.eclipse.osee-b0843b33c33d8c4e703ee765ba55466b1dc1e359.tar.xz
org.eclipse.osee-b0843b33c33d8c4e703ee765ba55466b1dc1e359.zip
Create Merge View
-rw-r--r--org.eclipse.osee.framework.ui.skynet/images/branch_merge.gifbin0 -> 93 bytes
-rw-r--r--org.eclipse.osee.framework.ui.skynet/plugin.xml8
-rw-r--r--org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/MergeColumn.java120
-rw-r--r--org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/MergeView.java180
-rw-r--r--org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/MergeXViewer.java196
-rw-r--r--org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/MergeXViewerFactory.java66
-rw-r--r--org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/XMergeContentProvider.java68
-rw-r--r--org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/XMergeLabelProvider.java109
-rw-r--r--org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/XMergeViewer.java314
9 files changed, 1061 insertions, 0 deletions
diff --git a/org.eclipse.osee.framework.ui.skynet/images/branch_merge.gif b/org.eclipse.osee.framework.ui.skynet/images/branch_merge.gif
new file mode 100644
index 00000000000..4aba624dd12
--- /dev/null
+++ b/org.eclipse.osee.framework.ui.skynet/images/branch_merge.gif
Binary files differ
diff --git a/org.eclipse.osee.framework.ui.skynet/plugin.xml b/org.eclipse.osee.framework.ui.skynet/plugin.xml
index cfe9ce9c10e..45ec4b88732 100644
--- a/org.eclipse.osee.framework.ui.skynet/plugin.xml
+++ b/org.eclipse.osee.framework.ui.skynet/plugin.xml
@@ -373,6 +373,14 @@
<view allowMultiple="false" category="osee.jdk.core.category" class="org.eclipse.osee.framework.ui.skynet.search.QuickSearchView" icon="images/artifact_search.gif" id="org.eclipse.osee.framework.ui.skynet.QuickSearchView" name="Quick Search"/>
<view allowMultiple="true" category="osee.jdk.core.category" class="org.eclipse.osee.framework.ui.skynet.skywalker.SkyWalkerView" icon="images/skywalker.gif" id="org.eclipse.osee.framework.ui.skynet.skywalker.SkyWalkerView" name="Sky Walker"/>
<view allowMultiple="true" category="osee.jdk.core.category" class="org.eclipse.osee.framework.ui.skynet.widgets.xcommit.CommitManagerView" icon="images/branch.gif" id="org.eclipse.osee.framework.ui.skynet.widgets.xcommit.CommitManagerView" name="Commit Manager"/>
+ <view
+ allowMultiple="true"
+ category="osee.jdk.core.category"
+ class="org.eclipse.osee.framework.ui.skynet.widgets.xmerge.MergeView"
+ icon="images/branch_merge.gif"
+ id="org.eclipse.osee.framework.ui.skynet.widgets.xmerge.MergeView"
+ name="Merge View">
+ </view>
</extension>
<extension point="org.eclipse.search.searchPages">
<page canSearchEnclosingProjects="true" class="org.eclipse.osee.framework.ui.skynet.search.ArtifactSearchPage" enabled="true" extensions="&quot;*:1&quot;" icon="images/artifact_search.gif" id="org.eclipse.osee.framework.ui.skynet.search.ArtifactSearchPage" label="Artifact Search" showScopeSection="false" sizeHint="&quot;250,250&quot;" tabPosition="1"/>
diff --git a/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/MergeColumn.java b/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/MergeColumn.java
new file mode 100644
index 00000000000..43153cbb823
--- /dev/null
+++ b/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/MergeColumn.java
@@ -0,0 +1,120 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.xmerge;
+
+import java.util.HashMap;
+import java.util.Map;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumn;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumn.SortDataType;
+import org.eclipse.swt.SWT;
+
+/**
+ * @author Donald G. Dunne
+ */
+public enum MergeColumn {
+
+ Attribute_Name("Attribute", 100, SWT.LEFT, true, SortDataType.String, false),
+
+ From_Parent_Version("From Branch Version", 200, SWT.LEFT, true, SortDataType.String, false),
+
+ To_Branch_Version("To Branch Version", 200, SWT.LEFT, true, SortDataType.String, false),
+
+ Merged_Version("Merged", 200, SWT.LEFT, true, SortDataType.String, false);
+
+ private final String name;
+ private final int width;
+ private final int align;
+ private final boolean show;
+ private final SortDataType sortDataType;
+ private final String desc;
+ private static Map<String, MergeColumn> nameToAtsXColumn = new HashMap<String, MergeColumn>();
+ private final boolean multiColumnEditable;
+
+ public static MergeColumn getAtsXColumn(XViewerColumn xCol) {
+ if (nameToAtsXColumn.size() == 0) {
+ for (MergeColumn atsCol : MergeColumn.values())
+ nameToAtsXColumn.put(atsCol.getName(), atsCol);
+ }
+ return nameToAtsXColumn.get(xCol.getSystemName());
+ }
+
+ public XViewerColumn getXViewerColumn(MergeColumn atsXCol) {
+ XViewerColumn xCol =
+ new XViewerColumn(atsXCol.name, atsXCol.width, atsXCol.width, atsXCol.align, atsXCol.isShow(),
+ atsXCol.sortDataType, 0);
+ if (atsXCol.getDesc() != null)
+ xCol.setToolTip(atsXCol.getName() + ":\n" + atsXCol.getDesc());
+ else
+ xCol.setToolTip(atsXCol.getDesc());
+ return xCol;
+ }
+
+ private MergeColumn(String name, int width, int align, boolean show, SortDataType sortDataType, boolean multiColumnEditable) {
+ this(name, width, align, show, sortDataType, multiColumnEditable, null);
+ }
+
+ private MergeColumn(String name, int width, int align, boolean show, SortDataType sortDataType, boolean multiColumnEditable, String desc) {
+ this.name = name;
+ this.width = width;
+ this.align = align;
+ this.show = show;
+ this.sortDataType = sortDataType;
+ this.multiColumnEditable = multiColumnEditable;
+ this.desc = desc;
+ }
+
+ /**
+ * @return the name
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * @return the align
+ */
+ public int getAlign() {
+ return align;
+ }
+
+ /**
+ * @return the show
+ */
+ public boolean isShow() {
+ return show;
+ }
+
+ /**
+ * @return the sortDataType
+ */
+ public SortDataType getSortDataType() {
+ return sortDataType;
+ }
+
+ /**
+ * @return the width
+ */
+ public int getWidth() {
+ return width;
+ }
+
+ /**
+ * @return the desc
+ */
+ public String getDesc() {
+ return desc;
+ }
+
+ public boolean isMultiColumnEditable() {
+ return multiColumnEditable;
+ }
+
+}
diff --git a/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/MergeView.java b/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/MergeView.java
new file mode 100644
index 00000000000..2ae86399307
--- /dev/null
+++ b/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/MergeView.java
@@ -0,0 +1,180 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.widgets.xmerge;
+
+import java.sql.SQLException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactPersistenceManager;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchPersistenceManager;
+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.Jobs;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.ats.IActionable;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.widgets.IBranchArtifact;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.IViewSite;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.part.ViewPart;
+
+/**
+ * @see ViewPart
+ * @author Donald G. Dunne
+ */
+public class MergeView extends ViewPart implements IActionable {
+
+ public static final String VIEW_ID = "org.eclipse.osee.framework.ui.skynet.widgets.xmerge.MergeView";
+ private static String HELP_CONTEXT_ID = "MergeManagerView";
+ private XMergeViewer xMergeViewer;
+ private IBranchArtifact branchArtifact;
+ private static final String INPUT = "MergeViewInput";
+
+ /**
+ * @author Donald G. Dunne
+ */
+ public MergeView() {
+ }
+
+ public static void openViewUpon(final IBranchArtifact branchArtifact) {
+ Job job = new Job("Open Merge View") {
+
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ Displays.ensureInDisplayThread(new Runnable() {
+ public void run() {
+ try {
+ IWorkbenchPage page = AWorkbench.getActivePage();
+ MergeView commitManagerView =
+ (MergeView) page.showView(VIEW_ID,
+ String.valueOf(branchArtifact.getWorkingBranch().getBranchId()),
+ IWorkbenchPage.VIEW_ACTIVATE);
+ commitManagerView.explore(branchArtifact);
+
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+ });
+
+ monitor.done();
+ return Status.OK_STATUS;
+ }
+ };
+
+ Jobs.startJob(job);
+ }
+
+ @Override
+ public void dispose() {
+ super.dispose();
+ }
+
+ public void setFocus() {
+ }
+
+ /*
+ * @see IWorkbenchPart#createPartControl(Composite)
+ */
+ public void createPartControl(Composite parent) {
+ /*
+ * Create a grid layout object so the text and treeviewer are layed out the way I want.
+ */
+ GridLayout layout = new GridLayout();
+ layout.numColumns = 1;
+ layout.verticalSpacing = 0;
+ layout.marginWidth = 0;
+ layout.marginHeight = 0;
+ parent.setLayout(layout);
+ parent.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ xMergeViewer = new XMergeViewer();
+ xMergeViewer.setDisplayLabel(false);
+ xMergeViewer.createWidgets(parent, 1);
+ try {
+ if (branchArtifact != null) xMergeViewer.setArtifact(branchArtifact.getArtifact(), "");
+ } catch (SQLException ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+
+ SkynetGuiPlugin.getInstance().setHelp(parent, HELP_CONTEXT_ID);
+
+ }
+
+ public void explore(IBranchArtifact branchArtifact) {
+ this.branchArtifact = branchArtifact;
+ try {
+ if (xMergeViewer != null && branchArtifact != null) xMergeViewer.setArtifact(branchArtifact.getArtifact(),
+ "");
+ setPartName("Commit Manager: " + branchArtifact.getWorkingBranch().getBranchShortestName());
+ } catch (SQLException ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ }
+
+ public String getActionDescription() {
+ return "";
+ }
+
+ @Override
+ public void init(IViewSite site, IMemento memento) throws PartInitException {
+ super.init(site, memento);
+
+ try {
+ if (memento != null) {
+ memento = memento.getChild(INPUT);
+ if (memento != null) {
+ int artId = memento.getInteger("artId");
+ if (artId > 0) {
+ int branchId = memento.getInteger("branchId");
+ if (branchId > 0) {
+ Branch branch = BranchPersistenceManager.getInstance().getBranch(branchId);
+ if (branch != null) {
+ Artifact artifact = ArtifactPersistenceManager.getInstance().getArtifactFromId(artId, branch);
+ if (artifact != null) explore((IBranchArtifact) artifact);
+ }
+ }
+ }
+ }
+ }
+ } catch (Exception ex) {
+ OSEELog.logWarning(getClass(), "Merge View error on init: " + ex.getLocalizedMessage(), false);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.part.ViewPart#saveState(org.eclipse.ui.IMemento)
+ */
+ @Override
+ public void saveState(IMemento memento) {
+ super.saveState(memento);
+ try {
+ memento = memento.createChild(INPUT);
+ memento.putInteger("artId", branchArtifact.getArtifact().getArtId());
+ memento.putInteger("branchId", branchArtifact.getArtifact().getBranch().getBranchId());
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, false);
+ }
+ }
+
+} \ No newline at end of file
diff --git a/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/MergeXViewer.java b/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/MergeXViewer.java
new file mode 100644
index 00000000000..9df2df3fec8
--- /dev/null
+++ b/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/MergeXViewer.java
@@ -0,0 +1,196 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.xmerge;
+
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.event.BranchEvent;
+import org.eclipse.osee.framework.skynet.core.event.SkynetEventManager;
+import org.eclipse.osee.framework.ui.plugin.event.Event;
+import org.eclipse.osee.framework.ui.plugin.event.IEventReceiver;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.util.SkynetGuiDebug;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.IXViewerFactory;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewer;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumn;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.TreeColumn;
+import org.eclipse.swt.widgets.TreeItem;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class MergeXViewer extends XViewer implements IEventReceiver {
+
+ private static String NAMESPACE = "osee.skynet.gui.MergeXViewer";
+ private final XMergeViewer xCommitViewer;
+ private Branch workingBranch;
+
+ /**
+ * @param parent
+ * @param style
+ */
+ public MergeXViewer(Composite parent, int style, XMergeViewer xViewer) {
+ this(parent, style, NAMESPACE, new MergeXViewerFactory(), xViewer);
+ SkynetEventManager.getInstance().register(BranchEvent.class, this);
+ }
+
+ public MergeXViewer(Composite parent, int style, String nameSpace, IXViewerFactory xViewerFactory, XMergeViewer xRoleViewer) {
+ super(parent, style, nameSpace, xViewerFactory);
+ this.xCommitViewer = xRoleViewer;
+ }
+
+ @Override
+ protected void createSupportWidgets(Composite parent) {
+ super.createSupportWidgets(parent);
+ createMenuActions();
+ }
+
+ Action openMergeViewAction;
+
+ public void createMenuActions() {
+ MenuManager mm = getMenuManager();
+ mm.createContextMenu(getControl());
+ mm.addMenuListener(new IMenuListener() {
+ public void menuAboutToShow(IMenuManager manager) {
+ updateMenuActions();
+ }
+ });
+
+ openMergeViewAction = new Action("Open Merge View", Action.AS_PUSH_BUTTON) {
+ @Override
+ public void run() {
+ AWorkbench.popup("ERROR", "Not implemented yet");
+ }
+ };
+ }
+
+ public void updateEditMenuActions() {
+ MenuManager mm = getMenuManager();
+
+ // EDIT MENU BLOCK
+ mm.insertBefore(MENU_GROUP_PRE, openMergeViewAction);
+ openMergeViewAction.setEnabled(getSelectedBranches().size() == 1 && getSelectedBranches().iterator().next().isBaselineBranch());
+
+ }
+
+ @Override
+ public boolean isColumnMultiEditable(TreeColumn treeColumn, Collection<TreeItem> treeItems) {
+ MergeColumn aCol = MergeColumn.getAtsXColumn((XViewerColumn) treeColumn.getData());
+ XViewerColumn xCol = getCustomize().getCurrentCustData().getColumnData().getXColumn(aCol.getName());
+ if (!xCol.isShow() || !aCol.isMultiColumnEditable()) return false;
+ return true;
+ }
+
+ @Override
+ public boolean isColumnMultiEditEnabled() {
+ return true;
+ }
+
+ public void updateMenuActions() {
+ MenuManager mm = getMenuManager();
+
+ updateEditMenuActions();
+
+ mm.insertBefore(MENU_GROUP_PRE, new Separator());
+ }
+
+ public void setWorkingBranch(Branch workingBranch) throws SQLException {
+ this.workingBranch = workingBranch;
+ Set<Branch> branches = new HashSet<Branch>();
+ branches.add(workingBranch.getParentBranch());
+ setInput(branches.toArray());
+ expandAll();
+ }
+
+ /**
+ * Release resources
+ */
+ public void dispose() {
+ getLabelProvider().dispose();
+ }
+
+ public ArrayList<Branch> getSelectedBranches() {
+ ArrayList<Branch> arts = new ArrayList<Branch>();
+ TreeItem items[] = getTree().getSelection();
+ if (items.length > 0) for (TreeItem item : items)
+ arts.add((Branch) item.getData());
+ return arts;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see osee.ats.viewer.XViewer#handleAltLeftClick(org.eclipse.swt.widgets.TreeColumn,
+ * org.eclipse.swt.widgets.TreeItem)
+ */
+ @Override
+ public boolean handleAltLeftClick(TreeColumn treeColumn, TreeItem treeItem) {
+ try {
+ // System.out.println("Column " + treeColumn.getText() + " item " +
+ // treeItem);
+ XViewerColumn xCol = (XViewerColumn) treeColumn.getData();
+ MergeColumn aCol = MergeColumn.getAtsXColumn(xCol);
+ Branch userRole = (Branch) treeItem.getData();
+ boolean modified = false;
+ AWorkbench.popup("ERROR", "Not handled");
+
+ if (modified) {
+ // xUserRoleViewer.getReviewArt().getUserRoleManager().addOrUpdateUserRole(userRole, false);
+ xCommitViewer.notifyXModifiedListeners();
+ update(userRole, null);
+ return true;
+ }
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiDebug.class, ex, true);
+ }
+ return false;
+ }
+
+ /**
+ * @return the xUserRoleViewer
+ */
+ public XMergeViewer getXUserRoleViewer() {
+ return xCommitViewer;
+ }
+
+ /**
+ * @return the workingBranch
+ */
+ public Branch getWorkingBranch() {
+ return workingBranch;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.plugin.event.IEventReceiver#onEvent(org.eclipse.osee.framework.ui.plugin.event.Event)
+ */
+ public void onEvent(Event event) {
+ xCommitViewer.refresh();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.plugin.event.IEventReceiver#runOnEventInDisplayThread()
+ */
+ public boolean runOnEventInDisplayThread() {
+ return true;
+ }
+
+}
diff --git a/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/MergeXViewerFactory.java b/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/MergeXViewerFactory.java
new file mode 100644
index 00000000000..eec27469f66
--- /dev/null
+++ b/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/MergeXViewerFactory.java
@@ -0,0 +1,66 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.xmerge;
+
+import java.util.ArrayList;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewer;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumn;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerSorter;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.customize.CustomizeData;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.skynet.SkynetXViewerFactory;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class MergeXViewerFactory extends SkynetXViewerFactory {
+
+ private XViewer xViewer;
+
+ /**
+ *
+ */
+ public MergeXViewerFactory() {
+ }
+
+ public XViewerSorter createNewXSorter(XViewer xViewer) {
+ this.xViewer = xViewer;
+ return new XViewerSorter(xViewer);
+ }
+
+ public CustomizeData getDefaultTableCustomizeData() {
+ CustomizeData custData = new CustomizeData();
+ int x = 0;
+ ArrayList<XViewerColumn> cols = new ArrayList<XViewerColumn>();
+ for (MergeColumn atsXCol : MergeColumn.values()) {
+ XViewerColumn newCol = atsXCol.getXViewerColumn(atsXCol);
+ newCol.setOrderNum(x++);
+ newCol.setTreeViewer(xViewer);
+ cols.add(newCol);
+ }
+ custData.getColumnData().setColumns(cols);
+ return custData;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see osee.skynet.gui.widgets.xviewer.IXViewerFactory#getDefaultXViewerColumn()
+ */
+ public XViewerColumn getDefaultXViewerColumn(String name) {
+ for (MergeColumn atsXCol : MergeColumn.values()) {
+ if (atsXCol.getName().equals(name)) {
+ return atsXCol.getXViewerColumn(atsXCol);
+ }
+ }
+ return null;
+ }
+
+}
diff --git a/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/XMergeContentProvider.java b/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/XMergeContentProvider.java
new file mode 100644
index 00000000000..b962449fee2
--- /dev/null
+++ b/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/XMergeContentProvider.java
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.xmerge;
+
+import java.util.Collection;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+
+public class XMergeContentProvider implements ITreeContentProvider {
+
+ private final MergeXViewer mergeXViewer;
+ private static Object[] EMPTY_ARRAY = new Object[0];
+
+ public XMergeContentProvider(MergeXViewer commitXViewer) {
+ super();
+ this.mergeXViewer = commitXViewer;
+ }
+
+ @SuppressWarnings("unchecked")
+ public Object[] getChildren(Object parentElement) {
+ if (parentElement instanceof Object[]) {
+ return (Object[]) parentElement;
+ }
+ if (parentElement instanceof Collection) {
+ return ((Collection) parentElement).toArray();
+ }
+ if (parentElement instanceof Branch) {
+ try {
+ return ((Branch) parentElement).getChildBranches().toArray();
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, false);
+ }
+ }
+ return EMPTY_ARRAY;
+ }
+
+ public Object getParent(Object element) {
+ return null;
+ }
+
+ public boolean hasChildren(Object element) {
+ return getChildren(element).length > 0;
+ }
+
+ public Object[] getElements(Object inputElement) {
+ if (inputElement instanceof String) return new Object[] {inputElement};
+ return getChildren(inputElement);
+ }
+
+ public void dispose() {
+ }
+
+ @SuppressWarnings("unchecked")
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ }
+
+}
diff --git a/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/XMergeLabelProvider.java b/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/XMergeLabelProvider.java
new file mode 100644
index 00000000000..3c81301079f
--- /dev/null
+++ b/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/XMergeLabelProvider.java
@@ -0,0 +1,109 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.ui.skynet.widgets.xmerge;
+
+import java.sql.SQLException;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.XViewerColumn;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.Image;
+
+public class XMergeLabelProvider implements ITableLabelProvider {
+ Font font = null;
+
+ private final MergeXViewer mergeXViewer;
+
+ public XMergeLabelProvider(MergeXViewer mergeXViewer) {
+ super();
+ this.mergeXViewer = mergeXViewer;
+ }
+
+ public String getColumnText(Object element, int columnIndex) {
+ if (element instanceof String) {
+ if (columnIndex == 1)
+ return (String) element;
+ else
+ return "";
+ }
+ Branch branch = ((Branch) element);
+ if (branch == null) return "";
+ XViewerColumn xCol = mergeXViewer.getXTreeColumn(columnIndex);
+ if (xCol != null) {
+ MergeColumn aCol = MergeColumn.getAtsXColumn(xCol);
+ try {
+ return getColumnText(element, columnIndex, branch, xCol, aCol);
+ } catch (SQLException ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, false);
+ }
+ }
+ return "";
+ }
+
+ /**
+ * Provided as optimization of subclassed classes so provider doesn't have to retrieve the same information that has
+ * already been retrieved
+ *
+ * @param element
+ * @param columnIndex
+ * @param branch
+ * @param xCol
+ * @param aCol
+ * @return column string
+ * @throws SQLException
+ */
+ public String getColumnText(Object element, int columnIndex, Branch branch, XViewerColumn xCol, MergeColumn aCol) throws SQLException {
+ if (!xCol.isShow()) return ""; // Since not shown, don't display
+ if (aCol == MergeColumn.Attribute_Name) {
+ return "Attribute Name here";
+ } else if (aCol == MergeColumn.From_Parent_Version) {
+ return "From Parent Version";
+ } else if (aCol == MergeColumn.To_Branch_Version)
+ return "To Branch info";
+ else if (aCol == MergeColumn.From_Parent_Version) return "From Branch info";
+ return "Unhandled Column";
+ }
+
+ public void dispose() {
+ if (font != null) font.dispose();
+ font = null;
+ }
+
+ public boolean isLabelProperty(Object element, String property) {
+ return false;
+ }
+
+ public void addListener(ILabelProviderListener listener) {
+ }
+
+ public void removeListener(ILabelProviderListener listener) {
+ }
+
+ public MergeXViewer getTreeViewer() {
+ return mergeXViewer;
+ }
+
+ public Image getColumnImage(Object element, int columnIndex) {
+ if (element instanceof String) return null;
+ XViewerColumn xCol = mergeXViewer.getXTreeColumn(columnIndex);
+ if (xCol == null) return null;
+ MergeColumn dCol = MergeColumn.getAtsXColumn(xCol);
+ if (!xCol.isShow()) return null; // Since not shown, don't display
+ if (dCol == MergeColumn.To_Branch_Version) {
+ return SkynetGuiPlugin.getInstance().getImage("branch.gif");
+ }
+ return null;
+ }
+
+}
diff --git a/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/XMergeViewer.java b/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/XMergeViewer.java
new file mode 100644
index 00000000000..154700a7ba4
--- /dev/null
+++ b/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xmerge/XMergeViewer.java
@@ -0,0 +1,314 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet.widgets.xmerge;
+
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.osee.framework.jdk.core.util.AHTML;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.event.LocalTransactionEvent;
+import org.eclipse.osee.framework.skynet.core.event.RemoteTransactionEvent;
+import org.eclipse.osee.framework.skynet.core.event.SkynetEventManager;
+import org.eclipse.osee.framework.skynet.core.event.TransactionEvent;
+import org.eclipse.osee.framework.ui.plugin.event.Event;
+import org.eclipse.osee.framework.ui.plugin.event.IEventReceiver;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.changeReport.ChangeReportView;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.widgets.IBranchArtifact;
+import org.eclipse.osee.framework.ui.skynet.widgets.IDamWidget;
+import org.eclipse.osee.framework.ui.skynet.widgets.XWidget;
+import org.eclipse.osee.framework.ui.swt.ALayout;
+import org.eclipse.osee.framework.ui.swt.IDirtiableEditor;
+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.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.swt.widgets.ToolItem;
+import org.eclipse.swt.widgets.Tree;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class XMergeViewer extends XWidget implements IEventReceiver, IDamWidget {
+
+ private MergeXViewer xCommitViewer;
+ private IDirtiableEditor editor;
+ public final static String normalColor = "#EEEEEE";
+ private Label extraInfoLabel;
+ private Artifact artifact;
+
+ /**
+ * @param label
+ */
+ public XMergeViewer() {
+ super("Merge Manager");
+ SkynetEventManager.getInstance().register(RemoteTransactionEvent.class, this);
+ SkynetEventManager.getInstance().register(LocalTransactionEvent.class, this);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see osee.skynet.gui.widgets.XWidget#createWidgets(org.eclipse.swt.widgets.Composite, int)
+ */
+ @Override
+ public void createWidgets(Composite parent, int horizontalSpan) {
+
+ // Create Text Widgets
+ if (displayLabel && !label.equals("")) {
+ labelWidget = new Label(parent, SWT.NONE);
+ labelWidget.setText(label + ":");
+ if (toolTip != null) {
+ labelWidget.setToolTipText(toolTip);
+ }
+ }
+
+ 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);
+
+ xCommitViewer = new MergeXViewer(mainComp, SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION, this);
+ xCommitViewer.getTree().setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ xCommitViewer.setContentProvider(new XMergeContentProvider(xCommitViewer));
+ xCommitViewer.setLabelProvider(new XMergeLabelProvider(xCommitViewer));
+ xCommitViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
+ */
+ public void selectionChanged(SelectionChangedEvent event) {
+ refreshActionEnablement();
+ }
+ });
+
+ if (toolkit != null) toolkit.adapt(xCommitViewer.getStatusLabel(), false, false);
+
+ Tree tree = xCommitViewer.getTree();
+ GridData gridData = new GridData(GridData.FILL_BOTH);
+ gridData.heightHint = 100;
+ 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 bComp = new Composite(parent, SWT.NONE);
+ // bComp.setBackground(mainSComp.getDisplay().getSystemColor(SWT.COLOR_CYAN));
+ bComp.setLayout(new GridLayout(2, false));
+ bComp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ Composite leftComp = new Composite(bComp, SWT.NONE);
+ leftComp.setLayout(new GridLayout());
+ leftComp.setLayoutData(new GridData(GridData.BEGINNING | GridData.FILL_HORIZONTAL));
+
+ extraInfoLabel = new Label(leftComp, SWT.NONE);
+ extraInfoLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ extraInfoLabel.setText("");
+
+ Composite rightComp = new Composite(bComp, SWT.NONE);
+ rightComp.setLayout(new GridLayout());
+ rightComp.setLayoutData(new GridData(GridData.END));
+
+ ToolBar toolBar = new ToolBar(rightComp, SWT.FLAT | SWT.RIGHT);
+ GridData gd = new GridData(GridData.FILL_HORIZONTAL);
+ toolBar.setLayoutData(gd);
+ ToolItem item = null;
+
+ item = new ToolItem(toolBar, SWT.PUSH);
+ item.setImage(SkynetGuiPlugin.getInstance().getImage("branch_change.gif"));
+ item.setToolTipText("Show Change Report");
+ item.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ if (xCommitViewer.getWorkingBranch() != null)
+ ChangeReportView.openViewUpon(xCommitViewer.getWorkingBranch());
+ else
+ AWorkbench.popup("ERROR", "Not implemented yet.");
+ }
+ });
+
+ item = new ToolItem(toolBar, SWT.PUSH);
+ item.setImage(SkynetGuiPlugin.getInstance().getImage("refresh.gif"));
+ item.setToolTipText("Refresh");
+ item.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ loadTable();
+ }
+ });
+
+ item = new ToolItem(toolBar, SWT.PUSH);
+ item.setImage(SkynetGuiPlugin.getInstance().getImage("customize.gif"));
+ item.setToolTipText("Customize Table");
+ item.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ xCommitViewer.getCustomize().handleTableCustomization();
+ }
+ });
+
+ refreshActionEnablement();
+ }
+
+ public void refreshActionEnablement() {
+ }
+
+ public void loadTable() {
+ try {
+ if (artifact != null && (artifact instanceof IBranchArtifact)) xCommitViewer.setWorkingBranch(((IBranchArtifact) artifact).getWorkingBranch());
+ extraInfoLabel.setText("Commit Status for branch: \"" + ((IBranchArtifact) artifact).getWorkingBranch() + "\" - \"" + ((IBranchArtifact) artifact).getWorkingBranch().getBranchShortName() + "\"");
+ } catch (Exception ex) {
+ OSEELog.logException(SkynetGuiPlugin.class, ex, true);
+ }
+ refresh();
+ }
+
+ @SuppressWarnings("unchecked")
+ public ArrayList<Branch> getSelectedBranches() {
+ ArrayList<Branch> items = new ArrayList<Branch>();
+ if (xCommitViewer == null) return items;
+ if (xCommitViewer.getSelection().isEmpty()) return items;
+ Iterator i = ((IStructuredSelection) xCommitViewer.getSelection()).iterator();
+ while (i.hasNext()) {
+ Object obj = i.next();
+ items.add((Branch) obj);
+ }
+ return items;
+ }
+
+ @Override
+ public Control getControl() {
+ return xCommitViewer.getTree();
+ }
+
+ @Override
+ public void dispose() {
+ xCommitViewer.dispose();
+ }
+
+ @Override
+ public void setFocus() {
+ xCommitViewer.getTree().setFocus();
+ }
+
+ public void refresh() {
+ xCommitViewer.refresh();
+ setLabelError();
+ refreshActionEnablement();
+ }
+
+ @Override
+ public boolean isValid() {
+ if (isRequiredEntry() && xCommitViewer.getTree().getItemCount() == 0) {
+ extraInfoLabel.setText("At least one role entry is required");
+ return false;
+ }
+ extraInfoLabel.setText("");
+ return true;
+ }
+
+ @Override
+ public void setXmlData(String str) {
+ }
+
+ @Override
+ public String getXmlData() {
+ return null;
+ }
+
+ @Override
+ public String toHTML(String labelFont) {
+ return AHTML.simplePage("Unhandled");
+ }
+
+ @Override
+ public String getReportData() {
+ return null;
+ }
+
+ /**
+ * @return Returns the xViewer.
+ */
+ public MergeXViewer getXViewer() {
+ return xCommitViewer;
+ }
+
+ public void onEvent(final Event event) {
+ if (xCommitViewer == null || xCommitViewer.getTree() == null || xCommitViewer.getTree().isDisposed()) return;
+
+ if (event instanceof TransactionEvent) {
+ refresh();
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see osee.jdk.core.event.IEventReceiver#runOnEventInDisplayThread()
+ */
+ public boolean runOnEventInDisplayThread() {
+ return true;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see osee.skynet.gui.widgets.XWidget#getData()
+ */
+ @Override
+ public Object getData() {
+ return xCommitViewer.getInput();
+ }
+
+ public IDirtiableEditor getEditor() {
+ return editor;
+ }
+
+ public void setEditor(IDirtiableEditor editor) {
+ this.editor = editor;
+ }
+
+ public boolean isEditable() {
+ return editable;
+ }
+
+ public void setEditable(boolean editable) {
+ this.editable = editable;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.widgets.IDamWidget#setArtifact(org.eclipse.osee.framework.skynet.core.artifact.Artifact, java.lang.String)
+ */
+ public void setArtifact(Artifact artifact, String attrName) throws IllegalStateException, SQLException {
+ this.artifact = artifact;
+ loadTable();
+ }
+
+}

Back to the top