/**
  * 获取指定资源的关联资源集合
  *
  * @param resId 指定资源ID
  * @return
  */
 public List<ResourceObject> getResourceRelations(int resId) {
   List<ResourceObject> list = new ArrayList<ResourceObject>();
   IResourceService is = ServiceManager.getResourceService();
   List<ResourceRelation> l = this.getRelationsByResourceId(resId);
   for (ResourceRelation r : l) {
     if (r.getItemId() == resId) {
       list.add(is.getResourceById(r.getItemId2()));
     } else if (r.getItemId2() == resId) {
       list.add(is.getResourceById(r.getItemId()));
     }
   }
   return list;
 }
 /**
  * 生成资源关联关系拓扑图数据
  *
  * @param list 资源关联关系
  * @param def 如果list.size=0, 默认显示的节点
  * @return 拓扑图数据
  */
 private String getResourceRelationXml(
     List<ResourceRelation> list, ResourceRelation def, int resId) {
   Document doc = null;
   try {
     doc = XmlUtil.parseString("<Graph/>");
   } catch (DocumentException e) {
     // 此处不可能发生
     e.printStackTrace();
     return "";
   }
   boolean f = false;
   if (list.size() == 0 && def != null) {
     f = true;
     list.add(def);
   }
   Map<Integer, ResourceObject> m = new HashMap<Integer, ResourceObject>();
   IResourceService is = ServiceManager.getResourceService();
   for (ResourceRelation r : list) {
     ResourceObject ro = is.getResourceById(r.getItemId());
     ResourceObject ro1 = is.getResourceById(r.getItemId2());
     if (ro != null) m.put(ro.getId(), ro);
     if (ro1 != null) m.put(ro1.getId(), ro1);
   }
   for (ResourceObject ro : m.values()) {
     Element el = doc.getRootElement().addElement("Node");
     el.addAttribute("id", String.valueOf(ro.getId()));
     el.addAttribute("name", ro.getName());
     if (resId > 0 && ro.getId() == resId) el.addAttribute("nodeSize", "50");
     else el.addAttribute("nodeSize", "32");
     el.addAttribute("nodeIcon", String.valueOf(ro.getModel().getIcon()));
   }
   for (ResourceRelation r : list) {
     if (f) break;
     Element el = doc.getRootElement().addElement("Edge");
     el.addAttribute("fromID", String.valueOf(r.getItemId()));
     el.addAttribute("toID", String.valueOf(r.getItemId2()));
     RelationDefine rd = getRelationDefineById(r.getRelationId());
     if (rd != null) {
       el.addAttribute("edgeLabel", rd.getName());
       if (rd.getIcon() != null && rd.getIcon().length() > 0)
         el.addAttribute("edgeClass", rd.getIcon());
       if (rd.getColor() != null && rd.getColor().length() > 0)
         el.addAttribute("color", rd.getColor());
     } else {
       el.addAttribute("edgeLabel", "关系未定义");
     }
   }
   return XmlUtil.getXmlString(doc);
 }
 /**
  * 获取某个资源有可能会有关联关系的资源集合.(包含本身) 即取出指定资源所属模型的所有关联模型下的所有资源.
  *
  * @param resId 指定资源ID
  * @return
  */
 public List<ResourceObject> getRelationsWithModelByResId(int resId, int userId) {
   List<ResourceObject> list = new ArrayList<ResourceObject>();
   IResourceService is = ServiceManager.getResourceService();
   ResourceObject r = is.getResourceById(resId);
   Map<String, String> m = new HashMap<String, String>();
   for (ModelRelation mr : getModelRelationsByModelId(r.getModelId())) {
     if (!mr.getModelId().equals(r.getModelId())) m.put(mr.getModelId(), "1");
     if (!mr.getModelId2().equals(r.getModelId())) m.put(mr.getModelId2(), "1");
   }
   for (String modelId : m.keySet()) {
     list.addAll(is.getResourcesByModelId(modelId, userId));
   }
   list.add(r);
   return list;
 }