Examples of DAG


Examples of org.codehaus.plexus.util.dag.DAG

     * </ul>
     */
    public static List<Project> getSortedProjects( Collection<Project> projects, Logger logger )
        throws CycleDetectedException
    {
        DAG dag = new DAG();

        Map<String, Project> projectMap = new HashMap<String, Project>();

        for ( Project project : projects )
        {
            String id = getProjectId( project );

            if ( dag.getVertex( id ) != null )
            {
                logger.warn( "Project '" + id + "' is duplicated in the reactor" );
            }

            dag.addVertex( id );

            projectMap.put( id, project );
        }

        for ( Project project : projects )
        {
            String id = getProjectId( project );

            // Dependencies
            for ( Object o : project.getDependencies() )
            {
                ProjectDependency dependency = (ProjectDependency) o;

                String dependencyId = getDependencyId( dependency );

                if ( dag.getVertex( dependencyId ) != null )
                {
                    dag.addEdge( id, dependencyId );
                }
            }

            // Parent
            ProjectDependency parent = project.getParent();

            if ( parent != null )
            {
                String parentId = getDependencyId( parent );

                if ( dag.getVertex( parentId ) != null )
                {
                    // Parent is added as an edge, but must not cause a cycle - so we remove any other edges it has in conflict
                    if ( dag.hasEdge( parentId, id ) )
                    {
                        dag.removeEdge( parentId, id );
                    }
                    dag.addEdge( id, parentId );
                }
            }
        }

        List<Project> sortedProjects = new ArrayList<Project>();
View Full Code Here

Examples of org.eclipse.ui.internal.texteditor.rulers.DAG

    for (int i= 0; i < array.length; i++) {
      RulerColumnDescriptor desc= (RulerColumnDescriptor) array[i];
      descriptorsById.put(desc.getId(), desc);
    }
   
    DAG dag= new DAG();
    for (int i= 0; i < array.length; i++) {
      RulerColumnDescriptor desc= (RulerColumnDescriptor) array[i];
      dag.addVertex(desc);
     
      Set before= desc.getPlacement().getConstraints();
      for (Iterator it= before.iterator(); it.hasNext();) {
        RulerColumnPlacementConstraint constraint= (RulerColumnPlacementConstraint) it.next();
        String id= constraint.getId();
        RulerColumnDescriptor target= (RulerColumnDescriptor) descriptorsById.get(id);
        if (target == null) {
          noteUnknownTarget(desc, id);
        } else {
          boolean success;
          if (constraint.isBefore())
            success= dag.addEdge(desc, target);
          else
            success= dag.addEdge(target, desc);
          if (!success)
            noteCycle(desc, target);
        }
      }
    }
   
    Comparator gravityComp= new Comparator() {
      public int compare(Object o1, Object o2) {
        float diff= ((RulerColumnDescriptor) o1).getPlacement().getGravity() - ((RulerColumnDescriptor) o2).getPlacement().getGravity();
        if (diff == 0)
          return 0;
        if (diff < 0)
          return -1;
        return 1;
      }
    };
   
    /* Topological sort - always select the source with the least gravity */
    Set toProcess= dag.getSources();
    int index= 0;
    while (!toProcess.isEmpty()) {
      Object next= Collections.min(toProcess, gravityComp);
      array[index]= next;
      index++;
      dag.removeVertex(next);
      toProcess= dag.getSources();
    }
    Assert.isTrue(index == array.length);
   
    ListIterator it= descriptors.listIterator();
    for (int i= 0; i < index; i++) {
View Full Code Here
TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.