cancel
Showing results for 
Search instead for 
Did you mean: 

[Résolu] Java : parcourir une métadonnée multiple

christophes
Champ in-the-making
Champ in-the-making
Bonjour,

J'aimerais savoir comment faire pour parcourir les différentes valeurs d'une métadonnée texte multiple en Java. J'ai essayé le code suivant :
List<String> valeurs = (List<String>)nodeService.getProperty(nodeRef, MonModel.PROP_VALEURS);
mais cela n'a pas l'air de marcher car il ne me renvoie rien sur l'instruction :
logger.debug("valeurs.size() = "+valeurs.size());
Les logger sont bien activé sur cette classe mais malgré ça, je n'ai pas de message d'erreur.

Est-ce que quelqu'un pourrait me donner la bonne syntaxe?

Merci d'avance,

Christophe
8 REPLIES 8

rivarola
Champ on-the-rise
Champ on-the-rise
Bonjour,

Les propriétés multivaluées sont pourtant stockées et retournées sous forme de listes. Tu n'as ni erreur ni log ?
As-tu essayé avec une liste non typée (juste List) ?

christophes
Champ in-the-making
Champ in-the-making
La fonction getProperty renvoie un Serializable par défaut quelle que soit la métadonnée. Je vais essayer avec une liste non typée et je te tiens au courant.

Christophe

christophes
Champ in-the-making
Champ in-the-making
Je viens de faire le test mais cela ne fonctionne toujours pas. Un logger juste avant l'instruction m'affiche bien un message dans la console mais le logger juste en dessous n'affiche rien et toujours pas d'erreur ou de log supplémentaires.

Christophe

rivarola
Champ on-the-rise
Champ on-the-rise
Pas d'erreur, pas de log affiché… La vérité est ailleurs  :twisted:
Soit tu n'as pas mis en DEBUG le bon canal de log, soit tu ne déploies pas la bonne classe, soit elle n'est pas appelée.
Dans tous les cas un bon debugger fera parler ta liste.

christophes
Champ in-the-making
Champ in-the-making
J'ai des logs qui apparaissent dans ma console lorsque ma classe s'exécute mais plus rien après la récupération de la métadonnée multiple.
Voici le code complet de ma classe qui est en fait un Java Behaviour.
package be.etnic.alfresco.repo.courrier;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.Map;

import org.alfresco.repo.node.NodeServicePolicies;
import org.alfresco.repo.policy.JavaBehaviour;
import org.alfresco.repo.policy.PolicyComponent;
import org.alfresco.repo.policy.Behaviour.NotificationFrequency;
import org.alfresco.service.ServiceRegistry;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.Path;
import org.alfresco.service.cmr.repository.StoreRef;
import org.alfresco.service.cmr.search.ResultSet;
import org.alfresco.service.cmr.search.SearchService;
import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.service.namespace.QName;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import be.etnic.alfresco.model.EtnicModel;

/**
* This class contains the behaviour behind the 'etnic:etape' type.
*
*/
public class EtapeType implements NodeServicePolicies.OnUpdatePropertiesPolicy {
  private static Log logger = LogFactory.getLog(EtapeType.class);

  private PolicyComponent policyComponent;
  private NodeService nodeService;
  private PermissionService permissionService;
  private ServiceRegistry registre;

  /**
   * Spring initilaise method used to register the policy behaviours
   */
  public void initialise() {
    logger.debug("initialisation Etape Type…");
   
    // Register the policy behaviour
    JavaBehaviour javaBehaviour = new JavaBehaviour(this, "onUpdateProperties", NotificationFrequency.TRANSACTION_COMMIT);
    this.policyComponent.bindClassBehaviour(QName.createQName(NamespaceService.ALFRESCO_URI, "onUpdateProperties"), EtnicModel.TYPE_ETAPE, javaBehaviour);
   
    logger.debug("initialisation terminee");
  }

  public void onUpdateProperties(NodeRef nodeRef, Map<QName, Serializable> before, Map<QName, Serializable> after)
  {
   
     SearchService searchService = registre.getSearchService();
     
   Date dateAction = null;
   dateAction = (Date)nodeService.getProperty(nodeRef, EtnicModel.PROP_ETAPE_DATE_ACTION);   
   logger.debug("dateAction = "+dateAction.toString());
   if(dateAction != null)
   {
     logger.debug("Si etapeDateAction != null");
     List etapeSuivantes = (List)nodeService.getProperty(nodeRef, EtnicModel.PROP_ETAPE_SUIVANTES);
     logger.debug("etapeSuivantes.size() = "+etapeSuivantes.size());
     if(etapeSuivantes != null && etapeSuivantes.size()!= 0)
     {
      StoreRef store =  StoreRef.STORE_REF_WORKSPACE_SPACESSTORE;
      NodeRef nodeRefParent = nodeService.getPrimaryParent(nodeRef).getParentRef();
      Path pathParent = nodeService.getPath(nodeRefParent);
      String cheminParent = pathParent.toDisplayPath(nodeService, permissionService);
      for(Object etapeSuivante : etapeSuivantes)
      {
         String requete = "+PATH:\""+cheminParent+"/*\" +TYPE:\"etnic:etape\" -@cm\\:title:\""+etapeSuivante.toString()+"\"";
         ResultSet resultat = searchService.query(store, SearchService.LANGUAGE_LUCENE, requete);
         if(resultat != null && resultat.length() > 0)
         {
            Integer delta3 = (Integer)nodeService.getProperty(resultat.getNodeRef(0), EtnicModel.PROP_ETAPE_DELTA3);
            if(delta3 != null && delta3 != 0)
            {
               Date dateLimite = new Date(dateAction.getTime()+ delta3*24*60*60*1000);
               nodeService.setProperty(resultat.getNodeRef(0), EtnicModel.PROP_ETAPE_DATE_LIMITE, dateLimite);
            }
            resultat.close();
         }
      }
     }
     }
  }

