package com.vci.client.tool.panel; import java.util.Arrays; import java.util.Comparator; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; import com.vci.client.common.PinyinCommon; import com.vci.client.portal.utility.PRM; import com.vci.client.portal.utility.PRMItem; import com.vci.client.portal.utility.UITools; import com.vci.client.tool.wrapper.PRMItemWrapper; import com.vci.corba.portal.data.PortalVI; /** * PortalVI 里name相同的PRMItem 查找器 * @author xiongchao * */ public class PRMItemFinder { public PRMItemWrapper[] find(List viList){ PortalVI[] vis = viList.toArray(new PortalVI[]{}); Arrays.sort(vis, new Comparator() { @Override public int compare(PortalVI o1, PortalVI o2) { PRM p1 = UITools.getPRM(o1.prm); PRM p2 = UITools.getPRM(o2.prm); PRMItem[] items1 = p1.getPrmItemList().toArray(new PRMItem[] {}); PRMItem[] items2 = p2.getPrmItemList().toArray(new PRMItem[] {}); int len1 = items1.length; int len2 = items2.length; int res = 0; if(len1 < len2){ res = -1; }else if(len1 == len2){ res = 0; } else if(len1 > len2){ res = 1; } return res; } }); return findDetail(vis); } private PRMItemWrapper[] findDetail(PortalVI[] vis){ PRMItemWrapper[] res = new PRMItemWrapper[0]; PRMItemWrapper[][] prmItems = new PRMItemWrapper[vis.length][]; for (int i = 0; i < prmItems.length; i++) { prmItems[i] = getPortalVIPRMItemWrapperExs(vis[i]); } if(prmItems.length == 1){ return prmItems[0]; } List list = new LinkedList(); for(PRMItemWrapper PRMItemWrapper : prmItems[0]){ boolean existInAllOther = true; for (int i = 1; i < prmItems.length; i++) { existInAllOther = existInOtherPortalVIPRMItes(prmItems[i], PRMItemWrapper); if(!existInAllOther){ break; } } if(existInAllOther){ list.add(PRMItemWrapper); } } res = list.toArray(new PRMItemWrapper[]{}); return res; } private boolean existInOtherPortalVIPRMItes(PRMItemWrapper[] PRMItemWrapperExs, PRMItemWrapper PRMItemWrapper){ boolean exist = true; for(PRMItemWrapper piw : PRMItemWrapperExs){ exist = (piw.getPrmItem().getItemField().equals(PRMItemWrapper.getPrmItem().getItemField())); if(exist){ break; } } return exist; } private PRMItemWrapper[] getPortalVIPRMItemWrapperExs(PortalVI vi){ PRMItemWrapper[] res = new PRMItemWrapper[0]; PRM prm = UITools.getPRM(vi.prm); PRMItem[] items = prm.getPrmItemList().toArray(new PRMItem[] {}); Arrays.sort(items, new Comparator() { public int compare(PRMItem o1, PRMItem o2) { return PinyinCommon.getPingYin(o1.getItemName()).compareTo(PinyinCommon.getPingYin(o2.getItemName())); } }); Map prmItemMap = convertToMap(items); PRMItemWrapper[] prmItems = convertToArrays(prmItemMap); res = prmItems; return res; } private PRMItemWrapper[] convertToArrays(Map map){ PRMItemWrapper[] res = new PRMItemWrapper[map.size()]; Iterator its = map.keySet().iterator(); int i = 0; while(its.hasNext()){ String key = its.next(); PRMItemWrapper value = map.get(key); res[i++] = value; } return res; } private Map convertToMap(PRMItem[] items){ Map map = new HashMap(); for (int i = 0; i < items.length; i++) { map.put(items[i].getItemField(), new PRMItemWrapper(items[i])); } return map; } }