package com.sap.ide.refactoring.core.reference;
import org.eclipse.ltk.core.refactoring.RefactoringStatus;
import org.eclipse.ltk.core.refactoring.RefactoringStatusEntry;
import com.sap.ide.refactoring.Activator;
import com.sap.ide.refactoring.core.RefactoringSeverity;
import com.sap.ide.refactoring.model.RefactoringModelUtil;
import com.sap.ide.refactoring.ui.ReEvaluationStatusContext;
import com.sap.mi.textual.grammar.impl.DelayedReference;
import com.sap.tc.moin.repository.mmi.reflect.RefObject;
public class ReEvaluationInfo {
public final DelayedReference ref;
public final RefObject modelElement;
public final Object originalValue;
public final Object currentValue;
public final ReEvaluationType type;
private RefactoringSeverity severity = RefactoringSeverity.WARNING; // default severity
public ReEvaluationInfo(DelayedReference ref, RefObject modelElement, Object originalValue, Object currentValue, ReEvaluationType type) {
this.ref = ref;
this.modelElement = modelElement;
this.originalValue = originalValue;
this.currentValue = currentValue;
this.type = type;
}
public String getMessage() {
return type + ": " + ref.getPropertyName() + " on " + RefactoringModelUtil.getModelElementNameAndType(modelElement) + " from " + getNameFor(originalValue) + " to " + getNameFor(currentValue) + " (via " + ref.getOclQuery() +")";
}
private String getNameFor(Object value) {
if (originalValue instanceof RefObject) {
return RefactoringModelUtil.getModelElementNameAndType((RefObject) value);
} else {
return value.toString();
}
}
public RefactoringStatus asRefactoringStatus() {
ReEvaluationStatusContext context = new ReEvaluationStatusContext(this);
int severity = getSeverity().asEclipseRefactoringSeverity();
return RefactoringStatus.createStatus(severity, getMessage(), context, Activator.PLUGIN_ID, RefactoringStatusEntry.NO_CODE, null);
}
public RefactoringSeverity getSeverity() {
return severity;
}
/**
* Allows refactorings to set a new severity within their postValidation step.
* @param severity
*/
public void setSeverity(RefactoringSeverity severity) {
this.severity = severity;
}
}