/**
* Դ�������ƣ�EReferenceValidateUnit.java
* �������Ȩ���������ӹɷ�����˾ ��Ȩ����
* ϵͳ���ƣ�JRES Studio
* ģ�����ƣ�com.hundsun.ares.studio.jres.ui
* ����˵����JRES Studio�Ľ���չ�ֻ�����ܺͱ༭��ع���
* ����ĵ���
* ���ߣ�
*/
package com.hundsun.ares.studio.ui.editor.validate;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.eclipse.emf.common.util.BasicDiagnostic;
import org.eclipse.emf.common.util.Diagnostic;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.ecore.util.Diagnostician;
import org.eclipse.emf.ecore.util.EcoreUtil;
import com.hundsun.ares.studio.ui.editor.ARESEditorPlugin;
import com.hundsun.ares.studio.ui.validate.IProblemPool;
import com.hundsun.ares.studio.ui.validate.IValidateUnit;
import com.hundsun.ares.studio.ui.validate.KeyParameter;
public class EReferenceValidateUnit implements IValidateUnit {
private EObject owner;
private EReference reference;
/**
* @param owner
* @param reference
*/
public EReferenceValidateUnit(EObject owner, EReference reference) {
super();
this.owner = owner;
this.reference = reference;
}
/**
* @param owner the owner to set
*/
public void setOwner(EObject owner) {
this.owner = owner;
}
/**
* @param reference the reference to set
*/
public void setReference(EReference reference) {
this.reference = reference;
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.jres.ui.validate.IValidateUnit#updateProblemPool(com.hundsun.ares.studio.jres.ui.validate.IProblemPool, java.util.Map)
*/
@Override
public void updateProblemPool(IProblemPool pool,
Map<Object, Object> context) throws Exception {
BasicDiagnostic basicDiagnostic =
new BasicDiagnostic
(Diagnostic.ERROR,
ARESEditorPlugin.PLUGIN_ID,
0,
"�������",
new Object [] { owner });
List<EObject> list;
if (reference.isMany()) {
list = (List<EObject>)owner.eGet(reference);
} else {
list = Collections.singletonList((EObject)owner.eGet(reference));
}
// �����������
for (EObject content : list) {
Diagnostician.INSTANCE.validate(content, basicDiagnostic, context);
}
pool.beginChange();
for (EObject content : list) {
for (Iterator<EObject> iterator = EcoreUtil.getAllContents(content, true); iterator.hasNext(); ) {
EObject eObject = iterator.next();
pool.clear(new KeyParameter(eObject));
}
pool.clear(new KeyParameter(content));
}
// ��������ռ�
for (Diagnostic child : basicDiagnostic.getChildren()) {
pool.addProblem(child);
}
pool.endChange();
}
}