public ProjectVersionRef getTargetGAV() { if ( root != null ) { return root; } else if ( rels.length > 0 ) { return rels[rels.length - 1].getTarget() .asProjectVersionRef(); } return null; }
public Set<ProjectVersionRef> getAllParticipatingProjects() { final Set<ProjectVersionRef> refs = new HashSet<ProjectVersionRef>(); for ( final ProjectRelationship<?, ?> rel : relationships ) { refs.add( rel.getDeclaring() ); refs.add( rel.getTarget() .asProjectVersionRef() ); } return refs; }
public boolean hasCycle() { if ( rels.length < 1 ) { return false; } final Set<ProjectVersionRef> declared = new HashSet<ProjectVersionRef>( rels.length ); for ( final ProjectRelationship<?, ?> item : rels ) { // NOTE: order is important here, in case it's a terminal parent relationship. if ( declared.contains( item.getTarget() .asProjectVersionRef() ) || !declared.add( item.getDeclaring() ) ) { return true; } } return false; }
@Override public List<ProjectVersionRef> getPathRefs( final ViewParams params, final GraphPath<?> path ) { if ( path != null && !( path instanceof JungGraphPath ) ) { throw new IllegalArgumentException( "Cannot get target GAV for: " + path + ". This is not a JungGraphPath instance!" ); } final JungGraphPath gp = (JungGraphPath) path; final List<ProjectVersionRef> refs = new ArrayList<ProjectVersionRef>(); for ( final ProjectRelationship<?, ?> rel : gp ) { if ( refs.isEmpty() ) { refs.add( rel.getDeclaring() ); } refs.add( rel.getTarget() .asProjectVersionRef() ); } return refs; }
public int indexOf( final ProjectVersionRef ref ) { int targetIdx = -1; for ( int i = 0; i < relationships.size(); i++ ) { final ProjectRelationship<?, ?> rel = relationships.get( i ); if ( rel.getDeclaring() .equals( ref ) ) { return i; } // if we find the ref we're after as a TARGET, log it. // if, at the end, we haven't found it as a DECLARING ref, return // the index of the relationship that lists it as a target. if ( targetIdx < 0 && rel.getTarget() .asProjectVersionRef() .equals( ref ) ) { targetIdx = i; } } return targetIdx; }
@Override public GraphPath<?> createPath( final GraphPath<?> parent, final ProjectRelationship<?, ?> child ) { try { child.getTarget() .getVersionSpec(); } catch ( final InvalidVersionSpecificationException e ) { return null; } if ( parent != null && !( parent instanceof JungGraphPath ) ) { throw new IllegalArgumentException( "Cannot get child path for: " + parent + ". This is not a JungGraphPath instance!" ); } return new JungGraphPath( (JungGraphPath) parent, child ); }
@Override public boolean preCheck( final ProjectRelationship<?, ?> relationship, final List<ProjectRelationship<?, ?>> path ) { if ( rel.getDeclaring() .equals( rel.getTarget() .asProjectVersionRef() ) ) { return false; } final Logger logger = LoggerFactory.getLogger( getClass() ); logger.debug( "Checking for cycle: {}\n\nPath: {}\n\n", relationship, new JoinString( "\n", path ) ); final ProjectVersionRef from = rel.getDeclaring(); if ( from.equals( relationship.getTarget() .asProjectVersionRef() ) ) { final List<ProjectRelationship<?, ?>> cycle = new ArrayList<ProjectRelationship<?, ?>>( path ); cycle.add( rel ); cycles.add( new EProjectCycle( cycle ) ); logger.warn( "CYCLE: {}", join( cycle, ", " ) ); return false; } return true; } }
@Override public GraphPath<?> createPath( final ProjectRelationship<?, ?>... rels ) { if ( rels.length > 0 ) { try { rels[rels.length - 1].getTarget() .getVersionSpec(); } catch ( final InvalidVersionSpecificationException e ) { return null; } } return new JungGraphPath( rels ); }
@Override public boolean introducesCycle( final ViewParams params, final ProjectRelationship<?, ?> rel ) { final CycleDetectionTraversal traversal = new CycleDetectionTraversal( rel ); dfsTraverse( params, traversal, rel.getTarget() .asProjectVersionRef() ); return !traversal.getCycles() .isEmpty(); }
refs.add( rel.getTarget() .asProjectVersionRef() );
@Override public ProjectVersionRef getManagedTargetFor( final ProjectVersionRef target, final GraphPath<?> path, final RelationshipType type ) { if ( path == null ) { return null; } if ( !( path instanceof JungGraphPath ) ) { throw new IllegalArgumentException( "Cannot process GraphPath's from other implementations. (Non-Jung GraphPath detected: " + path + ")" ); } final ProjectRef targetGA = target.asProjectRef(); final JungGraphPath jungpath = (JungGraphPath) path; for ( final ProjectRelationship<?, ?> ref : jungpath ) { final Collection<ProjectRelationship<?, ?>> outEdges = graph.getOutEdges( ref.getDeclaring() ); for ( final ProjectRelationship<?, ?> edge : outEdges ) { if ( edge.isManaged() && type == edge.getType() && targetGA.equals( edge.getTarget() ) ) { return edge.getTarget() .asProjectVersionRef(); } } } return null; }
@Override public MappedProjectResult getProjectParent( final ProjectGraphRequest recipe ) throws CartoDataException, CartoRequestException { MappedProjectResult result = new MappedProjectResult(); final ProjectProjector<ProjectVersionRef> extractor = ( ref, graph ) -> { final Set<ProjectRelationship<?, ?>> rels = graph.getDirectRelationships( ref ); for ( final ProjectRelationship<?, ?> rel : rels ) { if ( rel instanceof ParentRelationship ) { return rel.getTarget(); } } return null; }; final ProjectCollector<ProjectVersionRef> consumer = result::addProject; resolver.resolveAndExtractSingleGraph( ParentFilter.EXCLUDE_TERMINAL_PARENTS, recipe, new MatchingProjectFunction<>( recipe, extractor, consumer ) ); return result; }
@Override public MappedProjectResult getProjectParent( final ProjectGraphRequest recipe ) throws CartoDataException, CartoRequestException { MappedProjectResult result = new MappedProjectResult(); final ProjectProjector<ProjectVersionRef> extractor = ( ref, graph ) -> { final Set<ProjectRelationship<?, ?>> rels = graph.getDirectRelationships( ref ); for ( final ProjectRelationship<?, ?> rel : rels ) { if ( rel instanceof ParentRelationship ) { return rel.getTarget(); } } return null; }; final ProjectCollector<ProjectVersionRef> consumer = result::addProject; resolver.resolveAndExtractSingleGraph( ParentFilter.EXCLUDE_TERMINAL_PARENTS, recipe, new MatchingProjectFunction<>( recipe, extractor, consumer ) ); return result; }
@Override public boolean accept( final ProjectRelationship<?, ?> rel ) { boolean result = false; if ( rel.getType() == PARENT ) { result = true; } else if ( rel.getType() == BOM ) { result = true; } else if ( !acceptManaged && rel.isManaged() ) { result = false; } else if ( rel.getType() == DEPENDENCY ) { result = ( excludes == null || !excludes.contains( rel.getTarget() .asProjectRef() ) ); } else { result = true; } // logger.info( "{}: accept({})", Boolean.toString( result ) // .toUpperCase(), rel ); return result; }
@Override public boolean introducesCycle( final ViewParams params, final ProjectRelationship<?, ?> rel ) { checkClosed(); final ProjectVersionRef to = rel.getDeclaring(); final ProjectVersionRef from = rel.getTarget() .asProjectVersionRef(); final Node toNode = getNode( to ); final Node fromNode = getNode( from ); if ( toNode == null || fromNode == null ) { return false; } logger.debug( "Checking for existence of path from: {} to: {} in global database", fromNode, toNode ); final PathExistenceVisitor collector = new PathExistenceVisitor( toNode ); collectAtlasRelationships( params, collector, Collections.singleton( fromNode ), false, Uniqueness.RELATIONSHIP_GLOBAL ); return collector.isFound(); }
@Override public boolean accept( final ProjectRelationship<?, ?> rel ) { boolean result = false; if ( rel.getType() == PARENT ) { result = true; } else if ( rel.getType() == BOM ) { result = true; } else if ( !acceptManaged && rel.isManaged() ) { result = false; } else if ( rel.getType() == DEPENDENCY ) { result = ( excludes == null || !excludes.contains( rel.getTarget() .asProjectRef() ) ); } else { result = true; } // logger.info( "{}: accept({})", Boolean.toString( result ) // .toUpperCase(), rel ); return result; }
result = ( excludes == null || !excludes.contains( rel.getTarget().asProjectRef() ) ) && filter.accept( rel );
public AbstractSimpleProjectRelationship( final ProjectRelationship<R, T> relationship ) { this.sources.addAll( relationship.getSources() ); this.declaring = new SimpleProjectVersionRef( relationship.getDeclaring() ); this.pomLocation = relationship.getPomLocation(); this.index = relationship.getIndex(); this.managed = relationship.isManaged(); this.inherited = relationship.isInherited(); this.mixin = relationship.isMixin(); this.type = relationship.getType(); this.target = cloneTarget( relationship.getTarget() ); }
@Override public boolean accept( final ProjectRelationship<?, ?> rel ) { boolean result = false; if ( rel.getType() == PARENT ) { result = true; } else if ( rel.getType() == BOM ) { result = true; } else if ( !acceptManaged && rel.isManaged() ) { result = false; } else if ( rel.getType() == DEPENDENCY ) { result = ( excludes == null || !excludes.contains( rel.getTarget().asProjectRef() ) ) && filter.accept( rel ); } else { result = filter.accept( rel ); } // logger.info( "{}: accept({})", Boolean.toString( result ) // .toUpperCase(), rel ); return result; }
@Override public boolean accept( final ProjectRelationship<?, ?> rel ) { boolean result = false; if ( rel.getType() == PARENT ) { result = true; } else if ( rel.getType() == BOM ) { result = true; } else if ( !acceptManaged && rel.isManaged() ) { result = false; } else if ( rel.getType() == DEPENDENCY ) { result = ( excludes == null || !excludes.contains( rel.getTarget().asProjectRef() ) ) && filter.accept( rel ); } else { result = filter.accept( rel ); } // logger.info( "{}: accept({})", Boolean.toString( result ) // .toUpperCase(), rel ); return result; }