public GraphAnalysisRequest build() { return new GraphAnalysisRequest( graphRequests ); }
@Override public GraphDifference<ProjectVersionRef> intersectingTargetDrift( final GraphAnalysisRequest request ) throws CartoDataException, CartoRequestException { List<MultiGraphRequest> requests = request.getGraphRequests(); if ( requests == null || requests.size() != 2 ) { throw new CartoRequestException( "You must specify exactly 2 graph requests to calculate a difference!" ); } MultiGraphRequest from = requests.get( 0 ); MultiGraphRequest to = requests.get( 1 ); ValueHolder<Map<ProjectRef, Set<ProjectVersionRef>>> fromMap = new ValueHolder<>(); ValueHolder<Map<ProjectRef, Set<ProjectVersionRef>>> toMap = new ValueHolder<>(); graphResolver.resolveAndExtractMultiGraph( AnyFilter.INSTANCE, from, ( allProjects, allRelationships, roots ) -> allProjects.get(), mapTargetsToGA( fromMap ) ); graphResolver.resolveAndExtractMultiGraph( AnyFilter.INSTANCE, to, ( allProjects, allRelationships, roots ) -> allProjects.get(), mapTargetsToGA( toMap ) ); Map<ProjectRef, Set<ProjectVersionRef>> firstAll = fromMap.get(); Map<ProjectRef, Set<ProjectVersionRef>> secondAll = toMap.get(); reduceToIntersection( firstAll, secondAll ); final Set<ProjectVersionRef> removed = new HashSet<>(); firstAll.values().stream().filter( refSet -> refSet != null ).forEach( removed::addAll ); final Set<ProjectVersionRef> added = new HashSet<>(); secondAll.values().stream().filter( refSet -> refSet != null ).forEach( added::addAll ); return new GraphDifference<>( from, to, added, removed ); }
@Override public GraphDifference<ProjectVersionRef> intersectingTargetDrift( final GraphAnalysisRequest request ) throws CartoDataException, CartoRequestException { List<MultiGraphRequest> requests = request.getGraphRequests(); if ( requests == null || requests.size() != 2 ) { throw new CartoRequestException( "You must specify exactly 2 graph requests to calculate a difference!" ); } MultiGraphRequest from = requests.get( 0 ); MultiGraphRequest to = requests.get( 1 ); ValueHolder<Map<ProjectRef, Set<ProjectVersionRef>>> fromMap = new ValueHolder<>(); ValueHolder<Map<ProjectRef, Set<ProjectVersionRef>>> toMap = new ValueHolder<>(); graphResolver.resolveAndExtractMultiGraph( AnyFilter.INSTANCE, from, ( allProjects, allRelationships, roots ) -> allProjects.get(), mapTargetsToGA( fromMap ) ); graphResolver.resolveAndExtractMultiGraph( AnyFilter.INSTANCE, to, ( allProjects, allRelationships, roots ) -> allProjects.get(), mapTargetsToGA( toMap ) ); Map<ProjectRef, Set<ProjectVersionRef>> firstAll = fromMap.get(); Map<ProjectRef, Set<ProjectVersionRef>> secondAll = toMap.get(); reduceToIntersection( firstAll, secondAll ); final Set<ProjectVersionRef> removed = new HashSet<>(); firstAll.values().stream().filter( refSet -> refSet != null ).forEach( removed::addAll ); final Set<ProjectVersionRef> added = new HashSet<>(); secondAll.values().stream().filter( refSet -> refSet != null ).forEach( added::addAll ); return new GraphDifference<>( from, to, added, removed ); }
@Override public GraphDifference<ProjectRelationship<?, ?>> difference( final GraphAnalysisRequest request ) throws CartoDataException, CartoRequestException { List<MultiGraphRequest> requests = request.getGraphRequests(); if ( requests == null || requests.size() != 2 ) { throw new CartoRequestException( "You must specify exactly 2 graph requests to calculate a difference!" ); } MultiGraphRequest from = requests.get( 0 ); MultiGraphRequest to = requests.get( 1 ); ValueHolder<Set<ProjectRelationship<?, ?>>> fromRels = new ValueHolder<>(); ValueHolder<Set<ProjectRelationship<?, ?>>> toRels = new ValueHolder<>(); graphResolver.resolveAndExtractMultiGraph( AnyFilter.INSTANCE, from, ( allProjects, allRelationships, roots ) -> allRelationships.get(), ( elements, graphs ) -> fromRels.set( elements ) ); graphResolver.resolveAndExtractMultiGraph( AnyFilter.INSTANCE, to, ( allProjects, allRelationships, roots ) -> allRelationships.get(), ( elements, graphs ) -> toRels.set( elements ) ); final Set<ProjectRelationship<?, ?>> removed = new HashSet<>( fromRels.get() ); removed.removeAll( toRels.get() ); final Set<ProjectRelationship<?, ?>> added = new HashSet<>( toRels.get() ); added.removeAll( fromRels.get() ); return new GraphDifference<>( from, to, added, removed ); }
public GraphAnalysisRequest build() { return new GraphAnalysisRequest( graphRequests ); }
@Override public GraphDifference<ProjectRelationship<?, ?>> difference( final GraphAnalysisRequest request ) throws CartoDataException, CartoRequestException { List<MultiGraphRequest> requests = request.getGraphRequests(); if ( requests == null || requests.size() != 2 ) { throw new CartoRequestException( "You must specify exactly 2 graph requests to calculate a difference!" ); } MultiGraphRequest from = requests.get( 0 ); MultiGraphRequest to = requests.get( 1 ); ValueHolder<Set<ProjectRelationship<?, ?>>> fromRels = new ValueHolder<>(); ValueHolder<Set<ProjectRelationship<?, ?>>> toRels = new ValueHolder<>(); graphResolver.resolveAndExtractMultiGraph( AnyFilter.INSTANCE, from, ( allProjects, allRelationships, roots ) -> allRelationships.get(), ( elements, graphs ) -> fromRels.set( elements ) ); graphResolver.resolveAndExtractMultiGraph( AnyFilter.INSTANCE, to, ( allProjects, allRelationships, roots ) -> allRelationships.get(), ( elements, graphs ) -> toRels.set( elements ) ); final Set<ProjectRelationship<?, ?>> removed = new HashSet<>( fromRels.get() ); removed.removeAll( toRels.get() ); final Set<ProjectRelationship<?, ?>> added = new HashSet<>( toRels.get() ); added.removeAll( fromRels.get() ); return new GraphDifference<>( from, to, added, removed ); }