001package org.nuxeo.template.listeners; 002 003import org.jboss.seam.faces.FacesMessages; 004import org.jboss.seam.international.StatusMessage; 005import org.nuxeo.ecm.core.api.DocumentModel; 006import org.nuxeo.ecm.core.api.event.DocumentEventTypes; 007import org.nuxeo.ecm.core.event.Event; 008import org.nuxeo.ecm.core.event.EventContext; 009import org.nuxeo.ecm.core.event.EventListener; 010import org.nuxeo.ecm.core.event.impl.DocumentEventContext; 011import org.nuxeo.runtime.api.Framework; 012import org.nuxeo.runtime.transaction.TransactionHelper; 013import org.nuxeo.template.api.adapters.TemplateSourceDocument; 014 015public class TemplateDeletionGuard implements EventListener { 016 017 @Override 018 public void handleEvent(Event event) { 019 020 EventContext ctx = event.getContext(); 021 022 if (DocumentEventTypes.ABOUT_TO_REMOVE.equals(event.getName())) { 023 if (ctx instanceof DocumentEventContext) { 024 DocumentEventContext docCtx = (DocumentEventContext) ctx; 025 DocumentModel targetDoc = docCtx.getSourceDocument(); 026 027 TemplateSourceDocument templateDoc = targetDoc.getAdapter(TemplateSourceDocument.class); 028 if (templateDoc != null && !Framework.isTestModeSet()) { 029 if (templateDoc.getTemplateBasedDocuments().size() > 0) { 030 TransactionHelper.setTransactionRollbackOnly(); 031 event.cancel(); 032 // XXX should do better 033 FacesMessages.instance().clearGlobalMessages(); 034 FacesMessages.instance().addFromResourceBundleOrDefault(StatusMessage.Severity.WARN, 035 "label.template.canNotDeletedATemplateInUse", 036 "Can not delete a template that is still in use."); 037 } 038 } 039 } 040 } 041 } 042}