AnsweredAssumed Answered

Assigner une catégorie à un document en Java avec l'API CMIS

Question asked by fmarin on Feb 26, 2015
Latest reply on Mar 9, 2015 by fmarin
bonjour

j'utilise l'implémentation community 5.0 sous Ubuntu 14.04, et je commence à utiliser l'API CMIS

Je cherche à associer un document à une catégorie ; en m'appuyant sur des recherches faites sur le net, et notamment le site http://ecmarchitect.com, j'ai écrit la méthode suivante (qui fonctionne correctement) :
   protected void addCategory(
         Session session,
         Document testDoc,
         String categoryName
         )
   {
      ItemIterable<QueryResult> rs = session.query(
          "select * from cm:category where cmis:name = '" + categoryName + "'",false);
      if (rs.getTotalNumItems() == 0) {
         System.out.println("Couldn't find category with name: " + categoryName);
         return;
      }
      
      int i=0;
      String catId=null;;
      for (QueryResult resultRow : rs)
      {
              if (i==0)
         {
            catId = resultRow.getPropertyValueById("cmis:objectId");
         }
      } 
      testDoc.refresh();
      List<String> aspects = testDoc.getPropertyValue("cmis:secondaryObjectTypeIds");
      
      //je contrôle l'existence de l'aspect 'categorisable' par une méthode adhoc
      if (! CmisClientAspectUtil.readAspectsForExistingDocument(session,
                     testDoc, "P:cm:generalclassifiable"))
      {
         //et j'attribue l'aspect le cas échéant
         CmisClientAspectUtil.addAspectToExistingDocument(
                                testDoc,"P:cm:generalclassifiable",debug);
      }
       
      if (!testDoc.isLatestVersion())
      {
          testDoc = testDoc.getObjectOfLatestVersion(false);
      }
       
      List<String> catIds = testDoc.getPropertyValue("cm:categories");

      if (!catIds.contains(catId)) {
         catIds.add(catId);
         for (int k=0; k<catIds.size(); k++)
         {
             catIds.set(k,"workspace://SpacesStore/"+catIds.get(k));
         }
         HashMap<String, List<String>> props = new HashMap<String, List<String>>();
         props.put("cm:categories",catIds);
         testDoc.updateProperties(props, false);
       }
   }


mes interrogations :
1) est ce la bonne méthode ? c'est à dire correspond elle aux bonnes pratiques ?
2) la méthode s'exécute avec un elaps de 200 millisecondes : c'est acceptable pour un traitement unitaire, mais cela l'est moins pour un traitement par lot ; y aurait t il alors une méthode à recommander ?

merci de vos conseils

Frédéric

Outcomes