/** * 获取指定资源的关联资源集合 * * @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; }