1 package net.sf.mmapps.commons.bridge; 2 3 import java.util.*; 4 5 import net.sf.mmapps.commons.util.StringUtil; 6 7 import org.mmbase.bridge.*; 8 9 10 public class RelationUtil { 11 12 public final static String RELATION_POS_FIELD = "pos"; 13 14 public static void reorder(Cloud cloud, String parent, String childs, String role) { 15 reorder(cloud, parent, childs, role, null); 16 } 17 18 public static void reorder(Cloud cloud, String parent, String children, String role, String nodeManagerName) { 19 Node parentNode = cloud.getNode(parent); 20 reorder(parentNode, children, role, nodeManagerName); 21 } 22 23 public static void reorder(Cloud cloud, String parent, String[] children, String role) { 24 reorder(cloud, parent, children, role, null); 25 } 26 27 public static void reorder(Cloud cloud, String parent, String[] children, String role, String nodeManagerName) { 28 Node parentNode = cloud.getNode(parent); 29 reorder(parentNode, children, role, nodeManagerName); 30 } 31 32 public static void reorder(Node parentNode, List children, String role) { 33 reorder(parentNode, children, role, null); 34 } 35 36 public static void reorder(Node parentNode, Object children, String role, String nodeManagerName) { 37 List<String> childrenList = null; 38 if (children instanceof List) { 39 childrenList = (List<String>) children; 40 } 41 if (children instanceof String) { 42 StringTokenizer tokenizer = new StringTokenizer((String) children, ","); 43 childrenList = new ArrayList<String>(); 44 while (tokenizer.hasMoreTokens()) { 45 childrenList.add(tokenizer.nextToken()); 46 } 47 } 48 if (children instanceof String[]) { 49 childrenList = new ArrayList<String>(); 50 for (int i = 0; i < ((String[]) children).length; i++) { 51 childrenList.add(((String[]) children)[i]); 52 } 53 } 54 if (childrenList == null) { 55 throw new IllegalArgumentException("Children not of the supported types (String, String[], List)"); 56 } 57 58 RelationList list = null; 59 Cloud cloud = parentNode.getCloud(); 60 if (!StringUtil.isEmpty(nodeManagerName)) { 61 list = parentNode.getRelations(role, cloud.getNodeManager(nodeManagerName), "DESTINATION"); 62 } 63 else { 64 list = parentNode.getRelations(role); 65 } 66 RelationIterator iter = list.relationIterator(); 67 while (iter.hasNext()) { 68 Relation rel = iter.nextRelation(); 69 int destination = rel.getDestination().getNumber(); 70 rel.setIntValue(RELATION_POS_FIELD, childrenList.indexOf("" + destination)); 71 rel.commit(); 72 } 73 } 74 75 public static Relation createRelation(Node sourceNode, Node destNode, String role) { 76 Cloud cloud = sourceNode.getCloud(); 77 RelationManager relationManager = cloud.getRelationManager(sourceNode.getNodeManager(), 78 destNode.getNodeManager(), role); 79 Relation relation = sourceNode.createRelation(destNode, relationManager); 80 relation.commit(); 81 82 return relation; 83 } 84 85 public static Relation createCountedRelation(Node parentNode, Node childNode, String relationName, String countField) { 86 Cloud cloud = parentNode.getCloud(); 87 NodeManager nm = childNode.getNodeManager(); 88 89 int childCount = parentNode.countRelatedNodes(nm, relationName, "DESTINATION"); 90 91 RelationManager relationManager = cloud.getRelationManager(parentNode.getNodeManager(), nm, relationName); 92 Relation relation = parentNode.createRelation(childNode, relationManager); 93 relation.setIntValue(countField, childCount + 1); 94 relation.commit(); 95 96 return relation; 97 } 98 99 }