/**
* <copyright>
* </copyright>
*
* $Id$
*/
package com.hundsun.ares.studio.biz.util;
import com.hundsun.ares.studio.biz.*;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.eclipse.emf.common.util.BasicDiagnostic;
import org.eclipse.emf.common.util.Diagnostic;
import org.eclipse.emf.common.util.DiagnosticChain;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.common.util.ResourceLocator;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.util.EObjectValidator;
import com.hundsun.ares.studio.biz.ARESObject;
import com.hundsun.ares.studio.biz.BizInterface;
import com.hundsun.ares.studio.biz.BizPackage;
import com.hundsun.ares.studio.biz.Multiplicity;
import com.hundsun.ares.studio.biz.ParamType;
import com.hundsun.ares.studio.biz.Parameter;
import com.hundsun.ares.studio.biz.StandardObjField;
import com.hundsun.ares.studio.biz.StandardObjFieldList;
import com.hundsun.ares.studio.biz.constants.IBizConstants;
import com.hundsun.ares.studio.biz.constants.IBizRefType;
import com.hundsun.ares.studio.biz.core.BizUtil;
import com.hundsun.ares.studio.core.IARESProject;
import com.hundsun.ares.studio.core.IARESResource;
import com.hundsun.ares.studio.core.IValidateConstant;
import com.hundsun.ares.studio.core.ResourceTypeMapping;
import com.hundsun.ares.studio.core.model.CorePackage;
import com.hundsun.ares.studio.core.util.ResourcesUtil;
import com.hundsun.ares.studio.jres.metadata.constant.IMetadataRefType;
import com.hundsun.ares.studio.jres.model.metadata.util.IDRangeUtil;
import com.hundsun.ares.studio.jres.model.metadata.util.MetadataValidator;
import com.hundsun.ares.studio.model.reference.ReferenceInfo;
import com.hundsun.ares.studio.reference.ReferenceManager;
/**
* <!-- begin-user-doc -->
* The <b>Validator</b> for the model.
* <!-- end-user-doc -->
* @see com.hundsun.ares.studio.biz.BizPackage
* @generated
*/
public class BizValidator extends EObjectValidator {
/**
* The cached model package
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public static final BizValidator INSTANCE = new BizValidator();
/**
* A constant for the {@link org.eclipse.emf.common.util.Diagnostic#getSource() source} of diagnostic {@link org.eclipse.emf.common.util.Diagnostic#getCode() codes} from this package.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see org.eclipse.emf.common.util.Diagnostic#getSource()
* @see org.eclipse.emf.common.util.Diagnostic#getCode()
* @generated
*/
public static final String DIAGNOSTIC_SOURCE = "com.hundsun.ares.studio.biz";
/**
* A constant with a fixed name that can be used as the base value for additional hand written constants.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
private static final int GENERATED_DIAGNOSTIC_CODE_COUNT = 0;
/**
* A constant with a fixed name that can be used as the base value for additional hand written constants in a derived class.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
protected static final int DIAGNOSTIC_CODE_COUNT = GENERATED_DIAGNOSTIC_CODE_COUNT;
/**
* The cached base package validator.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
protected MetadataValidator metadataValidator;
/**
* Creates an instance of the switch.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public BizValidator() {
super();
metadataValidator = MetadataValidator.INSTANCE;
}
/**
* Returns the package of this validator switch.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
protected EPackage getEPackage() {
return BizPackage.eINSTANCE;
}
/**
* Calls <code>validateXXX</code> for the corresponding classifier of the model.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
protected boolean validate(int classifierID, Object value, DiagnosticChain diagnostics, Map<Object, Object> context) {
switch (classifierID) {
case BizPackage.PARAMETER:
return validateParameter((Parameter)value, diagnostics, context);
case BizPackage.BIZ_INTERFACE:
return validateBizInterface((BizInterface)value, diagnostics, context);
case BizPackage.ARES_OBJECT:
return validateARESObject((ARESObject)value, diagnostics, context);
case BizPackage.STANDARD_OBJ_FIELD_LIST:
return validateStandardObjFieldList((StandardObjFieldList)value, diagnostics, context);
case BizPackage.STANDARD_OBJ_FIELD:
return validateStandardObjField((StandardObjField)value, diagnostics, context);
case BizPackage.ERROR_INFO:
return validateErrorInfo((ErrorInfo)value, diagnostics, context);
case BizPackage.PARAM_TYPE:
return validateParamType((ParamType)value, diagnostics, context);
case BizPackage.MULTIPLICITY:
return validateMultiplicity((Multiplicity)value, diagnostics, context);
default:
return true;
}
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateParameter(Parameter parameter, DiagnosticChain diagnostics, Map<Object, Object> context) {
if (!validate_NoCircularContainment(parameter, diagnostics, context)) return false;
boolean result = validate_EveryMultiplicityConforms(parameter, diagnostics, context);
if (result || diagnostics != null) result &= validate_EveryDataValueConforms(parameter, diagnostics, context);
if (result || diagnostics != null) result &= validate_EveryReferenceIsContained(parameter, diagnostics, context);
if (result || diagnostics != null) result &= validate_EveryBidirectionalReferenceIsPaired(parameter, diagnostics, context);
if (result || diagnostics != null) result &= validate_EveryProxyResolves(parameter, diagnostics, context);
if (result || diagnostics != null) result &= validate_UniqueID(parameter, diagnostics, context);
if (result || diagnostics != null) result &= validate_EveryKeyUnique(parameter, diagnostics, context);
if (result || diagnostics != null) result &= validate_EveryMapEntryUnique(parameter, diagnostics, context);
if (result || diagnostics != null) result &= validateParameter_id(parameter, diagnostics, context);
if (result || diagnostics != null) result &= validateParameter_type(parameter, diagnostics, context);
return result;
}
/**
* Validates the id constraint of '<em>Parameter</em>'.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
public boolean validateParameter_id(Parameter parameter, DiagnosticChain diagnostics, Map<Object, Object> context) {
String id = parameter.getId();
boolean isOK = true;
// ������������Ϊ�յģ�����������Ϊ��
if(StringUtils.isBlank(id) && (parameter.getParamType() != ParamType.PARAM_GROUP)){
if(diagnostics != null){
diagnostics.add(new BasicDiagnostic(Diagnostic.ERROR,
DIAGNOSTIC_SOURCE,
0,
String.format("������������",id),
new Object[]{parameter,
BizPackage.Literals.PARAMETER__ID
}));
}
isOK = false;
}
IARESResource resource = (IARESResource)context.get(IValidateConstant.KEY_RESOUCE);
ParamType paramType = parameter.getParamType();
//ƴװ������Ϣ
StringBuffer sb = new StringBuffer();
sb.append(getParameterType(parameter));
sb.append("["+StringUtils.defaultString(parameter.getId())+"],");
if(paramType.equals(ParamType.STD_FIELD)){
ReferenceInfo info = ReferenceManager.getInstance().getFirstReferenceInfo(resource.getARESProject(), IMetadataRefType.StdField, id, true);
if(info == null){
if(diagnostics != null){
diagnostics.add(new BasicDiagnostic(Diagnostic.ERROR,
DIAGNOSTIC_SOURCE,
0,
sb.toString() + "�����ڸñ��ֶ�",
new Object[]{parameter,
BizPackage.Literals.PARAMETER__ID
}));
}
isOK = false;
}
}
//�����������ظ�
if(parameter.eContainer() instanceof BizInterface) {
BizInterface biz = (BizInterface)parameter.eContainer();
EList<Parameter> inputs = biz.getInputParameters();
int inputIndex = 0;
if(inputs.contains(parameter)){
for (Parameter param : inputs) {
// ��id�����������飬����Ҫ�ٱ��ظ���
if (StringUtils.isEmpty(param.getId()))
continue;
if(StringUtils.equals(id, param.getId())&& parameter!=param){
inputIndex++;
}
}
if(inputIndex > 0) {
if(diagnostics != null){
diagnostics.add(new BasicDiagnostic(Diagnostic.ERROR,
DIAGNOSTIC_SOURCE,
0,
sb.toString() + "�ֶ��ظ�",
new Object[]{parameter,
BizPackage.Literals.PARAMETER__ID
}));
}
isOK = false;
}
}
int outIndex = 0;
EList<Parameter> outputs = biz.getOutputParameters();
if( outputs.contains(parameter)){
for (Parameter param : outputs) {
if (StringUtils.isEmpty(param.getId()))
continue;
if(StringUtils.equals(id, param.getId())&& parameter!=param){
outIndex++;
}
}
if(outIndex > 0) {
if(diagnostics != null){
diagnostics.add(new BasicDiagnostic(Diagnostic.ERROR,
DIAGNOSTIC_SOURCE,
0,
sb.toString() + "�ֶ��ظ�",
new Object[]{parameter,
BizPackage.Literals.PARAMETER__ID
}));
}
isOK = false;
}
}
}
return isOK;
}
/**
* Validates the type constraint of '<em>Parameter</em>'.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
public boolean validateParameter_type(Parameter parameter, DiagnosticChain diagnostics, Map<Object, Object> context) {
String type = parameter.getType();
IARESResource resource = (IARESResource)context.get(IValidateConstant.KEY_RESOUCE);
ParamType paramType = parameter.getParamType();
//ƴװ������Ϣ
StringBuffer sb = new StringBuffer();
sb.append(getParameterType(parameter));
sb.append("["+StringUtils.defaultString(parameter.getId())+"],");
if(paramType.equals(ParamType.NON_STD_FIELD)){
if(StringUtils.isBlank(type)){
if(diagnostics != null){
diagnostics.add(new BasicDiagnostic(Diagnostic.ERROR,
DIAGNOSTIC_SOURCE,
0,
sb.toString() + "ҵ�����Ͳ���Ϊ��",
new Object[]{parameter,
BizPackage.Literals.PARAMETER__TYPE
}));
}
return false;
}
ReferenceInfo info = ReferenceManager.getInstance().getFirstReferenceInfo(resource.getARESProject(), IMetadataRefType.BizType, type, true);
if(info == null){
if(diagnostics != null){
diagnostics.add(new BasicDiagnostic(Diagnostic.ERROR,
DIAGNOSTIC_SOURCE,
0,
sb.toString() + String.format("ҵ������%s������",type),
new Object[]{parameter,
BizPackage.Literals.PARAMETER__TYPE
}));
}
return false;
}
}else if(paramType.equals(ParamType.OBJECT)){
// ����ж�����ֶΣ��Ͳ�Ӧ����У�������ˣ�������ϢӦ�ø���idȥ������ֶ��б��л�ȡ
if (resource != null && BizUtil.hasStdObjList(resource.getARESProject())) {
// do nothing
} else {
if(StringUtils.isBlank(type)){
if(diagnostics != null){
diagnostics.add(new BasicDiagnostic(Diagnostic.ERROR,
DIAGNOSTIC_SOURCE,
0,
sb.toString() + "ҵ�������Ϊ��",
new Object[]{parameter,
BizPackage.Literals.PARAMETER__TYPE
}));
}
return false;
}
//�ж�ҵ������Ƿ���ڣ�Ӧ����BizUtil.getObject������BizUtil.getObject���ܰ���UFT�еĶ���
ARESObject info = BizUtil.getObject(type, resource.getARESProject());//ReferenceManager.getInstance().getFirstReferenceInfo(resource.getARESProject(), IBizRefType.Object, type, true);
if(info == null){
if(diagnostics != null){
diagnostics.add(new BasicDiagnostic(Diagnostic.ERROR,
DIAGNOSTIC_SOURCE,
0,
sb.toString() +String.format("ҵ�����%s������",type),
new Object[]{parameter,
BizPackage.Literals.PARAMETER__TYPE
}));
}
return false;
}
}
}
return true;
}
/**
* �жϲ����Ƿ�������,�������
*
* @return
*/
private String getParameterType(Parameter parameter){
if (parameter.eContainmentFeature() == BizPackage.Literals.BIZ_INTERFACE__INPUT_PARAMETERS) {
return "�������";
}else if (parameter.eContainmentFeature() == BizPackage.Literals.BIZ_INTERFACE__OUTPUT_PARAMETERS) {
return "�������";
}else {
return "����";
}
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateBizInterface(BizInterface bizInterface, DiagnosticChain diagnostics, Map<Object, Object> context) {
return validate_EveryDefaultConstraint(bizInterface, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateARESObject(ARESObject aresObject, DiagnosticChain diagnostics, Map<Object, Object> context) {
if (!validate_NoCircularContainment(aresObject, diagnostics, context)) return false;
boolean result = validate_EveryMultiplicityConforms(aresObject, diagnostics, context);
if (result || diagnostics != null) result &= validate_EveryDataValueConforms(aresObject, diagnostics, context);
if (result || diagnostics != null) result &= validate_EveryReferenceIsContained(aresObject, diagnostics, context);
if (result || diagnostics != null) result &= validate_EveryBidirectionalReferenceIsPaired(aresObject, diagnostics, context);
if (result || diagnostics != null) result &= validate_EveryProxyResolves(aresObject, diagnostics, context);
if (result || diagnostics != null) result &= validate_UniqueID(aresObject, diagnostics, context);
if (result || diagnostics != null) result &= validate_EveryKeyUnique(aresObject, diagnostics, context);
if (result || diagnostics != null) result &= validate_EveryMapEntryUnique(aresObject, diagnostics, context);
if (result || diagnostics != null) result &= validateARESObject_objectId(aresObject, diagnostics, context);
return result;
}
/**
* Validates the objectId constraint of '<em>ARES Object</em>'.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
public boolean validateARESObject_objectId(ARESObject aresObject, DiagnosticChain diagnostics, Map<Object, Object> context) {
String objID = aresObject.getObjectId();
IARESResource resource = (IARESResource)context.get(IValidateConstant.KEY_RESOUCE);
if (StringUtils.isNotBlank(objID)) {
try {
int value = Integer.parseInt(objID);
String range = IDRangeUtil.getIDRange(resource,IBizConstants.OBJ_ID_RANGE_KEY);
if(!IDRangeUtil.isInRange(value, range)){
if(diagnostics != null){
diagnostics.add(new BasicDiagnostic(Diagnostic.ERROR,
DIAGNOSTIC_SOURCE,
0,
String.format("����Ų���%s��Χ��",range),
new Object[]{aresObject,
CorePackage.Literals.BASIC_RESOURCE_INFO__OBJECT_ID}));
}
return false;
}
} catch (Exception e) {
if(diagnostics != null){
diagnostics.add(new BasicDiagnostic(Diagnostic.ERROR,
DIAGNOSTIC_SOURCE,
0,
"����Ų�������",
new Object[]{aresObject,
CorePackage.Literals.BASIC_RESOURCE_INFO__OBJECT_ID}));
}
return false;
}
IARESProject project =(IARESProject) context.get(IValidateConstant.KEY_RESOUCE_PROJECT);
String type = ResourceTypeMapping.getInstance().getReferenceType(resource.getType());
List<ReferenceInfo> referInfos = ReferenceManager.getInstance().getReferenceInfos(project, type, false);
for(ReferenceInfo info : referInfos){
Object obj = info.getObject();
if (obj instanceof ARESObject) {
if (!StringUtils.equals(aresObject.getFullyQualifiedName(), ((ARESObject) obj).getFullyQualifiedName()) &&
StringUtils.equals(((ARESObject) obj).getObjectId(), aresObject.getObjectId())) {
if(diagnostics != null){
StringBuffer sb = new StringBuffer();
sb.append("������ظ���");
sb.append(ResourcesUtil.getChineseFileName("/", info.getResource().getModule())+"/"+((ARESObject) obj).getChineseName()+"["+aresObject.getName()+"]");
diagnostics.add(new BasicDiagnostic(Diagnostic.ERROR,
DIAGNOSTIC_SOURCE,
0,
sb.toString(),
new Object[]{aresObject,
CorePackage.Literals.BASIC_RESOURCE_INFO__OBJECT_ID}));
}
return false;
}
}
}
}
return true;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateStandardObjFieldList(StandardObjFieldList standardObjFieldList, DiagnosticChain diagnostics, Map<Object, Object> context) {
return validate_EveryDefaultConstraint(standardObjFieldList, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateStandardObjField(StandardObjField standardObjField, DiagnosticChain diagnostics, Map<Object, Object> context) {
return validate_EveryDefaultConstraint(standardObjField, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateErrorInfo(ErrorInfo errorInfo, DiagnosticChain diagnostics, Map<Object, Object> context) {
if (!validate_NoCircularContainment(errorInfo, diagnostics, context)) return false;
boolean result = validate_EveryMultiplicityConforms(errorInfo, diagnostics, context);
if (result || diagnostics != null) result &= validate_EveryDataValueConforms(errorInfo, diagnostics, context);
if (result || diagnostics != null) result &= validate_EveryReferenceIsContained(errorInfo, diagnostics, context);
if (result || diagnostics != null) result &= validate_EveryBidirectionalReferenceIsPaired(errorInfo, diagnostics, context);
if (result || diagnostics != null) result &= validate_EveryProxyResolves(errorInfo, diagnostics, context);
if (result || diagnostics != null) result &= validate_UniqueID(errorInfo, diagnostics, context);
if (result || diagnostics != null) result &= validate_EveryKeyUnique(errorInfo, diagnostics, context);
if (result || diagnostics != null) result &= validate_EveryMapEntryUnique(errorInfo, diagnostics, context);
if (result || diagnostics != null) result &= metadataValidator.validateErrorNoItem_name(errorInfo, diagnostics, context);
if (result || diagnostics != null) result &= metadataValidator.validateErrorNoItem_refId(errorInfo, diagnostics, context);
if (result || diagnostics != null) result &= metadataValidator.validateErrorNoItem_constantName(errorInfo, diagnostics, context);
if (result || diagnostics != null) result &= metadataValidator.validateErrorNoItem_message(errorInfo, diagnostics, context);
if (result || diagnostics != null) result &= metadataValidator.validateErrorNoItem_no(errorInfo, diagnostics, context);
if (result || diagnostics != null) result &= metadataValidator.validateErrorNoItem_level(errorInfo, diagnostics, context);
return result;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateParamType(ParamType paramType, DiagnosticChain diagnostics, Map<Object, Object> context) {
return true;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateMultiplicity(Multiplicity multiplicity, DiagnosticChain diagnostics, Map<Object, Object> context) {
return true;
}
/**
* Returns the resource locator that will be used to fetch messages for this validator's diagnostics.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public ResourceLocator getResourceLocator() {
// TODO
// Specialize this to return a resource locator for messages specific to this validator.
// Ensure that you remove @generated or mark it @generated NOT
return super.getResourceLocator();
}
} //BizValidator