Prioridades de restricciones (DJ)

Un conjunto de restricciones puede causar conflictos. Esto significa que no todas las restricciones se puede satisfacer al mismo tiempo. Por ejemplo, es imposible obligar a dos nodos a que estén en el mismo nivel mediante una ibm_ilog.graphlayout.hierarchical.HierarchicalSameLevelConstraint al mismo tiempo que se obliga a uno de los nodos a colocarse en un nivel más alto que el otro nodo mediante una ibm_ilog.graphlayout.hierarchical.HierarchicalRelativeLevelConstraint. En este caso, una de las dos restricciones debe omitirse durante la ejecución del diseño.
En general, los conflictos de restricciones se resuelven haciendo caso omiso de las restricciones que tienen menor prioridad mientras se satisfacen las restricciones con la prioridad más alta. Las reglas siguientes describen las prioridades de las restricciones detalladamente.
  • Las restricciones que afectan al nivel en que se coloca un nodo se aplican antes que las restricciones que afectan a la posición del nodo dentro de un nivel.
  • La ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.HierarchicalExtremityConstraint se convierte en una secuencia de restricciones con prioridad alta.
    Por ejemplo, la restricción de extremo con el lado sur se convierte en varias restricciones de mismo nivel y varias restricciones de nivel relativo.
  • Nunca entran en conflicto entre sí. Dominan a las demás restricciones, incluso el índice de nivel especificado.
  • La ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.HierarchicalLevelRangeConstraint (y la especificación directa de índice de nivel) tiene la segunda prioridad más alta.
    Si se obliga a colocar dos nodos en el mismo nivel pero los intervalos de nivel que se han especificado son inconexos, se hace caso omiso del intervalo de nivel. En el ejemplo siguiente:
    layout.addConstraint(new ibm_ilog.graphlayout.hierarchical.HierarchicalSameLevelConstraint(node1,node2));
    layout.setSpecNodeLevelIndex(node1, 5);
    layout.setSpecNodeLevelIndex(node2, 10);
    
    tanto node1 como node2 se colocan en el nivel 5. Se hace caso omiso de la especificación que entra en conflicto: layout.setSpecNodeLevelIndex(node2, 10).
  • A la ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.HierarchicalRelativeLevelConstraint la domina la restricción de mismo nivel, la restricción de intervalo de nivel y la especificación directa de índices de nivel.
    Si varias restricciones de nivel relativo entran en conflicto entre sí, domina la que tiene la prioridad más alta. No obstante, todos los enlaces se consideran implícitamente restricciones de nivel relativo. Si enlaces con una prioridad alta obligan a un nodo a colocarse en cierto nivel, se hace caso omiso de una restricción de nivel relativo con una prioridad más baja.
  • La ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.HierarchicalSwimLaneConstraint se evalúa siempre, aunque la modalidad incremental esté habilitada.
    La restricción tiene una prioridad mayor que la restricción de posición relativa y la restricción de uno junto al otro. Puede especificar restricciones de uno junto al otro para un grupo de nodos que pertenecen al mismo carril, pero se hará caso omiso de las restricciones de uno junto al otro de nodos de carriles distintos. Puede especificar restricciones de posición relativa entre nodos del mismo carril. También puede especificar restricciones de posición relativa entre un grupo de carriles y otro grupo de carriles lo que, de hecho, ordena los carriles. Pero las restricciones de posición relativa se pasarían por alto si hiciera falta separar los carriles. La restricción de carril domina a los índices de posición especificados y las restricciones de extremo, es decir, que si se utiliza una restricción de carril, no se pueden especificar índices de posición ni restricciones de extremo este u oeste para un nodo.
  • La ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.HierarchicalSideBySideConstraint se evalúa únicamente si los nodos correspondientes pertenecen al mismo nivel.
    Normalmente se utiliza una restricción de mismo nivel para obligar a colocar los nodos en el mismo nivel y, a continuación, una restricción de uno junto a otro para obligar a que los nodos estén en un orden determinado. Las restricciones de uno junto a otro dominan a las restricciones de posición relativa. Si varias restricciones de uno junto a otro entran en conflicto, la que tiene la prioridad más alta domina a las otras restricciones.
  • La ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.HierarchicalRelativePositionConstraint también se evalúa únicamente si los nodos correspondientes pertenecen al mismo nivel.
    La domina la restricción de uno junto al otro; sin embargo, los conflictos con las restricciones de uno junto al otro son poco habituales. Si varias restricciones de posición relativa entran en conflicto, la que tiene la prioridad más alta domina a las otras restricciones.