Déplacement ou insertion de noeuds

Pour déplacer des noeuds existants ou en insérer des nouveaux, utilisez la méthode insert() du contrôleur.

Pourquoi et quand exécuter cette tâche

  1. Lorsque vous créez un noeud, vous devez l'insérer dans la topologie du modèle, pour le rendre par exemple visible et accessible par les utilisateurs.
  2. Les opérations définies dans le contrôleur, comme hasChildren() ou getLayoutModelController(), fonctionnent uniquement une fois le noeud inséré.

Procédure

  1. Obtenez un contrôleur approprié.
  2. Identifiez l'emplacement cible dans la topologie.
    Vous avez besoin de cette information à une étape ultérieure.
  3. Identifiez la ressource à déplacer ou à insérer comme suit :
    • Pour déplacer une ressource, recherchez un noeud existant avec les localisateurs appropriés du contrôleur.
    • Pour insérer une ressource, créez une instance modifiable représentant une nouvelle ressource.
  4. Insérez la ressource dans la topologie du contrôleur à l'aide de sa méthode insert() et en indiquant l'emplacement cible. Il peut s'agit de l'une des ressources suivantes :
    • Un noeud parent. Dans ce cas, la ressource est insérée en tant que dernier enfant du noeud parent.
    • Un noeud parent et un noeud apparenté. Dans ce cas, la ressource est insérée comme l'enfant du noeud parent, juste avant le noeud apparenté.
    • Aucune information d'emplacement. Dans ce cas, la ressource est insérée comme nouvelle racine.
      Remarque : Cette insertion n'est pas possible pour tous les contrôleurs. Par exemple, vous ne pouvez pas insérer un nouveau noeud racine dans un contrôleur ContentModelController qui possède déjà un noeud racine.
  5. Conservez vos modifications à l'aide de la méthode commit() du contrôleur.

Exemple

Exemple 1 - Déplacement d'un portlet existant vers un autre conteneur (traitement d'erreurs omis) :
// obtain locator of LayoutModelController
final Locator locator = lmController.getLocator();

// locate portlet and target containers
final LayoutControl control = (LayoutControl) locator.findByUniqueName("MyControl");
final LayoutContainer parentContainer = (LayoutContainer) locator.findByUniqueName("MyParentContainer");
final LayoutContainer nextContainer = (LayoutContainer) locator.findByUniqueName("MyNextContainer");

// move portlet under parentContainer just before nextContainer
lmController.insert(control, parentContainer, nextContainer);