diff options
author | ddunne | 2008-02-08 02:13:02 +0000 |
---|---|---|
committer | ddunne | 2008-02-08 02:13:02 +0000 |
commit | b0843b33c33d8c4e703ee765ba55466b1dc1e359 (patch) | |
tree | 62acda15cda508e4e88991de62b95b4f301f80c5 | |
parent | de999f189ce84357b0a23bf5e9f954a8b6361fda (diff) | |
download | org.eclipse.osee-b0843b33c33d8c4e703ee765ba55466b1dc1e359.tar.gz org.eclipse.osee-b0843b33c33d8c4e703ee765ba55466b1dc1e359.tar.xz org.eclipse.osee-b0843b33c33d8c4e703ee765ba55466b1dc1e359.zip |
Create Merge View
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 Binary files differnew file mode 100644 index 00000000000..4aba624dd12 --- /dev/null +++ b/org.eclipse.osee.framework.ui.skynet/images/branch_merge.gif 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=""*:1"" icon="images/artifact_search.gif" id="org.eclipse.osee.framework.ui.skynet.search.ArtifactSearchPage" label="Artifact Search" showScopeSection="false" sizeHint=""250,250"" 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(); + } + +} |