Closed WebMSB closed 8 years ago
Actuellement on utilise se code pour obtenir la première classe ClasseFactory:59
String firstClassName = model.getOWLDataRangeClass().getDirectSuperclasses().toString();
firstClassName = Helper.stringBetween(firstClassName, "(", ")");
firstClassName = model.getOWLNamedClass(firstClassName).getVisibleDirectSubclasses().toString();
firstClassName = Helper.stringBetween(firstClassName, "(", ")");
// Chargement de cette classe et de ses classes filles
load(modelName, firstClassName);
Si j'ai bien compris; dans le cas ou il y'a plusieurs sous classes de owl:Thing; la méthode getVisibleDirectSubclasses
doit nous les retourner toutes. Donc cela peux marcher pour obtenir toutes les classes:
String firstClassName = model.getOWLDataRangeClass().getDirectSuperclasses().toString();
firstClassName = Helper.stringBetween(firstClassName, "(", ")");
for(Object o : model.getOWLNamedClass(firstClassName).getVisibleDirectSubclasses()){
String name = Helper.stringBetween(o.toString(), "(", ")");
System.out.println("Superclasse: " + name);
// Chargement de cette classe et de ses classes filles
load(modelName, firstClassName);
}
Y'aura des changements à faire dans la directive browser.
cette modification n'est pas suffisante, la méthode load(nameModel, Model) il fait appel à la méthode load(namedModel, ClassName) et que dans cette dernière on appelle la méthode LoadOne.
il va falloir que les fonctions reçoivent un tableau de classes mères non pas seulement une classe mère.
j'ai essayé de modifier les fonctions et les rendre compatible avec des cas ou il y a plusieurs classes. ça plante dans la méthode récursive.
Pour bien comprendre comment les classes sont chargées, voyons tout le processus :
Controller::init
se délanche et appelle les méthodes init
des factories.ClassesFactory::init
est appellée aprés avoir charger les projets (après l'appel de ModelsFactory::init
et ProjectsFactory::init
)ClassesFactory::loadAll
est appellée pour charger tous les classes. Elle boucle sur les projets et appelle ClassesFactory::load(String, OWLModel)
pour chaque projet.ClassesFactory::load(String, OWLModel)
est responsable de charger tous les classes d'un projet. Pour le faire actuellement, elle recupère la superclasse et la passe à ClassesFactory::load(String, String)
qui la charge elle et ses filles. Mais maintenant qu'on a plusieurs superclasses; il suffit d'appeller cette méthode avec toutes les superclasses ( l'appeller dans une boucle, une fois pour chaque classe ). On n'a pas vraiment besoin de passer un Array des classes !Qu'est ce que tu en penses ?
en faite, j'ai testé ce que tu m'avais dit. normalement ça marche bien , quand je lis le fichier json. il y a bien toutes les classes et leurs instances ..... mais lors de l'affichage il nous affiche qu'une seule classe .
je pense que c'est un problème coté client qui attend juste la classe racine.
j'essaye toute fois d'identifié le bon endroit ou je peux faire des modifications.
merci de m'orienter si ça ne va pas te prendre beuacoup de temps
Effectivement le client considère qu'il n'y a qu'une seule superclasse. Je vais le modifier pour qu'il affiche toutes les superclasses.
ok cette issue est validée ! merci bon job chef
on a testé protegeWeb4SEAMLESS avec un projet qui a plusieurs classes rattaché à owlThing au lieu d'une classe mère comme dans notre cas.
solution la méthode getFirstClasse doit retourner une liste de classe mère