package com.vci.client.uif.engine.client.compare.comparer; import java.util.List; import com.vci.client.uif.engine.client.compare.attribute.Attdef; import com.vci.client.uif.engine.client.compare.attribute.AttrType; import com.vci.client.uif.engine.client.compare.attribute.Attributes; import com.vci.client.uif.engine.client.compare.dialog.treenode.TreeNodeObject; import com.vci.client.uif.engine.client.compare.enumeration.CompareState; import com.vci.client.uif.engine.client.compare.tools.CompareTools; /** * 通用属性比较器 * * 通过 Attributes 设置获得需要比较的属性 * * @author VCI-STGK006 * */ public class DefaultTreeNodeObjectComparer implements TreeNodeObjectComparer { @Override public void compare(Attributes attributes, TreeNodeObject lTno, TreeNodeObject rTno) { boolean result = true; if(lTno.getCompareState() == CompareState.ISNULL ||rTno.getCompareState() == CompareState.ISNULL) { return; } if(lTno.getMainObject() == null) { lTno.setCompareState(CompareState.ISNULL); result = false; } if(rTno.getMainObject() == null) { rTno.setCompareState(CompareState.ISNULL); result = false; } if(!result) { return; } if(lTno.getRelationObject() == null) { lTno.setCompareState(CompareState.ISNULL); result = false; } if(rTno.getRelationObject() == null) { rTno.setCompareState(CompareState.ISNULL); result = false; } if(!result) { return; } List attdefList = attributes.getDisplayAttributes(); for(Attdef ad : attdefList) { String lValue = lTno.getAttribute(ad.getlNodeObjectAttr(), ad.islIsRelationAttr() ? TreeNodeObject.RELATIONOBJECT : TreeNodeObject.MAINOBJECT); String rValue = rTno.getAttribute(ad.getrNodeObjectAttr(), ad.isrIsRelationAttr() ? TreeNodeObject.RELATIONOBJECT : TreeNodeObject.MAINOBJECT); if(ad.getAttrType() == AttrType.Number) { if(!CompareTools.validateNumber(lValue, rValue)) { lTno.setCompareState(CompareState.DIFFERENT_INFO); rTno.setCompareState(CompareState.DIFFERENT_INFO); return; } } else { if(!lValue.equals(rValue)) { lTno.setCompareState(CompareState.DIFFERENT_INFO); rTno.setCompareState(CompareState.DIFFERENT_INFO); return; } } } } }