private RefactoringStatus validate(IProgressMonitor pm, EObject object) { RefactoringStatus refactoringStatus = RefactoringStatus.create(Status.OK_STATUS); EValidator.Registry validatorRegistry = extensions.getInstance(EValidator.Registry.class, object); EPackage epackage = object.eClass().getEPackage(); EValidator validator = validatorRegistry.getEValidator(epackage); BasicDiagnostic diagnostics = new BasicDiagnostic(); if (pm.isCanceled()) { refactoringStatus = RefactoringStatus.create(Status.CANCEL_STATUS); pm.done(); } else { SubMonitor sm = SubMonitor.convert(pm, "Validating re-factoring.", IProgressMonitor.UNKNOWN); validator.validate(object, diagnostics, Maps.newHashMap()); Iterator<Diagnostic> validationIterator = Iterables.filter( diagnostics.getChildren(), new Predicate<Diagnostic>() { @Override public boolean apply(Diagnostic diagnostic) { if (diagnostic instanceof FeatureBasedDiagnostic) { return FeatureBasedDiagnostic.ERROR == ((FeatureBasedDiagnostic) diagnostic).getSeverity(); } return false; } }) .iterator(); if (validationIterator.hasNext()) { Diagnostic diagnostic = validationIterator.next(); refactoringStatus = RefactoringStatus.createFatalErrorStatus(diagnostic.getMessage()); } sm.done(); } return refactoringStatus; }
@Override public RefactoringStatus checkInitialConditions(IProgressMonitor pm) throws CoreException, OperationCanceledException { RefactoringStatus refactoringStatus = RefactoringStatus.create(Status.OK_STATUS); SubMonitor sm = SubMonitor.convert( pm, new StringBuffer("Checking initial conditions for ") .append(context.getLabel()) .toString(), 10); EObject element = context.getSourceElement(); EObject container = EcoreUtil.getRootContainer(element); refactoringStatus = sm.isCanceled() ? RefactoringStatus.create(Status.CANCEL_STATUS) : validate(sm, container); sm.done(); return refactoringStatus; }
@Override public RefactoringStatus checkFinalConditions(IProgressMonitor pm) throws CoreException, OperationCanceledException { RefactoringStatus refactoringStatus = RefactoringStatus.create(Status.OK_STATUS); if (modelChange == null) { createChange(pm); } RefactoringTickProvider tickProvider = getRefactoringTickProvider(); StringBuffer taskBuffer = new StringBuffer("Checking final conditions for re-factoring "); taskBuffer.append(context.getLabel()); SubMonitor sm = SubMonitor.convert(pm, taskBuffer.toString(), tickProvider.getCheckFinalConditionsTicks()); Object modified = modelChange.getModifiedElement(); if (modified instanceof EObject) { EObject modifiedEObject = (EObject) modified; EObject container = EcoreUtil.getRootContainer(modifiedEObject); refactoringStatus = pm.isCanceled() ? RefactoringStatus.create(Status.CANCEL_STATUS) : validate(pm, container); } sm.done(); return refactoringStatus; }