/******************************************************************************* * Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is 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 * * Contributors: * Exadel, Inc. and Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.common.verification.ui.vrules.wizard.runtime; import java.util.*; import org.jboss.tools.common.model.markers.ResourceMarkers; import org.jboss.tools.common.model.XModelObject; import org.jboss.tools.common.model.markers.ResourceProblems; import org.jboss.tools.common.model.plugin.ModelPlugin; import org.jboss.tools.common.verification.ui.XStudioVerificationPlugin; import org.jboss.tools.common.verification.vrules.core.resources.VerificationMarkers; import org.jboss.tools.common.verification.vrules.*; import org.jboss.tools.common.verification.vrules.layer.VObjectImpl; public class VTaskListenerImpl implements VTaskListener { private VerifyWizardView view; int errors = 0; Map<XModelObject,ResourceProblems> problemList = new HashMap<XModelObject,ResourceProblems>(); public VTaskListenerImpl(VerifyWizardView view) { this.view = view; } public void onStart() { view.changeControl(VerifyWizardView.RUNNING_COMMANDS); errors = 0; } public void onRuleApplied(final VRule rule, final VObject object, final VResult[] results) { if(!rule.isEnabled()) return; RuntimeItemWrapper w = view.findWrapper(rule.getName()); RuntimeRuleSetWrapper rsw = (RuntimeRuleSetWrapper)view.findWrapper(rule.getRuleSet().getName()); int errorCount = 0; if(results != null) { for (int i = 0; i < results.length; i++) { if(results[i] == null) { XStudioVerificationPlugin.getPluginLog().logInfo("Result in rule " + rule.getName() + " is null."); //$NON-NLS-1$ //$NON-NLS-2$ continue; } if (results[i].getSignificance() <= VHelper.getManager(/*view.model*/).getMinSignificance()) continue; /// view.model.getOut().println(rule.getName() + ": " + results[i].getMessage()); ++errorCount; ++errors; if(view.getErrorCountLimit() >= 0 && errors > view.getErrorCountLimit()) { if(errors == view.getErrorCountLimit() + 1) view.limitReached(); } else { addProblem(rule, object, results[i]); } } } else addProblem(rule, object, null); if (errorCount == 0) { if(w != null) w.mergeStatus(1); if(rsw != null) rsw.updateStatus(); } else { if(w != null) { w.mergeStatus(2); if(rsw != null) rsw.mergeStatus(2); } } } public void onRuleFinished(final VRule rule, VObject object) { onRuleApplied(rule, object, null); } public void onPause() { view.changeControl(VerifyWizardView.PAUSE_COMMANDS); } public void onResume() { view.changeControl(VerifyWizardView.RUNNING_COMMANDS); } public void onFinish() { view.changeControl(VerifyWizardView.INITIAL_COMMANDS); addMarkers(); } void addProblem(VRule rule, VObject object, VResult result) { VObjectImpl oi = (VObjectImpl)object; XModelObject o = (oi == null) ? null : oi.getModelObject(); if(o == null) return; XModelObject f = o; while(f != null && f.getFileType() != XModelObject.FILE) f = f.getParent(); if(f == null) return; ResourceProblems p = (ResourceProblems)problemList.get(f); String msg = (result == null) ? null : result.getMessage(); if(p == null) { problemList.put(f, p = new ResourceProblems(f)); } Object sp = result == null ? null : result.getSourcePosition(); String attr = sp == null ? null : sp.toString(); if(msg != null) p.addError(o.getPath(), msg, attr, -1); } void addMarkers() { Iterator it = problemList.values().iterator(); while(it.hasNext()) { ResourceProblems p = (ResourceProblems)it.next(); ResourceMarkers markers = new VerificationMarkers(p); markers.setModelObject(p.getResourceObject()); markers.update(); } } }