/** * Create a new basic entity builder. * @param id The entity ID. * @return The entity builder. */ public static EntityBuilder newBuilder(EntityType type, long id) { return newBuilder(type).setId(id); }
/** * Create a new entity builder that is initialized with a copy of an entity. * @param e The entity. * @return An entity builder initialized to build a copy of {@code e}. */ public static EntityBuilder copyBuilder(Entity e) { EntityBuilder eb = newBuilder(e.getType(), e.getId()); for (TypedName a: e.getTypedAttributeNames()) { eb.setAttribute(a, e.get(a)); } return eb; }
public Entity likeBatch(long uid, long iid, int count) { return Entities.newBuilder(EntityType.forName("like-batch")) .setId(++entityId) .setLongAttribute(CommonAttributes.USER_ID, uid) .setLongAttribute(CommonAttributes.ITEM_ID, iid) .setAttribute(CommonAttributes.COUNT, count) .build(); } }
@Test public void testBareEntity() { EntityBuilder eb = Entities.newBuilder(CommonTypes.USER, 42); Entity e = eb.build(); assertThat(e, notNullValue()); assertThat(e.getType(), equalTo(CommonTypes.USER)); assertThat(e.getId(), equalTo(42L)); assertThat(e.getTypedAttributeNames(), contains((TypedName) CommonAttributes.ENTITY_ID)); assertThat(e.getAttributeNames(), contains("id")); assertThat(e.get(CommonAttributes.ENTITY_ID), equalTo(42L)); assertThat(e.get("id"), equalTo((Object) 42L)); }
@Test public void testBareSetters() { EntityBuilder eb = Entities.newBuilder(CommonTypes.USER) .setId(42); Entity e = eb.build(); assertThat(e, notNullValue()); assertThat(e.getType(), equalTo(CommonTypes.USER)); assertThat(e.getId(), equalTo(42L)); assertThat(e.getTypedAttributeNames(), contains((TypedName) CommonAttributes.ENTITY_ID)); assertThat(e.getAttributeNames(), contains("id")); assertThat(e.hasAttribute("user"), equalTo(false)); assertThat(e.hasAttribute(CommonAttributes.USER_ID), equalTo(false)); }
@Test public void testAttributeSetters() { EntityBuilder eb = Entities.newBuilder(CommonTypes.USER) .setAttribute(CommonAttributes.ENTITY_ID, 42L); Entity e = eb.build(); assertThat(e, notNullValue()); assertThat(e.getType(), equalTo(CommonTypes.USER)); assertThat(e.getId(), equalTo(42L)); assertThat(e.getTypedAttributeNames(), contains((TypedName) CommonAttributes.ENTITY_ID)); assertThat(e.getAttributeNames(), contains("id")); assertThat(e.hasAttribute("user"), equalTo(false)); assertThat(e.hasAttribute(CommonAttributes.USER_ID), equalTo(false)); assertThat(e.get(CommonAttributes.ENTITY_ID), equalTo(42L)); }
@Test public void testQueryRejectOneEntityFluent() { Entity e = Entities.newBuilder(LIKE, 1) .setAttribute(CommonAttributes.USER_ID, 42L) .setAttribute(CommonAttributes.ITEM_ID, 39L) .build(); EntityCollectionDAO dao = EntityCollectionDAO.create(e); List<Entity> results = dao.query(LIKE) .withAttribute(CommonAttributes.USER_ID, 39L) .get(); assertThat(results, hasSize(0)); }
@Test public void testBasicEntity() { Entity e = Entities.newBuilder(CommonTypes.USER, 42) .setAttribute(CommonAttributes.NAME, "HACKEM MUCHE") .build(); assertThat(e, notNullValue()); assertThat(e.getType(), equalTo(CommonTypes.USER)); assertThat(e.getId(), equalTo(42L)); assertThat(e.getTypedAttributeNames(), containsInAnyOrder((TypedName) CommonAttributes.NAME, CommonAttributes.ENTITY_ID)); assertThat(e.getAttributeNames(), containsInAnyOrder("name", "id")); assertThat(e.get("name"), equalTo((Object) "HACKEM MUCHE")); assertThat(e.get(CommonAttributes.NAME), equalTo("HACKEM MUCHE")); assertThat(e.hasAttribute("name"), equalTo(true)); assertThat(e.hasAttribute("user"), equalTo(false)); assertThat(e.hasAttribute(CommonAttributes.NAME), equalTo(true)); assertThat(e.hasAttribute(CommonAttributes.USER_ID), equalTo(false)); assertThat(e.get(CommonAttributes.ENTITY_ID), equalTo(42L)); } }
@Test public void testConvertToRating() { Entity e = Entities.newBuilder(CommonTypes.RATING) .setId(10) .setAttribute(CommonAttributes.USER_ID, 15L) .setAttribute(CommonAttributes.ITEM_ID, 25L) .setAttribute(CommonAttributes.RATING, 3.5) .setAttribute(CommonAttributes.TIMESTAMP, 2308010L) .build(); Rating rating = Entities.project(e, Rating.class); assertThat(rating.getId(), equalTo(10L)); assertThat(rating.getUserId(), equalTo(15L)); assertThat(rating.getValue(), equalTo(3.5)); assertThat(rating.getTimestamp(), equalTo(2308010L)); assertThat(rating.equals(e), equalTo(true)); assertThat(e.equals(rating), equalTo(true)); } }
@Test public void testAttributeMatch() { EntityQuery<Entity> q = EntityQuery.newBuilder(CommonTypes.RATING) .addFilterField(CommonAttributes.USER_ID, 42L) .build(); assertThat(q.matches(Entities.create(CommonTypes.RATING, 42L)), equalTo(false)); assertThat(q.matches(Entities.create(CommonTypes.USER, 42L)), equalTo(false)); assertThat(q.matches(Entities.newBuilder(CommonTypes.RATING, 42L) .setAttribute(CommonAttributes.USER_ID, 42L) .build()), equalTo(true)); assertThat(q.matches(Entities.newBuilder(CommonTypes.RATING, 42L) .setAttribute(CommonAttributes.USER_ID, 78L) .build()), equalTo(false)); } }
@Test public void testGroupOneEntity() { Entity e = Entities.newBuilder(LIKE, 1) .setAttribute(CommonAttributes.USER_ID, 42L) .setAttribute(CommonAttributes.ITEM_ID, 39L) .build(); EntityCollectionDAO dao = EntityCollectionDAO.create(e); EntityQuery<Entity> query = EntityQuery.newBuilder(LIKE) .build(); List<IdBox<List<Entity>>> results = ObjectStreams.makeList(dao.streamEntityGroups(query, CommonAttributes.USER_ID)); assertThat(results, hasSize(1)); IdBox<List<Entity>> box = results.get(0); assertThat(box.getId(), equalTo(42L)); assertThat(box.getValue(), contains(Entities.copyBuilder(e).build())); }
@Test public void testFindEntity() { Entity rating = Entities.newBuilder(CommonTypes.RATING) .setId(37) .setAttribute(CommonAttributes.USER_ID, 10L) .setAttribute(CommonAttributes.ITEM_ID, 203L) .setAttribute(CommonAttributes.RATING, 3.5) .build(); EntityCollection ec = EntityCollection.newBuilder(CommonTypes.RATING) .add(rating) .build(); assertThat(ec.getType(), equalTo(CommonTypes.RATING)); assertThat(ec.size(), equalTo(1)); assertThat(ec.lookup(37), equalTo(rating)); assertThat(Lists.newArrayList(ec), contains(rating)); assertThat(ec.find(CommonAttributes.USER_ID, 10L), contains(rating)); assertThat(ec.find(CommonAttributes.ITEM_ID, 10L), hasSize(0)); }
@Test public void testQuerySortEntities() { Entity e1 = Entities.newBuilder(LIKE, 1) .setAttribute(CommonAttributes.USER_ID, 42L) .setAttribute(CommonAttributes.ITEM_ID, 39L) .build(); Entity e2 = Entities.newBuilder(LIKE, 2) .setAttribute(CommonAttributes.USER_ID, 42L) .setAttribute(CommonAttributes.ITEM_ID, 28L) .build(); EntityCollectionDAO dao = EntityCollectionDAO.create(e1, e2); EntityQuery<Entity> query = EntityQuery.newBuilder(LIKE) .addSortKey(CommonAttributes.ITEM_ID) .build(); List<Entity> results = ObjectStreams.makeList(dao.streamEntities(query)); assertThat(results, contains(e2, e1)); }
@Test public void testFindIndexedEntity() { Entity rating = Entities.newBuilder(CommonTypes.RATING) .setId(37) .setAttribute(CommonAttributes.USER_ID, 10L) .setAttribute(CommonAttributes.ITEM_ID, 203L) .setAttribute(CommonAttributes.RATING, 3.5) .build(); EntityCollection ec = EntityCollection.newBuilder(CommonTypes.RATING) .addIndex(CommonAttributes.USER_ID) .add(rating) .build(); assertThat(ec.getType(), equalTo(CommonTypes.RATING)); assertThat(ec.size(), equalTo(1)); assertThat(ec.lookup(37), equalTo(rating)); assertThat(Lists.newArrayList(ec), contains(rating)); assertThat(ec.find(CommonAttributes.USER_ID, 10L), contains(rating)); assertThat(ec.find(CommonAttributes.ITEM_ID, 10L), hasSize(0)); }
@Test public void testIndexEntityAfterAddStarted() { Entity rating = Entities.newBuilder(CommonTypes.RATING) .setId(37) .setAttribute(CommonAttributes.USER_ID, 10L) .setAttribute(CommonAttributes.ITEM_ID, 203L) .setAttribute(CommonAttributes.RATING, 3.5) .build(); EntityCollection ec = EntityCollection.newBuilder(CommonTypes.RATING) .add(rating) .addIndex(CommonAttributes.USER_ID) .build(); assertThat(ec.getType(), equalTo(CommonTypes.RATING)); assertThat(ec.size(), equalTo(1)); assertThat(ec.lookup(37), equalTo(rating)); assertThat(Lists.newArrayList(ec), contains(rating)); assertThat(ec.find(CommonAttributes.USER_ID, 10L), contains(rating)); assertThat(ec.find(CommonAttributes.ITEM_ID, 10L), hasSize(0)); } }
@Test public void testQueryRejectOneEntity() { Entity e = Entities.newBuilder(LIKE, 1) .setAttribute(CommonAttributes.USER_ID, 42L) .setAttribute(CommonAttributes.ITEM_ID, 39L) .build(); EntityCollectionDAO dao = EntityCollectionDAO.create(e); EntityQuery<Entity> query = EntityQuery.newBuilder(LIKE) .addFilterField(CommonAttributes.USER_ID, 39L) .build(); List<Entity> results = ObjectStreams.makeList(dao.streamEntities(query)); assertThat(results, hasSize(0)); }
@Test public void testGetLike() { EntityCollectionDAO dao = EntityCollectionDAO.create(Entities.newBuilder(LIKE) .setId(1) .setAttribute(CommonAttributes.USER_ID, 42L) .setAttribute(CommonAttributes.ITEM_ID, 39L) .build()); RatingVectorPDAO source = new EntityCountRatingVectorPDAO(dao, LIKE); assertThat(source.userRatingVector(42), hasEntry(39L, 1.0)); }
@Test public void testQueryPassOneEntity() { Entity e = Entities.newBuilder(LIKE, 1) .setAttribute(CommonAttributes.USER_ID, 42L) .setAttribute(CommonAttributes.ITEM_ID, 39L) .build(); EntityCollectionDAO dao = EntityCollectionDAO.create(e); EntityQuery<Entity> query = EntityQuery.newBuilder(LIKE) .build(); List<Entity> results = ObjectStreams.makeList(dao.streamEntities(query)); assertThat(results, contains(e)); query = EntityQuery.newBuilder(LIKE) .addFilterField(CommonAttributes.USER_ID, 42L) .build(); results = ObjectStreams.makeList(dao.streamEntities(query)); assertThat(results, contains(e)); }
@Test public void testNullProject() { Entity e = Entities.newBuilder(CommonTypes.RATING) .setId(10) .setAttribute(CommonAttributes.USER_ID, 15L) .setAttribute(CommonAttributes.ITEM_ID, 25L) .setAttribute(CommonAttributes.RATING, 3.5) .setAttribute(CommonAttributes.TIMESTAMP, 2308010L) .build(); Entity e2 = Entities.project(e, Entity.class); assertThat(e2, sameInstance(e)); }
@Test public void testGetLike() { EntityCollectionDAO dao = EntityCollectionDAO.create(Entities.newBuilder(LIKE) .setId(1) .setAttribute(CommonAttributes.USER_ID, 42L) .setAttribute(CommonAttributes.ITEM_ID, 39L) .setAttribute(CommonAttributes.COUNT, 5) .build()); RatingVectorPDAO source = new CountSumRatingVectorPDAO(dao, LIKE); assertThat(source.userRatingVector(42), hasEntry(39L, 5.0)); }