@Nullable @Override public <E extends Entity> E lookupEntity(EntityType type, long id, Class<E> view) { Entity entity = lookupEntity(type, id); if (entity == null) { return null; } else { return Entities.project(entity, view); } }
/** * Create a projection function that maps entities to a new view. * @param viewClass The target view class type. * @param <E> The entity type. * @return A function that will project entities. */ @SuppressWarnings("unchecked") public static <E extends Entity> Function<Entity,E> projection(final Class<E> viewClass) { if (viewClass.equals(Entity.class)) { return (Function) Functions.identity(); } else { return n -> project(n, viewClass); } }
@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 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)); }
@Nullable @Override public <E extends Entity> E lookupEntity(EntityType type, long id, Class<E> view) { Entity entity = lookupEntity(type, id); if (entity == null) { return null; } else { return Entities.project(entity, view); } }
/** * Create a projection function that maps entities to a new view. * @param viewClass The target view class type. * @param <E> The entity type. * @return A function that will project entities. */ @SuppressWarnings("unchecked") public static <E extends Entity> Function<Entity,E> projection(final Class<E> viewClass) { if (viewClass.equals(Entity.class)) { return (Function) Functions.identity(); } else { return n -> project(n, viewClass); } }