blob: 657a987018d39bc945f7cc74074bdc74bc8ea791 [file] [log] [blame]
/*********************************************************************
* Copyright (c) 2010 Boeing
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Boeing - initial API and implementation
**********************************************************************/
package org.eclipse.osee.framework.ui.skynet.change.view;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.osee.framework.core.data.BranchId;
import org.eclipse.osee.framework.core.data.BranchToken;
import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
import org.eclipse.osee.framework.ui.skynet.change.ChangeUiData;
import org.eclipse.osee.framework.ui.skynet.util.DbConnectionExceptionComposite;
import org.eclipse.osee.framework.ui.skynet.util.SkynetDragAndDrop;
import org.eclipse.osee.framework.ui.skynet.widgets.xchange.ChangeXViewer;
import org.eclipse.osee.framework.ui.skynet.widgets.xchange.ChangeXViewerFactory;
import org.eclipse.osee.framework.ui.skynet.widgets.xchange.XChangeContentProvider;
import org.eclipse.osee.framework.ui.skynet.widgets.xchange.XChangeLabelProvider;
import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.IOseeTreeReportProvider;
import org.eclipse.osee.framework.ui.swt.ALayout;
import org.eclipse.osee.framework.ui.swt.Widgets;
import org.eclipse.swt.SWT;
import org.eclipse.swt.dnd.DND;
import org.eclipse.swt.dnd.DropTargetEvent;
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.Tree;
import org.eclipse.ui.forms.IManagedForm;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.ScrolledForm;
public class ChangeReportTable implements EditorSection.IWidget, IOseeTreeReportProvider {
private ChangeXViewer xChangeViewer;
private final ChangeUiData changeData;
public ChangeReportTable(ChangeUiData changeData) {
this.changeData = changeData;
}
public ChangeXViewer getXViewer() {
return xChangeViewer;
}
@Override
public void onCreate(IManagedForm managedForm, Composite parent) {
if (DbConnectionExceptionComposite.dbConnectionIsOk(parent)) {
FormToolkit toolkit = managedForm.getToolkit();
ScrolledForm form = managedForm.getForm();
form.getBody().setLayout(new GridLayout());
form.getBody().setBackground(parent.getBackground());
Composite composite = toolkit.createComposite(parent, SWT.BORDER);
GridLayout layout = new GridLayout();
layout.marginBottom = 5;
layout.marginHeight = 0;
layout.marginWidth = 0;
composite.setLayout(layout);
GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
gd.widthHint = 300;
composite.setLayoutData(gd);
toolkit.paintBordersFor(composite);
int viewerStyle = SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION;
xChangeViewer = new ChangeXViewer(composite, viewerStyle, new ChangeXViewerFactory(this));
xChangeViewer.setContentProvider(new XChangeContentProvider());
xChangeViewer.setLabelProvider(new XChangeLabelProvider(xChangeViewer));
Tree tree = xChangeViewer.getTree();
GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
gridData.heightHint = 100;
tree.setLayout(ALayout.getZeroMarginLayout());
tree.setLayoutData(gridData);
tree.setHeaderVisible(true);
tree.setLinesVisible(true);
adaptAll(toolkit, composite);
new ChangeDragAndDrop(tree, ChangeXViewerFactory.NAMESPACE);
onUpdate();
}
}
private void adaptAll(FormToolkit toolkit, Composite composite) {
toolkit.adapt(composite);
for (Control control : composite.getChildren()) {
if (Widgets.isAccessible(control)) {
toolkit.adapt(control, false, false);
if (control instanceof Composite) {
adaptAll(toolkit, (Composite) control);
}
}
}
}
@Override
public void onLoading() {
xChangeViewer.setInput(Arrays.asList("Loading..."));
}
@Override
public void onUpdate() {
Collection<?> input;
if (changeData.isLoaded()) {
if (changeData.getChanges().isEmpty()) {
input = Arrays.asList("No changes were found");
} else {
input = changeData.getChanges();
}
} else if (changeData.isLoadOnOpenEnabled()) {
input = Arrays.asList("Loading...");
} else {
input = Arrays.asList("Not Loaded");
}
xChangeViewer.refreshColumnsWithPreCompute(input);
}
private final class ChangeDragAndDrop extends SkynetDragAndDrop {
public ChangeDragAndDrop(Tree tree, String viewId) {
super(tree, viewId);
}
@Override
public void performDragOver(DropTargetEvent event) {
event.detail = DND.DROP_NONE;
}
@Override
public Artifact[] getArtifacts() {
IStructuredSelection selection = (IStructuredSelection) xChangeViewer.getSelection();
ArrayList<Artifact> artifacts = new ArrayList<>();
if (selection != null && !selection.isEmpty()) {
for (Object object : selection.toArray()) {
if (object instanceof IAdaptable) {
Artifact artifact = ((IAdaptable) object).getAdapter(Artifact.class);
if (artifact != null) {
artifacts.add(artifact);
}
}
}
}
return artifacts.toArray(new Artifact[artifacts.size()]);
}
}
@Override
public String getEditorTitle() {
try {
if (changeData.getAssociatedArtifact() != null) {
return String.format("Table Report - Change Report - %s", changeData.getAssociatedArtifact());
} else if (!changeData.getChanges().isEmpty()) {
BranchId branchId = changeData.getChanges().iterator().next().getBranch();
if (branchId != null) {
BranchToken branch = BranchManager.getBranchToken(branchId);
return String.format("Table Report - Change Report - %s", branch.getName());
}
}
} catch (Exception ex) {
// do nothing
}
return "Table Report - Change Report";
}
@Override
public String getReportTitle() {
return getEditorTitle();
}
}