blob: 6659353455e21e0579b9ac8f22f5bf1aab4d8e16 [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;
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.access.AccessControlManager;
import org.eclipse.osee.framework.core.data.BranchId;
import org.eclipse.osee.framework.core.data.BranchToken;
import org.eclipse.osee.framework.core.data.TransactionToken;
import org.eclipse.osee.framework.core.enums.BranchState;
import org.eclipse.osee.framework.core.enums.PermissionEnum;
import org.eclipse.osee.framework.core.model.Branch;
import org.eclipse.osee.framework.core.model.TransactionDelta;
import org.eclipse.osee.framework.jdk.core.type.OseeArgumentException;
import org.eclipse.osee.framework.jdk.core.util.Conditions;
import org.eclipse.osee.framework.plugin.core.util.Jobs;
import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
import org.eclipse.osee.framework.skynet.core.transaction.TransactionManager;
import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
import org.eclipse.osee.framework.ui.skynet.change.view.ChangeReportEditor;
import org.eclipse.osee.framework.ui.skynet.internal.Activator;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.progress.UIJob;
public final class ChangeUiUtil {
public static void open(BranchId branch) {
open(branch, false);
}
public static void open(BranchId branch, boolean showTransactionTab) {
Conditions.checkNotNull(branch, "Branch");
Branch brch = BranchManager.getBranch(branch);
if (permissionsDeniedWithDialog(brch)) {
return;
}
ChangeReportEditorInput editorInput = createInput(branch, true);
editorInput.setTransactionTabActive(showTransactionTab);
open(editorInput);
}
/**
* Check if have at least read-only for given branch. Open dialog if denied.
*
* @return true if permissions denied
*/
public static boolean permissionsDeniedWithDialog(BranchToken branch) {
boolean hasPermission = AccessControlManager.hasPermission(branch, PermissionEnum.READ);
if (!hasPermission) {
AWorkbench.popup("Access Denied",
String.format("Access denied to branch:\n\n%s", BranchManager.toStringWithId(branch)));
return true;
}
return false;
}
public static void open(TransactionToken transaction) {
Conditions.checkNotNull(transaction, "TransactionId");
Branch branch = BranchManager.getBranch(transaction);
if (branch.isInvalid() || permissionsDeniedWithDialog(branch)) {
return;
}
open(createInput(transaction, true));
}
public static void open(TransactionToken startTx, TransactionToken endTx) {
Conditions.checkNotNull(startTx, "First TransactionId");
Conditions.checkNotNull(endTx, "Second TransactionId");
TransactionDelta txDelta = new TransactionDelta(startTx, endTx);
if (!txDelta.areOnTheSameBranch()) {
throw new OseeArgumentException("Invalid selection - transactions art not on the same branch.", txDelta);
}
Branch branch = BranchManager.getBranch(startTx);
if (branch.isInvalid() || permissionsDeniedWithDialog(branch)) {
return;
}
open(createInput(CompareType.COMPARE_SPECIFIC_TRANSACTIONS, txDelta, true));
}
private static ChangeReportEditorInput createInput(TransactionToken transactionId, boolean loadOnOpen) {
TransactionToken startTx = TransactionManager.getPriorTransaction(transactionId);
TransactionToken endTx = transactionId;
TransactionDelta txDelta = new TransactionDelta(startTx, endTx);
return createInput(CompareType.COMPARE_SPECIFIC_TRANSACTIONS, txDelta, loadOnOpen);
}
private static ChangeReportEditorInput createInput(BranchId branch, boolean loadOnOpen) {
if (BranchManager.isArchived(branch) || BranchManager.getState(branch).equals(BranchState.COMMITTED)) {
TransactionToken startTx = BranchManager.getBaseTransaction(branch);
TransactionToken endTx = TransactionManager.getHeadTransaction(branch);
TransactionDelta txDelta = new TransactionDelta(startTx, endTx);
ChangeReportEditorInput input = createInput(CompareType.COMPARE_BASE_TO_HEAD, txDelta, loadOnOpen);
input.setBranch(branch);
return input;
} else {
BranchId parentBranch = BranchManager.getParentBranch(branch);
return createInput(branch, parentBranch, loadOnOpen);
}
}
private static ChangeReportEditorInput createInput(BranchId branch, BranchId parentBranch, boolean loadOnOpen) {
TransactionToken startTx = TransactionManager.getHeadTransaction(branch);
TransactionToken endTx = TransactionManager.getHeadTransaction(parentBranch);
TransactionDelta txDelta = new TransactionDelta(startTx, endTx);
ChangeReportEditorInput input = createInput(CompareType.COMPARE_CURRENTS_AGAINST_PARENT, txDelta, loadOnOpen);
input.setBranch(branch);
return input;
}
public static ChangeReportEditorInput createInput(CompareType compareType, TransactionDelta txDelta, boolean loadOnOpen) {
ChangeUiData uiData = new ChangeUiData(compareType, txDelta);
uiData.setLoadOnOpen(loadOnOpen);
return new ChangeReportEditorInput(uiData);
}
public static void open(final ChangeReportEditorInput editorInput) {
Job job = new UIJob("Open Change Report") {
@Override
public IStatus runInUIThread(IProgressMonitor monitor) {
IStatus status = Status.OK_STATUS;
try {
AWorkbench.getActivePage().openEditor(editorInput, ChangeReportEditor.EDITOR_ID);
} catch (PartInitException ex) {
status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, "Error opening change report", ex);
}
return status;
}
};
Jobs.startJob(job, true);
}
public static void open(BranchToken workingBranch, BranchId parentBranch, boolean b) {
Branch branch = BranchManager.getBranch(workingBranch);
if (branch.isInvalid() || permissionsDeniedWithDialog(workingBranch)) {
return;
}
branch = BranchManager.getBranch(parentBranch);
if (branch.isInvalid() || permissionsDeniedWithDialog(branch)) {
return;
}
ChangeReportEditorInput input = createInput(workingBranch, parentBranch, true);
open(input);
}
}