Bonsoir 2008/8/25 Nicolas Dumoulin <nicolas.dumoulin at cemagref.fr>:
Bonjour,
Je me rends compte qu'il manque des choses dans la classe Component dont nous avons besoin :
1. un attribut permettant de stocker le type (Class) du composant au runtime
2. une structure arborescente de composant
J'ai bien sûr commencé par le 1, mais je ne comprend pas bien comment modifier la classe EntityHelper pour que cette propriété soit visible dans la liste des composants. Pour le reste :
- j'ai créé une classe ComponentType qui dérive de Leaf et n'a qu'un attribut
- j'ai ajouté un attribut de ce type dans la classe Component
Ok, mais il faut aussi le rajouter à la liste renvoyée dans getChildren.
- j'ai ajouté ce type dans EntityTypeEnum :
ComponentType(false, n_("simexplorer.common.componenttype"), null, ComponentType.class),
- j'ai ajouté les libellés dans les fichiers properties en et fr
Ca me semble ok.
Est-ce que vous pouvez nous proposer une solution pour le 2 ?
Il suffit d'ajouter un attribut de type Components (qui est un composite de Component) à Component : [..] Components childrenComponents; [..] public List<Entity> getChildren() { [..] directChildren.add(childrenComponents); [..] } [..] J'ai néanmoins un léger doute sur une règle de gestion impliquant la suppression d'EA/Composant. En effet, on considérait comme seul parent possible d'un composant une EA. Hors il est désormais possible que ce soit un autre composant. La règle métier vérifie le nombre de parent d'un composant (ou d'ED) est bien 1, pour permettre sa suppression. En effet, lors de la suppression effective, le composant n'est pas supprimé directement mais son parent l'est. Si les règles de gestion ne sont pas modifiées, un composant peut être supprimé uniquement si : - il n'a pas de père - son père est le seul a l'utiliser, le test s'applique récursivement au père La suppression du composant provoque alors la suppression de son père le plus haut. J'étais pas vraiment fan de cet règle métier à vrai dire, son fonctionnement est, je trouve, plus perturbant qu'autre chose. L'implémentation se trouve dans deleteElement de StorageServiceCommon, en appelant récursivement canBeDeleted et getDeletableParent. Aussi, si vous aviez souhaité créer un type "liste de ComponentType", il aurait suffit de créer cette classe: public final class ComponentTypes extends SimpleComposite<ComponentType> { } Cordialement Gabriel