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
- 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.
- Les opérations définies dans le contrôleur, comme
hasChildren()ougetLayoutModelController(), fonctionnent uniquement une fois le noeud inséré.
Procédure
- Obtenez un contrôleur approprié.
- Identifiez l'emplacement cible dans la topologie. Vous avez besoin de cette information à une étape ultérieure.
- 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.
-
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
ContentModelControllerqui possède déjà un noeud racine.
-
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);