@Override public Optional<Isl> findByEndpoints(SwitchId srcSwitchId, int srcPort, SwitchId dstSwitchId, int dstPort) { Filter srcSwitchFilter = createSrcSwitchFilter(srcSwitchId); Filter srcPortFilter = new Filter(SRC_PORT_PROPERTY_NAME, ComparisonOperator.EQUALS, srcPort); Filter dstSwitchFilter = createDstSwitchFilter(dstSwitchId); Filter dstPortFilter = new Filter(DST_PORT_PROPERTY_NAME, ComparisonOperator.EQUALS, dstPort); Collection<Isl> isls = getSession().loadAll(getEntityType(), srcSwitchFilter.and(srcPortFilter).and(dstSwitchFilter).and(dstPortFilter), DEPTH_LOAD_ENTITY); if (isls.size() > 1) { throw new PersistenceException(format("Found more that 1 ISL entity with %s_%d - %s_%d", srcSwitchId, srcPort, dstSwitchId, dstPort)); } return isls.isEmpty() ? Optional.empty() : Optional.of(isls.iterator().next()); }
@Test public void joinFiltersWithAndMethod() { Filter filter1 = new Filter("property1", ComparisonOperator.EQUALS, "value1"); Filter filter2 = new Filter("property2", ComparisonOperator.EQUALS, "value2"); Filters andFilter = filter1.and(filter2); assertThat(filter2.getBooleanOperator()).isEqualTo(BooleanOperator.AND); Iterator<Filter> iterator = andFilter.iterator(); assertThat(iterator.next()).isEqualTo(filter1); assertThat(iterator.next()).isEqualTo(filter2); }
@Override public Collection<FlowSegment> findByFlowIdAndCookie(String flowId, long flowCookie) { Filter flowIdFilter = new Filter(FLOW_ID_PROPERTY_NAME, ComparisonOperator.EQUALS, flowId); Filter cookieFilter = new Filter(COOKIE_PROPERTY_NAME, ComparisonOperator.EQUALS, flowCookie); return getSession().loadAll(getEntityType(), flowIdFilter.and(cookieFilter), DEPTH_LOAD_ENTITY); }
@Override public Collection<Isl> findBySrcEndpoint(SwitchId srcSwitchId, int srcPort) { Filter srcSwitchFilter = createSrcSwitchFilter(srcSwitchId); Filter srcPortFilter = new Filter(SRC_PORT_PROPERTY_NAME, ComparisonOperator.EQUALS, srcPort); return getSession().loadAll(getEntityType(), srcSwitchFilter.and(srcPortFilter), DEPTH_LOAD_ENTITY); }
@Override public Collection<Isl> findByDestEndpoint(SwitchId dstSwitchId, int dstPort) { Filter dstSwitchFilter = createDstSwitchFilter(dstSwitchId); Filter dstPortFilter = new Filter(DST_PORT_PROPERTY_NAME, ComparisonOperator.EQUALS, dstPort); return getSession().loadAll(getEntityType(), dstSwitchFilter.and(dstPortFilter), DEPTH_LOAD_ENTITY); }
@Test public void loadRatingByUserName() { Filter userNameFilter = new Filter("name", ComparisonOperator.EQUALS, "Michal"); Filter ratingFilter = new Filter("stars", ComparisonOperator.EQUALS, 5); userNameFilter.setNestedPath( new Filter.NestedPathSegment("user", User.class) ); Collection<Rating> ratings = session.loadAll(Rating.class, userNameFilter.and(ratingFilter)); assertThat(ratings).hasSize(1); } @Test
@Test public void loadFilmByUserAndRatingUserPlays() { Filter userFilter = new Filter("name", ComparisonOperator.EQUALS, "Michal"); userFilter.setNestedPath( new Filter.NestedPathSegment("ratings", Rating.class), new Filter.NestedPathSegment("user", User.class) ); Filter playsFilter = new Filter("level", ComparisonOperator.EQUALS, "ok"); playsFilter.setOwnerEntityType(Movie.class); playsFilter.setNestedPath( new Filter.NestedPathSegment("ratings", Rating.class), new Filter.NestedPathSegment("user", User.class), new Filter.NestedPathSegment("plays", Plays.class) ); Filters filters = userFilter.and(playsFilter); Collection<Movie> films = session.loadAll(Movie.class, filters); assertThat(films).hasSize(2); }