Changeset 3981
- Timestamp:
- 2010-04-09 07:06:33 (3 years ago)
- Location:
- projects/lily/trunk
- Files:
-
- 16 edited
-
indexer/src/test/java/org/lilycms/indexer/test/IndexerTest.java (modified) (2 diffs)
-
repository/api/src/main/java/org/lilycms/repository/api/FieldDescriptor.java (modified) (3 diffs)
-
repository/api/src/main/java/org/lilycms/repository/api/Record.java (modified) (1 diff)
-
repository/api/src/main/java/org/lilycms/repository/api/RecordType.java (modified) (2 diffs)
-
repository/api/src/main/java/org/lilycms/repository/api/Repository.java (modified) (1 diff)
-
repository/api/src/main/java/org/lilycms/repository/api/TypeManager.java (modified) (5 diffs)
-
repository/impl/src/main/java/org/lilycms/repository/impl/FieldDescriptorImpl.java (modified) (7 diffs)
-
repository/impl/src/main/java/org/lilycms/repository/impl/HBaseRepository.java (modified) (14 diffs)
-
repository/impl/src/main/java/org/lilycms/repository/impl/HBaseTypeManager.java (modified) (30 diffs)
-
repository/impl/src/main/java/org/lilycms/repository/impl/RecordImpl.java (modified) (12 diffs)
-
repository/impl/src/main/java/org/lilycms/repository/impl/RecordTypeImpl.java (modified) (10 diffs)
-
repository/impl/src/test/java/org/lilycms/repository/impl/test/HBaseRepositoryTest.java (modified) (36 diffs)
-
repository/impl/src/test/java/org/lilycms/repository/impl/test/TypeManagerFieldDescriptorTest.java (modified) (6 diffs)
-
repository/impl/src/test/java/org/lilycms/repository/impl/test/TypeManagerFieldGroupTest.java (modified) (6 diffs)
-
repository/impl/src/test/java/org/lilycms/repository/impl/test/TypeManagerRecordTypeTest.java (modified) (2 diffs)
-
repository/impl/src/test/java/org/lilycms/repository/impl/test/ValueTypeTest.java (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
projects/lily/trunk/indexer/src/test/java/org/lilycms/indexer/test/IndexerTest.java
r3978 r3981 24 24 import org.lilycms.queue.api.QueueListener; 25 25 import org.lilycms.queue.api.QueueMessage; 26 import org.lilycms.repository.api.FieldDescriptor; 26 27 import org.lilycms.repository.api.FieldGroup; 27 28 import org.lilycms.repository.api.IdGenerator; … … 76 77 // Create a record type 77 78 ValueType stringValueType = typeManager.getValueType("STRING", false, false); 78 typeManager.createFieldDescriptor(typeManager.newFieldDescriptor("field1", stringValueType, "field1GN"));79 typeManager.createFieldDescriptor(typeManager.newFieldDescriptor("field2", stringValueType, "field2GN"));80 typeManager.createFieldDescriptor(typeManager.newFieldDescriptor("field3", stringValueType, "field3GN"));79 FieldDescriptor fieldDescriptor1 = typeManager.createFieldDescriptor(typeManager.newFieldDescriptor(stringValueType, "field1")); 80 FieldDescriptor fieldDescriptor2 = typeManager.createFieldDescriptor(typeManager.newFieldDescriptor(stringValueType, "field2")); 81 FieldDescriptor fieldDescriptor3 = typeManager.createFieldDescriptor(typeManager.newFieldDescriptor(stringValueType, "field3")); 81 82 FieldGroup fieldGroup1 = typeManager.newFieldGroup("fieldGroup1"); 82 fieldGroup1.setFieldGroupEntry(typeManager.newFieldGroupEntry( "field1", Long.valueOf(1), true, "alias1"));83 fieldGroup1.setFieldGroupEntry(typeManager.newFieldGroupEntry( "field2", Long.valueOf(1), true, "alias2"));84 fieldGroup1.setFieldGroupEntry(typeManager.newFieldGroupEntry( "field3", Long.valueOf(1), true, "alias3"));83 fieldGroup1.setFieldGroupEntry(typeManager.newFieldGroupEntry(fieldDescriptor1.getId(), Long.valueOf(1), true, "alias1")); 84 fieldGroup1.setFieldGroupEntry(typeManager.newFieldGroupEntry(fieldDescriptor2.getId(), Long.valueOf(1), true, "alias2")); 85 fieldGroup1.setFieldGroupEntry(typeManager.newFieldGroupEntry(fieldDescriptor3.getId(), Long.valueOf(1), true, "alias3")); 85 86 fieldGroup1 = typeManager.createFieldGroup(fieldGroup1); 86 87 87 typeManager.createFieldDescriptor(typeManager.newFieldDescriptor("nvfield1", stringValueType, "nvfield1GN"));88 FieldDescriptor nvFieldDescriptor1 = typeManager.createFieldDescriptor(typeManager.newFieldDescriptor(stringValueType, "nvfield1")); 88 89 FieldGroup fieldGroup2 = typeManager.newFieldGroup("fieldGroup2"); 89 fieldGroup2.setFieldGroupEntry(typeManager.newFieldGroupEntry( "nvfield1", Long.valueOf(1), true, "nvalias1"));90 fieldGroup2.setFieldGroupEntry(typeManager.newFieldGroupEntry(nvFieldDescriptor1.getId(), Long.valueOf(1), true, "nvalias1")); 90 91 fieldGroup2 = typeManager.createFieldGroup(fieldGroup2); 91 92 -
projects/lily/trunk/repository/api/src/main/java/org/lilycms/repository/api/FieldDescriptor.java
r3977 r3981 30 30 */ 31 31 public interface FieldDescriptor { 32 33 void setId(String string); 32 34 /** 33 35 * The id of the {@link FieldDescriptor} is also the id to be used by the corresponding {@link Field} … … 51 53 * The name can be chose by the user. 52 54 */ 53 void set GlobalName(String name);55 void setName(String name); 54 56 55 57 /** 56 58 * @return the global unique name of the {@link FieldDescriptor} 57 59 */ 58 String get GlobalName();60 String getName(); 59 61 60 62 /** … … 72 74 73 75 FieldDescriptor clone(); 76 74 77 } -
projects/lily/trunk/repository/api/src/main/java/org/lilycms/repository/api/Record.java
r3978 r3981 60 60 Long getRecordTypeVersion(Scope scope); 61 61 62 void setField(Scope scope, String field Id, Object value);62 void setField(Scope scope, String fieldName, Object value); 63 63 64 Object getField(Scope scope, String field Id) throws FieldNotFoundException;64 Object getField(Scope scope, String fieldName) throws FieldNotFoundException; 65 65 66 66 Map<String, Object> getFields(Scope scope); 67 67 68 void addFieldsToDelete(Scope scope, List<String> field Ids);68 void addFieldsToDelete(Scope scope, List<String> fieldNames); 69 69 70 void removeFieldsToDelete(Scope scope, List<String> field Ids);70 void removeFieldsToDelete(Scope scope, List<String> fieldNames); 71 71 72 72 List<String> getFieldsToDelete(Scope scope); -
projects/lily/trunk/repository/api/src/main/java/org/lilycms/repository/api/RecordType.java
r3978 r3981 15 15 */ 16 16 package org.lilycms.repository.api; 17 18 import java.util.Map; 17 19 18 20 import org.lilycms.repository.api.Record.Scope; … … 46 48 Long getFieldGroupVersion(Scope scope); 47 49 50 void addMixin(String recordTypeId, Long recordTypeVersion); 51 52 void removeMixin(String recordTypeId); 53 54 Map<String, Long> getMixins(); 55 48 56 RecordType clone(); 49 57 -
projects/lily/trunk/repository/api/src/main/java/org/lilycms/repository/api/Repository.java
r3979 r3981 90 90 Record read(RecordId recordId) throws RecordNotFoundException, RecordTypeNotFoundException, FieldGroupNotFoundException, FieldDescriptorNotFoundException, RepositoryException; 91 91 92 Record read(RecordId recordId, List<String> nonVersionableField Ids, List<String> versionableFieldIds, List<String> versionableMutableFieldIds) throws RecordNotFoundException, RecordTypeNotFoundException, FieldGroupNotFoundException, FieldDescriptorNotFoundException, RepositoryException;92 Record read(RecordId recordId, List<String> nonVersionableFieldNames, List<String> versionableFieldNames, List<String> versionableMutableFieldNames) throws RecordNotFoundException, RecordTypeNotFoundException, FieldGroupNotFoundException, FieldDescriptorNotFoundException, RepositoryException; 93 93 94 94 Record read(RecordId recordId, Long version) throws RecordNotFoundException, RecordTypeNotFoundException, FieldGroupNotFoundException, FieldDescriptorNotFoundException, RepositoryException; 95 95 96 Record read(RecordId recordId, Long version, List<String> nonVersionableField Ids, List<String> versionableFieldIds, List<String> versionableMutableFieldIds) throws RecordNotFoundException, RecordTypeNotFoundException, FieldGroupNotFoundException, FieldDescriptorNotFoundException, RepositoryException;96 Record read(RecordId recordId, Long version, List<String> nonVersionableFieldNames, List<String> versionableFieldNames, List<String> versionableMutableFieldNames) throws RecordNotFoundException, RecordTypeNotFoundException, FieldGroupNotFoundException, FieldDescriptorNotFoundException, RepositoryException; 97 97 98 98 /** -
projects/lily/trunk/repository/api/src/main/java/org/lilycms/repository/api/TypeManager.java
r3977 r3981 18 18 import java.util.List; 19 19 20 import org.lilycms.repository.api.Record.Scope; 21 20 22 21 23 /** … … 34 36 * @throws RecordTypeExistsException when a recordType with the same id already exists on the repository 35 37 * @throws FieldGroupNotFoundException when the recordType refers to a non-existing {@link FieldGroup} 38 * @throws RecordTypeNotFoundException when a mixin of the recordType refers to a non-existing {@link RecordType} 36 39 * @throws RepositoryException when an unexpected exception occurs on the repository 37 40 */ 38 RecordType createRecordType(RecordType recordType) throws RecordTypeExistsException, FieldGroupNotFoundException, Re positoryException;41 RecordType createRecordType(RecordType recordType) throws RecordTypeExistsException, FieldGroupNotFoundException, RecordTypeNotFoundException, RepositoryException; 39 42 40 43 /** … … 117 120 * Creates a new {@link FieldDescriptor} object. 118 121 */ 122 FieldDescriptor newFieldDescriptor(ValueType valueType, String name); 123 119 124 FieldDescriptor newFieldDescriptor(String id, ValueType valueType, String globalName); 120 125 … … 122 127 * Creates a {@link FieldDescriptor} on the repository with the properties defined in the {@link FieldDescriptor} object. 123 128 * @return a {@link FieldDescriptor} object containing the updated version number of the fieldDescriptor 124 * @throws FieldDescriptorExistsException if a fieldDescriptor with the same id already exists on the repository125 129 * @throws RepositoryException when an unexpected exception occurs on the repository 126 130 */ 127 FieldDescriptor createFieldDescriptor(FieldDescriptor fieldDescriptor) throws FieldDescriptorExistsException,RepositoryException;131 FieldDescriptor createFieldDescriptor(FieldDescriptor fieldDescriptor) throws RepositoryException; 128 132 129 133 /** … … 161 165 */ 162 166 ValueType getValueType(String primitiveValueTypeName, boolean multiValue, boolean hierarchical); 167 168 FieldDescriptor getFieldDescriptor(Scope scope, String name, RecordType recordType) throws FieldGroupNotFoundException, FieldDescriptorNotFoundException, RecordTypeNotFoundException, RepositoryException; 169 163 170 } -
projects/lily/trunk/repository/impl/src/main/java/org/lilycms/repository/impl/FieldDescriptorImpl.java
r3977 r3981 22 22 public class FieldDescriptorImpl implements FieldDescriptor { 23 23 24 private finalString id;24 private String id; 25 25 private Long version; 26 26 private ValueType valueType; 27 private String globalName;27 private String name; 28 28 29 29 /** … … 31 31 * @use {@link TypeManager#newFieldDescriptor} instead 32 32 */ 33 public FieldDescriptorImpl(String id, ValueType valueType, String globalName) {33 public FieldDescriptorImpl(String id, ValueType valueType, String name) { 34 34 this.id = id; 35 35 this.valueType = valueType; 36 this. globalName = globalName;36 this.name = name; 37 37 } 38 38 39 public String get GlobalName() {40 return globalName;39 public String getName() { 40 return name; 41 41 } 42 42 … … 53 53 } 54 54 55 public void setGlobalName(String name) { 56 this.globalName = name; 55 public void setId(String id) { 56 this.id = id; 57 } 58 59 public void setName(String name) { 60 this.name = name; 57 61 } 58 62 … … 66 70 67 71 public FieldDescriptor clone() { 68 FieldDescriptorImpl clone = new FieldDescriptorImpl(this.id, this.valueType, this. globalName);72 FieldDescriptorImpl clone = new FieldDescriptorImpl(this.id, this.valueType, this.name); 69 73 clone.version = this.version; 70 74 return clone; … … 75 79 final int prime = 31; 76 80 int result = 1; 77 result = prime * result + (( globalName == null) ? 0 : globalName.hashCode());81 result = prime * result + ((name == null) ? 0 : name.hashCode()); 78 82 result = prime * result + ((id == null) ? 0 : id.hashCode()); 79 83 result = prime * result + ((valueType == null) ? 0 : valueType.hashCode()); … … 91 95 return false; 92 96 FieldDescriptorImpl other = (FieldDescriptorImpl) obj; 93 if ( globalName == null) {94 if (other. globalName != null)97 if (name == null) { 98 if (other.name != null) 95 99 return false; 96 } else if (! globalName.equals(other.globalName))100 } else if (!name.equals(other.name)) 97 101 return false; 98 102 if (id == null) { … … 116 120 @Override 117 121 public String toString() { 118 return "FieldDescriptorImpl [id=" + id + ", version=" + version + ", globalName=" + globalName122 return "FieldDescriptorImpl [id=" + id + ", version=" + version + ", name=" + name 119 123 + ", valueType=" + valueType + "]"; 120 124 } -
projects/lily/trunk/repository/impl/src/main/java/org/lilycms/repository/impl/HBaseRepository.java
r3979 r3981 37 37 import org.lilycms.repository.api.FieldDescriptor; 38 38 import org.lilycms.repository.api.FieldDescriptorNotFoundException; 39 import org.lilycms.repository.api.FieldGroup;40 import org.lilycms.repository.api.FieldGroupEntry;41 39 import org.lilycms.repository.api.FieldGroupNotFoundException; 42 40 import org.lilycms.repository.api.IdGenerator; … … 80 78 private final TypeManager typeManager; 81 79 private final IdGenerator idGenerator; 80 private Map<Scope, byte[]> columnFamilies = new HashMap<Scope, byte[]>(); 81 private Map<Scope, byte[]> systemColumnFamilies = new HashMap<Scope, byte[]>(); 82 private Map<Scope, byte[]> recordTypeIdColumnNames = new HashMap<Scope, byte[]>(); 83 private Map<Scope, byte[]> recordTypeVersionColumnNames = new HashMap<Scope, byte[]>(); 82 84 83 85 public HBaseRepository(TypeManager typeManager, IdGenerator idGenerator, Configuration configuration) … … 101 103 recordTable = new HTable(configuration, RECORD_TABLE); 102 104 } 105 columnFamilies.put(Scope.NON_VERSIONABLE, NON_VERSIONABLE_COLUMN_FAMILY); 106 columnFamilies.put(Scope.VERSIONABLE, VERSIONABLE_COLUMN_FAMILY); 107 columnFamilies.put(Scope.VERSIONABLE_MUTABLE, VERSIONABLE_MUTABLE_COLUMN_FAMILY); 108 systemColumnFamilies.put(Scope.NON_VERSIONABLE, NON_VERSIONABLE_SYSTEM_COLUMN_FAMILY); 109 systemColumnFamilies.put(Scope.VERSIONABLE, VERSIONABLE_SYSTEM_COLUMN_FAMILY); 110 systemColumnFamilies.put(Scope.VERSIONABLE_MUTABLE, VERSIONABLE_SYSTEM_COLUMN_FAMILY); 111 recordTypeIdColumnNames.put(Scope.NON_VERSIONABLE, NON_VERSIONABLE_RECORDTYPEID_COLUMN_NAME); 112 recordTypeIdColumnNames.put(Scope.VERSIONABLE, VERSIONABLE_RECORDTYPEID_COLUMN_NAME); 113 recordTypeIdColumnNames.put(Scope.VERSIONABLE_MUTABLE, VERSIONABLE_MUTABLE_RECORDTYPEID_COLUMN_NAME); 114 recordTypeVersionColumnNames.put(Scope.NON_VERSIONABLE, NON_VERSIONABLE_RECORDTYPEVERSION_COLUMN_NAME); 115 recordTypeVersionColumnNames.put(Scope.VERSIONABLE, VERSIONABLE_RECORDTYPEVERSION_COLUMN_NAME); 116 recordTypeVersionColumnNames.put(Scope.VERSIONABLE_MUTABLE, VERSIONABLE_MUTABLE_RECORDTYPEVERSION_COLUMN_NAME); 117 103 118 } 104 119 … … 209 224 boolean changed = false; 210 225 boolean versionableChanged = false; 211 if (put NonVersionableFields(record, originalRecord, recordType, put)) {226 if (putFields(Scope.NON_VERSIONABLE, record, originalRecord, recordType, null, put)) { 212 227 changed = true; 213 228 } 214 if (put VersionableFields(record, originalRecord, recordType, version, put)) {229 if (putFields(Scope.VERSIONABLE, record, originalRecord, recordType, version, put)) { 215 230 changed = true; 216 231 versionableChanged = true; 217 232 } 218 if (put VersionableMutableFields(record, originalRecord, recordType, version, put)) {233 if (putFields(Scope.VERSIONABLE_MUTABLE, record, originalRecord, recordType, version, put)) { 219 234 changed = true; 220 235 versionableChanged = true; … … 236 251 } 237 252 238 private boolean putNonVersionableFields(Record record, Record originalRecord, RecordType recordType, Put put) 239 throws FieldGroupNotFoundException, FieldDescriptorNotFoundException, RepositoryException { 240 if (putUpdateAndDeleteFieldGroupFields(record.getFields(Scope.NON_VERSIONABLE), record 241 .getFieldsToDelete(Scope.NON_VERSIONABLE), originalRecord.getFields(Scope.NON_VERSIONABLE), 242 recordType.getFieldGroupId(Scope.NON_VERSIONABLE), recordType 243 .getFieldGroupVersion(Scope.NON_VERSIONABLE), NON_VERSIONABLE_COLUMN_FAMILY, 244 null, put)) { 245 put.add(NON_VERSIONABLE_SYSTEM_COLUMN_FAMILY, NON_VERSIONABLE_RECORDTYPEID_COLUMN_NAME, Bytes 246 .toBytes(recordType.getId())); 247 put.add(NON_VERSIONABLE_SYSTEM_COLUMN_FAMILY, NON_VERSIONABLE_RECORDTYPEVERSION_COLUMN_NAME, Bytes 248 .toBytes(recordType.getVersion())); 249 record.setRecordType(Scope.NON_VERSIONABLE, recordType.getId(), recordType.getVersion()); 253 private boolean putFields(Scope scope, Record record, Record originalRecord, RecordType recordType, Long version, Put put) 254 throws FieldGroupNotFoundException, FieldDescriptorNotFoundException, RecordTypeNotFoundException, RepositoryException { 255 if (putUpdateAndDeleteFieldGroupFields(record.getFields(scope), record.getFieldsToDelete(scope), originalRecord 256 .getFields(scope), scope, recordType, 257 columnFamilies.get(scope), version, put)) { 258 if (version == null) { 259 put.add(systemColumnFamilies.get(scope), recordTypeIdColumnNames.get(scope), Bytes.toBytes(recordType.getId())); 260 put.add(systemColumnFamilies.get(scope), recordTypeVersionColumnNames.get(scope), Bytes.toBytes(recordType 261 .getVersion())); 262 } else { 263 put.add(systemColumnFamilies.get(scope), recordTypeIdColumnNames.get(scope), version, Bytes.toBytes(recordType.getId())); 264 put.add(systemColumnFamilies.get(scope), recordTypeVersionColumnNames.get(scope), version, Bytes.toBytes(recordType 265 .getVersion())); 266 267 } 268 record.setRecordType(scope, recordType.getId(), recordType.getVersion()); 250 269 return true; 251 270 } 252 271 return false; 253 272 } 254 255 private boolean putVersionableFields(Record record, Record originalRecord, RecordType recordType, Long version, 256 Put put) throws FieldGroupNotFoundException, FieldDescriptorNotFoundException, RepositoryException { 257 if (putUpdateAndDeleteFieldGroupFields(record.getFields(Scope.VERSIONABLE), record 258 .getFieldsToDelete(Scope.VERSIONABLE), originalRecord.getFields(Scope.VERSIONABLE), recordType 259 .getFieldGroupId(Scope.VERSIONABLE), recordType.getFieldGroupVersion(Scope.VERSIONABLE), 260 VERSIONABLE_COLUMN_FAMILY, version, put)) { 261 put.add(VERSIONABLE_SYSTEM_COLUMN_FAMILY, VERSIONABLE_RECORDTYPEID_COLUMN_NAME, version, Bytes 262 .toBytes(recordType.getId())); 263 put.add(VERSIONABLE_SYSTEM_COLUMN_FAMILY, VERSIONABLE_RECORDTYPEVERSION_COLUMN_NAME, version, Bytes 264 .toBytes(recordType.getVersion())); 265 record.setRecordType(Scope.VERSIONABLE, recordType.getId(), recordType.getVersion()); 266 return true; 267 } 268 return false; 269 } 270 271 private boolean putVersionableMutableFields(Record record, Record originalRecord, RecordType recordType, 272 Long version, Put put) throws FieldGroupNotFoundException, FieldDescriptorNotFoundException, 273 RepositoryException { 274 if (putUpdateAndDeleteFieldGroupFields(record.getFields(Scope.VERSIONABLE_MUTABLE), record 275 .getFieldsToDelete(Scope.VERSIONABLE_MUTABLE), originalRecord 276 .getFields(Scope.VERSIONABLE_MUTABLE), recordType.getFieldGroupId(Scope.VERSIONABLE_MUTABLE), 277 recordType.getFieldGroupVersion(Scope.VERSIONABLE_MUTABLE), VERSIONABLE_MUTABLE_COLUMN_FAMILY, 278 version, put)) { 279 put.add(VERSIONABLE_SYSTEM_COLUMN_FAMILY, VERSIONABLE_MUTABLE_RECORDTYPEID_COLUMN_NAME, version, Bytes 280 .toBytes(recordType.getId())); 281 put.add(VERSIONABLE_SYSTEM_COLUMN_FAMILY, VERSIONABLE_MUTABLE_RECORDTYPEVERSION_COLUMN_NAME, version, Bytes 282 .toBytes(recordType.getVersion())); 283 record.setRecordType(Scope.VERSIONABLE_MUTABLE, recordType.getId(), recordType.getVersion()); 284 return true; 285 } 286 return false; 287 } 288 273 289 274 private boolean putUpdateAndDeleteFieldGroupFields(Map<String, Object> fields, List<String> fieldsToDelete, 290 Map<String, Object> originalFields, S tring fieldGroupId, Long fieldGroupVersion,275 Map<String, Object> originalFields, Scope scope, RecordType recordType, 291 276 byte[] columnFamily, Long version, Put put) throws FieldGroupNotFoundException, 292 FieldDescriptorNotFoundException, Re positoryException {277 FieldDescriptorNotFoundException, RecordTypeNotFoundException, RepositoryException { 293 278 // Update fields 294 boolean updated = putUpdateFieldGroupFields(fields, originalFields, fieldGroupId, fieldGroupVersion, 295 columnFamily, version, put); 279 boolean updated = putUpdateFields(scope, fields, originalFields, version, recordType, put); 296 280 // Delete fields 297 boolean deleted = putDeleteField groupFields(fieldsToDelete, originalFields, columnFamily, version, put);281 boolean deleted = putDeleteFields(scope, fieldsToDelete, originalFields, version, recordType, put); 298 282 return updated || deleted; 299 283 } 300 284 301 private boolean putUpdateFieldGroupFields(Map<String, Object> fields, Map<String, Object> originalFields, 302 String fieldGroupId, Long fieldGroupVersion, byte[] columnFamily, Long version, Put put) 303 throws FieldGroupNotFoundException, RepositoryException, FieldDescriptorNotFoundException { 285 private boolean putUpdateFields(Scope scope, Map<String, Object> fields, Map<String, Object> originalFields, Long version, RecordType recordType, Put put) 286 throws FieldGroupNotFoundException, FieldDescriptorNotFoundException, RecordTypeNotFoundException, RepositoryException { 304 287 boolean changed = false; 305 288 for (Entry<String, Object> field : fields.entrySet()) { 306 String field Id= field.getKey();289 String fieldName = field.getKey(); 307 290 Object newValue = field.getValue(); 308 Object originalValue = originalFields.get(field Id);291 Object originalValue = originalFields.get(fieldName); 309 292 if (((newValue == null) && (originalValue != null)) || !newValue.equals(originalValue)) { 310 byte[] fieldIdAsBytes = Bytes.toBytes(fieldId); 311 byte[] encodedFieldValue = encodeFieldValue(fieldGroupId, fieldGroupVersion, fieldId, newValue); 293 FieldDescriptor fieldDescriptor = typeManager.getFieldDescriptor(scope, fieldName, recordType); 294 byte[] fieldIdAsBytes = Bytes.toBytes(fieldDescriptor.getId()); 295 byte[] encodedFieldValue = encodeFieldValue(fieldDescriptor, newValue); 312 296 313 297 if (version != null) { 314 put.add(columnFamil y, fieldIdAsBytes, version, encodedFieldValue);298 put.add(columnFamilies.get(scope), fieldIdAsBytes, version, encodedFieldValue); 315 299 } else { 316 put.add(columnFamil y, fieldIdAsBytes, encodedFieldValue);300 put.add(columnFamilies.get(scope), fieldIdAsBytes, encodedFieldValue); 317 301 } 318 302 changed = true; … … 322 306 } 323 307 324 private byte[] encodeFieldValue(String fieldGroupId, Long fieldGroupVersion, String fieldId, Object fieldValue) 325 throws FieldGroupNotFoundException, RepositoryException, FieldDescriptorNotFoundException { 326 FieldGroup fieldGroup = typeManager.getFieldGroup(fieldGroupId, fieldGroupVersion); 327 FieldGroupEntry fieldGroupEntry = fieldGroup.getFieldGroupEntry(fieldId); 328 FieldDescriptor fieldDescriptor = typeManager.getFieldDescriptor(fieldGroupEntry.getFieldDescriptorId(), 329 fieldGroupEntry.getFieldDescriptorVersion()); 308 private byte[] encodeFieldValue(FieldDescriptor fieldDescriptor, Object fieldValue) 309 throws FieldGroupNotFoundException, FieldDescriptorNotFoundException, RecordTypeNotFoundException, RepositoryException { 330 310 ValueType valueType = fieldDescriptor.getValueType(); 331 311 … … 336 316 } 337 317 338 private boolean putDeleteFieldgroupFields(List<String> fieldsToDelete, Map<String, Object> originalFields, 339 byte[] columnFamily, Long version, Put put) { 318 private boolean putDeleteFields(Scope scope, List<String> fieldsToDelete, Map<String, Object> originalFields, Long version, RecordType recordType, Put put) throws FieldGroupNotFoundException, FieldDescriptorNotFoundException, RecordTypeNotFoundException, RepositoryException { 340 319 boolean changed = false; 341 320 for (String fieldToDelete : fieldsToDelete) { 342 321 if (originalFields.get(fieldToDelete) != null) { 322 FieldDescriptor fieldDescriptor = typeManager.getFieldDescriptor(scope, fieldToDelete, recordType); 323 byte[] fieldIdAsBytes = Bytes.toBytes(fieldDescriptor.getId()); 343 324 if (version != null) { 344 put.add(columnFamily, Bytes.toBytes(fieldToDelete), version, 345 new byte[] { EncodingUtil.DELETE_FLAG }); 325 put.add(columnFamilies.get(scope), fieldIdAsBytes, version, new byte[] { EncodingUtil.DELETE_FLAG }); 346 326 } else { 347 put.add(columnFamil y, Bytes.toBytes(fieldToDelete), new byte[] { EncodingUtil.DELETE_FLAG });327 put.add(columnFamilies.get(scope), fieldIdAsBytes, new byte[] { EncodingUtil.DELETE_FLAG }); 348 328 } 349 329 changed = true; … … 385 365 386 366 Put put = new Put(record.getId().toBytes()); 387 Map<String, Object> fieldsToUpdate = record.getFields(Scope.VERSIONABLE_MUTABLE); 367 Scope scope = Scope.VERSIONABLE_MUTABLE; 368 Map<String, Object> fieldsToUpdate = record.getFields(scope); 388 369 Map<String, Object> originalFields = originalRecord 389 .getFields(Scope.VERSIONABLE_MUTABLE); 390 String fieldGroupId = recordType.getFieldGroupId(Scope.VERSIONABLE_MUTABLE); 391 Long fieldGroupVersion = recordType.getFieldGroupVersion(Scope.VERSIONABLE_MUTABLE); 392 boolean updated = putUpdateFieldGroupFields(fieldsToUpdate, originalFields, fieldGroupId, 393 fieldGroupVersion, VERSIONABLE_MUTABLE_COLUMN_FAMILY, 394 version, put); 395 List<String> fieldsToDelete = record.getFieldsToDelete(Scope.VERSIONABLE_MUTABLE); 370 .getFields(scope); 371 boolean updated = putUpdateFields(scope, fieldsToUpdate, originalFields, version, 372 recordType, put); 373 List<String> fieldsToDelete = record.getFieldsToDelete(scope); 396 374 Map<String, Object> originalNextFields = new HashMap<String, Object>(); 397 375 if (originalNextRecord != null) { 398 originalNextFields.putAll(originalNextRecord.getFields( Scope.VERSIONABLE_MUTABLE));399 } 400 boolean deleted = putDeleteMutableField groupFields(fieldsToDelete,401 originalFields, originalNextFields, fieldGroupId, fieldGroupVersion,402 VERSIONABLE_MUTABLE_COLUMN_FAMILY, version, put);376 originalNextFields.putAll(originalNextRecord.getFields(scope)); 377 } 378 boolean deleted = putDeleteMutableFields(fieldsToDelete, 379 originalFields, originalNextFields, scope, recordType, 380 columnFamilies.get(scope), version, put); 403 381 if (updated || deleted) { 404 put.add( VERSIONABLE_SYSTEM_COLUMN_FAMILY, VERSIONABLE_MUTABLE_RECORDTYPEID_COLUMN_NAME, version, Bytes382 put.add(systemColumnFamilies.get(scope), recordTypeIdColumnNames.get(scope), version, Bytes 405 383 .toBytes(recordType.getId())); 406 put.add( VERSIONABLE_SYSTEM_COLUMN_FAMILY, VERSIONABLE_MUTABLE_RECORDTYPEVERSION_COLUMN_NAME, version, Bytes384 put.add(systemColumnFamilies.get(scope), recordTypeVersionColumnNames.get(scope), version, Bytes 407 385 .toBytes(recordType.getVersion())); 408 386 try { … … 412 390 + "> on HBase table", e); 413 391 } 414 newRecord.setRecordType( Scope.VERSIONABLE_MUTABLE, recordType.getId(), recordType.getVersion());392 newRecord.setRecordType(scope, recordType.getId(), recordType.getVersion()); 415 393 } 416 394 return newRecord; 417 395 } 418 396 419 private boolean putDeleteMutableField groupFields(List<String> fieldsToDelete, Map<String, Object> originalFields,420 Map<String, Object> originalNextFields, S tring fieldGroupId, Long fieldGroupVersion,397 private boolean putDeleteMutableFields(List<String> fieldsToDelete, Map<String, Object> originalFields, 398 Map<String, Object> originalNextFields, Scope scope, RecordType recordType, 421 399 byte[] columnFamily, Long version, Put put) throws FieldGroupNotFoundException, 422 RepositoryException, FieldDescriptorNotFoundException {400 FieldDescriptorNotFoundException, RecordTypeNotFoundException, RepositoryException { 423 401 boolean changed = false; 424 402 for (String fieldToDelete : fieldsToDelete) { 425 403 Object originalValue = originalFields.get(fieldToDelete); 426 404 if (originalValue != null) { 427 put.add(columnFamily, Bytes.toBytes(fieldToDelete), version, new byte[] { EncodingUtil.DELETE_FLAG }); 405 FieldDescriptor fieldDescriptor = typeManager.getFieldDescriptor(scope, fieldToDelete, recordType); 406 byte[] fieldIdBytes = Bytes.toBytes(fieldDescriptor.getId()); 407 put.add(columnFamily, fieldIdBytes, version, new byte[] { EncodingUtil.DELETE_FLAG }); 428 408 if (originalValue.equals(originalNextFields.get(fieldToDelete))) { 429 byte[] encodedValue = encodeFieldValue(fieldGroupId, fieldGroupVersion, fieldToDelete, 430 originalValue); 431 put.add(columnFamily, Bytes.toBytes(fieldToDelete), version + 1, encodedValue); 409 byte[] encodedValue = encodeFieldValue(fieldDescriptor, originalValue); 410 put.add(columnFamily, fieldIdBytes, version + 1, encodedValue); 432 411 } 433 412 changed = true; … … 501 480 } 502 481 503 private Pair<String, Long> extractNonVersionableRecordType(Result result, Record record) { 504 return new Pair<String, Long>(Bytes.toString(result.getValue(NON_VERSIONABLE_SYSTEM_COLUMN_FAMILY, 505 NON_VERSIONABLE_RECORDTYPEID_COLUMN_NAME)), Bytes.toLong(result.getValue( 506 NON_VERSIONABLE_SYSTEM_COLUMN_FAMILY, NON_VERSIONABLE_RECORDTYPEVERSION_COLUMN_NAME))); 507 } 508 509 private Pair<String, Long> extractVersionableRecordType(Result result, Long version, Record record) { 482 private Pair<String, Long> extractRecordType(Scope scope, Result result, Long version, Record record) { 510 483 if (version == null) { 511 484 // Get latest version 512 return new Pair<String, Long>(Bytes.toString(result.getValue( VERSIONABLE_SYSTEM_COLUMN_FAMILY,513 VERSIONABLE_RECORDTYPEID_COLUMN_NAME)), Bytes.toLong(result.getValue(514 VERSIONABLE_SYSTEM_COLUMN_FAMILY, VERSIONABLE_RECORDTYPEVERSION_COLUMN_NAME)));485 return new Pair<String, Long>(Bytes.toString(result.getValue(systemColumnFamilies.get(scope), 486 recordTypeIdColumnNames.get(scope))), Bytes.toLong(result.getValue( 487 systemColumnFamilies.get(scope), recordTypeVersionColumnNames.get(scope)))); 515 488 516 489 } else { … … 518 491 NavigableMap<byte[], NavigableMap<byte[], NavigableMap<Long, byte[]>>> allVersionsMap = result.getMap(); 519 492 NavigableMap<byte[], NavigableMap<Long, byte[]>> versionableSystemCFversions = allVersionsMap 520 .get(VERSIONABLE_SYSTEM_COLUMN_FAMILY); 521 return extractVersionRecordType(version, versionableSystemCFversions, VERSIONABLE_RECORDTYPEID_COLUMN_NAME, 522 VERSIONABLE_RECORDTYPEVERSION_COLUMN_NAME); 523 } 524 } 525 526 private Pair<String, Long> extractVersionableMutableRecordType(Result result, Long version, Record record) { 527 if (version == null) { 528 // Get latest version 529 return new Pair<String, Long>(Bytes.toString(result.getValue(VERSIONABLE_SYSTEM_COLUMN_FAMILY, 530 VERSIONABLE_MUTABLE_RECORDTYPEID_COLUMN_NAME)), Bytes.toLong(result.getValue( 531 VERSIONABLE_SYSTEM_COLUMN_FAMILY, VERSIONABLE_MUTABLE_RECORDTYPEVERSION_COLUMN_NAME))); 532 } else { 533 // Get on version 534 NavigableMap<byte[], NavigableMap<byte[], NavigableMap<Long, byte[]>>> allVersionsMap = result.getMap(); 535 NavigableMap<byte[], NavigableMap<Long, byte[]>> versionableSystemCFversions = allVersionsMap 536 .get(VERSIONABLE_SYSTEM_COLUMN_FAMILY); 537 return extractVersionRecordType(version, versionableSystemCFversions, 538 VERSIONABLE_MUTABLE_RECORDTYPEID_COLUMN_NAME, 539 VERSIONABLE_MUTABLE_RECORDTYPEVERSION_COLUMN_NAME); 493 .get(systemColumnFamilies.get(scope)); 494 return extractVersionRecordType(version, versionableSystemCFversions, recordTypeIdColumnNames.get(scope), 495 recordTypeVersionColumnNames.get(scope)); 540 496 } 541 497 } … … 598 554 } 599 555 String fieldId = Bytes.toString(key); 600 ValueType valueType = typeManager.getFieldDescriptor(fieldId, null).getValueType(); 556 FieldDescriptor fieldDescriptor = typeManager.getFieldDescriptor(fieldId, null); 557 ValueType valueType = fieldDescriptor.getValueType(); 601 558 Object value = valueType.fromBytes(EncodingUtil.stripPrefix(prefixedValue)); 602 return new Pair<String, Object>(field Id, value);559 return new Pair<String, Object>(fieldDescriptor.getName(), value); 603 560 } 604 561 605 562 private void addFieldsToGet(Get get, List<String> nonVersionableFieldIds, List<String> versionableFieldIds, 606 563 List<String> versionableMutableFieldIds) throws RecordNotFoundException, RepositoryException { 607 boolean added = false; 608 added |= addFieldsToGet(get, nonVersionableFieldIds, NON_VERSIONABLE_COLUMN_FAMILY); 609 added |= addFieldsToGet(get, versionableFieldIds, VERSIONABLE_COLUMN_FAMILY); 610 added |= addFieldsToGet(get, versionableMutableFieldIds, VERSIONABLE_MUTABLE_COLUMN_FAMILY); 611 if (added) { 564 boolean addedVersionable = addFieldsToGet(get, nonVersionableFieldIds, NON_VERSIONABLE_COLUMN_FAMILY); 565 boolean addedNonVersionable = addFieldsToGet(get, versionableFieldIds, VERSIONABLE_COLUMN_FAMILY); 566 boolean addedVersionableMutable = addFieldsToGet(get, versionableMutableFieldIds, VERSIONABLE_MUTABLE_COLUMN_FAMILY); 567 if (addedVersionable || addedNonVersionable || addedVersionableMutable) { 612 568 addSystemColumnsToGet(get); 613 569 } … … 639 595 private boolean extractFields(Result result, Long version, Record record) throws RecordTypeNotFoundException, 640 596 FieldGroupNotFoundException, FieldDescriptorNotFoundException, RepositoryException { 641 boolean retrieved = false; 642 retrieved |= extractNonVersionableFields(result, record); 643 retrieved |= extractVersionableFields(result, version, record); 644 retrieved |= extractVersionableMutableFields(result, version, record); 645 return retrieved; 646 } 647 648 private boolean extractNonVersionableFields(Result result, Record record) throws RecordTypeNotFoundException, 649 RepositoryException, FieldGroupNotFoundException, FieldDescriptorNotFoundException { 650 boolean retrieved = false; 651 Pair<String, Long> recordTypePair = extractNonVersionableRecordType(result, record); 652 String recordTypeId = recordTypePair.getV1(); 653 Long recordTypeVersion = recordTypePair.getV2(); 654 // If there is no recordType, there can't be any fields 655 if (recordTypeId != null) { 656 List<Pair<String, Object>> fields = extractFields(result.getFamilyMap(NON_VERSIONABLE_COLUMN_FAMILY)); 657 if (!fields.isEmpty()) { 658 for (Pair<String, Object> field : fields) { 659 record.setField(Scope.NON_VERSIONABLE, field.getV1(), field.getV2()); 660 } 661 record.setRecordType(Scope.NON_VERSIONABLE, recordTypeId, recordTypeVersion); 662 retrieved = true; 663 } 664 } 665 return retrieved; 666 } 667 668 private boolean extractVersionableFields(Result result, Long version, Record record) 597 boolean nvExtracted = extractFields(Scope.NON_VERSIONABLE, result, null, record); 598 boolean vExtracted = extractFields(Scope.VERSIONABLE, result, version, record); 599 boolean vmExtracted = extractFields(Scope.VERSIONABLE_MUTABLE, result, version, record); 600 return nvExtracted || vExtracted || vmExtracted; 601 } 602 603 private boolean extractFields(Scope scope, Result result, Long version, Record record) 669 604 throws RecordTypeNotFoundException, RepositoryException, FieldGroupNotFoundException, 670 605 FieldDescriptorNotFoundException { 671 606 boolean retrieved = false; 672 Pair<String, Long> recordTypePair = extract VersionableRecordType(result, version, record);607 Pair<String, Long> recordTypePair = extractRecordType(scope, result, version, record); 673 608 String recordTypeId = recordTypePair.getV1(); 674 609 Long recordTypeVersion = recordTypePair.getV2(); … … 677 612 List<Pair<String, Object>> fields; 678 613 if (version == null) { 679 fields = extractFields(result.getFamilyMap( VERSIONABLE_COLUMN_FAMILY));614 fields = extractFields(result.getFamilyMap(columnFamilies.get(scope))); 680 615 } else { 681 fields = extractVersionFields(version, result.getMap().get( VERSIONABLE_COLUMN_FAMILY));616 fields = extractVersionFields(version, result.getMap().get(columnFamilies.get(scope))); 682 617 } 683 618 if (!fields.isEmpty()) { 684 619 for (Pair<String, Object> field : fields) { 685 record.setField(Scope.VERSIONABLE, field.getV1(), field.getV2()); 686 } 687 record.setRecordType(Scope.VERSIONABLE, recordTypeId, recordTypeVersion); 688 retrieved = true; 689 } 690 } 691 return retrieved; 692 } 693 694 private boolean extractVersionableMutableFields(Result result, Long version, Record record) 695 throws RecordTypeNotFoundException, RepositoryException, FieldGroupNotFoundException, 696 FieldDescriptorNotFoundException { 697 boolean retrieved = false; 698 Pair<String, Long> recordTypePair = extractVersionableMutableRecordType(result, version, record); 699 String recordTypeId = recordTypePair.getV1(); 700 Long recordTypeVersion = recordTypePair.getV2(); 701 // If there is no recordType, there can't be any fields 702 if (recordTypeId != null) { 703 List<Pair<String, Object>> fields; 704 if (version == null) { 705 fields = extractFields(result.getFamilyMap(VERSIONABLE_MUTABLE_COLUMN_FAMILY)); 706 } else { 707 fields = extractVersionFields(version, result.getMap().get(VERSIONABLE_MUTABLE_COLUMN_FAMILY)); 708 } 709 if (!fields.isEmpty()) { 710 for (Pair<String, Object> field : fields) { 711 record.setField(Scope.VERSIONABLE_MUTABLE, field.getV1(), field.getV2()); 712 } 713 record.setRecordType(Scope.VERSIONABLE_MUTABLE, recordTypeId, recordTypeVersion); 620 record.setField(scope, field.getV1(), field.getV2()); 621 } 622 record.setRecordType(scope, recordTypeId, recordTypeVersion); 714 623 retrieved = true; 715 624 } -
projects/lily/trunk/repository/impl/src/main/java/org/lilycms/repository/impl/HBaseTypeManager.java
r3978 r3981 22 22 import java.util.Map; 23 23 import java.util.NavigableMap; 24 import java.util.UUID; 24 25 import java.util.Map.Entry; 25 26 … … 35 36 import org.apache.hadoop.hbase.util.Bytes; 36 37 import org.lilycms.repository.api.FieldDescriptor; 37 import org.lilycms.repository.api.FieldDescriptorExistsException;38 38 import org.lilycms.repository.api.FieldDescriptorNotFoundException; 39 39 import org.lilycms.repository.api.FieldDescriptorUpdateException; … … 59 59 private static final byte[] NON_VERSIONABLE_COLUMN_FAMILY = Bytes.toBytes("nonVersionableCF"); 60 60 private static final byte[] VERSIONABLE_COLUMN_FAMILY = Bytes.toBytes("versionableCF"); 61 private static final byte[] MIXIN_COLUMN_FAMILY = Bytes.toBytes("mixinCF"); 61 62 62 63 private static final byte[] CURRENT_VERSION_COLUMN_NAME = Bytes.toBytes("$currentVersion"); … … 66 67 private static final byte[] RECORDTYPE_VERSIONABLEMUTABLEFIELDGROUP_COLUMN_NAME = Bytes 67 68 .toBytes("$versionableMutableFG"); 68 private static final byte[] FIELDDESCRIPTOR_ GLOBALNAME_COLUMN_NAME = Bytes.toBytes("$globalName");69 private static final byte[] FIELDDESCRIPTOR_NAME_COLUMN_NAME = Bytes.toBytes("$globalName"); 69 70 private static final byte[] FIELDDESCRIPTOR_VALUETYPE_COLUMN_NAME = Bytes.toBytes("$valueType"); 70 71 … … 82 83 tableDescriptor.addFamily(new HColumnDescriptor(VERSIONABLE_COLUMN_FAMILY, HConstants.ALL_VERSIONS, "none", 83 84 false, true, HConstants.FOREVER, false)); 85 tableDescriptor.addFamily(new HColumnDescriptor(MIXIN_COLUMN_FAMILY, HConstants.ALL_VERSIONS, "none", 86 false, true, HConstants.FOREVER, false)); 84 87 admin.createTable(tableDescriptor); 85 88 typeTable = new HTable(configuration, TYPE_TABLE); … … 94 97 95 98 public RecordType createRecordType(RecordType recordType) throws RecordTypeExistsException, 96 FieldGroupNotFoundException, Re positoryException {99 FieldGroupNotFoundException, RecordTypeNotFoundException, RepositoryException { 97 100 ArgumentValidator.notNull(recordType, "recordType"); 98 101 RecordType newRecordType = recordType.clone(); … … 106 109 Put put = new Put(rowId); 107 110 put.add(NON_VERSIONABLE_COLUMN_FAMILY, CURRENT_VERSION_COLUMN_NAME, Bytes.toBytes(recordTypeVersion)); 111 108 112 String fieldGroupId = recordType.getFieldGroupId(Scope.NON_VERSIONABLE); 109 113 if (fieldGroupId != null) { 110 newRecordType.setFieldGroupVersion(Scope.NON_VERSIONABLE, putFieldGroupOnRecordType(recordTypeVersion, put,111 fieldGroupId, recordType.getFieldGroupVersion(Scope.NON_VERSIONABLE),114 newRecordType.setFieldGroupVersion(Scope.NON_VERSIONABLE, putFieldGroupOnRecordType(recordTypeVersion, 115 put, fieldGroupId, recordType.getFieldGroupVersion(Scope.NON_VERSIONABLE), 112 116 RECORDTYPE_NONVERSIONABLEFIELDGROUP_COLUMN_NAME)); 113 117 } … … 122 126 fieldGroupId = recordType.getFieldGroupId(Scope.VERSIONABLE_MUTABLE); 123 127 if (fieldGroupId != null) { 124 newRecordType.setFieldGroupVersion(Scope.VERSIONABLE_MUTABLE, putFieldGroupOnRecordType(recordTypeVersion, put, 125 fieldGroupId, recordType.getFieldGroupVersion(Scope.VERSIONABLE_MUTABLE), 128 newRecordType.setFieldGroupVersion(Scope.VERSIONABLE_MUTABLE, putFieldGroupOnRecordType( 129 recordTypeVersion, put, fieldGroupId, recordType 130 .getFieldGroupVersion(Scope.VERSIONABLE_MUTABLE), 126 131 RECORDTYPE_VERSIONABLEMUTABLEFIELDGROUP_COLUMN_NAME)); 132 } 133 134 Map<String, Long> mixins = recordType.getMixins(); 135 for (Entry<String, Long> mixin : mixins.entrySet()) { 136 newRecordType.addMixin(mixin.getKey(), putMixinOnRecordType(recordTypeVersion, put, mixin.getKey(), mixin.getValue())); 127 137 } 128 138 … … 150 160 // non-versionable field group 151 161 Pair<Boolean, Long> updateResult = updateFieldGroupOnRecordType(put, newRecordTypeVersion, recordType 152 .getFieldGroupId(Scope.NON_VERSIONABLE), recordType.getFieldGroupVersion(Scope.NON_VERSIONABLE), 153 latestRecordType.getFieldGroupId(Scope.NON_VERSIONABLE), latestRecordType 162 .getFieldGroupId(Scope.NON_VERSIONABLE), 163 recordType.getFieldGroupVersion(Scope.NON_VERSIONABLE), latestRecordType 164 .getFieldGroupId(Scope.NON_VERSIONABLE), latestRecordType 154 165 .getFieldGroupVersion(Scope.NON_VERSIONABLE), 155 166 RECORDTYPE_NONVERSIONABLEFIELDGROUP_COLUMN_NAME); 156 167 if (updateResult.getV1()) { 157 recordTypeChanged = true;168 recordTypeChanged = true; 158 169 newRecordType.setFieldGroupVersion(Scope.NON_VERSIONABLE, updateResult.getV2()); 159 170 } 160 171 161 172 // versionable field group 162 updateResult = updateFieldGroupOnRecordType(put, newRecordTypeVersion, recordType.getFieldGroupId(Scope.VERSIONABLE), 163 recordType.getFieldGroupVersion(Scope.VERSIONABLE), latestRecordType.getFieldGroupId(Scope.VERSIONABLE), 164 latestRecordType.getFieldGroupVersion(Scope.VERSIONABLE), 173 updateResult = updateFieldGroupOnRecordType(put, newRecordTypeVersion, recordType 174 .getFieldGroupId(Scope.VERSIONABLE), recordType.getFieldGroupVersion(Scope.VERSIONABLE), 175 latestRecordType.getFieldGroupId(Scope.VERSIONABLE), latestRecordType 176 .getFieldGroupVersion(Scope.VERSIONABLE), 165 177 RECORDTYPE_VERSIONABLEFIELDGROUP_COLUMN_NAME); 166 178 if (updateResult.getV1()) { … … 171 183 // versionable mutable field group 172 184 updateResult = updateFieldGroupOnRecordType(put, newRecordTypeVersion, recordType 173 .getFieldGroupId(Scope.VERSIONABLE_MUTABLE), recordType.getFieldGroupVersion(Scope.VERSIONABLE_MUTABLE), 174 latestRecordType.getFieldGroupId(Scope.VERSIONABLE_MUTABLE), latestRecordType 175 .getFieldGroupVersion(Scope.VERSIONABLE_MUTABLE), 185 .getFieldGroupId(Scope.VERSIONABLE_MUTABLE), recordType 186 .getFieldGroupVersion(Scope.VERSIONABLE_MUTABLE), latestRecordType 187 .getFieldGroupId(Scope.VERSIONABLE_MUTABLE), latestRecordType 188 .getFieldGroupVersion(Scope.VERSIONABLE_MUTABLE), 176 189 RECORDTYPE_VERSIONABLEMUTABLEFIELDGROUP_COLUMN_NAME); 177 190 if (updateResult.getV1()) { … … 179 192 newRecordType.setFieldGroupVersion(Scope.VERSIONABLE_MUTABLE, updateResult.getV2()); 180 193 } 194 195 boolean mixinsChanged = updateMixins(put, newRecordTypeVersion, recordType, latestRecordType); 196 recordTypeChanged |= mixinsChanged; 181 197 182 198 if (recordTypeChanged) { … … 221 237 } 222 238 223 public RecordType removeFieldGroups(String recordTypeId, boolean nonVersionable, boolean versionable, boolean versionableMutable) throws RecordTypeNotFoundException, RepositoryException { 239 private Long putMixinOnRecordType(Long recordTypeVersion, Put put, String mixinId, Long mixinVersion) throws RecordTypeNotFoundException, RepositoryException { 240 Long newMixinVersion = getRecordType(mixinId, mixinVersion).getVersion(); 241 put.add(MIXIN_COLUMN_FAMILY, Bytes.toBytes(mixinId), recordTypeVersion, Bytes.toBytes(newMixinVersion)); 242 return newMixinVersion; 243 } 244 245 private boolean updateMixins(Put put, Long newRecordTypeVersion, RecordType recordType, RecordType latestRecordType) { 246 boolean changed = false; 247 Map<String, Long> latestMixins = latestRecordType.getMixins(); 248 // Update mixins 249 for (Entry<String, Long> entry : recordType.getMixins().entrySet()) { 250 String mixinId = entry.getKey(); 251 Long mixinVersion = entry.getValue(); 252 if (!mixinVersion.equals(latestMixins.get(mixinId))) { 253 put.add(MIXIN_COLUMN_FAMILY, Bytes.toBytes(mixinId), newRecordTypeVersion, Bytes.toBytes(mixinVersion)); 254 changed = true; 255 } 256 latestMixins.remove(mixinId); 257 } 258 // Remove remaining mixins 259 for (Entry<String, Long> entry : latestMixins.entrySet()) { 260 put.add(MIXIN_COLUMN_FAMILY, Bytes.toBytes(entry.getKey()), newRecordTypeVersion, new byte[] { EncodingUtil.DELETE_FLAG }); 261 changed = true; 262 } 263 return changed; 264 } 265 266 public RecordType removeFieldGroups(String recordTypeId, boolean nonVersionable, boolean versionable, 267 boolean versionableMutable) throws RecordTypeNotFoundException, RepositoryException { 224 268 RecordType recordType = getRecordType(recordTypeId, null); 225 269 Long version = recordType.getVersion() + 1; … … 228 272 if (nonVersionable) { 229 273 if (recordType.getFieldGroupId(Scope.NON_VERSIONABLE) != null) { 230 put.add(VERSIONABLE_COLUMN_FAMILY, RECORDTYPE_NONVERSIONABLEFIELDGROUP_COLUMN_NAME, new byte[]{EncodingUtil.DELETE_FLAG}); 274 put.add(VERSIONABLE_COLUMN_FAMILY, RECORDTYPE_NONVERSIONABLEFIELDGROUP_COLUMN_NAME, 275 new byte[] { EncodingUtil.DELETE_FLAG }); 231 276 recordType.setFieldGroupId(Scope.NON_VERSIONABLE, null); 232 recordType.setFieldGroupVersion(Scope.NON_VERSIONABLE, null);277 recordType.setFieldGroupVersion(Scope.NON_VERSIONABLE, null); 233 278 changed = true; 234 279 } … … 236 281 if (versionable) { 237 282 if (recordType.getFieldGroupId(Scope.VERSIONABLE) != null) { 238 put.add(VERSIONABLE_COLUMN_FAMILY, RECORDTYPE_VERSIONABLEFIELDGROUP_COLUMN_NAME, new byte[]{EncodingUtil.DELETE_FLAG}); 283 put.add(VERSIONABLE_COLUMN_FAMILY, RECORDTYPE_VERSIONABLEFIELDGROUP_COLUMN_NAME, 284 new byte[] { EncodingUtil.DELETE_FLAG }); 239 285 recordType.setFieldGroupId(Scope.VERSIONABLE, null); 240 286 recordType.setFieldGroupVersion(Scope.VERSIONABLE, null); … … 244 290 if (versionableMutable) { 245 291 if (recordType.getFieldGroupId(Scope.VERSIONABLE_MUTABLE) != null) { 246 put.add(VERSIONABLE_COLUMN_FAMILY, RECORDTYPE_VERSIONABLEMUTABLEFIELDGROUP_COLUMN_NAME, new byte[]{EncodingUtil.DELETE_FLAG}); 292 put.add(VERSIONABLE_COLUMN_FAMILY, RECORDTYPE_VERSIONABLEMUTABLEFIELDGROUP_COLUMN_NAME, 293 new byte[] { EncodingUtil.DELETE_FLAG }); 247 294 recordType.setFieldGroupId(Scope.VERSIONABLE_MUTABLE, null); 248 295 recordType.setFieldGroupVersion(Scope.VERSIONABLE_MUTABLE, null); … … 255 302 typeTable.put(put); 256 303 } catch (IOException e) { 257 throw new RepositoryException("Exception occured while removing fieldGroups from recordType <" + recordTypeId258 + "> on HBase", e);304 throw new RepositoryException("Exception occured while removing fieldGroups from recordType <" 305 + recordTypeId + "> on HBase", e); 259 306 } 260 307 recordType.setVersion(version); … … 306 353 recordType.setFieldGroupVersion(Scope.VERSIONABLE_MUTABLE, fieldGroup.getV2()); 307 354 } 355 356 extractMixins(result, version, recordType); 308 357 return recordType; 309 358 } … … 331 380 return fieldGroup; 332 381 } 382 383 private void extractMixins(Result result, Long version, RecordType recordType) { 384 if (version != null) { 385 NavigableMap<byte[], NavigableMap<byte[], NavigableMap<Long, byte[]>>> allVersionsMap = result.getMap(); 386 NavigableMap<byte[], NavigableMap<Long, byte[]>> mixinVersionsMap = allVersionsMap.get(MIXIN_COLUMN_FAMILY); 387 if (mixinVersionsMap != null) { 388 for (Entry<byte[], NavigableMap<Long, byte[]>> entry : mixinVersionsMap.entrySet()) { 389 String mixinId = Bytes.toString(entry.getKey()); 390 Entry<Long, byte[]> ceilingEntry = entry.getValue().ceilingEntry(version); 391 if (ceilingEntry != null) { 392 if (!EncodingUtil.isDeletedField(ceilingEntry.getValue())) { 393 recordType.addMixin(mixinId, Bytes.toLong(ceilingEntry.getValue())); 394 } 395 } 396 } 397 } 398 } else { 399 NavigableMap<byte[], byte[]> mixinMap = result.getFamilyMap(MIXIN_COLUMN_FAMILY); 400 if (mixinMap != null) { 401 for (Entry<byte[], byte[]> entry : mixinMap.entrySet()) { 402 if (!EncodingUtil.isDeletedField(entry.getValue())) { 403 recordType.addMixin(Bytes.toString(entry.getKey()), Bytes.toLong(entry.getValue())); 404 } 405 } 406 } 407 } 408 } 333 409 334 410 private byte[] encodeFieldGroup(String fieldGroupId, Long fieldGroupVersion) { … … 438 514 return newFieldGroupEntry; 439 515 } 440 441 public FieldGroup removeFieldDescriptors(String fieldGroupId, List<String> fieldDescriptorIds) throws FieldGroupNotFoundException, RepositoryException{ 516 517 public FieldGroup removeFieldDescriptors(String fieldGroupId, List<String> fieldDescriptorIds) 518 throws FieldGroupNotFoundException, RepositoryException { 442 519 FieldGroup fieldGroup = getFieldGroup(fieldGroupId, null); 443 520 Put put = new Put(Bytes.toBytes(fieldGroupId)); … … 448 525 // Ignore 449 526 } else { 450 put.add(VERSIONABLE_COLUMN_FAMILY, Bytes.toBytes(fieldDescriptorId), version, new byte[]{EncodingUtil.DELETE_FLAG}); 527 put.add(VERSIONABLE_COLUMN_FAMILY, Bytes.toBytes(fieldDescriptorId), version, 528 new byte[] { EncodingUtil.DELETE_FLAG }); 451 529 fieldGroup.removeFieldGroupEntry(fieldDescriptorId); 452 530 changed = true; … … 456 534 put.add(NON_VERSIONABLE_COLUMN_FAMILY, CURRENT_VERSION_COLUMN_NAME, Bytes.toBytes(version)); 457 535 try { 458 typeTable.put(put);536 typeTable.put(put); 459 537 } catch (IOException e) { 460 throw new RepositoryException("Exception occured while removing fieldDescriptor <" +fieldGroupId+"> from fieldGroup <" + fieldGroup.getId()461 + "> on HBase", e);538 throw new RepositoryException("Exception occured while removing fieldDescriptor <" + fieldGroupId 539 + "> from fieldGroup <" + fieldGroup.getId() + "> on HBase", e); 462 540 } 463 541 fieldGroup.setVersion(version); … … 467 545 468 546 public FieldGroup getFieldGroup(String id, Long version) throws FieldGroupNotFoundException, RepositoryException { 547 ArgumentValidator.notNull(id, "id"); 469 548 FieldGroup fieldGroup = new FieldGroupImpl(id); 470 549 byte[] rowId = Bytes.toBytes(id); … … 495 574 Entry<Long, byte[]> ceilingEntry = entry.getValue().ceilingEntry(version); 496 575 if (ceilingEntry != null) { 497 FieldGroupEntry decodedFieldGroupEntry = decodeFieldGroupEntry(ceilingEntry.getValue(), fieldDescriptorId); 576 FieldGroupEntry decodedFieldGroupEntry = decodeFieldGroupEntry(ceilingEntry.getValue(), 577 fieldDescriptorId); 498 578 if (decodedFieldGroupEntry != null) { 499 579 fieldGroup.setFieldGroupEntry(decodedFieldGroupEntry); … … 546 626 } 547 627 548 public FieldDescriptor newFieldDescriptor(String id, ValueType valueType, String globalName) { 549 ArgumentValidator.notNull(id, "id"); 628 629 public FieldDescriptor newFieldDescriptor(ValueType valueType, String name) { 630 return newFieldDescriptor(null, valueType, name); 631 } 632 633 public FieldDescriptor newFieldDescriptor(String id, ValueType valueType, String name) { 550 634 ArgumentValidator.notNull(valueType, "valueType"); 551 ArgumentValidator.notNull( globalName, "globalName");552 return new FieldDescriptorImpl(id, valueType, globalName);635 ArgumentValidator.notNull(name, "name"); 636 return new FieldDescriptorImpl(id, valueType, name); 553 637 } 554 638 555 639 public FieldDescriptor createFieldDescriptor(FieldDescriptor fieldDescriptor) 556 throws FieldDescriptorExistsException,RepositoryException {640 throws RepositoryException { 557 641 ArgumentValidator.notNull(fieldDescriptor, "fieldDescriptor"); 558 642 FieldDescriptor result; 559 byte[] rowId = Bytes.toBytes(fieldDescriptor.getId()); 643 // TODO use IdGenerator 644 UUID uuid = UUID.randomUUID(); 645 byte[] rowId; 646 rowId = fieldDescriptorIdToBytes(uuid); 560 647 Long version = Long.valueOf(1); 561 648 try { 562 if (typeTable.exists(new Get(rowId))) {563 throw new FieldDescriptorExistsException(fieldDescriptor);564 }565 649 Put put = new Put(rowId); 566 650 put.add(NON_VERSIONABLE_COLUMN_FAMILY, CURRENT_VERSION_COLUMN_NAME, Bytes.toBytes(version)); 567 651 put.add(NON_VERSIONABLE_COLUMN_FAMILY, FIELDDESCRIPTOR_VALUETYPE_COLUMN_NAME, fieldDescriptor 568 652 .getValueType().toBytes()); 569 put.add(VERSIONABLE_COLUMN_FAMILY, FIELDDESCRIPTOR_ GLOBALNAME_COLUMN_NAME, version, Bytes570 .toBytes(fieldDescriptor.get GlobalName()));653 put.add(VERSIONABLE_COLUMN_FAMILY, FIELDDESCRIPTOR_NAME_COLUMN_NAME, version, Bytes 654 .toBytes(fieldDescriptor.getName())); 571 655 typeTable.put(put); 572 656 } catch (IOException e) { … … 575 659 } 576 660 result = fieldDescriptor.clone(); 661 result.setId(uuid.toString()); 577 662 result.setVersion(version); 578 663 return result; 664 } 665 666 private byte[] fieldDescriptorIdToBytes(UUID id) { 667 byte[] rowId; 668 rowId = new byte[16]; 669 Bytes.putLong(rowId, 0, id.getMostSignificantBits()); 670 Bytes.putLong(rowId, 8, id.getLeastSignificantBits()); 671 return rowId; 672 } 673 674 private byte[] fieldDescriptorIdToBytes(String id) { 675 UUID uuid = UUID.fromString(id); 676 byte[] rowId; 677 rowId = new byte[16]; 678 Bytes.putLong(rowId, 0, uuid.getMostSignificantBits()); 679 Bytes.putLong(rowId, 8, uuid.getLeastSignificantBits()); 680 return rowId; 579 681 } 580 682 … … 588 690 } 589 691 Long version = latestFieldDescriptor.getVersion(); 590 if (!fieldDescriptor.get GlobalName().equals(latestFieldDescriptor.getGlobalName())) {692 if (!fieldDescriptor.getName().equals(latestFieldDescriptor.getName())) { 591 693 version = version + 1; 592 Put put = new Put( Bytes.toBytes(fieldDescriptor.getId()));593 put.add(VERSIONABLE_COLUMN_FAMILY, FIELDDESCRIPTOR_ GLOBALNAME_COLUMN_NAME, version, Bytes594 .toBytes(fieldDescriptor.get GlobalName()));694 Put put = new Put(fieldDescriptorIdToBytes(fieldDescriptor.getId())); 695 put.add(VERSIONABLE_COLUMN_FAMILY, FIELDDESCRIPTOR_NAME_COLUMN_NAME, version, Bytes 696 .toBytes(fieldDescriptor.getName())); 595 697 put.add(NON_VERSIONABLE_COLUMN_FAMILY, CURRENT_VERSION_COLUMN_NAME, Bytes.toBytes(version)); 596 698 try { … … 610 712 ArgumentValidator.notNull(id, "id"); 611 713 Result result; 612 Get get = new Get( Bytes.toBytes(id));714 Get get = new Get(fieldDescriptorIdToBytes(id)); 613 715 if (version != null) { 614 716 get.setMaxVersions(); … … 626 728 Long currentVersion = Bytes.toLong(nonVersionableColumnFamily.get(CURRENT_VERSION_COLUMN_NAME)); 627 729 Long retrievedVersion; 628 String globalName;730 String name; 629 731 if (version != null) { 630 732 if (version > currentVersion) { … … 635 737 .get(VERSIONABLE_COLUMN_FAMILY); 636 738 NavigableMap<Long, byte[]> globalNameVersionsMap = versionableVersionsMap 637 .get(FIELDDESCRIPTOR_ GLOBALNAME_COLUMN_NAME);638 globalName = Bytes.toString(globalNameVersionsMap.floorEntry(version).getValue());739 .get(FIELDDESCRIPTOR_NAME_COLUMN_NAME); 740 name = Bytes.toString(globalNameVersionsMap.floorEntry(version).getValue()); 639 741 retrievedVersion = version; 640 742 } else { 641 743 NavigableMap<byte[], byte[]> versionableColumnFamily = result.getFamilyMap(VERSIONABLE_COLUMN_FAMILY); 642 globalName = Bytes.toString(versionableColumnFamily.get(FIELDDESCRIPTOR_GLOBALNAME_COLUMN_NAME));744 name = Bytes.toString(versionableColumnFamily.get(FIELDDESCRIPTOR_NAME_COLUMN_NAME)); 643 745 retrievedVersion = currentVersion; 644 746 } 645 747 ValueType valueType = ValueTypeImpl.fromBytes(nonVersionableColumnFamily 646 748 .get(FIELDDESCRIPTOR_VALUETYPE_COLUMN_NAME), this); 647 FieldDescriptor fieldDescriptor = new FieldDescriptorImpl(id, valueType, globalName);749 FieldDescriptor fieldDescriptor = new FieldDescriptorImpl(id, valueType, name); 648 750 fieldDescriptor.setVersion(retrievedVersion); 649 751 return fieldDescriptor; … … 672 774 return new ValueTypeImpl(primitiveValueTypes.get(primitiveValueTypeName), multivalue, hierarchy); 673 775 } 776 777 // TODO cache these things on the RecordType itself? 778 public FieldDescriptor getFieldDescriptor(Scope scope, String name, RecordType recordType) throws FieldGroupNotFoundException, FieldDescriptorNotFoundException, RecordTypeNotFoundException, RepositoryException { 779 ArgumentValidator.notNull(scope, "scope"); 780 ArgumentValidator.notNull(name, "name"); 781 ArgumentValidator.notNull(recordType, "recordType"); 782 String fieldGroupId = recordType.getFieldGroupId(scope); 783 Long fieldGroupVersion = recordType.getFieldGroupVersion(scope); 784 if (fieldGroupId != null) { 785 FieldGroup fieldGroup = getFieldGroup(fieldGroupId, fieldGroupVersion); 786 for (FieldGroupEntry fieldGroupEntry : fieldGroup.getFieldGroupEntries()) { 787 String fieldDescriptorId = fieldGroupEntry.getFieldDescriptorId(); 788 Long fieldDescriptorVersion = fieldGroupEntry.getFieldDescriptorVersion(); 789 FieldDescriptor fieldDescriptor = getFieldDescriptor(fieldDescriptorId, fieldDescriptorVersion); 790 if (name.equals(fieldDescriptor.getName())) { 791 return fieldDescriptor; 792 } 793 } 794 } 795 for (Entry<String, Long> entry : recordType.getMixins().entrySet()) { 796 RecordType mixin = getRecordType(entry.getKey(), entry.getValue()); 797 try { 798 FieldDescriptor fieldDescriptor = getFieldDescriptor(scope, name, mixin); 799 return fieldDescriptor; 800 } catch (FieldDescriptorNotFoundException exception) { 801 // skip 802 } 803 } 804 throw new FieldDescriptorNotFoundException(name, null); 805 } 674 806 675 807 } -
projects/lily/trunk/repository/impl/src/main/java/org/lilycms/repository/impl/RecordImpl.java
r3979 r3981 28 28 public class RecordImpl implements Record { 29 29 private RecordId id; 30 private Map<String, Object> nonVersionableFields = new HashMap<String, Object>(); 31 private Map<String, Object> versionableFields = new HashMap<String, Object>(); 32 private Map<String, Object> versionableMutableFields = new HashMap<String, Object>(); 30 private Map<Scope, Map<String, Object>> fields = new HashMap<Scope, Map<String, Object>>(); 33 31 private String recordTypeId; 34 32 private Long recordTypeVersion; 35 private String nonVersionableRecordTypeId; 36 private Long nonVersionableRecordTypeVersion; 37 private String versionableRecordTypeId; 38 private Long versionableRecordTypeVersion; 39 private String versionableMutableRecordTypeId; 40 private Long versionableMutableRecordTypeVersion; 33 private Map<Scope, String> recordTypeIds = new HashMap<Scope, String>(); 34 private Map<Scope, Long> recordTypeVersions = new HashMap<Scope, Long>(); 41 35 private Long version; 42 private List<String> nonVersionableFieldsToDelete = new ArrayList<String>(); 43 private List<String> versionableFieldsToDelete = new ArrayList<String>(); 44 private List<String> versionableMutableFieldsToDelete = new ArrayList<String>(); 36 private Map<Scope, List<String>> fieldsToDelete = new HashMap<Scope, List<String>>(); 45 37 46 38 /** … … 49 41 */ 50 42 public RecordImpl() { 51 } 52 43 initialize(); 44 } 45 53 46 /** 54 47 * This constructor should not be called directly. … … 57 50 public RecordImpl(RecordId id) { 58 51 this.id = id; 52 initialize(); 53 } 54 55 private void initialize() { 56 for (Scope scope : Scope.values()) { 57 fields.put(scope, new HashMap<String, Object>()); 58 fieldsToDelete.put(scope, new ArrayList<String>()); 59 } 59 60 } 60 61 … … 89 90 90 91 public void setRecordType(Scope scope, String id, Long version) { 91 switch (scope) { 92 case NON_VERSIONABLE: 93 this.nonVersionableRecordTypeId = id; 94 this.nonVersionableRecordTypeVersion = version; 95 break; 96 case VERSIONABLE: 97 this.versionableRecordTypeId = id; 98 this.versionableRecordTypeVersion = version; 99 break; 100 case VERSIONABLE_MUTABLE: 101 this.versionableMutableRecordTypeId = id; 102 this.versionableMutableRecordTypeVersion = version; 103 break; 104 default: 105 break; 106 } 92 recordTypeIds.put(scope, id); 93 recordTypeVersions.put(scope, version); 107 94 } 108 95 109 96 public String getRecordTypeId(Scope scope) { 110 switch (scope) { 111 case NON_VERSIONABLE: 112 return nonVersionableRecordTypeId; 113 case VERSIONABLE: 114 return versionableRecordTypeId; 115 case VERSIONABLE_MUTABLE: 116 return versionableMutableRecordTypeId; 117 default: 118 return null; 119 } 97 return recordTypeIds.get(scope); 120 98 } 121 99 122 100 public Long getRecordTypeVersion(Scope scope) { 123 switch (scope) { 124 case NON_VERSIONABLE: 125 return nonVersionableRecordTypeVersion; 126 case VERSIONABLE: 127 return versionableRecordTypeVersion; 128 case VERSIONABLE_MUTABLE: 129 return versionableMutableRecordTypeVersion; 130 default: 131 return null; 132 } 133 } 134 135 public void setField(Scope scope, String fieldId, Object value) { 136 switch (scope) { 137 case NON_VERSIONABLE: 138 this.nonVersionableFields.put(fieldId, value); 139 break; 140 case VERSIONABLE: 141 this.versionableFields.put(fieldId, value); 142 break; 143 case VERSIONABLE_MUTABLE: 144 this.versionableMutableFields.put(fieldId, value); 145 break; 146 default: 147 break; 148 } 149 } 150 151 public Object getField(Scope scope, String fieldId) throws FieldNotFoundException { 152 Object field = null; 153 switch (scope) { 154 case NON_VERSIONABLE: 155 field = nonVersionableFields.get(fieldId); 156 break; 157 case VERSIONABLE: 158 field = versionableFields.get(fieldId); 159 break; 160 case VERSIONABLE_MUTABLE: 161 field = versionableMutableFields.get(fieldId); 162 break; 163 default: 164 break; 165 } 101 return recordTypeVersions.get(scope); 102 } 103 104 public void setField(Scope scope, String name, Object value) { 105 fields.get(scope).put(name, value); 106 } 107 108 public Object getField(Scope scope, String name) throws FieldNotFoundException { 109 Object field = fields.get(scope).get(name); 166 110 if (field == null) { 167 throw new FieldNotFoundException( fieldId);111 throw new FieldNotFoundException(name); 168 112 } 169 113 return field; … … 171 115 172 116 public Map<String, Object> getFields(Scope scope) { 173 switch (scope) { 174 case NON_VERSIONABLE: 175 return nonVersionableFields; 176 case VERSIONABLE: 177 return versionableFields; 178 case VERSIONABLE_MUTABLE: 179 return versionableMutableFields; 180 default: 181 return null; 182 } 117 return fields.get(scope); 183 118 } 184 119 185 120 public List<String> getFieldsToDelete(Scope scope) { 186 switch (scope) { 187 case NON_VERSIONABLE: 188 return nonVersionableFieldsToDelete; 189 case VERSIONABLE: 190 return versionableFieldsToDelete; 191 case VERSIONABLE_MUTABLE: 192 return versionableMutableFieldsToDelete; 193 default: 194 return null; 195 } 196 } 197 198 public void addFieldsToDelete(Scope scope, List<String> fieldIds) { 199 switch (scope) { 200 case NON_VERSIONABLE: 201 this.nonVersionableFieldsToDelete .addAll(fieldIds); 202 break; 203 case VERSIONABLE: 204 this.versionableFieldsToDelete .addAll(fieldIds); 205 break; 206 case VERSIONABLE_MUTABLE: 207 this.versionableMutableFieldsToDelete .addAll(fieldIds); 208 break; 209 default: 210 break; 211 } 212 } 213 214 public void removeFieldsToDelete(Scope scope, List<String> fieldIds) { 215 switch (scope) { 216 case NON_VERSIONABLE: 217 this.nonVersionableFieldsToDelete .removeAll(fieldIds); 218 break; 219 case VERSIONABLE: 220 this.versionableFieldsToDelete .removeAll(fieldIds); 221 break; 222 case VERSIONABLE_MUTABLE: 223 this.versionableMutableFieldsToDelete .removeAll(fieldIds); 224 break; 225 default: 226 break; 227 } 121 return fieldsToDelete.get(scope); 122 } 123 124 public void addFieldsToDelete(Scope scope, List<String> names) { 125 fieldsToDelete.get(scope).addAll(names); 126 } 127 128 public void removeFieldsToDelete(Scope scope, List<String> names) { 129 fieldsToDelete.get(scope).removeAll(names); 228 130 } 229 131 … … 234 136 record.recordTypeId = recordTypeId; 235 137 record.recordTypeVersion = recordTypeVersion; 236 record.nonVersionableRecordTypeId = nonVersionableRecordTypeId; 237 record.nonVersionableRecordTypeVersion = nonVersionableRecordTypeVersion; 238 record.versionableRecordTypeId = versionableRecordTypeId; 239 record.versionableRecordTypeVersion = versionableRecordTypeVersion; 240 record.versionableMutableRecordTypeId = versionableMutableRecordTypeId; 241 record.versionableMutableRecordTypeVersion = versionableMutableRecordTypeVersion; 242 record.nonVersionableFields.putAll(nonVersionableFields); 243 record.versionableFields.putAll(versionableFields); 244 record.versionableMutableFields.putAll(versionableMutableFields); 245 record.nonVersionableFieldsToDelete.addAll(nonVersionableFieldsToDelete); 246 record.versionableFieldsToDelete.addAll(versionableFieldsToDelete); 247 record.versionableMutableFieldsToDelete.addAll(versionableMutableFieldsToDelete); 138 record.recordTypeIds.putAll(recordTypeIds); 139 record.recordTypeVersions.putAll(recordTypeVersions); 140 for (Scope scope : Scope.values()) { 141 record.fields.get(scope).putAll(fields.get(scope)); 142 record.fieldsToDelete.get(scope).addAll(fieldsToDelete.get(scope)); 143 } 248 144 return record; 249 145 } … … 253 149 final int prime = 31; 254 150 int result = 1; 151 result = prime * result + ((fields == null) ? 0 : fields.hashCode()); 152 result = prime * result + ((fieldsToDelete == null) ? 0 : fieldsToDelete.hashCode()); 255 153 result = prime * result + ((id == null) ? 0 : id.hashCode()); 256 result = prime * result + ((nonVersionableFields == null) ? 0 : nonVersionableFields.hashCode());257 result = prime * result258 + ((nonVersionableFieldsToDelete == null) ? 0 : nonVersionableFieldsToDelete.hashCode());259 result = prime * result + ((nonVersionableRecordTypeId == null) ? 0 : nonVersionableRecordTypeId.hashCode());260 result = prime * result261 + ((nonVersionableRecordTypeVersion == null) ? 0 : nonVersionableRecordTypeVersion.hashCode());262 154 result = prime * result + ((recordTypeId == null) ? 0 : recordTypeId.hashCode()); 155 result = prime * result + ((recordTypeIds == null) ? 0 : recordTypeIds.hashCode()); 263 156 result = prime * result + ((recordTypeVersion == null) ? 0 : recordTypeVersion.hashCode()); 157 result = prime * result + ((recordTypeVersions == null) ? 0 : recordTypeVersions.hashCode()); 264 158 result = prime * result + ((version == null) ? 0 : version.hashCode()); 265 result = prime * result + ((versionableFields == null) ? 0 : versionableFields.hashCode());266 result = prime * result + ((versionableFieldsToDelete == null) ? 0 : versionableFieldsToDelete.hashCode());267 result = prime * result + ((versionableMutableFields == null) ? 0 : versionableMutableFields.hashCode());268 result = prime269 * result270 + ((versionableMutableFieldsToDelete == null) ? 0 : versionableMutableFieldsToDelete.hashCode());271 result = prime * result272 + ((versionableMutableRecordTypeId == null) ? 0 : versionableMutableRecordTypeId.hashCode());273 result = prime274 * result275 + ((versionableMutableRecordTypeVersion == null) ? 0 : versionableMutableRecordTypeVersion276 .hashCode());277 result = prime * result + ((versionableRecordTypeId == null) ? 0 : versionableRecordTypeId.hashCode());278 result = prime * result279 + ((versionableRecordTypeVersion == null) ? 0 : versionableRecordTypeVersion.hashCode());280 159 return result; 281 160 } … … 290 169 return false; 291 170 RecordImpl other = (RecordImpl) obj; 171 if (fields == null) { 172 if (other.fields != null) 173 return false; 174 } else if (!fields.equals(other.fields)) 175 return false; 176 if (fieldsToDelete == null) { 177 if (other.fieldsToDelete != null) 178 return false; 179 } else if (!fieldsToDelete.equals(other.fieldsToDelete)) 180 return false; 292 181 if (id == null) { 293 182 if (other.id != null) … … 295 184 } else if (!id.equals(other.id)) 296 185 return false; 297 if (nonVersionableFields == null) {298 if (other.nonVersionableFields != null)299 return false;300 } else if (!nonVersionableFields.equals(other.nonVersionableFields))301 return false;302 if (nonVersionableFieldsToDelete == null) {303 if (other.nonVersionableFieldsToDelete != null)304 return false;305 } else if (!nonVersionableFieldsToDelete.equals(other.nonVersionableFieldsToDelete))306 return false;307 if (nonVersionableRecordTypeId == null) {308 if (other.nonVersionableRecordTypeId != null)309 return false;310 } else if (!nonVersionableRecordTypeId.equals(other.nonVersionableRecordTypeId))311 return false;312 if (nonVersionableRecordTypeVersion == null) {313 if (other.nonVersionableRecordTypeVersion != null)314 return false;315 } else if (!nonVersionableRecordTypeVersion.equals(other.nonVersionableRecordTypeVersion))316 return false;317 186 if (recordTypeId == null) { 318 187 if (other.recordTypeId != null) … … 320 189 } else if (!recordTypeId.equals(other.recordTypeId)) 321 190 return false; 191 if (recordTypeIds == null) { 192 if (other.recordTypeIds != null) 193 return false; 194 } else if (!recordTypeIds.equals(other.recordTypeIds)) 195 return false; 322 196 if (recordTypeVersion == null) { 323 197 if (other.recordTypeVersion != null) … … 325 199 } else if (!recordTypeVersion.equals(other.recordTypeVersion)) 326 200 return false; 201 if (recordTypeVersions == null) { 202 if (other.recordTypeVersions != null) 203 return false; 204 } else if (!recordTypeVersions.equals(other.recordTypeVersions)) 205 return false; 327 206 if (version == null) { 328 207 if (other.version != null) 329 208 return false; 330 209 } else if (!version.equals(other.version)) 331 return false;332 if (versionableFields == null) {333 if (other.versionableFields != null)334 return false;335 } else if (!versionableFields.equals(other.versionableFields))336 return false;337 if (versionableFieldsToDelete == null) {338 if (other.versionableFieldsToDelete != null)339 return false;340 } else if (!versionableFieldsToDelete.equals(other.versionableFieldsToDelete))341 return false;342 if (versionableMutableFields == null) {343 if (other.versionableMutableFields != null)344 return false;345 } else if (!versionableMutableFields.equals(other.versionableMutableFields))346 return false;347 if (versionableMutableFieldsToDelete == null) {348 if (other.versionableMutableFieldsToDelete != null)349 return false;350 } else if (!versionableMutableFieldsToDelete.equals(other.versionableMutableFieldsToDelete))351 return false;352 if (versionableMutableRecordTypeId == null) {353 if (other.versionableMutableRecordTypeId != null)354 return false;355 } else if (!versionableMutableRecordTypeId.equals(other.versionableMutableRecordTypeId))356 return false;357 if (versionableMutableRecordTypeVersion == null) {358 if (other.versionableMutableRecordTypeVersion != null)359 return false;360 } else if (!versionableMutableRecordTypeVersion.equals(other.versionableMutableRecordTypeVersion))361 return false;362 if (versionableRecordTypeId == null) {363 if (other.versionableRecordTypeId != null)364 return false;365 } else if (!versionableRecordTypeId.equals(other.versionableRecordTypeId))366 return false;367 if (versionableRecordTypeVersion == null) {368 if (other.versionableRecordTypeVersion != null)369 return false;370 } else if (!versionableRecordTypeVersion.equals(other.versionableRecordTypeVersion))371 210 return false; 372 211 return true; … … 376 215 public String toString() { 377 216 return "RecordImpl [id=" + id + ", version=" + version + ", recordTypeId=" + recordTypeId 378 + ", recordTypeVersion=" + recordTypeVersion + ", nonVersionableRecordTypeId=" 379 + nonVersionableRecordTypeId + ", nonVersionableRecordTypeVersion=" 380 + nonVersionableRecordTypeVersion + ", versionableMutableRecordTypeId=" 381 + versionableMutableRecordTypeId + ", versionableMutableRecordTypeVersion=" 382 + versionableMutableRecordTypeVersion + ", versionableRecordTypeId=" + versionableRecordTypeId 383 + ", versionableRecordTypeVersion=" + versionableRecordTypeVersion + ", nonVersionableFields=" 384 + nonVersionableFields + ", nonVersionableFieldsToDelete=" + nonVersionableFieldsToDelete 385 + ", versionableFields=" + versionableFields + ", versionableFieldsToDelete=" 386 + versionableFieldsToDelete + ", versionableMutableFields=" + versionableMutableFields 387 + ", versionableMutableFieldsToDelete=" + versionableMutableFieldsToDelete + "]"; 217 + ", recordTypeVersion=" + recordTypeVersion + ", recordTypeIds=" + recordTypeIds 218 + ", recordTypeVersions=" + recordTypeVersions + ", fields=" + fields + ", fieldsToDelete=" 219 + fieldsToDelete + "]"; 388 220 } 389 221 } -
projects/lily/trunk/repository/impl/src/main/java/org/lilycms/repository/impl/RecordTypeImpl.java
r3978 r3981 16 16 package org.lilycms.repository.impl; 17 17 18 import java.util.HashMap; 19 import java.util.Map; 20 18 21 import org.lilycms.repository.api.RecordType; 19 22 import org.lilycms.repository.api.TypeManager; … … 24 27 private final String id; 25 28 private Long version; 26 private String nonVersionableFieldGroupId; 27 private String versionableFieldGroupId; 28 private String versionableMutableFieldGroupId; 29 private Long nonVersionableFieldGroupVersion; 30 private Long versionableFieldGroupVersion; 31 private Long versionableMutableFieldGroupVersion; 29 private Map<Scope, String> fieldGroupIds; 30 private Map<Scope, Long> fieldGroupVersions; 31 private Map<String, Long> mixins; 32 32 33 33 /** … … 37 37 public RecordTypeImpl(String id) { 38 38 this.id = id; 39 fieldGroupIds = new HashMap<Scope, String>(); 40 fieldGroupIds.put(Scope.NON_VERSIONABLE, null); 41 fieldGroupIds.put(Scope.VERSIONABLE, null); 42 fieldGroupIds.put(Scope.VERSIONABLE_MUTABLE, null); 43 fieldGroupVersions = new HashMap<Scope, Long>(); 44 fieldGroupVersions.put(Scope.NON_VERSIONABLE, null); 45 fieldGroupVersions.put(Scope.VERSIONABLE, null); 46 fieldGroupVersions.put(Scope.VERSIONABLE_MUTABLE, null); 47 mixins = new HashMap<String, Long>(); 39 48 } 40 49 … … 52 61 53 62 public String getFieldGroupId(Scope scope) { 54 switch (scope) { 55 case NON_VERSIONABLE: 56 return nonVersionableFieldGroupId; 57 case VERSIONABLE: 58 return versionableFieldGroupId; 59 case VERSIONABLE_MUTABLE: 60 return versionableMutableFieldGroupId; 61 default: 62 return null; 63 } 63 return fieldGroupIds.get(scope); 64 64 } 65 65 66 66 public Long getFieldGroupVersion(Scope scope) { 67 switch (scope) { 68 case NON_VERSIONABLE: 69 return nonVersionableFieldGroupVersion; 70 case VERSIONABLE: 71 return versionableFieldGroupVersion; 72 case VERSIONABLE_MUTABLE: 73 return versionableMutableFieldGroupVersion; 74 default: 75 return null; 76 } 67 return fieldGroupVersions.get(scope); 77 68 } 78 69 79 70 public void setFieldGroupId(Scope scope, String id) { 80 switch (scope) { 81 case NON_VERSIONABLE: 82 nonVersionableFieldGroupId = id; 83 break; 84 case VERSIONABLE: 85 versionableFieldGroupId = id; 86 break; 87 case VERSIONABLE_MUTABLE: 88 versionableMutableFieldGroupId = id; 89 break; 90 default: 91 break; 92 } 71 fieldGroupIds.put(scope, id); 93 72 } 94 73 95 74 public void setFieldGroupVersion(Scope scope, Long version) { 96 switch (scope) {97 case NON_VERSIONABLE:98 nonVersionableFieldGroupVersion = version;99 break;100 case VERSIONABLE:101 versionableFieldGroupVersion = version;102 break;103 case VERSIONABLE_MUTABLE:104 versionableMutableFieldGroupVersion = version;105 break;106 default:107 break;108 }75 fieldGroupVersions.put(scope, version); 76 } 77 78 public void addMixin(String recordTypeId, Long recordTypeVersion) { 79 mixins.put(recordTypeId, recordTypeVersion); 80 } 81 82 public void removeMixin(String recordTypeId) { 83 mixins.remove(recordTypeId); 84 } 85 86 public Map<String, Long> getMixins() { 87 return mixins; 109 88 } 110 89 … … 112 91 RecordTypeImpl clone = new RecordTypeImpl(this.id); 113 92 clone.version = this.version; 114 clone.nonVersionableFieldGroupId = this.nonVersionableFieldGroupId; 115 clone.nonVersionableFieldGroupVersion = this.nonVersionableFieldGroupVersion; 116 clone.versionableFieldGroupId = this.versionableFieldGroupId; 117 clone.versionableFieldGroupVersion = this.versionableFieldGroupVersion; 118 clone.versionableMutableFieldGroupId = this.versionableMutableFieldGroupId; 119 clone.versionableMutableFieldGroupVersion = this.versionableMutableFieldGroupVersion; 93 clone.fieldGroupIds.putAll(fieldGroupIds); 94 clone.fieldGroupVersions.putAll(fieldGroupVersions); 95 clone.mixins.putAll(mixins); 120 96 return clone; 121 97 } … … 125 101 final int prime = 31; 126 102 int result = 1; 103 result = prime * result + ((fieldGroupIds == null) ? 0 : fieldGroupIds.hashCode()); 104 result = prime * result + ((fieldGroupVersions == null) ? 0 : fieldGroupVersions.hashCode()); 127 105 result = prime * result + ((id == null) ? 0 : id.hashCode()); 128 result = prime * result + ((nonVersionableFieldGroupId == null) ? 0 : nonVersionableFieldGroupId.hashCode()); 129 result = prime * result 130 + ((nonVersionableFieldGroupVersion == null) ? 0 : nonVersionableFieldGroupVersion.hashCode()); 106 result = prime * result + ((mixins == null) ? 0 : mixins.hashCode()); 131 107 result = prime * result + ((version == null) ? 0 : version.hashCode()); 132 result = prime * result + ((versionableFieldGroupId == null) ? 0 : versionableFieldGroupId.hashCode());133 result = prime * result134 + ((versionableFieldGroupVersion == null) ? 0 : versionableFieldGroupVersion.hashCode());135 result = prime * result136 + ((versionableMutableFieldGroupId == null) ? 0 : versionableMutableFieldGroupId.hashCode());137 result = prime138 * result139 + ((versionableMutableFieldGroupVersion == null) ? 0 : versionableMutableFieldGroupVersion140 .hashCode());141 108 return result; 142 109 } … … 151 118 return false; 152 119 RecordTypeImpl other = (RecordTypeImpl) obj; 120 if (fieldGroupIds == null) { 121 if (other.fieldGroupIds != null) 122 return false; 123 } else if (!fieldGroupIds.equals(other.fieldGroupIds)) 124 return false; 125 if (fieldGroupVersions == null) { 126 if (other.fieldGroupVersions != null) 127 return false; 128 } else if (!fieldGroupVersions.equals(other.fieldGroupVersions)) 129 return false; 153 130 if (id == null) { 154 131 if (other.id != null) … … 156 133 } else if (!id.equals(other.id)) 157 134 return false; 158 if ( nonVersionableFieldGroupId== null) {159 if (other. nonVersionableFieldGroupId!= null)135 if (mixins == null) { 136 if (other.mixins != null) 160 137 return false; 161 } else if (!nonVersionableFieldGroupId.equals(other.nonVersionableFieldGroupId)) 162 return false; 163 if (nonVersionableFieldGroupVersion == null) { 164 if (other.nonVersionableFieldGroupVersion != null) 165 return false; 166 } else if (!nonVersionableFieldGroupVersion.equals(other.nonVersionableFieldGroupVersion)) 138 } else if (!mixins.equals(other.mixins)) 167 139 return false; 168 140 if (version == null) { … … 171 143 } else if (!version.equals(other.version)) 172 144 return false; 173 if (versionableFieldGroupId == null) {174 if (other.versionableFieldGroupId != null)175 return false;176 } else if (!versionableFieldGroupId.equals(other.versionableFieldGroupId))177 return false;178 if (versionableFieldGroupVersion == null) {179 if (other.versionableFieldGroupVersion != null)180 return false;181 } else if (!versionableFieldGroupVersion.equals(other.versionableFieldGroupVersion))182 return false;183 if (versionableMutableFieldGroupId == null) {184 if (other.versionableMutableFieldGroupId != null)185 return false;186 } else if (!versionableMutableFieldGroupId.equals(other.versionableMutableFieldGroupId))187 return false;188 if (versionableMutableFieldGroupVersion == null) {189 if (other.versionableMutableFieldGroupVersion != null)190 return false;191 } else if (!versionableMutableFieldGroupVersion.equals(other.versionableMutableFieldGroupVersion))192 return false;193 145 return true; 194 146 } … … 196 148 @Override 197 149 public String toString() { 198 return "RecordTypeImpl [id=" + id + ", version=" + version + ", nonVersionableFieldGroupId=" 199 + nonVersionableFieldGroupId + ", nonVersionableFieldGroupVersion=" 200 + nonVersionableFieldGroupVersion + ", versionableFieldGroupId=" + versionableFieldGroupId 201 + ", versionableFieldGroupVersion=" + versionableFieldGroupVersion 202 + ", versionableMutableFieldGroupId=" + versionableMutableFieldGroupId 203 + ", versionableMutableFieldGroupVersion=" + versionableMutableFieldGroupVersion + "]"; 150 return "RecordTypeImpl [id=" + id + ", version=" + version + ", fieldGroupIds=" + fieldGroupIds 151 + ", fieldGroupVersions=" + fieldGroupVersions + ", mixins=" + mixins + "]"; 204 152 } 153 205 154 } -
projects/lily/trunk/repository/impl/src/test/java/org/lilycms/repository/impl/test/HBaseRepositoryTest.java
r3979 r3981 81 81 82 82 private static void setupFieldDescriptors() throws Exception { 83 fieldDescriptor1 = typeManager.createFieldDescriptor(typeManager.newFieldDescriptor( "FD1", typeManager.getValueType("STRING", false, false), "GN1"));84 fieldDescriptor1B = typeManager.createFieldDescriptor(typeManager.newFieldDescriptor( "FD1B", typeManager.getValueType("STRING", false, false), "GN1B"));85 fieldDescriptor2 = typeManager.createFieldDescriptor(typeManager.newFieldDescriptor( "FD2", typeManager.getValueType("INTEGER", false, false), "GN2"));86 fieldDescriptor3 = typeManager.createFieldDescriptor(typeManager.newFieldDescriptor( "FD3", typeManager.getValueType("BOOLEAN", false, false), "GN3"));83 fieldDescriptor1 = typeManager.createFieldDescriptor(typeManager.newFieldDescriptor(typeManager.getValueType("STRING", false, false), "field1")); 84 fieldDescriptor1B = typeManager.createFieldDescriptor(typeManager.newFieldDescriptor(typeManager.getValueType("STRING", false, false), "field1B")); 85 fieldDescriptor2 = typeManager.createFieldDescriptor(typeManager.newFieldDescriptor(typeManager.getValueType("INTEGER", false, false), "field2")); 86 fieldDescriptor3 = typeManager.createFieldDescriptor(typeManager.newFieldDescriptor(typeManager.getValueType("BOOLEAN", false, false), "field3")); 87 87 } 88 88 … … 176 176 177 177 assertEquals(Long.valueOf(1), createdRecord.getVersion()); 178 assertEquals("value1", createdRecord.getField(Scope.NON_VERSIONABLE,fieldDescriptor1.get Id()));179 assertEquals(123, createdRecord.getField(Scope.VERSIONABLE,fieldDescriptor2.get Id()));180 assertTrue((Boolean)createdRecord.getField(Scope.VERSIONABLE_MUTABLE,fieldDescriptor3.get Id()));178 assertEquals("value1", createdRecord.getField(Scope.NON_VERSIONABLE,fieldDescriptor1.getName())); 179 assertEquals(123, createdRecord.getField(Scope.VERSIONABLE,fieldDescriptor2.getName())); 180 assertTrue((Boolean)createdRecord.getField(Scope.VERSIONABLE_MUTABLE,fieldDescriptor3.getName())); 181 181 assertEquals(recordType1.getId(), createdRecord.getRecordTypeId()); 182 182 assertEquals(Long.valueOf(1), createdRecord.getRecordTypeVersion()); … … 194 194 Record record = repository.newRecord(recordId); 195 195 record.setRecordType(recordType1.getId(), recordType1.getVersion()); 196 record.setField(Scope.NON_VERSIONABLE,fieldDescriptor1.get Id(), "value1");197 record.setField(Scope.VERSIONABLE,fieldDescriptor2.get Id(), 123);198 record.setField(Scope.VERSIONABLE_MUTABLE,fieldDescriptor3.get Id(), true);196 record.setField(Scope.NON_VERSIONABLE,fieldDescriptor1.getName(), "value1"); 197 record.setField(Scope.VERSIONABLE,fieldDescriptor2.getName(), 123); 198 record.setField(Scope.VERSIONABLE_MUTABLE,fieldDescriptor3.getName(), true); 199 199 return repository.create(record); 200 200 } … … 227 227 Record record = repository.newRecord(idGenerator.newRecordId()); 228 228 record.setRecordType(recordType1.getId(), null); 229 record.setField(Scope.NON_VERSIONABLE,fieldDescriptor1.get Id(), "value1");229 record.setField(Scope.NON_VERSIONABLE,fieldDescriptor1.getName(), "value1"); 230 230 Record createdRecord = repository.create(record); 231 231 assertEquals(recordType1.getId(), createdRecord.getRecordTypeId()); … … 249 249 Record variant = repository.newRecord(idGenerator.newRecordId(record.getId(), variantProperties )); 250 250 variant.setRecordType(recordType1.getId(), null); 251 variant.setField(Scope.NON_VERSIONABLE,fieldDescriptor1.get Id(), "value2");252 variant.setField(Scope.VERSIONABLE,fieldDescriptor2.get Id(), 567);253 variant.setField(Scope.VERSIONABLE_MUTABLE,fieldDescriptor3.get Id(), false);251 variant.setField(Scope.NON_VERSIONABLE,fieldDescriptor1.getName(), "value2"); 252 variant.setField(Scope.VERSIONABLE,fieldDescriptor2.getName(), 567); 253 variant.setField(Scope.VERSIONABLE_MUTABLE,fieldDescriptor3.getName(), false); 254 254 255 255 Record createdVariant = repository.create(variant); 256 256 257 257 assertEquals(Long.valueOf(1), createdVariant.getVersion()); 258 assertEquals("value2", createdVariant.getField(Scope.NON_VERSIONABLE,fieldDescriptor1.get Id()));259 assertEquals(567, createdVariant.getField(Scope.VERSIONABLE,fieldDescriptor2.get Id()));260 assertFalse((Boolean)createdVariant.getField(Scope.VERSIONABLE_MUTABLE,fieldDescriptor3.get Id()));258 assertEquals("value2", createdVariant.getField(Scope.NON_VERSIONABLE,fieldDescriptor1.getName())); 259 assertEquals(567, createdVariant.getField(Scope.VERSIONABLE,fieldDescriptor2.getName())); 260 assertFalse((Boolean)createdVariant.getField(Scope.VERSIONABLE_MUTABLE,fieldDescriptor3.getName())); 261 261 262 262 assertEquals(createdVariant, repository.read(variant.getId())); … … 267 267 Record record = createDefaultRecord(idGenerator.newRecordId()); 268 268 Record updateRecord = record.clone(); 269 updateRecord.setField(Scope.NON_VERSIONABLE,fieldDescriptor1.get Id(), "value2");270 updateRecord.setField(Scope.VERSIONABLE,fieldDescriptor2.get Id(), 789);271 updateRecord.setField(Scope.VERSIONABLE_MUTABLE,fieldDescriptor3.get Id(), false);269 updateRecord.setField(Scope.NON_VERSIONABLE,fieldDescriptor1.getName(), "value2"); 270 updateRecord.setField(Scope.VERSIONABLE,fieldDescriptor2.getName(), 789); 271 updateRecord.setField(Scope.VERSIONABLE_MUTABLE,fieldDescriptor3.getName(), false); 272 272 273 273 Record updatedRecord = repository.update(updateRecord); 274 274 275 275 assertEquals(Long.valueOf(2), updatedRecord.getVersion()); 276 assertEquals("value2", updatedRecord.getField(Scope.NON_VERSIONABLE,fieldDescriptor1.get Id()));277 assertEquals(789, updatedRecord.getField(Scope.VERSIONABLE,fieldDescriptor2.get Id()));278 assertEquals(false, updatedRecord.getField(Scope.VERSIONABLE_MUTABLE,fieldDescriptor3.get Id()));276 assertEquals("value2", updatedRecord.getField(Scope.NON_VERSIONABLE,fieldDescriptor1.getName())); 277 assertEquals(789, updatedRecord.getField(Scope.VERSIONABLE,fieldDescriptor2.getName())); 278 assertEquals(false, updatedRecord.getField(Scope.VERSIONABLE_MUTABLE,fieldDescriptor3.getName())); 279 279 280 280 assertEquals(updatedRecord, repository.read(record.getId())); … … 286 286 Record updateRecord = repository.newRecord(record.getId()); 287 287 updateRecord.setRecordType(record.getRecordTypeId(), record.getRecordTypeVersion()); 288 updateRecord.setField(Scope.NON_VERSIONABLE,fieldDescriptor1.get Id(), "value2");288 updateRecord.setField(Scope.NON_VERSIONABLE,fieldDescriptor1.getName(), "value2"); 289 289 290 290 Record updatedRecord = repository.update(updateRecord); 291 291 292 292 assertEquals(Long.valueOf(1), updatedRecord.getVersion()); 293 assertEquals("value2", updatedRecord.getField(Scope.NON_VERSIONABLE,fieldDescriptor1.getId())); 293 assertEquals("value2", updatedRecord.getField(Scope.NON_VERSIONABLE,fieldDescriptor1.getName())); 294 try { 295 updatedRecord.getField(Scope.VERSIONABLE,fieldDescriptor2.getName()); 296 fail(); 297 } catch (FieldNotFoundException expected) { 298 } 299 try { 300 updatedRecord.getField(Scope.VERSIONABLE_MUTABLE,fieldDescriptor3.getName()); 301 fail(); 302 } catch (FieldNotFoundException expected) { 303 } 304 305 updatedRecord = repository.read(record.getId()); 306 assertEquals("value2", updatedRecord.getField(Scope.NON_VERSIONABLE,fieldDescriptor1.getName())); 307 assertEquals(123, updatedRecord.getField(Scope.VERSIONABLE,fieldDescriptor2.getName())); 308 assertEquals(true, updatedRecord.getField(Scope.VERSIONABLE_MUTABLE,fieldDescriptor3.getName())); 309 } 310 311 @Test 312 public void testEmptyUpdate() throws Exception { 313 Record record = createDefaultRecord(idGenerator.newRecordId()); 314 Record updateRecord = repository.newRecord(record.getId()); 315 updateRecord.setRecordType(record.getRecordTypeId(), record.getRecordTypeVersion()); 316 317 Record updatedRecord = repository.update(updateRecord); 318 319 assertEquals(Long.valueOf(1), updatedRecord.getVersion()); 320 try { 321 updatedRecord.getField(Scope.NON_VERSIONABLE,fieldDescriptor1.getId()); 322 fail(); 323 } catch (FieldNotFoundException expected) { 324 } 294 325 try { 295 326 updatedRecord.getField(Scope.VERSIONABLE,fieldDescriptor2.getId()); … … 303 334 } 304 335 305 updatedRecord = repository.read(record.getId()); 306 assertEquals("value2", updatedRecord.getField(Scope.NON_VERSIONABLE,fieldDescriptor1.getId())); 307 assertEquals(123, updatedRecord.getField(Scope.VERSIONABLE,fieldDescriptor2.getId())); 308 assertEquals(true, updatedRecord.getField(Scope.VERSIONABLE_MUTABLE,fieldDescriptor3.getId())); 309 } 310 311 @Test 312 public void testEmptyUpdate() throws Exception { 313 Record record = createDefaultRecord(idGenerator.newRecordId()); 314 Record updateRecord = repository.newRecord(record.getId()); 315 updateRecord.setRecordType(record.getRecordTypeId(), record.getRecordTypeVersion()); 336 assertEquals(record, repository.read(record.getId())); 337 } 338 339 @Test 340 public void testIdempotentUpdate() throws Exception { 341 Record record = createDefaultRecord(idGenerator.newRecordId()); 342 Record updateRecord = record.clone(); 316 343 317 344 Record updatedRecord = repository.update(updateRecord); 318 345 319 346 assertEquals(Long.valueOf(1), updatedRecord.getVersion()); 320 try { 321 updatedRecord.getField(Scope.NON_VERSIONABLE,fieldDescriptor1.getId()); 322 fail(); 323 } catch (FieldNotFoundException expected) { 324 } 325 try { 326 updatedRecord.getField(Scope.VERSIONABLE,fieldDescriptor2.getId()); 327 fail(); 328 } catch (FieldNotFoundException expected) { 329 } 330 try { 331 updatedRecord.getField(Scope.VERSIONABLE_MUTABLE,fieldDescriptor3.getId()); 332 fail(); 333 } catch (FieldNotFoundException expected) { 334 } 335 336 assertEquals(record, repository.read(record.getId())); 337 } 338 339 @Test 340 public void testIdempotentUpdate() throws Exception { 341 Record record = createDefaultRecord(idGenerator.newRecordId()); 342 Record updateRecord = record.clone(); 343 344 Record updatedRecord = repository.update(updateRecord); 345 346 assertEquals(Long.valueOf(1), updatedRecord.getVersion()); 347 assertEquals("value1", updatedRecord.getField(Scope.NON_VERSIONABLE,fieldDescriptor1.getId())); 348 assertEquals(123, updatedRecord.getField(Scope.VERSIONABLE,fieldDescriptor2.getId())); 349 assertEquals(true, updatedRecord.getField(Scope.VERSIONABLE_MUTABLE,fieldDescriptor3.getId())); 347 assertEquals("value1", updatedRecord.getField(Scope.NON_VERSIONABLE,fieldDescriptor1.getName())); 348 assertEquals(123, updatedRecord.getField(Scope.VERSIONABLE,fieldDescriptor2.getName())); 349 assertEquals(true, updatedRecord.getField(Scope.VERSIONABLE_MUTABLE,fieldDescriptor3.getName())); 350 350 351 351 assertEquals(record, repository.read(record.getId())); … … 357 357 Record updateRecord = record.clone(); 358 358 updateRecord.setVersion(Long.valueOf(99)); 359 updateRecord.setField(Scope.NON_VERSIONABLE,fieldDescriptor1.get Id(), "value2");359 updateRecord.setField(Scope.NON_VERSIONABLE,fieldDescriptor1.getName(), "value2"); 360 360 361 361 Record updatedRecord = repository.update(updateRecord); … … 371 371 Record updateRecord = repository.newRecord(record.getId()); 372 372 updateRecord.setRecordType(record.getRecordTypeId(), null); 373 updateRecord.setField(Scope.NON_VERSIONABLE,fieldDescriptor1.get Id(), "aNewValue");373 updateRecord.setField(Scope.NON_VERSIONABLE,fieldDescriptor1.getName(), "aNewValue"); 374 374 repository.update(updateRecord); 375 375 376 376 Record readRecord = repository.read(record.getId()); 377 377 assertEquals(Long.valueOf(1), readRecord.getVersion()); 378 assertEquals("aNewValue", readRecord.getField(Scope.NON_VERSIONABLE,fieldDescriptor1.get Id()));378 assertEquals("aNewValue", readRecord.getField(Scope.NON_VERSIONABLE,fieldDescriptor1.getName())); 379 379 } 380 380 … … 384 384 Record record = createDefaultRecord(idGenerator.newRecordId()); 385 385 Record updateRecord = record.clone(); 386 updateRecord.setField(Scope.NON_VERSIONABLE,fieldDescriptor1.get Id(), "value2");387 updateRecord.setField(Scope.VERSIONABLE,fieldDescriptor2.get Id(), 789);388 updateRecord.setField(Scope.VERSIONABLE_MUTABLE,fieldDescriptor3.get Id(), false);386 updateRecord.setField(Scope.NON_VERSIONABLE,fieldDescriptor1.getName(), "value2"); 387 updateRecord.setField(Scope.VERSIONABLE,fieldDescriptor2.getName(), 789); 388 updateRecord.setField(Scope.VERSIONABLE_MUTABLE,fieldDescriptor3.getName(), false); 389 389 390 390 repository.update(updateRecord); 391 391 392 record.setField(Scope.NON_VERSIONABLE,fieldDescriptor1.get Id(), "value2");392 record.setField(Scope.NON_VERSIONABLE,fieldDescriptor1.getName(), "value2"); 393 393 assertEquals(record, repository.read(record.getId(), Long.valueOf(1))); 394 394 } … … 426 426 Record updateRecord = repository.newRecord(record.getId()); 427 427 updateRecord.setRecordType(recordType1B.getId(), recordType1B.getVersion()); 428 updateRecord.setField(Scope.NON_VERSIONABLE,fieldDescriptor1.get Id(), "value2");429 updateRecord.setField(Scope.VERSIONABLE,fieldDescriptor2.get Id(), 789);430 updateRecord.setField(Scope.VERSIONABLE_MUTABLE,fieldDescriptor3.get Id(), false);428 updateRecord.setField(Scope.NON_VERSIONABLE,fieldDescriptor1.getName(), "value2"); 429 updateRecord.setField(Scope.VERSIONABLE,fieldDescriptor2.getName(), 789); 430 updateRecord.setField(Scope.VERSIONABLE_MUTABLE,fieldDescriptor3.getName(), false); 431 431 432 432 Record updatedRecord = repository.update(updateRecord); … … 456 456 Record updateRecord = repository.newRecord(record.getId()); 457 457 updateRecord.setRecordType(recordType1B.getId(), recordType1B.getVersion()); 458 updateRecord.setField(Scope.VERSIONABLE,fieldDescriptor2.get Id(), 789);458 updateRecord.setField(Scope.VERSIONABLE,fieldDescriptor2.getName(), 789); 459 459 460 460 Record updatedRecord = repository.update(updateRecord); … … 480 480 Record updateRecord = repository.newRecord(record.getId()); 481 481 updateRecord.setRecordType(recordType2.getId(), recordType2.getVersion()); 482 updateRecord.setField(Scope.NON_VERSIONABLE,fieldDescriptor2.get Id(), 789);483 updateRecord.setField(Scope.VERSIONABLE,fieldDescriptor3.get Id(), false);484 updateRecord.setField(Scope.VERSIONABLE_MUTABLE,fieldDescriptor1.get Id(), "value2");482 updateRecord.setField(Scope.NON_VERSIONABLE,fieldDescriptor2.getName(), 789); 483 updateRecord.setField(Scope.VERSIONABLE,fieldDescriptor3.getName(), false); 484 updateRecord.setField(Scope.VERSIONABLE_MUTABLE,fieldDescriptor1.getName(), "value2"); 485 485 486 486 Record updatedRecord = repository.update(updateRecord); … … 503 503 assertEquals(2, readRecord.getFields(Scope.VERSIONABLE).size()); 504 504 assertEquals(2, readRecord.getFields(Scope.VERSIONABLE_MUTABLE).size()); 505 assertEquals("value1", readRecord.getField(Scope.NON_VERSIONABLE,fieldDescriptor1.getId())); 506 assertEquals(789, readRecord.getField(Scope.NON_VERSIONABLE,fieldDescriptor2.getId())); 507 assertEquals(123, readRecord.getField(Scope.VERSIONABLE,fieldDescriptor2.getId())); 508 assertFalse((Boolean)readRecord.getField(Scope.VERSIONABLE,fieldDescriptor3.getId())); 509 assertTrue((Boolean)readRecord.getField(Scope.VERSIONABLE_MUTABLE,fieldDescriptor3.getId())); 510 assertEquals("value2", readRecord.getField(Scope.VERSIONABLE_MUTABLE,fieldDescriptor1.getId())); 511 505 assertEquals("value1", readRecord.getField(Scope.NON_VERSIONABLE,fieldDescriptor1.getName())); 506 assertEquals(789, readRecord.getField(Scope.NON_VERSIONABLE,fieldDescriptor2.getName())); 507 assertEquals(123, readRecord.getField(Scope.VERSIONABLE,fieldDescriptor2.getName())); 508 assertFalse((Boolean)readRecord.getField(Scope.VERSIONABLE,fieldDescriptor3.getName())); 509 assertTrue((Boolean)readRecord.getField(Scope.VERSIONABLE_MUTABLE,fieldDescriptor3.getName())); 510 assertEquals("value2", readRecord.getField(Scope.VERSIONABLE_MUTABLE,fieldDescriptor1.getName())); 512 511 } 513 512 … … 517 516 Record deleteRecord = repository.newRecord(record.getId()); 518 517 deleteRecord.setRecordType(record.getRecordTypeId(), null); 519 deleteRecord.addFieldsToDelete(Scope.NON_VERSIONABLE,Arrays.asList(new String[]{fieldDescriptor1.get Id()}));520 deleteRecord.addFieldsToDelete(Scope.VERSIONABLE,Arrays.asList(new String[]{fieldDescriptor2.get Id()}));521 deleteRecord.addFieldsToDelete(Scope.VERSIONABLE_MUTABLE,Arrays.asList(new String[]{fieldDescriptor3.get Id()}));518 deleteRecord.addFieldsToDelete(Scope.NON_VERSIONABLE,Arrays.asList(new String[]{fieldDescriptor1.getName()})); 519 deleteRecord.addFieldsToDelete(Scope.VERSIONABLE,Arrays.asList(new String[]{fieldDescriptor2.getName()})); 520 deleteRecord.addFieldsToDelete(Scope.VERSIONABLE_MUTABLE,Arrays.asList(new String[]{fieldDescriptor3.getName()})); 522 521 523 522 repository.update(deleteRecord); … … 533 532 Record updateRecord = repository.newRecord(record.getId()); 534 533 updateRecord.setRecordType(recordType2.getId(), recordType2.getVersion()); 535 updateRecord.setField(Scope.NON_VERSIONABLE,fieldDescriptor2.get Id(), 789);536 updateRecord.setField(Scope.VERSIONABLE,fieldDescriptor3.get Id(), false);537 updateRecord.setField(Scope.VERSIONABLE_MUTABLE,fieldDescriptor1.get Id(), "value2");534 updateRecord.setField(Scope.NON_VERSIONABLE,fieldDescriptor2.getName(), 789); 535 updateRecord.setField(Scope.VERSIONABLE,fieldDescriptor3.getName(), false); 536 updateRecord.setField(Scope.VERSIONABLE_MUTABLE,fieldDescriptor1.getName(), "value2"); 538 537 539 538 repository.update(updateRecord); 540 539 541 540 Record deleteRecord = repository.newRecord(record.getId()); 542 deleteRecord.setRecordType(recordType 2.getId(), recordType2.getVersion());543 deleteRecord.addFieldsToDelete(Scope.NON_VERSIONABLE,Arrays.asList(new String[]{fieldDescriptor1.get Id()}));541 deleteRecord.setRecordType(recordType1.getId(), recordType1.getVersion()); 542 deleteRecord.addFieldsToDelete(Scope.NON_VERSIONABLE,Arrays.asList(new String[]{fieldDescriptor1.getName()})); 544 543 repository.update(deleteRecord); 545 544 … … 548 547 assertEquals(1, readRecord.getFields(Scope.NON_VERSIONABLE).size()); 549 548 try { 550 readRecord.getField(Scope.NON_VERSIONABLE,fieldDescriptor1.get Id());551 fail(); 552 } catch (FieldNotFoundException expected) { 553 } 554 assertEquals("value2", readRecord.getField(Scope.VERSIONABLE_MUTABLE,fieldDescriptor1.get Id()));555 assertEquals(789, readRecord.getField(Scope.NON_VERSIONABLE,fieldDescriptor2.get Id()));556 557 deleteRecord.addFieldsToDelete(Scope.VERSIONABLE,Arrays.asList(new String[]{fieldDescriptor2.get Id()}));558 deleteRecord.addFieldsToDelete(Scope.VERSIONABLE_MUTABLE, Arrays.asList(new String[]{fieldDescriptor3.get Id()}));549 readRecord.getField(Scope.NON_VERSIONABLE,fieldDescriptor1.getName()); 550 fail(); 551 } catch (FieldNotFoundException expected) { 552 } 553 assertEquals("value2", readRecord.getField(Scope.VERSIONABLE_MUTABLE,fieldDescriptor1.getName())); 554 assertEquals(789, readRecord.getField(Scope.NON_VERSIONABLE,fieldDescriptor2.getName())); 555 556 deleteRecord.addFieldsToDelete(Scope.VERSIONABLE,Arrays.asList(new String[]{fieldDescriptor2.getName()})); 557 deleteRecord.addFieldsToDelete(Scope.VERSIONABLE_MUTABLE, Arrays.asList(new String[]{fieldDescriptor3.getName()})); 559 558 repository.update(deleteRecord); 560 559 … … 564 563 assertEquals(1, readRecord.getFields(Scope.VERSIONABLE).size()); 565 564 assertEquals(1, readRecord.getFields(Scope.VERSIONABLE_MUTABLE).size()); 566 assertEquals(789, readRecord.getField(Scope.NON_VERSIONABLE,fieldDescriptor2.get Id()));567 assertEquals(false, readRecord.getField(Scope.VERSIONABLE,fieldDescriptor3.get Id()));568 assertEquals("value2", readRecord.getField(Scope.VERSIONABLE_MUTABLE,fieldDescriptor1.get Id()));565 assertEquals(789, readRecord.getField(Scope.NON_VERSIONABLE,fieldDescriptor2.getName())); 566 assertEquals(false, readRecord.getField(Scope.VERSIONABLE,fieldDescriptor3.getName())); 567 assertEquals("value2", readRecord.getField(Scope.VERSIONABLE_MUTABLE,fieldDescriptor1.getName())); 569 568 } 570 569 … … 574 573 Record deleteRecord = repository.newRecord(record.getId()); 575 574 deleteRecord.setRecordType(record.getRecordTypeId(), record.getRecordTypeVersion()); 576 deleteRecord.addFieldsToDelete(Scope.VERSIONABLE,Arrays.asList(new String[]{fieldDescriptor2.get Id()}));575 deleteRecord.addFieldsToDelete(Scope.VERSIONABLE,Arrays.asList(new String[]{fieldDescriptor2.getName()})); 577 576 repository.update(deleteRecord); 578 577 579 578 Record updateRecord = repository.newRecord(record.getId()); 580 579 updateRecord.setRecordType(record.getRecordTypeId(), record.getRecordTypeVersion()); 581 updateRecord.setField(Scope.VERSIONABLE,fieldDescriptor2.get Id(), 789);580 updateRecord.setField(Scope.VERSIONABLE,fieldDescriptor2.getName(), 789); 582 581 repository.update(updateRecord); 583 582 584 583 Record readRecord = repository.read(record.getId()); 585 584 assertEquals(Long.valueOf(3), readRecord.getVersion()); 586 assertEquals(789, readRecord.getField(Scope.VERSIONABLE,fieldDescriptor2.get Id()));585 assertEquals(789, readRecord.getField(Scope.VERSIONABLE,fieldDescriptor2.getName())); 587 586 588 587 readRecord = repository.read(record.getId(), Long.valueOf(2)); 589 588 try { 590 readRecord.getField(Scope.VERSIONABLE,fieldDescriptor2.get Id());589 readRecord.getField(Scope.VERSIONABLE,fieldDescriptor2.getName()); 591 590 fail(); 592 591 } catch (FieldNotFoundException expected) { … … 594 593 595 594 readRecord = repository.read(record.getId(), Long.valueOf(1)); 596 assertEquals(123, readRecord.getField(Scope.VERSIONABLE,fieldDescriptor2.get Id()));595 assertEquals(123, readRecord.getField(Scope.VERSIONABLE,fieldDescriptor2.getName())); 597 596 } 598 597 … … 602 601 Record updateRecord = repository.newRecord(record.getId()); 603 602 updateRecord.setRecordType(record.getRecordTypeId(), record.getRecordTypeVersion()); 604 updateRecord.setField(Scope.VERSIONABLE,fieldDescriptor2.get Id(), 999);605 updateRecord.addFieldsToDelete(Scope.NON_VERSIONABLE,Arrays.asList(new String[]{fieldDescriptor1.get Id()}));603 updateRecord.setField(Scope.VERSIONABLE,fieldDescriptor2.getName(), 999); 604 updateRecord.addFieldsToDelete(Scope.NON_VERSIONABLE,Arrays.asList(new String[]{fieldDescriptor1.getName()})); 606 605 repository.update(updateRecord); 607 606 608 607 Record readRecord = repository.read(record.getId()); 609 assertEquals(999, readRecord.getField(Scope.VERSIONABLE,fieldDescriptor2.get Id()));610 try { 611 readRecord.getField(Scope.NON_VERSIONABLE,fieldDescriptor1.get Id());608 assertEquals(999, readRecord.getField(Scope.VERSIONABLE,fieldDescriptor2.getName())); 609 try { 610 readRecord.getField(Scope.NON_VERSIONABLE,fieldDescriptor1.getName()); 612 611 fail(); 613 612 } catch (FieldNotFoundException expected) { … … 616 615 readRecord = repository.read(record.getId(), Long.valueOf(1)); 617 616 try { 618 readRecord.getField(Scope.NON_VERSIONABLE,fieldDescriptor1.get Id());617 readRecord.getField(Scope.NON_VERSIONABLE,fieldDescriptor1.getName()); 619 618 fail(); 620 619 } catch (FieldNotFoundException expected) { … … 628 627 Record updateRecord = repository.newRecord(record.getId()); 629 628 updateRecord.setRecordType(record.getRecordTypeId(), record.getRecordTypeVersion()); 630 updateRecord.setField(Scope.VERSIONABLE,fieldDescriptor2.get Id(), 789);631 updateRecord.addFieldsToDelete(Scope.VERSIONABLE,Arrays.asList(new String[]{fieldDescriptor2.get Id()}));629 updateRecord.setField(Scope.VERSIONABLE,fieldDescriptor2.getName(), 789); 630 updateRecord.addFieldsToDelete(Scope.VERSIONABLE,Arrays.asList(new String[]{fieldDescriptor2.getName()})); 632 631 repository.update(updateRecord); 633 632 634 633 try { 635 repository.read(record.getId()).getField(Scope.VERSIONABLE,fieldDescriptor2.get Id());634 repository.read(record.getId()).getField(Scope.VERSIONABLE,fieldDescriptor2.getName()); 636 635 fail(); 637 636 } catch (FieldNotFoundException expected) { … … 654 653 Record record = createDefaultRecord(idGenerator.newRecordId()); 655 654 Record updateRecord = record.clone(); 656 updateRecord.setField(Scope.NON_VERSIONABLE,fieldDescriptor1.get Id(), "value2");657 updateRecord.setField(Scope.VERSIONABLE,fieldDescriptor2.get Id(), 789);658 updateRecord.setField(Scope.VERSIONABLE_MUTABLE,fieldDescriptor3.get Id(), false);655 updateRecord.setField(Scope.NON_VERSIONABLE,fieldDescriptor1.getName(), "value2"); 656 updateRecord.setField(Scope.VERSIONABLE,fieldDescriptor2.getName(), 789); 657 updateRecord.setField(Scope.VERSIONABLE_MUTABLE,fieldDescriptor3.getName(), false); 659 658 repository.update(updateRecord); 660 659 … … 663 662 664 663 Record readRecord = repository.read(record.getId(), Long.valueOf(1)); 665 assertEquals("value2", readRecord.getField(Scope.NON_VERSIONABLE, fieldDescriptor1.get Id()));666 assertEquals(123, readRecord.getField(Scope.VERSIONABLE, fieldDescriptor2.get Id()));667 assertEquals(false, readRecord.getField(Scope.VERSIONABLE_MUTABLE, fieldDescriptor3.get Id()));664 assertEquals("value2", readRecord.getField(Scope.NON_VERSIONABLE, fieldDescriptor1.getName())); 665 assertEquals(123, readRecord.getField(Scope.VERSIONABLE, fieldDescriptor2.getName())); 666 assertEquals(false, readRecord.getField(Scope.VERSIONABLE_MUTABLE, fieldDescriptor3.getName())); 668 667 } 669 668 … … 672 671 Record record = createDefaultRecord(idGenerator.newRecordId()); 673 672 Record updateRecord = record.clone(); 674 updateRecord.setField(Scope.NON_VERSIONABLE,fieldDescriptor1.get Id(), "value2");675 updateRecord.setField(Scope.VERSIONABLE,fieldDescriptor2.get Id(), 789);676 updateRecord.setField(Scope.VERSIONABLE_MUTABLE,fieldDescriptor3.get Id(), false);673 updateRecord.setField(Scope.NON_VERSIONABLE,fieldDescriptor1.getName(), "value2"); 674 updateRecord.setField(Scope.VERSIONABLE,fieldDescriptor2.getName(), 789); 675 updateRecord.setField(Scope.VERSIONABLE_MUTABLE,fieldDescriptor3.getName(), false); 677 676 repository.update(updateRecord); 678 677 … … 680 679 updateMutableRecord.setVersion(Long.valueOf(1)); 681 680 updateMutableRecord.setRecordType(recordType2.getId(), recordType2.getVersion()); 682 updateMutableRecord.setField(Scope.NON_VERSIONABLE,fieldDescriptor2.get Id(), 789);683 updateMutableRecord.setField(Scope.VERSIONABLE,fieldDescriptor3.get Id(), false);684 updateMutableRecord.setField(Scope.VERSIONABLE_MUTABLE,fieldDescriptor1.get Id(), "value3");681 updateMutableRecord.setField(Scope.NON_VERSIONABLE,fieldDescriptor2.getName(), 789); 682 updateMutableRecord.setField(Scope.VERSIONABLE,fieldDescriptor3.getName(), false); 683 updateMutableRecord.setField(Scope.VERSIONABLE_MUTABLE,fieldDescriptor1.getName(), "value3"); 685 684 assertEquals(Long.valueOf(1), repository.updateMutableFields(updateMutableRecord).getVersion()); 686 685 687 686 Record readRecord = repository.read(record.getId(), Long.valueOf(1)); 688 687 assertEquals(Long.valueOf(1), readRecord.getVersion()); 689 assertEquals("value2", readRecord.getField(Scope.NON_VERSIONABLE, fieldDescriptor1.get Id()));690 assertEquals(123, readRecord.getField(Scope.VERSIONABLE, fieldDescriptor2.get Id()));691 assertEquals(true, readRecord.getField(Scope.VERSIONABLE_MUTABLE, fieldDescriptor3.get Id()));692 assertEquals("value3", readRecord.getField(Scope.VERSIONABLE_MUTABLE, fieldDescriptor1.get Id()));693 try { 694 readRecord.getField(Scope.NON_VERSIONABLE, fieldDescriptor2.get Id());695 fail(); 696 } catch (FieldNotFoundException expected) { 697 } 698 try { 699 readRecord.getField(Scope.VERSIONABLE, fieldDescriptor3.get Id());688 assertEquals("value2", readRecord.getField(Scope.NON_VERSIONABLE, fieldDescriptor1.getName())); 689 assertEquals(123, readRecord.getField(Scope.VERSIONABLE, fieldDescriptor2.getName())); 690 assertEquals(true, readRecord.getField(Scope.VERSIONABLE_MUTABLE, fieldDescriptor3.getName())); 691 assertEquals("value3", readRecord.getField(Scope.VERSIONABLE_MUTABLE, fieldDescriptor1.getName())); 692 try { 693 readRecord.getField(Scope.NON_VERSIONABLE, fieldDescriptor2.getName()); 694 fail(); 695 } catch (FieldNotFoundException expected) { 696 } 697 try { 698 readRecord.getField(Scope.VERSIONABLE, fieldDescriptor3.getName()); 700 699 fail(); 701 700 } catch (FieldNotFoundException expected) { … … 708 707 readRecord = repository.read(record.getId()); 709 708 assertEquals(Long.valueOf(2), readRecord.getVersion()); 710 assertEquals("value2", readRecord.getField(Scope.NON_VERSIONABLE, fieldDescriptor1.get Id()));711 assertEquals(789, readRecord.getField(Scope.VERSIONABLE, fieldDescriptor2.get Id()));712 assertEquals(false, readRecord.getField(Scope.VERSIONABLE_MUTABLE, fieldDescriptor3.get Id()));713 assertEquals("value3", readRecord.getField(Scope.VERSIONABLE_MUTABLE, fieldDescriptor1.get Id()));709 assertEquals("value2", readRecord.getField(Scope.NON_VERSIONABLE, fieldDescriptor1.getName())); 710 assertEquals(789, readRecord.getField(Scope.VERSIONABLE, fieldDescriptor2.getName())); 711 assertEquals(false, readRecord.getField(Scope.VERSIONABLE_MUTABLE, fieldDescriptor3.getName())); 712 assertEquals("value3", readRecord.getField(Scope.VERSIONABLE_MUTABLE, fieldDescriptor1.getName())); 714 713 assertEquals(recordType1.getId(), readRecord.getRecordTypeId()); 715 714 assertEquals(recordType1.getId(), readRecord.getRecordTypeId(Scope.NON_VERSIONABLE)); … … 722 721 Record record = createDefaultRecord(idGenerator.newRecordId()); 723 722 Record updateRecord = record.clone(); 724 updateRecord.setField(Scope.NON_VERSIONABLE,fieldDescriptor1.get Id(), "value2");725 updateRecord.setField(Scope.VERSIONABLE,fieldDescriptor2.get Id(), 789);726 updateRecord.setField(Scope.VERSIONABLE_MUTABLE,fieldDescriptor3.get Id(), false);723 updateRecord.setField(Scope.NON_VERSIONABLE,fieldDescriptor1.getName(), "value2"); 724 updateRecord.setField(Scope.VERSIONABLE,fieldDescriptor2.getName(), 789); 725 updateRecord.setField(Scope.VERSIONABLE_MUTABLE,fieldDescriptor3.getName(), false); 727 726 repository.update(updateRecord); 728 727 … … 730 729 deleteRecord.setVersion(Long.valueOf(1)); 731 730 deleteRecord.setRecordType(record.getRecordTypeId(), record.getRecordTypeVersion()); 732 deleteRecord.addFieldsToDelete(Scope.NON_VERSIONABLE, Arrays.asList(new String[]{fieldDescriptor1.get Id()}));733 deleteRecord.addFieldsToDelete(Scope.VERSIONABLE, Arrays.asList(new String[]{fieldDescriptor2.get Id()}));734 deleteRecord.addFieldsToDelete(Scope.VERSIONABLE_MUTABLE, Arrays.asList(new String[]{fieldDescriptor3.get Id()}));731 deleteRecord.addFieldsToDelete(Scope.NON_VERSIONABLE, Arrays.asList(new String[]{fieldDescriptor1.getName()})); 732 deleteRecord.addFieldsToDelete(Scope.VERSIONABLE, Arrays.asList(new String[]{fieldDescriptor2.getName()})); 733 deleteRecord.addFieldsToDelete(Scope.VERSIONABLE_MUTABLE, Arrays.asList(new String[]{fieldDescriptor3.getName()})); 735 734 736 735 repository.updateMutableFields(deleteRecord); 737 736 738 737 Record readRecord = repository.read(record.getId(), Long.valueOf(1)); 739 assertEquals("value2", readRecord.getField(Scope.NON_VERSIONABLE, fieldDescriptor1.get Id()));740 assertEquals(123, readRecord.getField(Scope.VERSIONABLE, fieldDescriptor2.get Id()));741 try { 742 readRecord.getField(Scope.VERSIONABLE_MUTABLE, fieldDescriptor3.get Id());738 assertEquals("value2", readRecord.getField(Scope.NON_VERSIONABLE, fieldDescriptor1.getName())); 739 assertEquals(123, readRecord.getField(Scope.VERSIONABLE, fieldDescriptor2.getName())); 740 try { 741 readRecord.getField(Scope.VERSIONABLE_MUTABLE, fieldDescriptor3.getName()); 743 742 fail(); 744 743 } catch (FieldNotFoundException expected) { … … 746 745 747 746 readRecord = repository.read(record.getId()); 748 assertEquals(false, readRecord.getField(Scope.VERSIONABLE_MUTABLE, fieldDescriptor3.get Id()));747 assertEquals(false, readRecord.getField(Scope.VERSIONABLE_MUTABLE, fieldDescriptor3.getName())); 749 748 } 750 749 … … 753 752 Record record = createDefaultRecord(idGenerator.newRecordId()); 754 753 Record updateRecord = record.clone(); 755 updateRecord.setField(Scope.NON_VERSIONABLE,fieldDescriptor1.get Id(), "value2");756 updateRecord.setField(Scope.VERSIONABLE,fieldDescriptor2.get Id(), 789);754 updateRecord.setField(Scope.NON_VERSIONABLE,fieldDescriptor1.getName(), "value2"); 755 updateRecord.setField(Scope.VERSIONABLE,fieldDescriptor2.getName(), 789); 757 756 updateRecord = repository.update(updateRecord); // Leave mutable field same on first update 758 757 759 updateRecord.setField(Scope.VERSIONABLE_MUTABLE,fieldDescriptor3.get Id(), false);758 updateRecord.setField(Scope.VERSIONABLE_MUTABLE,fieldDescriptor3.getName(), false); 760 759 updateRecord = repository.update(updateRecord); 761 760 … … 763 762 deleteRecord.setVersion(Long.valueOf(1)); 764 763 deleteRecord.setRecordType(record.getRecordTypeId(), record.getRecordTypeVersion()); 765 deleteRecord.addFieldsToDelete(Scope.VERSIONABLE_MUTABLE, Arrays.asList(new String[]{fieldDescriptor3.get Id()}));764 deleteRecord.addFieldsToDelete(Scope.VERSIONABLE_MUTABLE, Arrays.asList(new String[]{fieldDescriptor3.getName()})); 766 765 767 766 repository.updateMutableFields(deleteRecord); … … 769 768 Record readRecord = repository.read(record.getId(), Long.valueOf(1)); 770 769 try { 771 readRecord.getField(Scope.VERSIONABLE_MUTABLE, fieldDescriptor3.get Id());770 readRecord.getField(Scope.VERSIONABLE_MUTABLE, fieldDescriptor3.getName()); 772 771 fail(); 773 772 } catch (FieldNotFoundException expected) { … … 775 774 776 775 readRecord = repository.read(record.getId(), Long.valueOf(2)); 777 assertEquals(true, readRecord.getField(Scope.VERSIONABLE_MUTABLE, fieldDescriptor3.get Id()));776 assertEquals(true, readRecord.getField(Scope.VERSIONABLE_MUTABLE, fieldDescriptor3.getName())); 778 777 779 778 readRecord = repository.read(record.getId()); 780 assertEquals(false, readRecord.getField(Scope.VERSIONABLE_MUTABLE, fieldDescriptor3.getId())); 779 assertEquals(false, readRecord.getField(Scope.VERSIONABLE_MUTABLE, fieldDescriptor3.getName())); 780 } 781 782 @Test 783 public void testMixin() throws Exception { 784 FieldDescriptor fieldDescriptor4 = typeManager.createFieldDescriptor(typeManager.newFieldDescriptor(typeManager.getValueType("STRING", false, false), "field4")); 785 FieldGroup fieldGroup4 = typeManager.newFieldGroup("FG4"); 786 fieldGroup4.setFieldGroupEntry(typeManager.newFieldGroupEntry(fieldDescriptor4.getId(), fieldDescriptor4.getVersion(), false, "alias4")); 787 fieldGroup4 = typeManager.createFieldGroup(fieldGroup4); 788 RecordType recordType4 = typeManager.newRecordType("RT4"); 789 recordType4.setFieldGroupId(Scope.VERSIONABLE,fieldGroup4.getId()); 790 recordType4.setFieldGroupVersion(Scope.VERSIONABLE,fieldGroup4.getVersion()); 791 recordType4.addMixin(recordType1.getId(), recordType1.getVersion()); 792 recordType4 = typeManager.createRecordType(recordType4); 793 794 Record record = repository.newRecord(idGenerator.newRecordId()); 795 record.setRecordType(recordType4.getId(), recordType4.getVersion()); 796 record.setField(Scope.NON_VERSIONABLE,fieldDescriptor1.getName(), "foo"); 797 record.setField(Scope.VERSIONABLE,fieldDescriptor2.getName(), 555); 798 record.setField(Scope.VERSIONABLE, fieldDescriptor4.getName(), "bar"); 799 record.setField(Scope.VERSIONABLE_MUTABLE,fieldDescriptor3.getName(), true); 800 record = repository.create(record); 801 802 Record readRecord = repository.read(record.getId()); 803 assertEquals(Long.valueOf(1), readRecord.getVersion()); 804 assertEquals("foo", readRecord.getField(Scope.NON_VERSIONABLE, fieldDescriptor1.getName())); 805 assertEquals(555, readRecord.getField(Scope.VERSIONABLE, fieldDescriptor2.getName())); 806 assertEquals("bar", readRecord.getField(Scope.VERSIONABLE, fieldDescriptor4.getName())); 807 assertEquals(true, readRecord.getField(Scope.VERSIONABLE_MUTABLE, fieldDescriptor3.getName())); 808 } 809 810 @Test 811 public void testUpdateNameFieldDescriptor() throws Exception { 812 // TODO : store fieldDescriptorVersion together with fieldValue 813 814 // FieldDescriptor updatedFieldDescriptor = fieldDescriptor2.clone(); 815 // updatedFieldDescriptor.setName("newName"); 816 // updatedFieldDescriptor = typeManager.updateFieldDescriptor(updatedFieldDescriptor); 817 // 818 // FieldGroup fieldGroup5 = typeManager.newFieldGroup("FG5"); 819 // fieldGroup5.setFieldGroupEntry(typeManager.newFieldGroupEntry(updatedFieldDescriptor.getId(), updatedFieldDescriptor.getVersion(), false, "alias5")); 820 // fieldGroup5 = typeManager.createFieldGroup(fieldGroup5); 821 // RecordType recordType5 = typeManager.newRecordType("RT5"); 822 // recordType5.setFieldGroupId(Scope.VERSIONABLE,fieldGroup5.getId()); 823 // recordType5.setFieldGroupVersion(Scope.VERSIONABLE,fieldGroup5.getVersion()); 824 // recordType5 = typeManager.createRecordType(recordType5); 825 // 826 // Record record = createDefaultRecord(idGenerator.newRecordId()); 827 // Record record2 = repository.newRecord(record.getId()); 828 // record2.setRecordType(recordType5.getId(), recordType5.getVersion()); 829 // record2.setField(Scope.VERSIONABLE, "newName", 54321); 830 // repository.update(record2); 831 // 832 // Record readRecord = repository.read(record.getId()); 833 // assertEquals(1, readRecord.getFields(Scope.VERSIONABLE).size()); 834 // assertEquals(54321, readRecord.getField(Scope.VERSIONABLE, "newName")); 835 // 836 // readRecord = repository.read(record.getId(), Long.valueOf(1)); 837 // assertEquals(1, readRecord.getFields(Scope.VERSIONABLE).size()); 838 // assertEquals(123, readRecord.getField(Scope.VERSIONABLE, fieldDescriptor2.getName())); 781 839 } 782 840 } -
projects/lily/trunk/repository/impl/src/test/java/org/lilycms/repository/impl/test/TypeManagerFieldDescriptorTest.java
r3977 r3981 17 17 18 18 19 import static org.junit.Assert.*; 20 19 21 import org.apache.hadoop.hbase.HBaseTestingUtility; 20 22 import org.junit.After; 21 23 import org.junit.AfterClass; 22 import static org.junit.Assert.*;23 24 import org.junit.Before; 24 25 import org.junit.BeforeClass; 25 26 import org.junit.Test; 26 27 import org.lilycms.repository.api.FieldDescriptor; 27 import org.lilycms.repository.api.FieldDescriptorExistsException;28 28 import org.lilycms.repository.api.FieldDescriptorNotFoundException; 29 29 import org.lilycms.repository.api.FieldDescriptorUpdateException; 30 30 import org.lilycms.repository.api.TypeManager; 31 31 import org.lilycms.repository.api.ValueType; 32 import org.lilycms.repository.impl.FieldDescriptorImpl;33 32 import org.lilycms.repository.impl.HBaseTypeManager; 34 33 import org.lilycms.repository.impl.IdGeneratorImpl; 35 import org.lilycms.repository.impl.RecordTypeImpl;36 34 import org.lilycms.testfw.TestHelper; 37 35 … … 64 62 @Test 65 63 public void testCreate() throws Exception { 66 String id= "testCreate";64 String name = "testCreate"; 67 65 ValueType valueType = typeManager.getValueType("STRING", false, false); 68 FieldDescriptor fieldDescriptor = typeManager.newFieldDescriptor( id, valueType , "aGlobalName");69 typeManager.createFieldDescriptor(fieldDescriptor);70 fieldDescriptor.setVersion(Long.valueOf(1));66 FieldDescriptor fieldDescriptor = typeManager.newFieldDescriptor(valueType , name); 67 fieldDescriptor = typeManager.createFieldDescriptor(fieldDescriptor); 68 assertEquals(Long.valueOf(1), fieldDescriptor.getVersion()); 71 69 assertEquals(fieldDescriptor, typeManager.getFieldDescriptor(fieldDescriptor.getId(), null)); 72 70 } … … 74 72 @Test 75 73 public void testCreateIgnoresVersion() throws Exception { 76 String id= "testCreateIgnoresVersion";74 String name = "testCreateIgnoresVersion"; 77 75 ValueType valueType = typeManager.getValueType("STRING", false, false); 78 FieldDescriptor fieldDescriptor = typeManager.newFieldDescriptor( id, valueType , "aGlobalName");76 FieldDescriptor fieldDescriptor = typeManager.newFieldDescriptor(valueType , name); 79 77 fieldDescriptor.setVersion(Long.valueOf(5)); 80 typeManager.createFieldDescriptor(fieldDescriptor);81 fieldDescriptor.setVersion(Long.valueOf(1));78 fieldDescriptor = typeManager.createFieldDescriptor(fieldDescriptor); 79 assertEquals(Long.valueOf(1), fieldDescriptor.getVersion()); 82 80 assertEquals(fieldDescriptor, typeManager.getFieldDescriptor(fieldDescriptor.getId(), null)); 83 81 } 84 82 85 83 @Test 86 public void testCreate ExistingFails() throws Exception {84 public void testCreateIgnoresGivenId() throws Exception { 87 85 String id = "testCreateExistingFails"; 88 86 ValueType valueType = typeManager.getValueType("STRING", false, false); 89 87 FieldDescriptor fieldDescriptor = typeManager.newFieldDescriptor(id, valueType , "aGlobalName"); 90 typeManager.createFieldDescriptor(fieldDescriptor); 91 try { 92 typeManager.createFieldDescriptor(fieldDescriptor); 93 fail("Creating an existing fieldDescriptor is not allowed. Use update instead."); 94 } catch (FieldDescriptorExistsException expected) { 95 } 88 fieldDescriptor = typeManager.createFieldDescriptor(fieldDescriptor); 89 assertFalse(fieldDescriptor.getId().equals(typeManager.createFieldDescriptor(fieldDescriptor.clone()))); 96 90 } 97 91 98 92 @Test 99 93 public void testUpdate() throws Exception { 100 String id= "testUpdate";94 String name = "testUpdate"; 101 95 ValueType valueType = typeManager.getValueType("STRING", false, false); 102 FieldDescriptor fieldDescriptorCreate = typeManager.newFieldDescriptor( id, valueType , "aGlobalName");103 typeManager.createFieldDescriptor(fieldDescriptorCreate);96 FieldDescriptor fieldDescriptorCreate = typeManager.newFieldDescriptor(valueType , name); 97 fieldDescriptorCreate = typeManager.createFieldDescriptor(fieldDescriptorCreate); 104 98 105 FieldDescriptor fieldDescriptorGlobalName = typeManager.newFieldDescriptor(id, valueType , "newGlobalName"); 106 typeManager.updateFieldDescriptor(fieldDescriptorGlobalName); 107 fieldDescriptorGlobalName.setVersion(Long.valueOf(2)); 108 assertEquals(fieldDescriptorGlobalName, typeManager.getFieldDescriptor(id, null)); 99 FieldDescriptor fieldDescriptorNewName = typeManager.newFieldDescriptor(fieldDescriptorCreate.getId(), valueType , "newName"); 100 fieldDescriptorNewName = typeManager.updateFieldDescriptor(fieldDescriptorNewName); 101 assertEquals(fieldDescriptorCreate.getId(), fieldDescriptorNewName.getId()); 102 assertEquals(Long.valueOf(2), fieldDescriptorNewName.getVersion()); 103 assertEquals(fieldDescriptorNewName, typeManager.getFieldDescriptor(fieldDescriptorCreate.getId(), null)); 109 104 110 105 } … … 112 107 @Test 113 108 public void testUpdateVersions() throws Exception { 114 String id= "testUpdateVersions";109 String name = "testUpdateVersions"; 115 110 ValueType valueType = typeManager.getValueType("STRING", false, false); 116 FieldDescriptor fieldDescriptorCreate = typeManager.newFieldDescriptor( id, valueType , "aGlobalName");117 typeManager.createFieldDescriptor(fieldDescriptorCreate);111 FieldDescriptor fieldDescriptorCreate = typeManager.newFieldDescriptor(valueType , name); 112 fieldDescriptorCreate = typeManager.createFieldDescriptor(fieldDescriptorCreate); 118 113 119 FieldDescriptor fieldDescriptor GlobalName = typeManager.newFieldDescriptor(id, valueType , "newGlobalName");114 FieldDescriptor fieldDescriptorNewName = typeManager.newFieldDescriptor(fieldDescriptorCreate.getId(), valueType , "newName"); 120 115 // Update should ignore version 121 fieldDescriptor GlobalName.setVersion(Long.valueOf(99));122 FieldDescriptor updatedFieldDescriptor = typeManager.updateFieldDescriptor(fieldDescriptor GlobalName);116 fieldDescriptorNewName.setVersion(Long.valueOf(99)); 117 FieldDescriptor updatedFieldDescriptor = typeManager.updateFieldDescriptor(fieldDescriptorNewName); 123 118 assertEquals(Long.valueOf(2), updatedFieldDescriptor.getVersion()); 124 fieldDescriptorGlobalName.setVersion(Long.valueOf(2)); 125 assertEquals(fieldDescriptorGlobalName, typeManager.getFieldDescriptor(id, null)); 119 assertEquals(updatedFieldDescriptor, typeManager.getFieldDescriptor(fieldDescriptorCreate.getId(), null)); 126 120 127 121 } … … 129 123 @Test 130 124 public void testRetrieveOlderVersions() throws Exception { 131 String id= "testRetrieveOlderVersions";125 String name = "testRetrieveOlderVersions"; 132 126 ValueType valueType = typeManager.getValueType("STRING", false, false); 133 FieldDescriptor fieldDescriptorCreate = typeManager.newFieldDescriptor( id, valueType , "aGlobalName");134 typeManager.createFieldDescriptor(fieldDescriptorCreate);135 FieldDescriptor fieldDescriptor GlobalName = typeManager.newFieldDescriptor(id, valueType , "newGlobalName");136 typeManager.updateFieldDescriptor(fieldDescriptorGlobalName);127 FieldDescriptor fieldDescriptorCreate = typeManager.newFieldDescriptor(valueType , name); 128 fieldDescriptorCreate = typeManager.createFieldDescriptor(fieldDescriptorCreate); 129 FieldDescriptor fieldDescriptorNewName = typeManager.newFieldDescriptor(fieldDescriptorCreate.getId(), valueType , "newName"); 130 fieldDescriptorNewName = typeManager.updateFieldDescriptor(fieldDescriptorNewName); 137 131 138 fieldDescriptorGlobalName.setVersion(Long.valueOf(2));139 assertEquals(fieldDescriptor GlobalName, typeManager.getFieldDescriptor(id, Long.valueOf(2)));132 assertEquals(Long.valueOf(2), fieldDescriptorNewName.getVersion()); 133 assertEquals(fieldDescriptorNewName, typeManager.getFieldDescriptor(fieldDescriptorCreate.getId(), Long.valueOf(2))); 140 134 141 fieldDescriptorCreate.setVersion(Long.valueOf(1)); 142 assertEquals(fieldDescriptorCreate, typeManager.getFieldDescriptor(id, Long.valueOf(1))); 135 assertEquals(fieldDescriptorCreate, typeManager.getFieldDescriptor(fieldDescriptorCreate.getId(), Long.valueOf(1))); 143 136 } 144 137 145 138 @Test 146 139 public void testRetrieveTooRecentVersionFails() throws Exception { 147 String id= "testRetrieveTooRecentVersionFails";140 String name = "testRetrieveTooRecentVersionFails"; 148 141 ValueType valueType = typeManager.getValueType("STRING", false, false); 149 FieldDescriptor fieldDescriptorCreate = typeManager.newFieldDescriptor( id, valueType , "aGlobalName");150 typeManager.createFieldDescriptor(fieldDescriptorCreate);151 FieldDescriptor fieldDescriptor GlobalName = typeManager.newFieldDescriptor(id, valueType , "newGlobalName");152 typeManager.updateFieldDescriptor(fieldDescriptor GlobalName);142 FieldDescriptor fieldDescriptorCreate = typeManager.newFieldDescriptor(valueType , name); 143 fieldDescriptorCreate = typeManager.createFieldDescriptor(fieldDescriptorCreate); 144 FieldDescriptor fieldDescriptorNewName = typeManager.newFieldDescriptor(fieldDescriptorCreate.getId(), valueType , "newName"); 145 typeManager.updateFieldDescriptor(fieldDescriptorNewName); 153 146 154 147 try { 155 typeManager.getFieldDescriptor( id, Long.valueOf(3));148 typeManager.getFieldDescriptor(fieldDescriptorCreate.getId(), Long.valueOf(3)); 156 149 fail("Retrieving a too recent/non-existing version should fail."); 157 150 } catch (FieldDescriptorNotFoundException expected) { … … 162 155 @Test 163 156 public void testIdempotentUpdateReturnsLatestVersionNumber() throws Exception { 164 String id= "testIdempotentUpdateReturnsLatestVersionNumber";157 String name = "testIdempotentUpdateReturnsLatestVersionNumber"; 165 158 ValueType valueType = typeManager.getValueType("STRING", false, false); 166 FieldDescriptor fieldDescriptorCreate = typeManager.newFieldDescriptor( id, valueType , "aGlobalName");167 typeManager.createFieldDescriptor(fieldDescriptorCreate);159 FieldDescriptor fieldDescriptorCreate = typeManager.newFieldDescriptor(valueType , name); 160 fieldDescriptorCreate = typeManager.createFieldDescriptor(fieldDescriptorCreate); 168 161 169 FieldDescriptor fieldDescriptor GlobalName = typeManager.newFieldDescriptor(id, valueType , "newGlobalName");170 typeManager.updateFieldDescriptor(fieldDescriptor GlobalName);162 FieldDescriptor fieldDescriptorNewName = typeManager.newFieldDescriptor(fieldDescriptorCreate.getId(), valueType , "newName"); 163 typeManager.updateFieldDescriptor(fieldDescriptorNewName); 171 164 172 FieldDescriptor idempotentUpdate = typeManager.updateFieldDescriptor(fieldDescriptor GlobalName);165 FieldDescriptor idempotentUpdate = typeManager.updateFieldDescriptor(fieldDescriptorNewName); 173 166 assertEquals(Long.valueOf(2), idempotentUpdate.getVersion()); 174 fieldDescriptorGlobalName.setVersion(Long.valueOf(2)); 175 assertEquals(fieldDescriptorGlobalName, typeManager.getFieldDescriptor(id, null)); 167 assertEquals(idempotentUpdate, typeManager.getFieldDescriptor(fieldDescriptorCreate.getId(), null)); 176 168 } 177 169 178 170 @Test 179 171 public void testUpdateValueTypeFails() throws Exception { 180 String id= "testUpdateValueTypeFails";172 String name = "testUpdateValueTypeFails"; 181 173 ValueType valueType = typeManager.getValueType("STRING", false, false); 182 FieldDescriptor fieldDescriptor = typeManager.newFieldDescriptor( id, valueType , "aGlobalName");183 typeManager.createFieldDescriptor(fieldDescriptor);174 FieldDescriptor fieldDescriptor = typeManager.newFieldDescriptor(valueType , name); 175 fieldDescriptor = typeManager.createFieldDescriptor(fieldDescriptor); 184 176 185 177 fieldDescriptor.setValueType(typeManager.getValueType("INTEGER", false, false)); -
projects/lily/trunk/repository/impl/src/test/java/org/lilycms/repository/impl/test/TypeManagerFieldGroupTest.java
r3977 r3981 20 20 21 21 import java.util.Arrays; 22 import java.util.UUID; 22 23 23 24 import org.apache.hadoop.hbase.HBaseTestingUtility; … … 56 57 57 58 private static void setupFieldDescriptors() throws Exception { 58 fieldDescriptor1 = typeManager.createFieldDescriptor(typeManager.newFieldDescriptor( "FD1", typeManager.getValueType("STRING", false, false), "GN1"));59 fieldDescriptor2 = typeManager.createFieldDescriptor(typeManager.newFieldDescriptor( "FD2", typeManager.getValueType("STRING", false, false), "GN2"));60 fieldDescriptor3 = typeManager.createFieldDescriptor(typeManager.newFieldDescriptor( "FD3", typeManager.getValueType("STRING", false, false), "GN3"));61 fieldDescriptor3B = typeManager.updateFieldDescriptor(typeManager.newFieldDescriptor( "FD3", typeManager.getValueType("STRING", false, false), "GN3B"));59 fieldDescriptor1 = typeManager.createFieldDescriptor(typeManager.newFieldDescriptor(typeManager.getValueType("STRING", false, false), "name1")); 60 fieldDescriptor2 = typeManager.createFieldDescriptor(typeManager.newFieldDescriptor(typeManager.getValueType("STRING", false, false), "name2")); 61 fieldDescriptor3 = typeManager.createFieldDescriptor(typeManager.newFieldDescriptor(typeManager.getValueType("STRING", false, false), "name3")); 62 fieldDescriptor3B = typeManager.updateFieldDescriptor(typeManager.newFieldDescriptor(fieldDescriptor3.getId(), typeManager.getValueType("STRING", false, false), "name3B")); 62 63 } 63 64 … … 122 123 FieldGroup actualFieldGroup = typeManager.getFieldGroup(id, null); 123 124 assertEquals(fieldGroup, actualFieldGroup); 124 assertEquals(Long.valueOf(1), actualFieldGroup.getFieldGroupEntry( "FD3").getFieldDescriptorVersion());125 assertEquals(Long.valueOf(1), actualFieldGroup.getFieldGroupEntry(fieldDescriptor3.getId()).getFieldDescriptorVersion()); 125 126 } 126 127 … … 197 198 String id = "testFieldDescriptorExistsOnCreate"; 198 199 FieldGroup fieldGroup = typeManager.newFieldGroup(id); 199 FieldGroupEntry fieldGroupEntry = typeManager.newFieldGroupEntry( "nonExistingFD", null, false, "alias1");200 FieldGroupEntry fieldGroupEntry = typeManager.newFieldGroupEntry(UUID.randomUUID().toString(), null, false, "alias1"); 200 201 fieldGroup.setFieldGroupEntry(fieldGroupEntry); 201 202 try { … … 224 225 FieldGroup fieldGroup = typeManager.newFieldGroup(id); 225 226 typeManager.createFieldGroup(fieldGroup); 226 FieldGroupEntry fieldGroupEntry = typeManager.newFieldGroupEntry( "nonExistingFD", null, false, "alias1");227 FieldGroupEntry fieldGroupEntry = typeManager.newFieldGroupEntry(UUID.randomUUID().toString(), null, false, "alias1"); 227 228 fieldGroup.setFieldGroupEntry(fieldGroupEntry); 228 229 try { … … 254 255 fieldGroup.setFieldGroupEntry(fieldGroupEntry); 255 256 FieldGroup createdFieldgroup = typeManager.createFieldGroup(fieldGroup); 256 assertEquals(fieldDescriptor1.getVersion(), createdFieldgroup.getFieldGroupEntry( "FD1").getFieldDescriptorVersion());257 assertEquals(fieldDescriptor1.getVersion(), createdFieldgroup.getFieldGroupEntry(fieldDescriptor1.getId()).getFieldDescriptorVersion()); 257 258 258 259 fieldGroupEntry = typeManager.newFieldGroupEntry(fieldDescriptor2.getId(), null, false, "alias2"); 259 260 fieldGroup.setFieldGroupEntry(fieldGroupEntry); 260 261 FieldGroup updatedFieldgroup = typeManager.updateFieldGroup(fieldGroup); 261 assertEquals(fieldDescriptor2.getVersion(), updatedFieldgroup.getFieldGroupEntry( "FD2").getFieldDescriptorVersion());262 assertEquals(fieldDescriptor2.getVersion(), updatedFieldgroup.getFieldGroupEntry(fieldDescriptor2.getId()).getFieldDescriptorVersion()); 262 263 263 264 fieldGroupEntry = typeManager.newFieldGroupEntry(fieldDescriptor3.getId(), null, false, "alias3"); 264 265 fieldGroup.setFieldGroupEntry(fieldGroupEntry); 265 266 updatedFieldgroup = typeManager.updateFieldGroup(fieldGroup); 266 assertEquals(fieldDescriptor3B.getVersion(), updatedFieldgroup.getFieldGroupEntry( "FD3").getFieldDescriptorVersion());267 assertEquals(fieldDescriptor3B.getVersion(), updatedFieldgroup.getFieldGroupEntry(fieldDescriptor3.getId()).getFieldDescriptorVersion()); 267 268 } 268 269 -
projects/lily/trunk/repository/impl/src/test/java/org/lilycms/repository/impl/test/TypeManagerRecordTypeTest.java
r3978 r3981 19 19 import static junit.framework.Assert.*; 20 20 21 import org.apache.commons.lang.NotImplementedException; 21 import java.util.Map; 22 22 23 import org.apache.hadoop.hbase.HBaseTestingUtility; 23 24 import org.junit.After; … … 425 426 } 426 427 428 @Test 429 public void testMixin() throws Exception { 430 String id = "testMixin"; 431 RecordType mixinType = typeManager.newRecordType(id+"MIX"); 432 mixinType.setFieldGroupId(Scope.NON_VERSIONABLE,fieldGroup1.getId()); 433 mixinType.setFieldGroupVersion(Scope.NON_VERSIONABLE,fieldGroup1.getVersion()); 434 mixinType.setFieldGroupId(Scope.VERSIONABLE,fieldGroup2.getId()); 435 mixinType.setFieldGroupVersion(Scope.VERSIONABLE,fieldGroup2.getVersion()); 436 mixinType.setFieldGroupId(Scope.VERSIONABLE_MUTABLE,fieldGroup3.getId()); 437 mixinType.setFieldGroupVersion(Scope.VERSIONABLE_MUTABLE,fieldGroup3.getVersion()); 438 mixinType = typeManager.createRecordType(mixinType); 439 440 RecordType recordType = typeManager.newRecordType(id+"RT"); 441 recordType.addMixin(mixinType.getId(), mixinType.getVersion()); 442 assertEquals(Long.valueOf(1), typeManager.createRecordType(recordType).getVersion()); 443 recordType.setVersion(Long.valueOf(1)); 444 assertEquals(recordType, typeManager.getRecordType(recordType.getId(), null)); 445 } 446 447 @Test 448 public void testMixinUpdate() throws Exception { 449 String id = "testMixinUpdate"; 450 RecordType mixinType1 = typeManager.newRecordType(id+"MIX"); 451 mixinType1.setFieldGroupId(Scope.NON_VERSIONABLE,fieldGroup1.getId()); 452 mixinType1.setFieldGroupVersion(Scope.NON_VERSIONABLE,fieldGroup1.getVersion()); 453 mixinType1.setFieldGroupId(Scope.VERSIONABLE,fieldGroup2.getId()); 454 mixinType1.setFieldGroupVersion(Scope.VERSIONABLE,fieldGroup2.getVersion()); 455 mixinType1.setFieldGroupId(Scope.VERSIONABLE_MUTABLE,fieldGroup3.getId()); 456 mixinType1.setFieldGroupVersion(Scope.VERSIONABLE_MUTABLE,fieldGroup3.getVersion()); 457 mixinType1 = typeManager.createRecordType(mixinType1); 458 RecordType mixinType2 = typeManager.newRecordType(id+"MIX2"); 459 mixinType2.setFieldGroupId(Scope.NON_VERSIONABLE,fieldGroup1.getId()); 460 mixinType2.setFieldGroupVersion(Scope.NON_VERSIONABLE,fieldGroup1.getVersion()); 461 mixinType2.setFieldGroupId(Scope.VERSIONABLE,fieldGroup2.getId()); 462 mixinType2.setFieldGroupVersion(Scope.VERSIONABLE,fieldGroup2.getVersion()); 463 mixinType2.setFieldGroupId(Scope.VERSIONABLE_MUTABLE,fieldGroup3.getId()); 464 mixinType2.setFieldGroupVersion(Scope.VERSIONABLE_MUTABLE,fieldGroup3.getVersion()); 465 mixinType2 = typeManager.createRecordType(mixinType2); 466 467 RecordType recordType = typeManager.newRecordType(id+"RT"); 468 recordType.addMixin(mixinType1.getId(), mixinType1.getVersion()); 469 typeManager.createRecordType(recordType); 470 471 recordType.addMixin(mixinType2.getId(), mixinType2.getVersion()); 472 assertEquals(Long.valueOf(2), typeManager.updateRecordType(recordType).getVersion()); 473 recordType.setVersion(Long.valueOf(2)); 474 assertEquals(recordType, typeManager.getRecordType(recordType.getId(), null)); 475 } 476 477 @Test 478 public void testMixinRemove() throws Exception { 479 String id = "testMixinRemove"; 480 RecordType mixinType1 = typeManager.newRecordType(id+"MIX"); 481 mixinType1.setFieldGroupId(Scope.NON_VERSIONABLE,fieldGroup1.getId()); 482 mixinType1.setFieldGroupVersion(Scope.NON_VERSIONABLE,fieldGroup1.getVersion()); 483 mixinType1.setFieldGroupId(Scope.VERSIONABLE,fieldGroup2.getId()); 484 mixinType1.setFieldGroupVersion(Scope.VERSIONABLE,fieldGroup2.getVersion()); 485 mixinType1.setFieldGroupId(Scope.VERSIONABLE_MUTABLE,fieldGroup3.getId()); 486 mixinType1.setFieldGroupVersion(Scope.VERSIONABLE_MUTABLE,fieldGroup3.getVersion()); 487 mixinType1 = typeManager.createRecordType(mixinType1); 488 RecordType mixinType2 = typeManager.newRecordType(id+"MIX2"); 489 mixinType2.setFieldGroupId(Scope.NON_VERSIONABLE,fieldGroup1.getId()); 490 mixinType2.setFieldGroupVersion(Scope.NON_VERSIONABLE,fieldGroup1.getVersion()); 491 mixinType2.setFieldGroupId(Scope.VERSIONABLE,fieldGroup2.getId()); 492 mixinType2.setFieldGroupVersion(Scope.VERSIONABLE,fieldGroup2.getVersion()); 493 mixinType2.setFieldGroupId(Scope.VERSIONABLE_MUTABLE,fieldGroup3.getId()); 494 mixinType2.setFieldGroupVersion(Scope.VERSIONABLE_MUTABLE,fieldGroup3.getVersion()); 495 mixinType2 = typeManager.createRecordType(mixinType2); 496 497 RecordType recordType = typeManager.newRecordType(id+"RT"); 498 recordType.addMixin(mixinType1.getId(), mixinType1.getVersion()); 499 typeManager.createRecordType(recordType); 500 501 recordType.addMixin(mixinType2.getId(), mixinType2.getVersion()); 502 recordType.removeMixin(mixinType1.getId()); 503 assertEquals(Long.valueOf(2), typeManager.updateRecordType(recordType).getVersion()); 504 RecordType readRecordType = typeManager.getRecordType(recordType.getId(), null); 505 Map<String, Long> mixins = readRecordType.getMixins(); 506 assertEquals(1, mixins.size()); 507 assertEquals(Long.valueOf(1), mixins.get(mixinType2.getId())); 508 } 509 427 510 // @Test 428 511 // public void testCreateWithDuplicateFieldGroupFails() throws Exception { -
projects/lily/trunk/repository/impl/src/test/java/org/lilycms/repository/impl/test/ValueTypeTest.java
r3978 r3981 120 120 private void testType(String recordTypeId, String valueTypeString, boolean multivalue, boolean hierarchical, 121 121 Object fieldValue) throws Exception { 122 String fieldDescriptorId= valueTypeString+"FieldId"+multivalue+hierarchical;123 FieldDescriptor fieldDescriptor = typeManager.createFieldDescriptor(typeManager.newFieldDescriptor( fieldDescriptorId,typeManager.getValueType(124 valueTypeString, multivalue, hierarchical), "aGlobalName"));122 String name = valueTypeString+"FieldId"+multivalue+hierarchical; 123 FieldDescriptor fieldDescriptor = typeManager.createFieldDescriptor(typeManager.newFieldDescriptor(typeManager.getValueType( 124 valueTypeString, multivalue, hierarchical), name)); 125 125 String fieldGroupId = valueTypeString+"FieldGroupId"+multivalue+hierarchical; 126 126 FieldGroup fieldGroup = typeManager.newFieldGroup(fieldGroupId); … … 134 134 Record record = repository.newRecord(idGenerator.newRecordId()); 135 135 record.setRecordType(recordType.getId(), recordType.getVersion()); 136 record.setField(Scope.NON_VERSIONABLE, fieldDescriptor Id, fieldValue);136 record.setField(Scope.NON_VERSIONABLE, fieldDescriptor.getName(), fieldValue); 137 137 repository.create(record); 138 138 139 139 Record actualRecord = repository.read(record.getId()); 140 assertEquals(fieldValue, actualRecord.getField(Scope.NON_VERSIONABLE, fieldDescriptor Id));140 assertEquals(fieldValue, actualRecord.getField(Scope.NON_VERSIONABLE, fieldDescriptor.getName())); 141 141 } 142 142
Note: See TracChangeset
for help on using the changeset viewer.