package com.hundsun.ares.studio.jres.database.resource.validator; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.Map; import org.apache.commons.lang.StringUtils; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.content.IContentType; import org.eclipse.emf.common.util.BasicDiagnostic; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.util.Diagnostician; import org.eclipse.ui.IEditorDescriptor; import org.eclipse.ui.IEditorRegistry; import org.eclipse.ui.PlatformUI; import com.hundsun.ares.studio.core.ARESModelException; import com.hundsun.ares.studio.core.IARESProblem; import com.hundsun.ares.studio.core.IARESResource; import com.hundsun.ares.studio.core.validate.AnyContext; import com.hundsun.ares.studio.core.validate.IAresContext; import com.hundsun.ares.studio.core.validate.IResValidator; import com.hundsun.ares.studio.validate.ValidateUtil; public class DatabaseResValidator implements IResValidator { private static final String ID_CONTEXT = "���ݿ���"; public DatabaseResValidator() { } /* (non-Javadoc) * @see com.hundsun.ares.studio.jres.core.util.validate.ModuleProjectResValidator#doValidate(com.hundsun.ares.studio.core.IARESResource, java.util.Map) */ protected Collection<IARESProblem> doValidate(IARESResource resource, Map<String, IAresContext> contexts) { BasicDiagnostic basicDiagnostic = new BasicDiagnostic(); AnyContext anyContext = (AnyContext) contexts.get(ID_CONTEXT); if (anyContext == null) { contexts.put(ID_CONTEXT, anyContext = new AnyContext(new HashMap<Object, Object>())); } // ����һЩ������ Map<Object, Object> context = (Map<Object, Object>) anyContext.getData(); context.putAll(ValidateUtil.getValidateContext(resource)); String editorID = getSuitableEditorDescriptorID(resource); try { EObject object = resource.getInfo(EObject.class); if (object != null) { Diagnostician.INSTANCE.validate(object, basicDiagnostic, context); Collection<IARESProblem> problems = ValidateUtil.diagnosticChainToARESProblem(basicDiagnostic); if(!StringUtils.isEmpty(editorID)){ for(IARESProblem problem:problems){ problem.setAttribute("org.eclipse.ui.editorID", editorID); } } return problems; } } catch (ARESModelException e) { e.printStackTrace(); } return Collections.EMPTY_LIST; } public static IEditorDescriptor getSuitableEditorDescriptor(IARESResource resource){ if(null != resource.getResource()){ try { String name = resource.getResource().getName(); IEditorRegistry editorReg = PlatformUI.getWorkbench().getEditorRegistry(); IContentType contentType = Platform.getContentTypeManager().findContentTypeFor(name); IEditorDescriptor[] tarray = editorReg.getEditors(name, contentType); if(tarray.length > 0){ for(IEditorDescriptor item:tarray){ if(StringUtils.startsWith(item.getId(), "")){ return item; } } return tarray[0]; } } catch (Exception e) { } } return null; } /** * ��ȡ11�汾�ı༭��ID * @param file * @return */ public static String getSuitableEditorDescriptorID(IARESResource resource){ IEditorDescriptor dis = getSuitableEditorDescriptor(resource); if(null != dis){ return dis.getId(); }else{ return null; } } @Override public Collection<IARESProblem> validate(IARESResource resource, Map<String, IAresContext> contexts) { return doValidate(resource, contexts); } }