Hi,

I try to set properties processes in my EventListener. It works wel when I 
create my own documentType but not when I update it.

the process works without errors or warning, but doesn't update my 
DocumentModel. 

PLEASE SOME HELP. It's made me cray ! 

*this is my eventcontrib : *
<component name="be.pcsol.project.dis.NoticeCreationListener">

        <extension target="org.nuxeo.ecm.core.event.EventServiceComponent"
                point="listener">
                <listener name="NoticeCreationListener" async="false"
                        postCommit="false" 
class="be.pcsol.events.NoticeCreationListener"
                        priority="140">
                </listener>

                <listener name="NoticeUpdateListener" async="false"
                        postCommit="false" 
class="be.pcsol.events.NoticeUpdateListener"
                        order="157">
                        <event>documentModified</event>
                </listener>

        </extension>
</component>

*this is my eventListener classes*

package be.pcsol.events;

import java.io.File;
import java.io.FileFilter;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.naming.NamingException;

import org.jboss.seam.Component;
import org.jboss.util.Classes;
import org.nuxeo.common.utils.Path;
import org.nuxeo.ecm.core.api.ClientException;
import org.nuxeo.ecm.core.api.CoreInstance;
import org.nuxeo.ecm.core.api.CoreSession;
import org.nuxeo.ecm.core.api.DataModel;
import org.nuxeo.ecm.core.api.DocumentModel;
import org.nuxeo.ecm.core.api.DocumentModelList;
import org.nuxeo.ecm.core.api.DocumentRef;
import org.nuxeo.ecm.core.api.event.CoreEvent;
import org.nuxeo.ecm.core.api.event.DocumentEventTypes;
import org.nuxeo.ecm.core.api.model.Property;
import org.nuxeo.ecm.core.api.model.PropertyException;
import org.nuxeo.ecm.core.event.Event;
import org.nuxeo.ecm.core.event.EventContext;
import org.nuxeo.ecm.core.event.EventListener;
import org.nuxeo.ecm.core.event.impl.DocumentEventContext;
import org.nuxeo.ecm.core.io.DocumentPipe;
import org.nuxeo.ecm.core.io.DocumentReader;
import org.nuxeo.ecm.core.io.DocumentWriter;
import org.nuxeo.ecm.core.io.impl.DocumentPipeImpl;
import org.nuxeo.ecm.core.io.impl.plugins.SingleDocumentReader;
import org.nuxeo.ecm.core.io.impl.plugins.XMLDirectoryWriter;
import org.nuxeo.ecm.directory.Directory;
import org.nuxeo.ecm.directory.DirectoryException;
import org.nuxeo.ecm.directory.DirectoryServiceImpl;
import org.nuxeo.ecm.directory.IdGenerator;
import org.nuxeo.ecm.directory.Session;
import org.nuxeo.ecm.directory.api.DirectoryService;
import org.nuxeo.ecm.directory.sql.SQLDirectoryProxy;
import org.nuxeo.runtime.api.Framework;

import be.pcsol.beans.NoticeBeanManager;

import com.cmp.dis.core.interfaces.Export;
import com.mexi.utils.IOUtils;
import com.mexi.utils.JNDIHelper;

public class NoticeUpdateListener implements EventListener {

        public void handleEvent(CoreEvent coreevent) throws ClientException {
                coreevent.getInfo();

        }

        public void handleEvent(Event event) throws ClientException {
                EventContext ctx = event.getContext();

                if (!(ctx instanceof EventContext)) {
                        return;
                }
                Object o = event.getContext();

                if (o instanceof DocumentEventContext) {
                        DocumentEventContext context = (DocumentEventContext) 
event
                                        .getContext();

                        DocumentModel model = context.getSourceDocument();
                        
                        if (model.getType().equals("Notice")) {
                                CoreSession ses = context.getCoreSession();
                                String title = (String) 
model.getProperty("notice",
                                                "nameOfMedicalProductNL");
                                model.setProperty("dublincore", "title", title);
                                String[] classesLabelTab = 
computeClassesLabel(model);
                                String classesLabel = "";
                                if (classesLabelTab.length > 0) {
                                        for (int i = 0; i < 
classesLabelTab.length; i++) {
                                                classesLabel = 
classesLabelTab[i] + "/";
                                        }
                                        model.setProperty("notice",
                                                        
"classespharmacotherapeutiquesLabel", classesLabel);
                                }
                                ses.saveDocument(model);
                                
                        }

                
                }

        }

        private String[] computeClassesLabel(DocumentModel model)
                        throws PropertyException, ClientException {
                Serializable s = model
                                
.getPropertyValue("nt:classespharmacotherapeutiquesId");
                int taille = 0;
                if (s instanceof String[]) {
                        String[] classesId = (String[]) s;
                        taille = classesId.length;
                        String[] classesLabel = new String[taille];
                        if (classesLabel.length > 0) {
                                for (int i = 0; i < classesId.length; i++) {
                                        classesLabel[i] = computeLabelValue(
                                                        
"classespharmacotherapeutiques", classesId[i]);
                                }
                        }
                        return classesLabel;
                } else {
                        String[] empty = new String[0];
                        return empty;
                }
        }


        /**
         * this method open a session in a directory (with his name) and de id 
(we
         * receive the id in de tag <nxdir: selectOneListBox>) and give the 
label as
         * string
         */
        private String computeLabelValue(String dirName, String id)
                        throws ClientException {
                // Directory dir = getDirectory(dirName);
                DirectoryService dirService;
                Session ses = null;
                String label;
                try {
                        dirService = 
Framework.getLocalService(DirectoryService.class);
                } catch (Exception e) {
                        throw new ClientException(e);
                }
                try {
                        // ses = dir.getSession();
                        ses = dirService.open(dirName);
                        DocumentModel entry = ses.getEntry(id, true);
                        if (entry != null) {
                                label = (String) 
entry.getProperty("vocabulary", "label");
                                return label;
                        } else {
                                return label = "";
                        }

                } finally {
                        if (ses != null) {
                                ses.close();
                        }
                }

        }

}
--
Posted by "meghRF4" at Nuxeo Discussions <http://nuxeo.org/discussions>
View the complete thread: 
<http://www.nuxeo.org/discussions/thread.jspa?threadID=2960#8707>
_______________________________________________
ECM mailing list
[email protected]
http://lists.nuxeo.com/mailman/listinfo/ecm
To unsubscribe, go to http://lists.nuxeo.com/mailman/options/ecm

Reply via email to