webNeat / pwfs

0 stars 0 forks source link

Paramétrer le projet courant (bogue classe chapeau) #7

Closed WebMSB closed 8 years ago

WebMSB commented 8 years ago

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

WebMSB commented 8 years ago

a

webNeat commented 8 years ago

Coté Serveur

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);
}

Côté Client

Y'aura des changements à faire dans la directive browser.

WebMSB commented 8 years ago

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.

webNeat commented 8 years ago

Pour bien comprendre comment les classes sont chargées, voyons tout le processus :

  1. A chaque requète la méthode Controller::init se délanche et appelle les méthodes init des factories.
  2. ClassesFactory::init est appellée aprés avoir charger les projets (après l'appel de ModelsFactory::init et ProjectsFactory::init)
  3. ClassesFactory::loadAll est appellée pour charger tous les classes. Elle boucle sur les projets et appelle ClassesFactory::load(String, OWLModel) pour chaque projet.
  4. 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 ?

WebMSB commented 8 years ago

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

webNeat commented 8 years ago

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.

WebMSB commented 8 years ago

ok cette issue est validée ! merci bon job chef