Changeset 4070
- Timestamp:
- 2010-06-09 16:34:25 (3 years ago)
- Location:
- projects/lily/trunk
- Files:
-
- 2 added
- 10 edited
-
indexer/src/main/java/org/lilycms/indexer/conf/DerefValue.java (modified) (1 diff)
-
indexer/src/test/java/org/lilycms/indexer/test/IndexerTest.java (modified) (8 diffs)
-
linkindex/src/main/java/org/lilycms/linkindex/LinkIndexUpdater.java (modified) (1 diff)
-
linkindex/src/main/java/org/lilycms/linkindex/RecordLinkExtractor.java (modified) (3 diffs)
-
linkindex/src/test/java/org/lilycms/linkindex/test/LinkIndexTest.java (modified) (2 diffs)
-
repository-api-tutorial/src/test/java/org/lilycms/repository/api/tutorial/Tutorial.java (modified) (2 diffs)
-
repository/api/src/main/java/org/lilycms/repository/api/Link.java (added)
-
repository/api/src/main/java/org/lilycms/repository/api/TypeManager.java (modified) (1 diff)
-
repository/impl/src/main/java/org/lilycms/repository/impl/AbstractTypeManager.java (modified) (1 diff)
-
repository/impl/src/main/java/org/lilycms/repository/impl/primitivevaluetype/LinkValueType.java (modified) (2 diffs)
-
repository/impl/src/test/java/org/lilycms/repository/impl/test/LinkTest.java (added)
-
repository/impl/src/test/java/org/lilycms/repository/impl/test/ValueTypeTest.java (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
projects/lily/trunk/indexer/src/main/java/org/lilycms/indexer/conf/DerefValue.java
r4065 r4070 98 98 99 99 Object value = record.getField(fieldType.getId()); 100 if (value instanceof RecordId) { 101 IdRecord linkedRecord = resolveRecordId((RecordId)value, vtag, repository); 100 if (value instanceof Link) { 101 RecordId recordId = ((Link)value).resolve(record, repository.getIdGenerator()); 102 IdRecord linkedRecord = resolveRecordId(recordId, vtag, repository); 102 103 return linkedRecord == null ? null : Collections.singletonList(linkedRecord); 103 } else if (value instanceof List && ((List)value).size() > 0 && ((List)value).get(0) instanceof RecordId) {104 } else if (value instanceof List && ((List)value).size() > 0 && ((List)value).get(0) instanceof Link) { 104 105 List list = (List)value; 105 106 List<IdRecord> result = new ArrayList<IdRecord>(list.size()); 106 for (Object recordId : list) { 107 IdRecord linkedRecord = resolveRecordId((RecordId)recordId, vtag, repository); 107 for (Object link : list) { 108 RecordId recordId = ((Link)link).resolve(record, repository.getIdGenerator()); 109 IdRecord linkedRecord = resolveRecordId(recordId, vtag, repository); 108 110 if (linkedRecord != null) { 109 111 result.add(linkedRecord); -
projects/lily/trunk/indexer/src/test/java/org/lilycms/indexer/test/IndexerTest.java
r4065 r4070 48 48 private static SolrTestingUtility SOLR_TEST_UTIL; 49 49 private static TestLilyQueue queue; 50 private static Repository repository;50 private static HBaseRepository repository; 51 51 private static TypeManager typeManager; 52 52 private static IdGenerator idGenerator; … … 114 114 @AfterClass 115 115 public static void tearDownAfterClass() throws Exception { 116 indexer.stop(); 116 indexer.stop(); 117 repository.stop(); 117 118 118 119 TEST_UTIL.shutdownMiniCluster(); … … 303 304 Record record2 = repository.newRecord(); 304 305 record2.setRecordType("NVRecordType1", null); 305 record2.setField(nvLinkField1.getName(), record1.getId());306 record2.setField(nvLinkField1.getName(), new Link(record1.getId())); 306 307 record2 = repository.create(record2); 307 308 sendEvent(EVENT_RECORD_CREATED, record2.getId(), nvLinkField1.getId()); … … 357 358 Record record2 = repository.newRecord(); 358 359 record2.setRecordType("NVRecordType1", null); 359 record2.setField(nvLinkField1.getName(), record1.getId());360 record2.setField(nvLinkField1.getName(), new Link(record1.getId())); 360 361 record2.setField(nvfield1.getName(), "mushroom"); 361 362 record2 = repository.create(record2); … … 514 515 Record record2 = repository.newRecord(); 515 516 record2.setRecordType("VRecordType1", null); 516 record2.setField(vLinkField1.getName(), record1.getId());517 record2.setField(vLinkField1.getName(), new Link(record1.getId())); 517 518 record2.setField(liveTag.getName(), Long.valueOf(1)); 518 519 record2 = repository.create(record2); … … 642 643 Record record2 = repository.newRecord(); 643 644 record2.setRecordType("VRecordType1", null); 644 record2.setField(nvLinkField2.getName(), record1.getId());645 record2.setField(nvLinkField2.getName(), new Link(record1.getId())); 645 646 record2 = repository.create(record2); 646 647 sendEvent(EVENT_RECORD_CREATED, record2.getId(), nvLinkField2.getId()); … … 707 708 Record record2 = repository.newRecord(); 708 709 record2.setRecordType("VRecordType1", null); 709 record2.setField(vLinkField1.getName(), record1.getId());710 record2.setField(vLinkField1.getName(), new Link(record1.getId())); 710 711 record2.setField(liveTag.getName(), 1L); 711 712 record2 = repository.create(record2); … … 714 715 Record record3 = repository.newRecord(); 715 716 record3.setRecordType("VRecordType1", null); 716 record3.setField(nvLinkField2.getName(), record2.getId());717 record3.setField(nvLinkField2.getName(), new Link(record2.getId())); 717 718 record3 = repository.create(record3); 718 719 sendEvent(EVENT_RECORD_CREATED, record3.getId(), (Long)null, null, nvLinkField2.getId()); -
projects/lily/trunk/linkindex/src/main/java/org/lilycms/linkindex/LinkIndexUpdater.java
r4042 r4070 180 180 } else { 181 181 LinkCollector collector = new LinkCollector(); 182 RecordLinkExtractor.extract(versionRecord, collector, typeManager);182 RecordLinkExtractor.extract(versionRecord, collector, repository); 183 183 links = collector.getLinks(); 184 184 } -
projects/lily/trunk/linkindex/src/main/java/org/lilycms/linkindex/RecordLinkExtractor.java
r4042 r4070 13 13 * be "fully loaded" (= contain all fields). 14 14 */ 15 public static void extract(IdRecord record, LinkCollector collector, TypeManager typeManager) throws RepositoryException {15 public static void extract(IdRecord record, LinkCollector collector, Repository repository) throws RepositoryException { 16 16 for (Map.Entry<String, Object> field : record.getFieldsById().entrySet()) { 17 17 FieldType fieldType; 18 18 try { 19 fieldType = typeManager.getFieldTypeById(field.getKey());19 fieldType = repository.getTypeManager().getFieldTypeById(field.getKey()); 20 20 } catch (FieldTypeNotFoundException e) { 21 21 // Can not do anything with a field if we cannot load its type … … 26 26 27 27 if (valueType.getPrimitive().getName().equals("LINK")) { 28 extract(value, collector, fieldType.getId() );28 extract(value, collector, fieldType.getId(), record.getId(), repository.getIdGenerator()); 29 29 } else if (valueType.getPrimitive().getName().equals("BLOB")) { 30 30 // TODO implement link extraction from blob fields … … 33 33 } 34 34 35 private static void extract(Object value, LinkCollector collector, String fieldTypeId) { 35 private static void extract(Object value, LinkCollector collector, String fieldTypeId, RecordId ctx, 36 IdGenerator idGenerator) { 36 37 if (value instanceof List) { 37 38 List list = (List)value; 38 39 for (Object item : list) { 39 extract(item, collector, fieldTypeId );40 extract(item, collector, fieldTypeId, ctx, idGenerator); 40 41 } 41 42 } else if (value instanceof HierarchyPath) { 42 43 HierarchyPath path = (HierarchyPath)value; 43 44 for (Object item : path.getElements()) { 44 extract(item, collector, fieldTypeId );45 extract(item, collector, fieldTypeId, ctx, idGenerator); 45 46 } 46 } else if (value instanceof RecordId) { 47 collector.addLink((RecordId)value, fieldTypeId); 47 } else if (value instanceof Link) { 48 RecordId recordId = ((Link)value).resolve(ctx, idGenerator); 49 collector.addLink(recordId, fieldTypeId); 48 50 } else { 49 throw new RuntimeException("Encountered an unexpected kind of object from a link field: " + value.getClass().getName()); 51 throw new RuntimeException("Encountered an unexpected kind of object from a link field: " + 52 value.getClass().getName()); 50 53 } 51 54 } -
projects/lily/trunk/linkindex/src/test/java/org/lilycms/linkindex/test/LinkIndexTest.java
r4021 r4070 141 141 Record record = repository.newRecord(); 142 142 record.setRecordType(recordType.getId(), null); 143 record.setField(nonVersionedFt.getName(), ids.newRecordId("foo1"));143 record.setField(nonVersionedFt.getName(), new Link(ids.newRecordId("foo1"))); 144 144 record = repository.create(record); 145 145 … … 157 157 158 158 // Now perform an update so that there is a version 159 record.setField(versionedFt.getName(), Arrays.asList( ids.newRecordId("foo2"), ids.newRecordId("foo3")));159 record.setField(versionedFt.getName(), Arrays.asList(new Link(ids.newRecordId("foo2")), new Link(ids.newRecordId("foo3")))); 160 160 record = repository.update(record); 161 161 -
projects/lily/trunk/repository-api-tutorial/src/test/java/org/lilycms/repository/api/tutorial/Tutorial.java
r4060 r4070 16 16 import org.junit.BeforeClass; 17 17 import org.junit.Test; 18 import org.lilycms.repository.api.Blob; 19 import org.lilycms.repository.api.FieldType; 20 import org.lilycms.repository.api.IdGenerator; 21 import org.lilycms.repository.api.QName; 22 import org.lilycms.repository.api.Record; 23 import org.lilycms.repository.api.RecordId; 24 import org.lilycms.repository.api.RecordType; 25 import org.lilycms.repository.api.Repository; 26 import org.lilycms.repository.api.Scope; 27 import org.lilycms.repository.api.TypeManager; 28 import org.lilycms.repository.api.ValueType; 18 import org.lilycms.repository.api.*; 29 19 import org.lilycms.repository.impl.DFSBlobStoreAccess; 30 20 import org.lilycms.repository.impl.HBaseRepository; … … 299 289 record2.setRecordType("Book", null); 300 290 record2.setField(new QName(NS, "title"), "Fishing 2"); 301 record2.setField(new QName(NS, "sequel_to"), record1.getId());291 record2.setField(new QName(NS, "sequel_to"), new Link(record1.getId())); 302 292 record2 = repository.create(record2); 303 293 304 294 // (3) 305 RecordId sequelTo = (RecordId)record2.getField(new QName(NS, "sequel_to")); 295 Link sequelToLink = (Link)record2.getField(new QName(NS, "sequel_to")); 296 RecordId sequelTo = sequelToLink.resolve(record2.getId(), repository.getIdGenerator()); 306 297 Record linkedRecord = repository.read(sequelTo); 307 298 System.out.println(linkedRecord.getField(new QName(NS, "title"))); -
projects/lily/trunk/repository/api/src/main/java/org/lilycms/repository/api/TypeManager.java
r4042 r4070 162 162 * <tr><td>LONG</td> <td>java.lang.Long</td></tr> 163 163 * <tr><td>BOOLEAN</td> <td>java.lang.Boolean</td></tr> 164 * <tr><td>DATE</td> <td>java.util.Date</td></tr> 164 * <tr><td>DATE</td> <td>org.joda.time.LocalDate</td></tr> 165 * <tr><td>DATETIME</td> <td>org.joda.time.DateTime</td></tr> 165 166 * <tr><td>BLOB</td> <td>org.lilycms.repository.api.Blob</td></tr> 166 * <tr><td>LINK</td> <td>org.lilycms.repository.api. RecordId</td></tr>167 * <tr><td>LINK</td> <td>org.lilycms.repository.api.Link</td></tr> 167 168 * </tbody> 168 169 * </table> -
projects/lily/trunk/repository/impl/src/main/java/org/lilycms/repository/impl/AbstractTypeManager.java
r4064 r4070 57 57 // TODO get this from some configuration file 58 58 protected void registerDefaultValueTypes() { 59 // 60 // Important: 61 // 62 // When adding a type below, please update the list of built-in 63 // types in the javadoc of the method TypeManager.getValueType. 64 // 65 59 66 registerPrimitiveValueType(new StringValueType()); 60 67 registerPrimitiveValueType(new IntegerValueType()); -
projects/lily/trunk/repository/impl/src/main/java/org/lilycms/repository/impl/primitivevaluetype/LinkValueType.java
r3985 r4070 17 17 18 18 import org.lilycms.repository.api.IdGenerator; 19 import org.lilycms.repository.api.Link; 19 20 import org.lilycms.repository.api.PrimitiveValueType; 20 21 import org.lilycms.repository.api.RecordId; … … 37 38 } 38 39 39 public RecordIdfromBytes(byte[] bytes) {40 return idGenerator.fromBytes(bytes);40 public Link fromBytes(byte[] bytes) { 41 return Link.fromBytes(bytes, idGenerator); 41 42 } 42 43 43 44 public byte[] toBytes(Object value) { 44 return (( RecordId)value).toBytes();45 return ((Link)value).toBytes(); 45 46 } 46 47 -
projects/lily/trunk/repository/impl/src/test/java/org/lilycms/repository/impl/test/ValueTypeTest.java
r4067 r4070 29 29 import org.junit.BeforeClass; 30 30 import org.junit.Test; 31 import org.lilycms.repository.api.Blob; 32 import org.lilycms.repository.api.BlobStoreAccessFactory; 33 import org.lilycms.repository.api.FieldType; 34 import org.lilycms.repository.api.HierarchyPath; 35 import org.lilycms.repository.api.PrimitiveValueType; 36 import org.lilycms.repository.api.QName; 37 import org.lilycms.repository.api.Record; 38 import org.lilycms.repository.api.RecordType; 39 import org.lilycms.repository.api.Scope; 31 import org.lilycms.repository.api.*; 40 32 import org.lilycms.repository.impl.AbstractTypeManager; 41 33 import org.lilycms.repository.impl.DFSBlobStoreAccess; … … 117 109 @Test 118 110 public void testLinkType() throws Exception { 119 runValueTypeTests("linkRecordTypeId", "LINK", idGenerator.newRecordId(), idGenerator.newRecordId(), idGenerator.newRecordId());111 runValueTypeTests("linkRecordTypeId", "LINK", new Link(idGenerator.newRecordId()), new Link(idGenerator.newRecordId()), new Link(idGenerator.newRecordId())); 120 112 } 121 113
Note: See TracChangeset
for help on using the changeset viewer.