cancel
Showing results for 
Search instead for 
Did you mean: 

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

christophes
Champ in-the-making
Champ in-the-making
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 5

cleseach
Star Contributor
Star Contributor
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
Champ in-the-making
Champ in-the-making
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
Champ in-the-making
Champ in-the-making
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
Star Contributor
Star Contributor
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
Champ in-the-making
Champ in-the-making
Effectivement, j'avais oublié de déclarer ma propriété dictionaryService dans les propriétés.

Merci beaucoup pour ton aide,

Christophe
Getting started

Tags


Find what you came for

We want to make your experience in Hyland Connect as valuable as possible, so we put together some helpful links.