diff options
author | ddunne | 2008-02-15 17:30:38 +0000 |
---|---|---|
committer | ddunne | 2008-02-15 17:30:38 +0000 |
commit | 0b1c6de096e04065a222d26993d4e0ad97037b29 (patch) | |
tree | c4853c78e2d936d238541c411836dcbd1c72e4f6 | |
parent | 1f4d3ae29aace69a0bd9a62decbea57e28242263 (diff) | |
download | org.eclipse.osee-0b1c6de096e04065a222d26993d4e0ad97037b29.tar.gz org.eclipse.osee-0b1c6de096e04065a222d26993d4e0ad97037b29.tar.xz org.eclipse.osee-0b1c6de096e04065a222d26993d4e0ad97037b29.zip |
Added XViewer Change Report
8 files changed, 1010 insertions, 0 deletions
diff --git a/org.eclipse.osee.framework.ui.skynet/plugin.xml b/org.eclipse.osee.framework.ui.skynet/plugin.xml index 45ec4b88732..351b7e190cc 100644 --- a/org.eclipse.osee.framework.ui.skynet/plugin.xml +++ b/org.eclipse.osee.framework.ui.skynet/plugin.xml @@ -381,6 +381,14 @@ id="org.eclipse.osee.framework.ui.skynet.widgets.xmerge.MergeView"
name="Merge View">
</view>
+ <view
+ allowMultiple="true"
+ category="osee.jdk.core.category"
+ class="org.eclipse.osee.framework.ui.skynet.widgets.xchange.ChangeView"
+ icon="images/branch_change.gif"
+ id="org.eclipse.osee.framework.ui.skynet.widgets.xchange.ChangeView"
+ name="Change Report">
+ </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/xchange/ChangeColumn.java b/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xchange/ChangeColumn.java new file mode 100644 index 00000000000..f5b6f914c82 --- /dev/null +++ b/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xchange/ChangeColumn.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.xchange; + +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 ChangeColumn { + + 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, ChangeColumn> nameToAtsXColumn = new HashMap<String, ChangeColumn>(); + private final boolean multiColumnEditable; + + public static ChangeColumn getAtsXColumn(XViewerColumn xCol) { + if (nameToAtsXColumn.size() == 0) { + for (ChangeColumn atsCol : ChangeColumn.values()) + nameToAtsXColumn.put(atsCol.getName(), atsCol); + } + return nameToAtsXColumn.get(xCol.getSystemName()); + } + + public XViewerColumn getXViewerColumn(ChangeColumn 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 ChangeColumn(String name, int width, int align, boolean show, SortDataType sortDataType, boolean multiColumnEditable) { + this(name, width, align, show, sortDataType, multiColumnEditable, null); + } + + private ChangeColumn(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/xchange/ChangeView.java b/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xchange/ChangeView.java new file mode 100644 index 00000000000..ca347a959d4 --- /dev/null +++ b/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xchange/ChangeView.java @@ -0,0 +1,129 @@ +/******************************************************************************* + * 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.xchange; + +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.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.IWorkbenchPage; +import org.eclipse.ui.part.ViewPart; + +/** + * @see ViewPart + * @author Donald G. Dunne + */ +public class ChangeView extends ViewPart implements IActionable { + + public static final String VIEW_ID = "org.eclipse.osee.framework.ui.skynet.widgets.xchange.ChangeView"; + private static String HELP_CONTEXT_ID = "ChangeView"; + private XChangeViewer xChangeViewer; + private IBranchArtifact branchArtifact; + + /** + * @author Donald G. Dunne + */ + public ChangeView() { + } + + public static void openViewUpon(final IBranchArtifact branchArtifact) { + Job job = new Job("Open Change View") { + + @Override + protected IStatus run(IProgressMonitor monitor) { + Displays.ensureInDisplayThread(new Runnable() { + public void run() { + try { + IWorkbenchPage page = AWorkbench.getActivePage(); + ChangeView commitManagerView = + (ChangeView) 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)); + + xChangeViewer = new XChangeViewer(); + xChangeViewer.setDisplayLabel(false); + xChangeViewer.createWidgets(parent, 1); + try { + if (branchArtifact != null) xChangeViewer.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 (xChangeViewer != null && branchArtifact != null) xChangeViewer.setArtifact(branchArtifact.getArtifact(), + ""); + setPartName("Commit Manager: " + branchArtifact.getWorkingBranch().getBranchShortestName()); + } catch (SQLException ex) { + OSEELog.logException(SkynetGuiPlugin.class, ex, true); + } + } + + public String getActionDescription() { + return ""; + } + +}
\ No newline at end of file diff --git a/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xchange/ChangeXViewer.java b/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xchange/ChangeXViewer.java new file mode 100644 index 00000000000..7e539df3904 --- /dev/null +++ b/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xchange/ChangeXViewer.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.xchange; + +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 ChangeXViewer extends XViewer implements IEventReceiver { + + private static String NAMESPACE = "osee.skynet.gui.ChangeXViewer"; + private final XChangeViewer xCommitViewer; + private Branch workingBranch; + + /** + * @param parent + * @param style + */ + public ChangeXViewer(Composite parent, int style, XChangeViewer xViewer) { + this(parent, style, NAMESPACE, new ChangeXViewerFactory(), xViewer); + SkynetEventManager.getInstance().register(BranchEvent.class, this); + } + + public ChangeXViewer(Composite parent, int style, String nameSpace, IXViewerFactory xViewerFactory, XChangeViewer 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) { + ChangeColumn aCol = ChangeColumn.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(); + ChangeColumn aCol = ChangeColumn.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 XChangeViewer 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/xchange/ChangeXViewerFactory.java b/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xchange/ChangeXViewerFactory.java new file mode 100644 index 00000000000..8370e7d00b3 --- /dev/null +++ b/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xchange/ChangeXViewerFactory.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.xchange; + +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 ChangeXViewerFactory extends SkynetXViewerFactory { + + private XViewer xViewer; + + /** + * + */ + public ChangeXViewerFactory() { + } + + 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 (ChangeColumn atsXCol : ChangeColumn.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 (ChangeColumn atsXCol : ChangeColumn.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/xchange/XChangeContentProvider.java b/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xchange/XChangeContentProvider.java new file mode 100644 index 00000000000..fd06918f46b --- /dev/null +++ b/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xchange/XChangeContentProvider.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.xchange; + +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 XChangeContentProvider implements ITreeContentProvider { + + private final ChangeXViewer changeXViewer; + private static Object[] EMPTY_ARRAY = new Object[0]; + + public XChangeContentProvider(ChangeXViewer commitXViewer) { + super(); + this.changeXViewer = 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/xchange/XChangeLabelProvider.java b/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xchange/XChangeLabelProvider.java new file mode 100644 index 00000000000..1cfbad204ba --- /dev/null +++ b/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xchange/XChangeLabelProvider.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.xchange; + +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 XChangeLabelProvider implements ITableLabelProvider { + Font font = null; + + private final ChangeXViewer changeXViewer; + + public XChangeLabelProvider(ChangeXViewer changeXViewer) { + super(); + this.changeXViewer = changeXViewer; + } + + 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 = changeXViewer.getXTreeColumn(columnIndex); + if (xCol != null) { + ChangeColumn aCol = ChangeColumn.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, ChangeColumn aCol) throws SQLException { + if (!xCol.isShow()) return ""; // Since not shown, don't display + if (aCol == ChangeColumn.Attribute_Name) { + return "Attribute Name here"; + } else if (aCol == ChangeColumn.From_Parent_Version) { + return "From Parent Version"; + } else if (aCol == ChangeColumn.To_Branch_Version) + return "To Branch info"; + else if (aCol == ChangeColumn.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 ChangeXViewer getTreeViewer() { + return changeXViewer; + } + + public Image getColumnImage(Object element, int columnIndex) { + if (element instanceof String) return null; + XViewerColumn xCol = changeXViewer.getXTreeColumn(columnIndex); + if (xCol == null) return null; + ChangeColumn dCol = ChangeColumn.getAtsXColumn(xCol); + if (!xCol.isShow()) return null; // Since not shown, don't display + if (dCol == ChangeColumn.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/xchange/XChangeViewer.java b/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xchange/XChangeViewer.java new file mode 100644 index 00000000000..1d38e44377b --- /dev/null +++ b/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xchange/XChangeViewer.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.xchange; + +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 XChangeViewer extends XWidget implements IEventReceiver, IDamWidget { + + private ChangeXViewer xChangeViewer; + private IDirtiableEditor editor; + public final static String normalColor = "#EEEEEE"; + private Label extraInfoLabel; + private Artifact artifact; + + /** + * @param label + */ + public XChangeViewer() { + super("Change Report"); + 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); + + xChangeViewer = new ChangeXViewer(mainComp, SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION, this); + xChangeViewer.getTree().setLayoutData(new GridData(GridData.FILL_BOTH)); + + xChangeViewer.setContentProvider(new XChangeContentProvider(xChangeViewer)); + xChangeViewer.setLabelProvider(new XChangeLabelProvider(xChangeViewer)); + xChangeViewer.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(xChangeViewer.getStatusLabel(), false, false); + + Tree tree = xChangeViewer.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 (xChangeViewer.getWorkingBranch() != null) + ChangeReportView.openViewUpon(xChangeViewer.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) { + xChangeViewer.getCustomize().handleTableCustomization(); + } + }); + + refreshActionEnablement(); + } + + public void refreshActionEnablement() { + } + + public void loadTable() { + try { + if (artifact != null && (artifact instanceof IBranchArtifact)) xChangeViewer.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 (xChangeViewer == null) return items; + if (xChangeViewer.getSelection().isEmpty()) return items; + Iterator i = ((IStructuredSelection) xChangeViewer.getSelection()).iterator(); + while (i.hasNext()) { + Object obj = i.next(); + items.add((Branch) obj); + } + return items; + } + + @Override + public Control getControl() { + return xChangeViewer.getTree(); + } + + @Override + public void dispose() { + xChangeViewer.dispose(); + } + + @Override + public void setFocus() { + xChangeViewer.getTree().setFocus(); + } + + public void refresh() { + xChangeViewer.refresh(); + setLabelError(); + refreshActionEnablement(); + } + + @Override + public boolean isValid() { + if (isRequiredEntry() && xChangeViewer.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 ChangeXViewer getXViewer() { + return xChangeViewer; + } + + public void onEvent(final Event event) { + if (xChangeViewer == null || xChangeViewer.getTree() == null || xChangeViewer.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 xChangeViewer.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(); + } + +} |