package org.js.model.adaptation.ui; import org.eclipse.emf.common.util.EList; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerFilter; import org.js.graph.transform.stagemodel.Stage; import org.js.model.rbac.AccessControlModel; import org.js.model.rbac.Role; import org.js.model.workflow.util.AccessControlModelUtil; import org.js.model.workflow.util.StageModelUtil; /** * Select only a stage, where - roles are assigned to direct predecessor stage - or stage is the first stage without a * role assigned to * * @author Julia * */ public class StageInputFilter extends ViewerFilter { private AccessControlModel accessControlModel; public StageInputFilter(AccessControlModel accessControlModel) { this.accessControlModel = accessControlModel; } @Override public boolean select(Viewer viewer, Object parentElement, Object element) { boolean result = false; if (element instanceof Stage) { Stage stage = (Stage) element; if (StageModelUtil.isFirstStage(stage)) { result = !isAnyRoleAssignedToStage(stage); } else { Stage predecessorStage = stage.getPredecessor(); result = isAnyRoleAssignedToStage(predecessorStage); } } return result; } private boolean isAnyRoleAssignedToStage(Stage stage) { Role role = AccessControlModelUtil.getCorrespondingAbstractRole(stage, accessControlModel); EList<Role> childRoles = role.getChildRoles(); boolean result = !childRoles.isEmpty(); return result; } }