[Résolu][Java] Déterminer si un aspect découle d'un autre

cancel
Showing results for 
Search instead for 
Did you mean: 
christophes
Member II

[Résolu][Java] Déterminer si un aspect découle d'un autre

Bonjour,

J'aimerais savoir sil il existe une fonction Java permettant de déterminer si un aspect découle d'un autre (a un autre aspect comme parent). J'ai regardé du côté du DictionaryService et j'ai vu la fonction isSubClass mais apparemment celle-ci ne fonctionne qu'avec les types pas les aspects.

Merci d'avance,

Christophe
5 Replies
cleseach
Active Member II

Re: [Résolu][Java] Déterminer si un aspect découle d'un autre

Bonjour,

Vous avez identifié le bon service (DictionaryService) et la bonne méthode (isSubClass).
Tout "devrait" bien fonctionné.

apparemment celle-ci ne fonctionne qu'avec les types pas les aspects
Qu'est-ce qui vous fait dire cela ? Avez-vous rencontré des problèmes lors de l'utilisation de la méthode ?
Si oui, n'hésitez pas à nous faire part de votre typologie d'aspects, de votre utilisation de la méthode isSubClass et des résultats obtenus.

Cordialement,
Charles Le Seac'h
christophes
Member II

Re: [Résolu][Java] Déterminer si un aspect découle d'un autre

Bonjour,

Je suis en train de faire un Java Behaviour qui doit se déclencher lorsqu'on retire un aspect. Ce behaviour devrait permettre de conserver les métadonnées de l'aspect A dont découle B lorsque j'enlève B.

En effet actuellement, j'ai un aspect A dont découle plusieurs autres aspects B, C, D, … Si un document a l'aspect A, B, et C et que je retire B, je perds les valeurs des métadonnées de l'aspect A, comme si Alfresco retirait A et B et remettait A.

Le comportement que j'essaye de mettre en place serait le suivant : je sauvegarde les valeurs des métadonnées de A (dans des variables temporaires) et je les remets lorsque cet aspect a été "retiré" et "remis" sur le document.

Mon problème actuel est que je voudrais que ce comportement ne se déclenche que lorsque j'essaye de retirer un aspect qui découle de A et que dans ce cas.

Voici mon code :
package mon.package.alfresco.repo.courrier;

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.cmr.dictionary.DictionaryService;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.service.namespace.QName;
import org.apache.log4j.Logger;

import mon.package.alfresco.model.MonModel;

public class OnRemoveMyAspect implements NodeServicePolicies.OnRemoveAspectPolicy{

   private PolicyComponent policyComponent;
   private DictionaryService dictionaryService;
   private static Logger logger = Logger.getLogger(OnRemoveMyAspect.class.getName());

   public void initialise() { 
      logger.debug("Init for removing aspect");
      JavaBehaviour javaBehaviour = new JavaBehaviour(this, "onRemoveAspect", NotificationFrequency.TRANSACTION_COMMIT);
      this.policyComponent.bindClassBehaviour(QName.createQName(NamespaceService.ALFRESCO_URI, "onRemoveAspect"), MonModel.ASPECT_A, javaBehaviour);
      logger.debug("End of init");
   }
   public void onRemoveAspect(NodeRef nodeRef, QName aspectTypeQName) {
      logger.debug("Dans onRemoveAspect");
      if(dictionaryService.isSubClass(aspectTypeQName, MonModel.ASPECT_A)) {
         logger.debug("L'aspect a retirer decoule de a");
      }
   }
   public DictionaryService getDictionaryService() {
      return dictionaryService;
   }
   public void setDictionaryService(DictionaryService dictionaryService) {
      this.dictionaryService = dictionaryService;
   }
   public PolicyComponent getPolicyComponent() {
      return policyComponent;
   }
   public void setPolicyComponent(PolicyComponent policyComponent) {
      this.policyComponent = policyComponent;
   }

}
Malheureusement, la condition if(dictionaryService.isSubClass(aspectTypeQName, MonModel.ASPECT_A)) n'a pas l'air de fonctionner puisque je ne vois pas le log qui suit (alors que les autres apparaissent bien).

Christophe
christophes
Member II

Re: [Résolu][Java] Déterminer si un aspect découle d'un autre

Après avoir mis un try catch pour encadrer la condition if(dictionaryService.isSubClass(aspectTypeQName, MonModel.ASPECT_A)) et logguer l'exception, je me suis rendu compte que j'avais une java.lang.NullPointerException.

Je suis donc toujours bloqué sur cette instruction isSubClass…

Christophe
cleseach
Active Member II

Re: [Résolu][Java] Déterminer si un aspect découle d'un autre

Bonjour,

Il faudrait vérifier la configuration de votre bean Spring : le DictionaryService est-il bien défini dans les propriété ?

Cordialement,
Charles Le Seac'h
christophes
Member II

Re: [Résolu][Java] Déterminer si un aspect découle d'un autre

Effectivement, j'avais oublié de déclarer ma propriété dictionaryService dans les propriétés.

Merci beaucoup pour ton aide,

Christophe