1 10 package org.mmbase.security.implementation.cloudcontext.builders; 11 12 import java.util.*; 13 import org.mmbase.module.core.*; 14 import org.mmbase.storage.search.*; 15 import org.mmbase.storage.search.implementation.*; 16 import org.mmbase.security.Rank; 17 import org.mmbase.security.SecurityException; 18 import org.mmbase.util.logging.Logger; 19 import org.mmbase.util.logging.Logging; 20 21 30 public class Ranks extends MMObjectBuilder { 31 32 private static final Logger log = Logging.getLoggerInstance(Ranks.class); 33 34 public Ranks() { 35 super(); 36 } 37 38 41 public static Ranks getBuilder() { 42 return (Ranks) MMBase.getMMBase().getBuilder("mmbaseranks"); 43 } 44 45 public boolean init() { 47 boolean res = super.init(); 48 mmb.addLocalObserver(getTableName(), CacheInvalidator.getInstance()); 49 mmb.addRemoteObserver(getTableName(), CacheInvalidator.getInstance()); 50 try { 51 Iterator i = getNodes(new NodeSearchQuery(this)).iterator(); 52 while (i.hasNext()) { 53 MMObjectNode rank = (MMObjectNode) i.next(); 54 String name = rank.getStringValue("name"); 55 Rank r = Rank.getRank(name); 56 if (r == null) { 57 Rank.createRank(rank.getIntValue("rank"), name); 58 } 59 } 60 } catch (SearchQueryException sqe) { 61 log.error(sqe + Logging.stackTrace(sqe)); 62 } 63 return res; 64 } 65 68 public int insert(String owner, MMObjectNode node) { 69 int res = super.insert(owner, node); 70 int rank = node.getIntValue("rank"); 71 String name = node.getStringValue("name"); 72 try { 73 Iterator i = getNodes(new NodeSearchQuery(this)).iterator(); 74 while (i.hasNext()) { 75 MMObjectNode otherNode = (MMObjectNode) i.next(); 76 if (node.getNumber() == otherNode.getNumber()) continue; 77 Rank r = getRank(otherNode); 78 if(r.getInt() == rank) { 79 throw new SecurityException ("Cannot insert rank '" + name + "', because there is already is a rank with rank weight " + rank + " (" + r + ")"); 82 } 83 if(r.toString().equals(name)) { 84 throw new SecurityException ("Cannot insert rank '" + name + "', because there is already a rank with that name"); 87 } 88 89 } 91 } catch (SearchQueryException sqe) { 92 log.error(sqe + Logging.stackTrace(sqe)); 93 } 94 Rank.createRank(rank, name); 95 return res; 96 } 97 98 99 103 public void removeNode(MMObjectNode node) { 104 List users = node.getRelatedNodes("mmbaseusers", RelationStep.DIRECTIONS_SOURCE); 105 if (users.size() > 1) { 106 throw new SecurityException ("Rank " + node + " cannot be removed because there are users with this rank: " + users); 108 } 109 String name = node.getStringValue("name"); 110 Rank.deleteRank(name); 111 super.removeNode(node); 112 } 113 114 115 116 119 public Rank getRank(MMObjectNode node) { 120 int rank = node.getIntValue("rank"); 121 if (rank == -1) { 122 throw new SecurityException ("odd rank " + rank); 123 } else { 124 String name = node.getStringValue("name"); 125 Rank r = Rank.getRank(name); 126 return r; 127 } 128 } 129 130 135 public MMObjectNode getRankNode(Rank rank) { 136 NodeSearchQuery q = new NodeSearchQuery(this); 137 org.mmbase.core.CoreField rankFieldDefs = getField("rank"); 138 StepField rankField = q.getField(rankFieldDefs); 139 BasicFieldValueConstraint cons = new BasicFieldValueConstraint(rankField, new Integer (rank.getInt())); 140 cons.setOperator(FieldValueConstraint.LESS_EQUAL); 141 BasicSortOrder s = q.addSortOrder(rankField); 142 s.setDirection(SortOrder.ORDER_DESCENDING); 143 q.setConstraint(cons); 144 q.setMaxNumber(1); 145 try { 146 Iterator i = getNodes(q).iterator(); 147 if (i.hasNext()) { 148 return (MMObjectNode) i.next(); 149 } else { 150 return null; 151 } 152 } catch (org.mmbase.storage.search.SearchQueryException sqe) { 153 log.error(sqe); 154 return null; 155 } 156 } 157 158 159 163 public boolean setValue(MMObjectNode node, String field, Object originalValue) { 164 if (field.equals("name") || field.equals("rank")) { 165 if ( (!node.getValue(field).equals(originalValue)) && (originalValue != null)) { 166 throw new SecurityException ("Cannot change " + field + " field of rank objects"); 167 } 168 } 169 return true; 170 } 171 172 public void setDefaults(MMObjectNode node) { 174 } 178 179 180 } 181 | Popular Tags |