  protected void applyPermission(NodeRef nodeRef, String authority, String permission) {
    if (authority != null) {
      permissionService.setPermission(nodeRef, authority, permission, true);
    } else {
      logger.debug("Authority is null. Ignored.");
    }
  }

  public void setPolicyComponent(PolicyComponent policyComponent) {
    this.policyComponent = policyComponent;
  }

  public void setNodeService(NodeService nodeService) {
    this.nodeService = nodeService;
  }

  public void setPermissionService(PermissionService permissionService) {
    this.permissionService = permissionService;
  }
 
   public void setRegistre(ServiceRegistry registre) {
      this.registre = registre;
   }   

}
et voici le résultat dans la console :
15:33:36,156 WARN  [org.springframework.remoting.rmi.RmiRegistryFactoryBean] Could not detect RMI registry - creating new one
15:33:36,484 DEBUG [org.alfresco.repo.jscript] preRegister called. Server=com.sun.jmx.mbeanserver.JmxMBeanServer@16bf0aa, name=log4j:logger=org.alfresco.repo.jscript
15:33:36,484 DEBUG [be.etnic.alfresco.repo.courrier.EtapeType] preRegister called. Server=com.sun.jmx.mbeanserver.JmxMBeanServer@16bf0aa, name=log4j:logger=be.etnic.alfresco.repo.courrier.EtapeType
15:33:38,561 DEBUG [be.etnic.alfresco.repo.courrier.EtapeType] initialisation Etape Type…
15:33:38,561 DEBUG [be.etnic.alfresco.repo.courrier.EtapeType] initialisation terminee
15:33:38,905 INFO  [org.alfresco.repo.domain.schema.SchemaBootstrap] Schema managed by database dialect org.hibernate.dialect.MySQLInnoDBDialect.
15:33:40,389 INFO  [org.alfresco.repo.domain.schema.SchemaBootstrap] Aucune modification na été apportée au schéma.
15:33:42,075 WARN  [org.alfresco.repo.admin.ConfigurationChecker] La propriété 'dir.root' d'Alfresco est défini par un chemin relatif '{0}'. 'dir.root' devrait être surchargée pour pointer sur un dossier spécifique.
15:33:42,075 INFO  [org.alfresco.repo.admin.ConfigurationChecker] Le répertoire racine de données d'Alfresco ('dir.root') est : .\alf_data
15:33:42,107 INFO  [org.alfresco.repo.admin.patch.PatchExecuter] Vérification des correctifs à appliquer …
15:33:42,232 INFO  [org.alfresco.repo.admin.patch.PatchExecuter] Aucun correctif requis.
15:33:42,247 INFO  [org.alfresco.repo.module.ModuleServiceImpl] 1 module(s) trouvé(s).
15:33:42,310 INFO  [org.alfresco.repo.module.ModuleServiceImpl] Démarrage du module 'courrier' version 0.7.
15:33:42,356 WARN  [org.alfresco.repo.module.ModuleServiceImpl] Un module préalablement installé '{0}' (version 1) est absent de votre distribution.
15:33:42,919 INFO  [org.alfresco.service.descriptor.DescriptorService] Alfresco JVM - v1.6.0_02-b06; maximum heap size 493,063MB
15:33:42,919 WARN  [org.alfresco.service.descriptor.DescriptorService] Alfresco JVM - WARNING - maximum heap size 493,063MB is less than recommended 512MB
15:33:42,919 INFO  [org.alfresco.service.descriptor.DescriptorService] Alfresco license: Enterprise Network granted to Developer (does not expire)
15:33:42,919 INFO  [org.alfresco.service.descriptor.DescriptorService] Alfresco started (Enterprise Network): Current version 2.2.1 (233) schema 89 - Installed version 2.1.1 (193) schema 77
15:34:17,762 DEBUG [be.etnic.alfresco.repo.courrier.EtapeType] dateAction = Thu Dec 04 15:34:17 CET 2008
15:34:17,777 DEBUG [be.etnic.alfresco.repo.courrier.EtapeType] Si etapeDateAction != null

Et quant à savoir si c'est la bonne classe que j'exécute, j'en suis certain car je l'ai moi-même mise dans le jar et j'ai redémarrer Alfresco juste après.

Christophe

rguinot
Confirmed Champ
Confirmed Champ
15:33:42,919 INFO  [org.alfresco.service.descriptor.DescriptorService] Alfresco license: Enterprise Network granted to Developer (does not expire)

Vous disposez d'un support entreprise peut être ?

15:33:42,919 INFO  [org.alfresco.service.descriptor.DescriptorService] Alfresco started (Enterprise Network): Current version 2.2.1 (233) schema 89 - Installed version 2.1.1 (193) schema 77

Est ce moi ou bien vous avez un mix de versions installées ?

christophes
Champ in-the-making
Champ in-the-making
Vous disposez d'un support entreprise peut être ?
Oui effectivement, je dispose d'un support entreprise.
Est ce moi ou bien vous avez un mix de versions installées ?
Réponse de nouveau affirmative, en effet nous sommes partis d'une version 2.1.1 que nous avons migré récemment en 2.2.1.

Christophe

christophes
Champ in-the-making
Champ in-the-making
Après avoir débogué mon programme avec un collègue, on s'est aperçu que ma propriété multiple était null ce qui faisait planter le code lors du logger suivant à cause du .size() sur un objet null.

Christophe