1 10 package org.mmbase.security.implementation.cloudcontext; 11 12 import java.util.*; 13 14 import org.mmbase.security.implementation.cloudcontext.builders.*; 15 import org.mmbase.module.core.*; 16 import org.mmbase.security.*; 17 import org.mmbase.security.SecurityException; 18 import org.mmbase.util.HashCodeUtil; 19 import org.mmbase.util.logging.Logger; 20 import org.mmbase.util.logging.Logging; 21 22 32 public class User extends BasicUser implements MMBaseObserver { 33 private static final Logger log = Logging.getLoggerInstance(User.class); 34 35 private static final long serialVersionUID = 1L; 36 37 protected MMObjectNode node; 38 protected long key; 39 40 43 public User(MMObjectNode n, long l, String app) { 44 super(app); 45 if (n == null) throw new IllegalArgumentException (); 46 node = n; 47 key = l; 48 } 54 55 public String getIdentifier() { 57 if (node == null) { 58 return "anonymous"; 59 } else { 60 MMObjectBuilder builder = node.getBuilder(); 61 if (builder.hasField(Users.FIELD_USERNAME)) { 62 return node.getStringValue(Users.FIELD_USERNAME); 63 } else { 64 return null; 65 } 66 } 67 } 68 69 public Rank getRank() throws SecurityException { 71 if (node == null) { 72 return Rank.ANONYMOUS; 73 } else { 74 return Users.getBuilder().getRank(node); 75 } 76 } 77 78 public String getOwnerField() { 80 if (node == null) { 81 return "system"; 82 } else { 83 return Users.getBuilder().getDefaultContext(node); 84 } 85 } 86 87 90 protected long getKey() { 91 return key; 92 } 93 94 97 public boolean isValidNode() { 98 return (node == null) || Users.getBuilder().isValid(node); 99 } 100 101 102 public SortedSet getGroups() { 103 return Groups.getBuilder().getGroups(node.getNumber()); 104 } 105 106 107 111 public MMObjectNode getNode() { 112 if (node == null) throw new SecurityException ("Account has been removed."); 113 return node; 114 } 115 116 public boolean nodeRemoteChanged(String machine, String number, String builder, String ctype) { 117 return nodeChanged(number, ctype); 118 } 119 120 public boolean nodeLocalChanged(String machine, String number, String builder, String ctype) { 121 return nodeChanged(number, ctype); 122 } 123 124 private boolean nodeChanged(String number, String ctype) { 125 if ((node != null) && (node.getNumber() == Integer.parseInt(number))) { 126 if (ctype.equals("d")) { 127 log.service("Node was invalidated!"); 128 node = null; } else if (ctype.equals("c")) { 130 node = Users.getBuilder().getNode(number); 131 } 132 } 133 return true; 134 } 135 136 private void readObject(java.io.ObjectInputStream in) throws java.io.IOException , ClassNotFoundException { 137 final int number = in.readInt(); 138 key = in.readLong(); 139 if (number == -1) { 140 log.warn("Found node -1 on deserialization!. Interpreting as 'null'. User object was probably not correctly serialized, or not assiociated with a real node."); 141 node = null; 142 } else { 143 org.mmbase.util.ThreadPools.jobsExecutor.execute(new Runnable () { 144 public void run() { 145 org.mmbase.bridge.LocalContext.getCloudContext().assertUp(); 146 node = Users.getBuilder().getNode(number); 147 } 148 }); 149 } 150 } 151 152 153 private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException { 154 out.writeInt(node == null ? -1 : node.getNumber()); 155 out.writeLong(key); 156 } 157 158 public boolean equals(Object o) { 159 if (o instanceof User) { 160 User ou = (User) o; 161 return 162 super.equals(o) && 163 (node == null ? ou.node == null : node.getNumber() == ou.node.getNumber()) && 164 key == ou.key; 165 } else { 166 return false; 167 } 168 } 169 170 public int hashCode() { 171 int result = super.hashCode(); 172 result = HashCodeUtil.hashCode(result, node); 173 result = HashCodeUtil.hashCode(result, key); 174 return result; 175 } 176 177 } 178 | Popular Tags |