001package org.nuxeo.snapshot; 002 003import java.util.Collections; 004import java.util.List; 005 006import org.nuxeo.ecm.core.api.CoreSession; 007import org.nuxeo.ecm.core.api.DocumentModel; 008import org.nuxeo.ecm.core.api.IterableQueryResult; 009import org.nuxeo.ecm.core.event.impl.ShallowDocumentModel; 010import org.nuxeo.ecm.core.query.QueryFilter; 011import org.nuxeo.ecm.core.query.sql.NXQL; 012import org.nuxeo.ecm.core.versioning.OrphanVersionRemovalFilter; 013 014public class SnapshotRemovalPolicy implements OrphanVersionRemovalFilter { 015 016 protected boolean canRemoveVersions(CoreSession session, DocumentModel doc, List<String> uuids) { 017 IterableQueryResult result = null; 018 try { 019 StringBuffer nxql = new StringBuffer("select ecm:uuid from Document where "); 020 nxql.append(SnapshotableAdapter.CHILDREN_PROP + "/* IN ("); 021 for (int i = 0; i < uuids.size(); i++) { 022 if (i > 0) { 023 nxql.append(","); 024 } 025 nxql.append("'" + uuids.get(i) + "'"); 026 } 027 nxql.append(")"); 028 result = session.queryAndFetch(nxql.toString(), NXQL.NXQL, QueryFilter.EMPTY); 029 if (result.iterator().hasNext()) { 030 return false; 031 } 032 return true; 033 } finally { 034 if (result != null) { 035 result.close(); 036 } 037 } 038 039 } 040 041 @SuppressWarnings("unchecked") 042 @Override 043 public List<String> getRemovableVersionIds(CoreSession session, ShallowDocumentModel deletedLiveDoc, 044 List<String> versionUUIDs) { 045 046 if (canRemoveVersions(session, deletedLiveDoc, versionUUIDs)) { 047 return Collections.emptyList(); 048 } 049 return versionUUIDs; 050 } 051}