/** * Դ�������ƣ�EObjectColumnViewerProblemView.java * �������Ȩ���������ӹɷ����޹�˾ ��Ȩ���� * ϵͳ���ƣ�JRES Studio * ģ�����ƣ�com.hundsun.ares.studio.jres.ui * ����˵����JRES Studio�Ľ���չ�ֻ�����ܺͱ༭��ع��� * ����ĵ��� * ���ߣ� */ package com.hundsun.ares.studio.ui.editor.viewers; import java.util.HashSet; import java.util.Set; import org.apache.commons.lang.ArrayUtils; import org.eclipse.emf.common.util.Diagnostic; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.jface.viewers.ColumnViewer; import com.hundsun.ares.studio.ui.editor.IDiagnosticProvider; import com.hundsun.ares.studio.ui.validate.IProblemPool; import com.hundsun.ares.studio.ui.validate.IProblemView; import com.hundsun.ares.studio.ui.validate.KeyParameter; import com.hundsun.ares.studio.ui.validate.ProblemPoolChangeEvent; /** * @author gongyf * */ public class EObjectColumnViewerProblemView implements IProblemView, IDiagnosticProvider { ColumnViewer viewer; IProblemPool pool; /** * @param viewer */ public EObjectColumnViewerProblemView(ColumnViewer viewer) { super(); this.viewer = viewer; } /** * @return the viewer */ protected ColumnViewer getViewer() { return viewer; } /** * @return the pool */ protected IProblemPool getPool() { return pool; } /* (non-Javadoc) * @see com.hundsun.ares.studio.jres.ui.validate.IProblemView#refresh(com.hundsun.ares.studio.jres.ui.validate.IProblemPool, java.util.Map) */ @Override public final void refresh(ProblemPoolChangeEvent event) { this.pool = event.getSource(); doRefresh(event); } protected void doRefresh(ProblemPoolChangeEvent event) { // �������ӻ�ɾ��������BasicDiagnostic Object[] problems = ArrayUtils.addAll(event.getAddProblems(), event.getRemoveedProblems()); Set<Object> objects = new HashSet<Object>(); for (Object problem : problems) { objects.add( ((Diagnostic)problem).getData().get(0) ); } RefreshViewerJob.refresh(getViewer(), objects.toArray(), true); } /* (non-Javadoc) * @see com.hundsun.ares.studio.jres.ui.form.IDiagnosticProvider#getDiagnostic(org.eclipse.emf.ecore.EObject, org.eclipse.emf.ecore.EStructuralFeature) */ @Override public Diagnostic getDiagnostic(EObject object, EStructuralFeature feature, Object... objects ) { if (getPool() != null) { Object[] problems = getPool().getProblem(new KeyParameter(ArrayUtils.addAll(new Object[]{object, feature}, objects))); if (problems != null && problems.length > 0) { return (Diagnostic) problems[0]; } } return null; } }