1 56 package org.objectstyle.cayenne.pref; 57 58 import java.util.Properties ; 59 60 import org.objectstyle.cayenne.CayenneDataObject; 61 import org.objectstyle.cayenne.DataObjectUtils; 62 import org.objectstyle.cayenne.ObjectId; 63 import org.objectstyle.cayenne.access.DataContext; 64 import org.objectstyle.cayenne.access.DataNode; 65 import org.objectstyle.cayenne.map.DbEntity; 66 import org.objectstyle.cayenne.util.Util; 67 68 80 public class PreferenceDetail extends CayenneDataObject { 81 82 protected DomainPreference domainPreference; 83 84 89 public void rename(String newKey) { 90 if (Util.nullSafeEquals(getKey(), newKey)) { 91 return; 92 } 93 94 DomainPreference domainPrefrence = getDomainPreference(); 95 Domain parent = domainPrefrence.getDomain(); 96 97 if (parent == null) { 98 domainPrefrence.setKey(newKey); 99 return; 100 } 101 102 DomainPreference other = parent.getDomainPreference(newKey); 103 if (other != null && other != domainPrefrence) { 104 String otherName = null; 105 for (int i = 1; i < 1000; i++) { 106 if (parent.getDomainPreference(newKey + i) == null) { 107 otherName = newKey + i; 108 break; 109 } 110 } 111 112 if (otherName == null) { 113 throw new PreferenceException("Can't rename an existing preference '" 114 + newKey 115 + "'."); 116 } 117 118 other.setKey(otherName); 119 } 120 121 domainPrefrence.setKey(newKey); 122 } 123 124 public int getIntProperty(String key, int defaultValue) { 125 String value = getProperty(key); 126 127 if (value == null) { 128 return defaultValue; 129 } 130 131 try { 132 return Integer.parseInt(value); 133 } 134 catch (NumberFormatException ex) { 135 throw new PreferenceException("Error converting to int: " + value); 136 } 137 } 138 139 public String getKey() { 140 if (getDomainPreference() == null) { 141 throw new PreferenceException( 142 "Preference not initialized, can't work with properties."); 143 } 144 145 return domainPreference.getKey(); 146 } 147 148 public void setIntProperty(String key, int value) { 149 setProperty(key, String.valueOf(value)); 150 } 151 152 155 public String getProperty(String key) { 156 return getProperties().getProperty(key); 157 } 158 159 public void setProperty(String key, String value) { 160 getProperties().setProperty(key, value); 161 } 162 163 public DomainPreference getDomainPreference() { 164 if (domainPreference == null) { 165 167 DataContext context = getDataContext(); 168 169 if (context != null && getObjectId() != null) { 170 int pk = DataObjectUtils.intPKForObject(this); 171 172 domainPreference = (DomainPreference) DataObjectUtils.objectForPK( 173 context, 174 DomainPreference.class, 175 pk); 176 177 } 178 } 179 180 return domainPreference; 181 } 182 183 186 public void setDomainPreference(DomainPreference domainPreference) { 187 if (this.domainPreference != domainPreference) { 188 this.domainPreference = domainPreference; 189 190 ObjectId oid = getObjectId(); 191 if (oid != null && oid.isTemporary()) { 192 oid.getReplacementIdMap().put("id", new Integer (buildPermanentId())); 193 } 194 } 195 } 196 197 200 protected Properties getProperties() { 201 if (getDomainPreference() == null) { 202 throw new PreferenceException( 203 "Preference not initialized, can't work with properties."); 204 } 205 206 return domainPreference.getProperties(); 207 } 208 209 212 protected int buildPermanentId() { 213 ObjectId otherId = getDomainPreference().getObjectId(); 214 if (otherId == null) { 215 throw new PreferenceException( 216 "Can't persist preference. DomainPreference has no ObjectId"); 217 } 218 219 if (otherId.isTemporary() && !otherId.isReplacementIdAttached()) { 221 DbEntity entity = getDataContext().getEntityResolver().lookupDbEntity( 222 domainPreference); 223 224 DataNode node = getDataContext().lookupDataNode(entity.getDataMap()); 225 226 try { 227 Object pk = node.getAdapter().getPkGenerator().generatePkForDbEntity( 228 node, 229 entity); 230 otherId.getReplacementIdMap().put(DomainPreference.ID_PK_COLUMN, pk); 231 } 232 catch (Throwable th) { 233 throw new PreferenceException("Error creating primary key", Util 234 .unwindException(th)); 235 } 236 } 237 238 return DataObjectUtils.intPKForObject(domainPreference); 239 } 240 } | Popular Tags |