/** * Get the ID of this user. * * @return The user's ID. */ public long getUserId() { return user.getId(); }
@Override public long getKey(Entity obj) { return obj.getId(); } }
@Override public boolean apply(@Nullable Entity input) { return (input != null) && input.getId() == id; } };
@Override public EntityCollectionBuilder add(Entity e, boolean replace) { ids.add(e.getId()); return this; }
@Override public EntityCollectionBuilder add(Entity e, boolean replace) { Preconditions.checkState(store != null, "build() already called"); Preconditions.checkArgument(e.getType().equals(type)); if (!replace && store.containsKey(e.getId())) { return this; } store.add(e); hasher.putInt(e.hashCode()); for (EntityIndexBuilder ib: indexBuilders.values()) { ib.add(e); } return this; }
@Override public boolean equals(Object obj) { if (obj == this) { return true; } else if (obj instanceof Entity) { Entity oe = (Entity) obj; return getType().equals(oe.getType()) && getId() == oe.getId() && asMap().equals(oe.asMap()); } else { return false; } }
/** * 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; }
@Test public void testConfigureReader() throws IOException { ObjectReader reader = new ObjectMapper().reader(); JsonNode json = reader.readTree("{\"entity_type\": \"item\"}"); EntityFormat fmt = JSONEntityFormat.fromJSON(null, ClassLoaders.inferDefault(), json); assertThat(fmt.getEntityType(), equalTo(CommonTypes.ITEM)); LineEntityParser lep = fmt.makeParser(Collections.EMPTY_LIST); Entity res = lep.parse("{\"id\": 204, \"name\": \"hamster\", \"extra\": \"wumpus\"}"); assertThat(res, notNullValue()); assertThat(res.getId(), equalTo(204L)); assertThat(res.get(CommonAttributes.NAME), equalTo("hamster")); assertThat(res.get("extra"), (Matcher) equalTo("wumpus")); }
@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 testBareEntity() { JSONEntityFormat fmt = new JSONEntityFormat(); fmt.setEntityType(CommonTypes.USER); assertThat(fmt.getAttributes(), nullValue()); LineEntityParser lep = fmt.makeParser(Collections.EMPTY_LIST); Entity res = lep.parse("{\"$id\": 203810}"); assertThat(res, notNullValue()); assertThat(res.getId(), equalTo(203810L)); assertThat(res.getType(), equalTo(CommonTypes.USER)); assertThat(res, equalTo(Entities.create(CommonTypes.USER, 203810))); }
@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 testConfigureItemJSON() throws IOException, URISyntaxException { URI baseURI = TextEntitySourceTest.class.getResource("header-ratings.csv").toURI(); JsonNode node = reader.readTree("{\"file\": \"items.json\", \"format\": \"json\", \"entity_type\": \"item\"}"); TextEntitySource fr = TextEntitySource.fromJSON("test", node, baseURI); try (ObjectStream<Entity> stream = fr.openStream()) { Entity first = stream.readObject(); assertThat(first.getType(), equalTo(CommonTypes.ITEM)); assertThat(first.getId(), equalTo(42L)); assertThat(first.get(CommonAttributes.ENTITY_ID), equalTo(42L)); assertThat(first.get(CommonAttributes.NAME), equalTo("woozle")); Entity second = stream.readObject(); assertThat(second.getType(), equalTo(CommonTypes.ITEM)); assertThat(second.getId(), equalTo(37L)); assertThat(second.get(CommonAttributes.ENTITY_ID), equalTo(37L)); assertThat(second.get(CommonAttributes.NAME), equalTo("heffalump")); assertThat(stream.readObject(), nullValue()); } }
@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 testThingFields() { JSONEntityFormat fmt = new JSONEntityFormat(); fmt.setEntityType(CommonTypes.ITEM); fmt.addAttribute(CommonAttributes.ENTITY_ID); fmt.addAttribute("title", CommonAttributes.NAME); LineEntityParser lep = fmt.makeParser(Collections.EMPTY_LIST); Entity res = lep.parse("{\"id\": 204, \"title\": \"hamster\", \"extra\": \"wumpus\"}"); assertThat(res, notNullValue()); assertThat(res.getId(), equalTo(204L)); assertThat(res.get(CommonAttributes.NAME), equalTo("hamster")); assertThat(res.hasAttribute("extra"), equalTo(false)); }
@Test public void testThingNullField() { JSONEntityFormat fmt = new JSONEntityFormat(); fmt.setEntityType(CommonTypes.ITEM); fmt.addAttribute(CommonAttributes.ENTITY_ID); fmt.addAttribute("title", CommonAttributes.NAME); LineEntityParser lep = fmt.makeParser(Collections.EMPTY_LIST); Entity res = lep.parse("{\"id\": 204, \"title\": null, \"extra\": \"wumpus\"}"); assertThat(res, notNullValue()); assertThat(res.getId(), equalTo(204L)); assertThat(res.maybeGet(CommonAttributes.NAME), nullValue()); assertThat(res.hasAttribute("extra"), equalTo(false)); }
@Test public void testBasicParseLine() { DelimitedColumnEntityFormat format = new DelimitedColumnEntityFormat(); format.setDelimiter(","); EntityType pcType = EntityType.forName("pop_count"); format.setEntityType(pcType); format.addColumn(CommonAttributes.ITEM_ID); format.addColumn(CommonAttributes.COUNT); assertThat(format.getAttributes(), containsInAnyOrder(CommonAttributes.ENTITY_ID, CommonAttributes.ITEM_ID, CommonAttributes.COUNT)); LineEntityParser parser = format.makeParser(Collections.<String>emptyList()); assertThat(parser, notNullValue()); Entity pc = parser.parse("42,10"); assertThat(pc, notNullValue()); assertThat(pc.getId(), equalTo(1L)); assertThat(pc.get(CommonAttributes.ITEM_ID), equalTo(42L)); assertThat(pc.get(CommonAttributes.COUNT), equalTo(10)); // make sure the ID (row count) advances pc = parser.parse("78,2"); assertThat(pc, notNullValue()); assertThat(pc.getId(), equalTo(2L)); assertThat(pc.get(CommonAttributes.ITEM_ID), equalTo(78L)); assertThat(pc.get(CommonAttributes.COUNT), equalTo(2)); }
@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)); } }
assertThat(pc.getId(), equalTo(1001L)); assertThat(pc.get(CommonAttributes.ITEM_ID), equalTo(42L)); assertThat(pc.get(CommonAttributes.COUNT), equalTo(10)); assertThat(pc.getId(), equalTo(1010L)); assertThat(pc.get(CommonAttributes.ITEM_ID), equalTo(78L)); assertThat(pc.get(CommonAttributes.COUNT), equalTo(2));
@Test public void testConfigureReaderCompoundField() throws IOException { TypeToken<List<String>> sl = TypeUtils.makeListType(TypeToken.of(String.class)); TypedName<List<String>> tlName = TypedName.create("tags", sl); ObjectReader reader = new ObjectMapper().reader(); JsonNode json = reader.readTree("{\"entity_type\": \"item\", \"attributes\": {\"id\": \"long\", \"title\": {\"name\": \"name\", \"type\": \"string\"}, \"tags\": \"string[]\"}}"); JSONEntityFormat fmt = JSONEntityFormat.fromJSON(null, ClassLoaders.inferDefault(), json); assertThat(fmt.getEntityType(), equalTo(CommonTypes.ITEM)); assertThat(fmt.getDefinedAttributes(), hasEntry("id", (TypedName) CommonAttributes.ENTITY_ID)); assertThat(fmt.getDefinedAttributes(), hasEntry("title", (TypedName) CommonAttributes.NAME)); assertThat(fmt.getDefinedAttributes(), hasEntry("tags", (TypedName) tlName)); assertThat(fmt.getDefinedAttributes().size(), equalTo(3)); assertThat(fmt.getAttributes(), containsInAnyOrder(CommonAttributes.ENTITY_ID, CommonAttributes.NAME, tlName)); LineEntityParser lep = fmt.makeParser(Collections.EMPTY_LIST); Entity res = lep.parse("{\"id\": 204, \"title\": \"hamster\", \"tags\": [\"foo\", \"bar\"]}"); assertThat(res, notNullValue()); assertThat(res.getId(), equalTo(204L)); assertThat(res.get(CommonAttributes.NAME), equalTo("hamster")); assertThat(res.get(tlName), contains("foo", "bar")); } }