blob: 4bb474f3da0b91bd89d5ddec97f473058b94f5b1 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010, 2012 Ericsson AB and others.
*
* 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
*
* Description:
*
* This class extends the anomaly erlement to include additional parameters used
* in informal and formal reviews
*
* Contributors:
* Sebastien Dubois - Created for Mylyn Review R4E project
*
*******************************************************************************/
package org.eclipse.mylyn.reviews.r4e.ui.internal.model;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.mylyn.reviews.r4e.core.model.R4EAnomaly;
import org.eclipse.mylyn.reviews.r4e.core.model.R4EAnomalyState;
import org.eclipse.mylyn.reviews.r4e.core.model.R4EFormalReview;
import org.eclipse.mylyn.reviews.r4e.core.model.R4EReviewPhase;
import org.eclipse.mylyn.reviews.r4e.core.model.R4EReviewType;
import org.eclipse.mylyn.reviews.r4e.core.model.serial.impl.OutOfSyncException;
import org.eclipse.mylyn.reviews.r4e.core.model.serial.impl.ResourceHandlingException;
import org.eclipse.mylyn.reviews.r4e.ui.internal.properties.general.AnomalyExtraProperties;
import org.eclipse.mylyn.reviews.r4e.ui.internal.utils.R4EUIConstants;
import org.eclipse.ui.views.properties.IPropertySource;
/**
* @author Sebastien Dubois
* @version $Revision: 1.0 $
*/
public class R4EUIAnomalyExtended extends R4EUIAnomalyBasic {
// ------------------------------------------------------------------------
// Constants
// ------------------------------------------------------------------------
/**
* Field NEXT_STATE_ELEMENT_COMMAND_NAME. (value is ""Progress Anomaly..."")
*/
private static final String NEXT_STATE_ELEMENT_COMMAND_NAME = "Progress Anomaly...";
/**
* Field NEXT_STATE_ELEMENT_COMMAND_TOOLTIP. (value is ""Progress Anomaly to Next State"")
*/
private static final String NEXT_STATE_ELEMENT_COMMAND_TOOLTIP = "Progress Anomaly to Next State";
/**
* Field PREVIOUS_STATE_ELEMENT_COMMAND_NAME. (value is ""Regress Anomaly"")
*/
private static final String PREVIOUS_STATE_ELEMENT_COMMAND_NAME = "Regress Anomaly";
/**
* Field PREVIOUS_STATE_ELEMENT_COMMAND_TOOLTIP. (value is ""Regress Anomaly to Previous State"")
*/
private static final String PREVIOUS_STATE_ELEMENT_COMMAND_TOOLTIP = "Regress Anomaly to Previous State";
/**
* Field ANOMALY_STATE_CREATED. (value is ""CREATED"")
*/
private static final String ANOMALY_STATE_CREATED = "CREATED";
/**
* Field ANOMALY_STATE_ASSIGNED. (value is ""ASSIGNED"")
*/
private static final String ANOMALY_STATE_ASSIGNED = "ASSIGNED";
/**
* Field ANOMALY_STATE_ACCEPTED. (value is ""ACCEPTED"")
*/
private static final String ANOMALY_STATE_ACCEPTED = "ACCEPTED";
/**
* Field ANOMALY_STATE_DUPLICATED. (value is ""DUPLICATED"")
*/
private static final String ANOMALY_STATE_DUPLICATED = "DUPLICATED";
/**
* Field ANOMALY_STATE_REJECTED. (value is ""REJECTED"")
*/
private static final String ANOMALY_STATE_REJECTED = "REJECTED";
/**
* Field ANOMALY_STATE_POSTPONED. (value is ""POSTPONED"")
*/
private static final String ANOMALY_STATE_POSTPONED = "POSTPONED";
/**
* Field ANOMALY_STATE_FIXED. (value is ""FIXED"")
*/
private static final String ANOMALY_STATE_FIXED = "FIXED";
/**
* Field ANOMALY_STATE_VERIFIED. (value is ""VERIFIED"")
*/
private static final String ANOMALY_STATE_VERIFIED = "VERIFIED";
/**
* Field FStateValues.
*/
private static final String[] STATE_VALUES = { ANOMALY_STATE_ACCEPTED, ANOMALY_STATE_DUPLICATED,
ANOMALY_STATE_REJECTED, ANOMALY_STATE_POSTPONED, ANOMALY_STATE_ASSIGNED, ANOMALY_STATE_CREATED,
ANOMALY_STATE_VERIFIED, ANOMALY_STATE_FIXED }; //NOTE: This has to match R4EAnomalyState in R4E core plugin
// ------------------------------------------------------------------------
// Constructors
// ------------------------------------------------------------------------
/**
* Constructor for R4EUIAnomalyExtended.
*
* @param aParent
* IR4EUIModelElement
* @param aAnomaly
* R4EAnomaly
* @param aPosition
* IR4EUIPosition
*/
public R4EUIAnomalyExtended(IR4EUIModelElement aParent, R4EAnomaly aAnomaly, IR4EUIPosition aPosition) {
super(aParent, aAnomaly, aPosition);
}
// ------------------------------------------------------------------------
// Methods
// ------------------------------------------------------------------------
/**
* Method buildAnomalyExtName.
*
* @param aAnomaly
* - the anomaly to use
* @param aPosition
* IR4EUIPosition
* @return String - the new name
*/
public static String buildAnomalyExtName(R4EAnomaly aAnomaly, IR4EUIPosition aPosition) {
final StringBuilder sb = new StringBuilder(getStateString(aAnomaly.getState()) + ": ");
if (null == aPosition) {
sb.append(aAnomaly.getTitle());
} else {
sb.append(aPosition.toString() + "->" + aAnomaly.getTitle());
}
return sb.toString();
}
/**
* Method getAdapter.
*
* @param adapter
* Class
* @return Object
* @see org.eclipse.core.runtime.IAdaptable#getAdapter(Class)
*/
@Override
public Object getAdapter(@SuppressWarnings("rawtypes")
Class adapter) {
if (IR4EUIModelElement.class.equals(adapter)) {
return this;
}
if (IPropertySource.class.equals(adapter)) {
return new AnomalyExtraProperties(this);
}
return null;
}
/**
* Method updateState.
*
* @param aNewState
* R4EAnomalyState
* @throws OutOfSyncException
* @throws ResourceHandlingException
*/
public void updateState(R4EAnomalyState aNewState) throws ResourceHandlingException, OutOfSyncException {
//Set data in model element
final Long bookNum = R4EUIModelController.FResourceUpdater.checkOut(fAnomaly,
R4EUIModelController.getReviewer());
fAnomaly.setState(aNewState);
if (fAnomaly.getState().equals(R4EAnomalyState.R4E_ANOMALY_STATE_FIXED)
|| fAnomaly.getState().equals(R4EAnomalyState.R4E_ANOMALY_STATE_VERIFIED)) {
if (getParent().getParent() instanceof R4EUIFileContext) {
fAnomaly.setFixedInVersion(((R4EUIFileContext) getParent().getParent()).getTargetFileVersion());
} else if (getParent() instanceof R4EUIPostponedFile) {
fAnomaly.setFixedInVersion(((R4EUIPostponedFile) getParent()).getTargetFileVersion());
}
}
updateDecider(aNewState);
R4EUIModelController.FResourceUpdater.checkIn(bookNum);
String nameLabel = null;
if (null == getPosition()) {
nameLabel = adjustTitleLength(fAnomaly);
} else {
nameLabel = getPosition().toString() + "->" + adjustTitleLength(fAnomaly);
}
setName(getStateString(aNewState) + ": " + nameLabel);
}
/**
* Method updateDecider.
*
* @param aNewState
* R4EAnomalyState
*/
private void updateDecider(R4EAnomalyState aNewState) {
if (aNewState.equals(R4EAnomalyState.R4E_ANOMALY_STATE_ACCEPTED)
|| aNewState.equals(R4EAnomalyState.R4E_ANOMALY_STATE_DEFERRED)
|| aNewState.equals(R4EAnomalyState.R4E_ANOMALY_STATE_DUPLICATED)
|| aNewState.equals(R4EAnomalyState.R4E_ANOMALY_STATE_REJECTED)) {
fAnomaly.setDecidedByID(R4EUIModelController.getReviewer());
} else if (aNewState.equals(R4EAnomalyState.R4E_ANOMALY_STATE_FIXED)) {
fAnomaly.setFixedByID(R4EUIModelController.getReviewer());
} else if (aNewState.equals(R4EAnomalyState.R4E_ANOMALY_STATE_VERIFIED)) {
fAnomaly.setFollowUpByID(R4EUIModelController.getReviewer());
}
}
//Commands
/**
* Method isNextStateElementCmd.
*
* @return boolean
* @see org.eclipse.mylyn.reviews.r4e.ui.internal.model.IR4EUIModelElement#isNextStateElementCmd()
*/
@Override
public boolean isNextStateElementCmd() {
if (isEnabled() && !isReadOnly() && 0 < getNextAvailableStates().length) {
return true;
}
return false;
}
/**
* Method getNextStateElementCmdName.
*
* @return String
* @see org.eclipse.mylyn.reviews.r4e.ui.internal.model.IR4EUIModelElement#getNextStateElementCmdName()
*/
@Override
public String getNextStateElementCmdName() {
return NEXT_STATE_ELEMENT_COMMAND_NAME;
}
/**
* Method getNextStateElementCmdTooltip.
*
* @return String
* @see org.eclipse.mylyn.reviews.r4e.ui.internal.model.IR4EUIModelElement#getNextStateElementCmdTooltip()
*/
@Override
public String getNextStateElementCmdTooltip() {
return NEXT_STATE_ELEMENT_COMMAND_TOOLTIP;
}
/**
* Method isPreviousStateElementCmd.
*
* @return boolean
* @see org.eclipse.mylyn.reviews.r4e.ui.internal.model.IR4EUIModelElement#isPreviousStateElementCmd()
*/
@Override
public boolean isPreviousStateElementCmd() {
if (isEnabled() && !isReadOnly() && null != getPreviousState()) {
return true;
}
return false;
}
/**
* Method getPreviousStateElementCmdName.
*
* @return String
* @see org.eclipse.mylyn.reviews.r4e.ui.internal.model.IR4EUIModelElement#getPreviousStateElementCmdName()
*/
@Override
public String getPreviousStateElementCmdName() {
return PREVIOUS_STATE_ELEMENT_COMMAND_NAME;
}
/**
* Method getPreviousStateElementCmdTooltip.
*
* @return String
* @see org.eclipse.mylyn.reviews.r4e.ui.internal.model.IR4EUIModelElement#getPreviousStateElementCmdTooltip()
*/
@Override
public String getPreviousStateElementCmdTooltip() {
return PREVIOUS_STATE_ELEMENT_COMMAND_TOOLTIP;
}
//State Management
/**
* Method getStateString.
*
* @param aNewState
* R4EAnomalyState
* @return String
*/
public static String getStateString(R4EAnomalyState aNewState) {
if (aNewState.equals(R4EAnomalyState.R4E_ANOMALY_STATE_CREATED)) {
return ANOMALY_STATE_CREATED;
} else if (aNewState.equals(R4EAnomalyState.R4E_ANOMALY_STATE_ASSIGNED)) {
return ANOMALY_STATE_ASSIGNED;
} else if (aNewState.equals(R4EAnomalyState.R4E_ANOMALY_STATE_ACCEPTED)) {
return ANOMALY_STATE_ACCEPTED;
} else if (aNewState.equals(R4EAnomalyState.R4E_ANOMALY_STATE_DUPLICATED)) {
return ANOMALY_STATE_DUPLICATED;
} else if (aNewState.equals(R4EAnomalyState.R4E_ANOMALY_STATE_REJECTED)) {
return ANOMALY_STATE_REJECTED;
} else if (aNewState.equals(R4EAnomalyState.R4E_ANOMALY_STATE_DEFERRED)) {
return ANOMALY_STATE_POSTPONED;
} else if (aNewState.equals(R4EAnomalyState.R4E_ANOMALY_STATE_FIXED)) {
return ANOMALY_STATE_FIXED;
} else if (aNewState.equals(R4EAnomalyState.R4E_ANOMALY_STATE_VERIFIED)) {
return ANOMALY_STATE_VERIFIED;
} else {
return "";
}
}
/**
* Method getStateFromString.
*
* @param aNewState
* String
* @return R4EAnomalyState
*/
public static R4EAnomalyState getStateFromString(String aNewState) {
if (aNewState.equals(ANOMALY_STATE_CREATED)) {
return R4EAnomalyState.R4E_ANOMALY_STATE_CREATED;
} else if (aNewState.equals(ANOMALY_STATE_ASSIGNED)) {
return R4EAnomalyState.R4E_ANOMALY_STATE_ASSIGNED;
} else if (aNewState.equals(ANOMALY_STATE_ACCEPTED)) {
return R4EAnomalyState.R4E_ANOMALY_STATE_ACCEPTED;
} else if (aNewState.equals(ANOMALY_STATE_DUPLICATED)) {
return R4EAnomalyState.R4E_ANOMALY_STATE_DUPLICATED;
} else if (aNewState.equals(ANOMALY_STATE_REJECTED)) {
return R4EAnomalyState.R4E_ANOMALY_STATE_REJECTED;
} else if (aNewState.equals(ANOMALY_STATE_POSTPONED)) {
return R4EAnomalyState.R4E_ANOMALY_STATE_DEFERRED;
} else if (aNewState.equals(ANOMALY_STATE_FIXED)) {
return R4EAnomalyState.R4E_ANOMALY_STATE_FIXED;
} else if (aNewState.equals(ANOMALY_STATE_VERIFIED)) {
return R4EAnomalyState.R4E_ANOMALY_STATE_VERIFIED;
} else {
return null; //should never happen
}
}
/**
* Method getStates.
*
* @return String[]
*/
public static String[] getStates() {
return STATE_VALUES;
}
/**
* Method getAvailableStates.
*
* @return String[]
*/
public String[] getAvailableStates() {
//Peek state machine to get available states
final R4EAnomalyState[] states = getAllowedStates(getAnomaly().getState());
final List<String> stateStrings = new ArrayList<String>();
for (R4EAnomalyState state : states) {
stateStrings.add(getStateString(state));
}
return stateStrings.toArray(new String[stateStrings.size()]);
}
/**
* Method getNextAvailableStates.
*
* @return String[]
*/
public String[] getNextAvailableStates() {
//Peek state machine to get available states
final R4EAnomalyState[] states = getNextAllowedStates(getAnomaly().getState());
final List<String> stateStrings = new ArrayList<String>();
for (R4EAnomalyState state : states) {
stateStrings.add(getStateString(state));
}
return stateStrings.toArray(new String[stateStrings.size()]);
}
/**
* Method getPreviousState.
*
* @return R4EAnomalyState
*/
public R4EAnomalyState getPreviousState() {
final R4EAnomalyState currentState = getAnomaly().getState();
if (null != R4EUIModelController.getActiveReview()) {
if (R4EUIModelController.getActiveReview()
.getReview()
.getType()
.equals(R4EReviewType.R4E_REVIEW_TYPE_INFORMAL)) {
switch (currentState.getValue()) {
case R4EAnomalyState.R4E_ANOMALY_STATE_DEFERRED_VALUE:
return R4EAnomalyState.R4E_ANOMALY_STATE_ASSIGNED;
case R4EAnomalyState.R4E_ANOMALY_STATE_DUPLICATED_VALUE:
return R4EAnomalyState.R4E_ANOMALY_STATE_ASSIGNED;
case R4EAnomalyState.R4E_ANOMALY_STATE_REJECTED_VALUE:
return R4EAnomalyState.R4E_ANOMALY_STATE_ASSIGNED;
case R4EAnomalyState.R4E_ANOMALY_STATE_FIXED_VALUE:
return R4EAnomalyState.R4E_ANOMALY_STATE_ASSIGNED;
case R4EAnomalyState.R4E_ANOMALY_STATE_VERIFIED_VALUE:
return R4EAnomalyState.R4E_ANOMALY_STATE_FIXED;
default:
return null;
}
} else { //R4EReviewType.R4E_REVIEW_TYPE_FORMAL
final R4EReviewPhase phase = ((R4EFormalReview) R4EUIModelController.getActiveReview().getReview()).getCurrent()
.getType();
switch (currentState.getValue()) {
case R4EAnomalyState.R4E_ANOMALY_STATE_DEFERRED_VALUE:
if (phase.equals(R4EReviewPhase.R4E_REVIEW_PHASE_DECISION)
|| phase.equals(R4EReviewPhase.R4E_REVIEW_PHASE_REWORK)) {
return R4EAnomalyState.R4E_ANOMALY_STATE_CREATED;
}
break;
case R4EAnomalyState.R4E_ANOMALY_STATE_DUPLICATED_VALUE:
if (phase.equals(R4EReviewPhase.R4E_REVIEW_PHASE_DECISION)
|| phase.equals(R4EReviewPhase.R4E_REVIEW_PHASE_REWORK)) {
return R4EAnomalyState.R4E_ANOMALY_STATE_CREATED;
}
break;
case R4EAnomalyState.R4E_ANOMALY_STATE_REJECTED_VALUE:
if (phase.equals(R4EReviewPhase.R4E_REVIEW_PHASE_DECISION)
|| phase.equals(R4EReviewPhase.R4E_REVIEW_PHASE_REWORK)) {
return R4EAnomalyState.R4E_ANOMALY_STATE_CREATED;
}
break;
case R4EAnomalyState.R4E_ANOMALY_STATE_ACCEPTED_VALUE:
if (phase.equals(R4EReviewPhase.R4E_REVIEW_PHASE_DECISION)
|| phase.equals(R4EReviewPhase.R4E_REVIEW_PHASE_REWORK)) {
return R4EAnomalyState.R4E_ANOMALY_STATE_CREATED;
}
break;
case R4EAnomalyState.R4E_ANOMALY_STATE_FIXED_VALUE:
if (phase.equals(R4EReviewPhase.R4E_REVIEW_PHASE_DECISION)) {
return R4EAnomalyState.R4E_ANOMALY_STATE_CREATED;
}
if (phase.equals(R4EReviewPhase.R4E_REVIEW_PHASE_REWORK)) {
return R4EAnomalyState.R4E_ANOMALY_STATE_ACCEPTED;
}
break;
case R4EAnomalyState.R4E_ANOMALY_STATE_VERIFIED_VALUE:
if (phase.equals(R4EReviewPhase.R4E_REVIEW_PHASE_REWORK)) {
return R4EAnomalyState.R4E_ANOMALY_STATE_FIXED;
}
break;
default:
//should never happen
}
}
}
return null;
}
/**
* Method mapStateToIndex.
*
* @param aState
* R4EAnomalyState
* @return int
*/
public int mapStateToIndex(R4EAnomalyState aState) {
//Peek state machine to get available states
final R4EAnomalyState[] states = getAllowedStates(getAnomaly().getState());
for (int i = 0; i < states.length; i++) {
if (states[i].getValue() == aState.getValue()) {
return i;
}
}
return R4EUIConstants.INVALID_VALUE; //should never happen
}
//Anomaly State Machine
/**
* Method isClassEnabled.
*
* @return boolean
*/
@Override
public boolean isClassEnabled() {
if (null != R4EUIModelController.getActiveReview()) {
if (super.isClassEnabled()) {
if (R4EUIModelController.getActiveReview()
.getReview()
.getType()
.equals(R4EReviewType.R4E_REVIEW_TYPE_INFORMAL)) {
if (fAnomaly.getState().equals(R4EAnomalyState.R4E_ANOMALY_STATE_ASSIGNED)) {
return true;
}
} else if (R4EUIModelController.getActiveReview()
.getReview()
.getType()
.equals(R4EReviewType.R4E_REVIEW_TYPE_FORMAL)) {
if (fAnomaly.getState().equals(R4EAnomalyState.R4E_ANOMALY_STATE_CREATED)) {
return true;
}
}
}
}
return false;
}
/**
* Method isRankEnabled.
*
* @return boolean
*/
@Override
public boolean isRankEnabled() {
if (null != R4EUIModelController.getActiveReview()) {
if (super.isRankEnabled()) {
if (R4EUIModelController.getActiveReview()
.getReview()
.getType()
.equals(R4EReviewType.R4E_REVIEW_TYPE_INFORMAL)) {
if (fAnomaly.getState().equals(R4EAnomalyState.R4E_ANOMALY_STATE_ASSIGNED)) {
return true;
}
} else if (R4EUIModelController.getActiveReview()
.getReview()
.getType()
.equals(R4EReviewType.R4E_REVIEW_TYPE_FORMAL)) {
if (fAnomaly.getState().equals(R4EAnomalyState.R4E_ANOMALY_STATE_CREATED)) {
return true;
}
}
}
}
return false;
}
/**
* Method isDueDateEnabled.
*
* @return boolean
*/
@Override
public boolean isDueDateEnabled() {
if (null != R4EUIModelController.getActiveReview()) {
if (R4EUIModelController.getActiveReview()
.getReview()
.getType()
.equals(R4EReviewType.R4E_REVIEW_TYPE_INFORMAL)) {
if (fAnomaly.getState().equals(R4EAnomalyState.R4E_ANOMALY_STATE_ASSIGNED)) {
return true;
}
} else if (R4EUIModelController.getActiveReview()
.getReview()
.getType()
.equals(R4EReviewType.R4E_REVIEW_TYPE_FORMAL)) {
if (fAnomaly.getState().equals(R4EAnomalyState.R4E_ANOMALY_STATE_CREATED)) {
return true;
}
}
}
return false;
}
/**
* Method isDecidedByEnabled.
*
* @return boolean
*/
public boolean isDecidedByEnabled() {
if (null != R4EUIModelController.getActiveReview()) {
if (R4EUIModelController.getActiveReview()
.getReview()
.getType()
.equals(R4EReviewType.R4E_REVIEW_TYPE_INFORMAL)) {
if (fAnomaly.getState().equals(R4EAnomalyState.R4E_ANOMALY_STATE_DEFERRED)
|| fAnomaly.getState().equals(R4EAnomalyState.R4E_ANOMALY_STATE_DUPLICATED)
|| fAnomaly.getState().equals(R4EAnomalyState.R4E_ANOMALY_STATE_REJECTED)
|| fAnomaly.getState().equals(R4EAnomalyState.R4E_ANOMALY_STATE_FIXED)
|| fAnomaly.getState().equals(R4EAnomalyState.R4E_ANOMALY_STATE_VERIFIED)) {
return true;
}
} else { //R4EReviewType.R4E_REVIEW_TYPE_FORMAL
final R4EReviewPhase phase = ((R4EFormalReview) R4EUIModelController.getActiveReview().getReview()).getCurrent()
.getType();
if (phase.equals(R4EReviewPhase.R4E_REVIEW_PHASE_DECISION)) {
if (fAnomaly.getState().equals(R4EAnomalyState.R4E_ANOMALY_STATE_DEFERRED)
|| fAnomaly.getState().equals(R4EAnomalyState.R4E_ANOMALY_STATE_DUPLICATED)
|| fAnomaly.getState().equals(R4EAnomalyState.R4E_ANOMALY_STATE_REJECTED)
|| fAnomaly.getState().equals(R4EAnomalyState.R4E_ANOMALY_STATE_ACCEPTED)) {
return true;
} else if (phase.equals(R4EReviewPhase.R4E_REVIEW_PHASE_REWORK)) {
if (fAnomaly.getState().equals(R4EAnomalyState.R4E_ANOMALY_STATE_FIXED)
|| fAnomaly.getState().equals(R4EAnomalyState.R4E_ANOMALY_STATE_VERIFIED)) {
return true;
}
}
}
}
}
return false;
}
/**
* Method isFixedByEnabled.
*
* @return boolean
*/
public boolean isFixedByEnabled() {
if (fAnomaly.getState().equals(R4EAnomalyState.R4E_ANOMALY_STATE_FIXED)) {
return true;
}
return false;
}
/**
* Method isFollowUpByEnabled.
*
* @return boolean
*/
public boolean isFollowUpByEnabled() {
if (fAnomaly.getState().equals(R4EAnomalyState.R4E_ANOMALY_STATE_VERIFIED)) {
return true;
}
return false;
}
/**
* Method isNotAcceptedReasonEnabled.
*
* @return boolean
*/
public boolean isNotAcceptedReasonEnabled() {
if (fAnomaly.getState().equals(R4EAnomalyState.R4E_ANOMALY_STATE_REJECTED)) {
return true;
}
return false;
}
/**
* Method getAllowedState.
*
* @param aCurrentState
* R4EAnomalyState
* @return R4EAnomalyState[]
*/
private R4EAnomalyState[] getAllowedStates(R4EAnomalyState aCurrentState) {
final List<R4EAnomalyState> states = new ArrayList<R4EAnomalyState>();
if (null != R4EUIModelController.getActiveReview()) {
if (R4EUIModelController.getActiveReview()
.getReview()
.getType()
.equals(R4EReviewType.R4E_REVIEW_TYPE_INFORMAL)) {
switch (aCurrentState.getValue()) {
case R4EAnomalyState.R4E_ANOMALY_STATE_ASSIGNED_VALUE:
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_ASSIGNED);
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_DEFERRED);
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_DUPLICATED);
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_REJECTED);
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_FIXED);
break;
case R4EAnomalyState.R4E_ANOMALY_STATE_DEFERRED_VALUE:
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_ASSIGNED);
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_DEFERRED);
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_DUPLICATED);
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_REJECTED);
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_FIXED);
break;
case R4EAnomalyState.R4E_ANOMALY_STATE_DUPLICATED_VALUE:
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_ASSIGNED);
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_DEFERRED);
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_DUPLICATED);
break;
case R4EAnomalyState.R4E_ANOMALY_STATE_REJECTED_VALUE:
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_ASSIGNED);
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_DEFERRED);
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_REJECTED);
break;
case R4EAnomalyState.R4E_ANOMALY_STATE_FIXED_VALUE:
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_ASSIGNED);
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_FIXED);
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_VERIFIED);
break;
case R4EAnomalyState.R4E_ANOMALY_STATE_VERIFIED_VALUE:
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_FIXED);
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_VERIFIED);
break;
default:
//should never happen
}
} else { //R4EReviewType.R4E_REVIEW_TYPE_FORMAL
final R4EReviewPhase phase = ((R4EFormalReview) R4EUIModelController.getActiveReview().getReview()).getCurrent()
.getType();
switch (aCurrentState.getValue()) {
case R4EAnomalyState.R4E_ANOMALY_STATE_CREATED_VALUE:
if (phase.equals(R4EReviewPhase.R4E_REVIEW_PHASE_DECISION)
|| phase.equals(R4EReviewPhase.R4E_REVIEW_PHASE_REWORK)) {
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_CREATED);
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_ACCEPTED);
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_DEFERRED);
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_DUPLICATED);
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_REJECTED);
} else {
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_CREATED);
}
break;
case R4EAnomalyState.R4E_ANOMALY_STATE_DEFERRED_VALUE:
if (phase.equals(R4EReviewPhase.R4E_REVIEW_PHASE_DECISION)
|| phase.equals(R4EReviewPhase.R4E_REVIEW_PHASE_REWORK)) {
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_ACCEPTED);
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_DUPLICATED);
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_REJECTED);
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_DEFERRED);
} else {
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_DEFERRED);
}
break;
case R4EAnomalyState.R4E_ANOMALY_STATE_DUPLICATED_VALUE:
if (phase.equals(R4EReviewPhase.R4E_REVIEW_PHASE_DECISION)
|| phase.equals(R4EReviewPhase.R4E_REVIEW_PHASE_REWORK)) {
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_ACCEPTED);
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_DEFERRED);
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_DUPLICATED);
} else {
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_DUPLICATED);
}
break;
case R4EAnomalyState.R4E_ANOMALY_STATE_REJECTED_VALUE:
if (phase.equals(R4EReviewPhase.R4E_REVIEW_PHASE_DECISION)
|| phase.equals(R4EReviewPhase.R4E_REVIEW_PHASE_REWORK)) {
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_ACCEPTED);
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_DEFERRED);
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_REJECTED);
} else {
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_REJECTED);
}
break;
case R4EAnomalyState.R4E_ANOMALY_STATE_ACCEPTED_VALUE:
if (phase.equals(R4EReviewPhase.R4E_REVIEW_PHASE_DECISION)) {
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_CREATED);
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_ACCEPTED);
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_DUPLICATED);
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_DEFERRED);
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_REJECTED);
} else if (phase.equals(R4EReviewPhase.R4E_REVIEW_PHASE_REWORK)) {
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_CREATED);
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_ACCEPTED);
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_DUPLICATED);
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_DEFERRED);
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_REJECTED);
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_FIXED);
} else {
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_ACCEPTED);
}
break;
case R4EAnomalyState.R4E_ANOMALY_STATE_FIXED_VALUE:
if (phase.equals(R4EReviewPhase.R4E_REVIEW_PHASE_REWORK)) {
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_ACCEPTED);
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_FIXED);
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_VERIFIED);
} else {
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_ACCEPTED);
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_FIXED);
}
break;
case R4EAnomalyState.R4E_ANOMALY_STATE_VERIFIED_VALUE:
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_FIXED);
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_VERIFIED);
break;
default:
//should never happen
}
}
}
return states.toArray(new R4EAnomalyState[states.size()]);
}
/**
* Method getNextAllowedStates.
*
* @param aCurrentState
* R4EAnomalyState
* @return R4EAnomalyState[]
*/
private R4EAnomalyState[] getNextAllowedStates(R4EAnomalyState aCurrentState) {
final List<R4EAnomalyState> states = new ArrayList<R4EAnomalyState>();
if (null != R4EUIModelController.getActiveReview()) {
if (R4EUIModelController.getActiveReview()
.getReview()
.getType()
.equals(R4EReviewType.R4E_REVIEW_TYPE_INFORMAL)) {
switch (aCurrentState.getValue()) {
case R4EAnomalyState.R4E_ANOMALY_STATE_ASSIGNED_VALUE:
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_FIXED);
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_DEFERRED);
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_DUPLICATED);
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_REJECTED);
break;
case R4EAnomalyState.R4E_ANOMALY_STATE_FIXED_VALUE:
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_VERIFIED);
break;
default:
//should never happen
}
} else { //R4EReviewType.R4E_REVIEW_TYPE_FORMAL
final R4EReviewPhase phase = ((R4EFormalReview) R4EUIModelController.getActiveReview().getReview()).getCurrent()
.getType();
switch (aCurrentState.getValue()) {
case R4EAnomalyState.R4E_ANOMALY_STATE_CREATED_VALUE:
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_ACCEPTED);
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_DEFERRED);
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_DUPLICATED);
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_REJECTED);
break;
case R4EAnomalyState.R4E_ANOMALY_STATE_ACCEPTED_VALUE:
if (phase.equals(R4EReviewPhase.R4E_REVIEW_PHASE_REWORK)) {
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_FIXED);
}
break;
case R4EAnomalyState.R4E_ANOMALY_STATE_FIXED_VALUE:
if (phase.equals(R4EReviewPhase.R4E_REVIEW_PHASE_REWORK)) {
states.add(R4EAnomalyState.R4E_ANOMALY_STATE_VERIFIED);
}
break;
default:
//should never happen
}
}
}
return states.toArray(new R4EAnomalyState[states.size()]);
}
}