blob: 7d6e1dc725c888b8967e8d4ad9d4f4178118bf79 [file] [log] [blame]
/*********************************************************************
* Copyright (c) 2004, 2007 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.ats.ide.util.widgets.commit;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.nebula.widgets.xviewer.XViewer;
import org.eclipse.osee.ats.api.AtsApi;
import org.eclipse.osee.ats.api.commit.CommitConfigItem;
import org.eclipse.osee.ats.api.commit.CommitOverride;
import org.eclipse.osee.ats.api.commit.CommitStatus;
import org.eclipse.osee.ats.api.workflow.IAtsTeamWorkflow;
import org.eclipse.osee.ats.ide.internal.Activator;
import org.eclipse.osee.ats.ide.internal.AtsApiService;
import org.eclipse.osee.ats.ide.util.widgets.commit.menu.CommitOverrideAction;
import org.eclipse.osee.ats.ide.util.widgets.commit.menu.RemoveCommitOverrideAction;
import org.eclipse.osee.framework.core.data.BranchId;
import org.eclipse.osee.framework.core.data.IOseeBranch;
import org.eclipse.osee.framework.core.data.TransactionToken;
import org.eclipse.osee.framework.jdk.core.result.XResultData;
import org.eclipse.osee.framework.jdk.core.type.OseeArgumentException;
import org.eclipse.osee.framework.jdk.core.type.OseeCoreException;
import org.eclipse.osee.framework.logging.OseeLevel;
import org.eclipse.osee.framework.logging.OseeLog;
import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
import org.eclipse.osee.framework.ui.skynet.results.ResultsEditor;
import org.eclipse.osee.framework.ui.skynet.util.RebaselineInProgressHandler;
import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.skynet.OseeTreeReportAdapter;
import org.eclipse.osee.framework.ui.swt.Displays;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.TreeItem;
/**
* @author Donald G. Dunne
*/
public class CommitXManager extends XViewer {
private final XCommitManager xCommitManager;
private final AtsApi atsApi;
private final IAtsTeamWorkflow teamWf;
public CommitXManager(Composite parent, int style, XCommitManager xRoleViewer, IAtsTeamWorkflow teamWf, AtsApi atsApi) {
super(parent, style, new CommitXManagerFactory(new OseeTreeReportAdapter("Table Report - Commit Manager")));
this.xCommitManager = xRoleViewer;
this.teamWf = teamWf;
this.atsApi = atsApi;
}
@Override
public void updateMenuActionsForTable() {
MenuManager mm = getMenuManager();
mm.insertBefore(MENU_GROUP_PRE, new Separator());
if (!getSelectedArtifacts().isEmpty()) {
Object firstSelectedArt = getSelectedArtifacts().iterator().next();
IOseeBranch branch = null;
CommitConfigItem configItem = null;
if (firstSelectedArt instanceof CommitConfigItem) {
configItem = (CommitConfigItem) firstSelectedArt;
branch = BranchManager.getBranch(AtsApiService.get().getBranchService().getBranch(configItem));
}
CommitOverride override =
atsApi.getBranchService().getCommitOverrideOps().getCommitOverride(xCommitManager.getTeamArt(), branch);
if (override == null) {
mm.insertAfter(MENU_GROUP_PRE, new CommitOverrideAction(teamWf, branch, atsApi));
} else if (branch != null) {
mm.insertAfter(MENU_GROUP_PRE, new RemoveCommitOverrideAction(teamWf, branch, atsApi));
}
}
}
/**
* Release resources
*/
@Override
public void dispose() {
getLabelProvider().dispose();
}
public List<Object> getSelectedArtifacts() {
List<Object> arts = new ArrayList<>();
TreeItem items[] = getTree().getSelection();
if (items.length > 0) {
for (TreeItem item : items) {
arts.add(item.getData());
}
}
return arts;
}
/**
* @return the xUserRoleViewer
*/
public XCommitManager getXCommitViewer() {
return xCommitManager;
}
@Override
public void handleDoubleClick() {
try {
Object firstSelectedArt = getSelectedArtifacts().iterator().next();
BranchId branch = null;
String displayName = "";
CommitConfigItem configItem = null;
if (firstSelectedArt instanceof CommitConfigItem) {
configItem = (CommitConfigItem) firstSelectedArt;
branch = AtsApiService.get().getBranchService().getBranch(configItem);
displayName = configItem.toString();
} else if (firstSelectedArt instanceof TransactionToken) {
TransactionToken txRecord = (TransactionToken) firstSelectedArt;
branch = txRecord.getBranch();
displayName = txRecord.toString();
} else {
throw new OseeArgumentException("Unhandled element type [%s]", firstSelectedArt.getClass().toString());
}
CommitStatus commitStatus =
AtsApiService.get().getBranchService().getCommitStatus(xCommitManager.getTeamArt(), branch, configItem);
if (commitStatus == CommitStatus.Commit_Overridden) {
AWorkbench.popup("Commit Overridden. Right-click remove override to continue.");
} else if (commitStatus == CommitStatus.Rebaseline_In_Progress) {
RebaselineInProgressHandler.handleRebaselineInProgress(xCommitManager.getTeamArt().getWorkingBranch());
} else if (commitStatus == CommitStatus.Working_Branch_Not_Created) {
AWorkbench.popup(commitStatus.getDisplayName(), "Need to create a working branch");
} else if (commitStatus == CommitStatus.No_Commit_Needed) {
AWorkbench.popup(commitStatus.getDisplayName(),
"Destination Branch creation date is after commit to Parent Destination Branch; No Action Needed");
} else if (commitStatus == CommitStatus.Branch_Not_Configured) {
AWorkbench.popup(commitStatus.getDisplayName(),
"Talk to project lead to configure branch for version [" + displayName + "]");
} else if (commitStatus == CommitStatus.Branch_Commit_Disabled) {
AWorkbench.popup(commitStatus.getDisplayName(),
"Talk to project lead as to why commit disabled for version [" + displayName + "]");
} else if (commitStatus == CommitStatus.Commit_Needed || commitStatus == CommitStatus.Merge_In_Progress) {
XResultData rd = new XResultData();
AtsApiService.get().getBranchServiceIde().commitWorkingBranch(xCommitManager.getTeamArt(), true, false,
branch, false, rd);
if (rd.isErrors()) {
ResultsEditor.open("Commit Failure", rd);
}
} else if (commitStatus == CommitStatus.Committed) {
AtsApiService.get().getBranchServiceIde().showChangeReportForBranch(xCommitManager.getTeamArt(), branch);
} else if (commitStatus == CommitStatus.Committed_With_Merge) {
handleCommittedWithMerge(branch);
}
} catch (OseeCoreException ex) {
OseeLog.log(Activator.class, OseeLevel.SEVERE_POPUP, ex);
}
}
private void handleCommittedWithMerge(BranchId branch) {
MessageDialog dialog = new MessageDialog(Displays.getActiveShell(), "Select Report", null,
"Both Change Report and Merge Manager exist.\n\nSelect to open.", MessageDialog.QUESTION,
new String[] {"Show Change Report", "Show Merge Manager", "Cancel"}, 0);
int result = dialog.open();
if (result == 2) {
return;
}
// change report
if (result == 0) {
AtsApiService.get().getBranchServiceIde().showChangeReportForBranch(xCommitManager.getTeamArt(), branch);
}
// merge manager
else {
AtsApiService.get().getBranchServiceIde().showMergeManager(xCommitManager.getTeamArt());
}
}
}