001package org.nuxeo.elasticsearch.audit.pageprovider; 002 003import java.util.ArrayList; 004import java.util.List; 005 006import org.apache.commons.logging.Log; 007import org.apache.commons.logging.LogFactory; 008import org.nuxeo.ecm.core.api.CoreSession; 009import org.nuxeo.ecm.core.api.DocumentModel; 010import org.nuxeo.ecm.core.api.SortInfo; 011import org.nuxeo.ecm.platform.audit.api.document.AdditionalDocumentAuditParams; 012import org.nuxeo.ecm.platform.audit.api.document.DocumentAuditHelper; 013 014public class ESDocumentHistoryPageProvider extends ESAuditPageProvider { 015 016 private static final long serialVersionUID = 1L; 017 018 protected Log log = LogFactory.getLog(ESDocumentHistoryPageProvider.class); 019 020 protected Object[] newParams; 021 022 protected static String singleQuery = " {\n" + " \"bool\" : {\n" 023 + " \"must\" : {\n" + " \"match\" : {\n" 024 + " \"docUUID\" : {\n" + " \"query\" : \"?\",\n" 025 + " \"type\" : \"boolean\"\n" + " }\n" 026 + " }\n" + " }\n" + " }\n" 027 + " } \n" + ""; 028 029 protected static String complexQuery = "{\n" + " \"filtered\" : {\n" + " \"query\" : {\n" 030 + " \"match_all\" : { }\n" + " },\n" + " \"filter\" : {\n" 031 + " \"or\" : [\n" + " {\n" 032 + " \"term\" : { \"docUUID\" : \"?\" }\n" + " },\n" 033 + " {\n" + " \"bool\" : {\n" + " \"must\" : [{\n" 034 + " \"term\" : { \"docUUID\" : \"?\" }\n" + " },\n" 035 + " {\n" + " \"range\" : {\n" 036 + " \"eventDate\" : { \"lte\" : \"?\"}\n" + " }\n" 037 + " }]\n" + " }\n" + " }\n" + " ]\n" 038 + " }\n" + " }\n" + "}\n" + "\n" + ""; 039 040 @Override 041 protected String getFixedPart() { 042 if (getParameters().length == 3) { 043 return complexQuery; 044 } else { 045 return singleQuery; 046 } 047 } 048 049 @Override 050 public List<SortInfo> getSortInfos() { 051 052 List<SortInfo> sort = super.getSortInfos(); 053 if (sort == null || sort.size() == 0) { 054 sort = new ArrayList<SortInfo>(); 055 sort.add(new SortInfo("eventDate", true)); 056 sort.add(new SortInfo("id", true)); 057 } 058 return sort; 059 } 060 061 @Override 062 public Object[] getParameters() { 063 if (newParams == null) { 064 Object[] params = super.getParameters(); 065 if (params.length != 1) { 066 log.error(this.getClass().getSimpleName() 067 + " Expect only one parameter the document uuid, unexpected behavior may occur"); 068 } 069 CoreSession session; 070 String uuid; 071 if (params[0] instanceof DocumentModel) { 072 DocumentModel doc = (DocumentModel) params[0]; 073 uuid = doc.getId(); 074 session = doc.getCoreSession(); 075 } else { 076 session = (CoreSession) getProperties().get(CORE_SESSION_PROPERTY); 077 uuid = params[0].toString(); 078 } 079 if (session != null) { 080 AdditionalDocumentAuditParams additionalParams = DocumentAuditHelper.getAuditParamsForUUID(uuid, 081 session); 082 if (additionalParams != null) { 083 newParams = new Object[] { uuid, additionalParams.getTargetUUID(), additionalParams.getMaxDate() }; 084 } else { 085 newParams = new Object[] { uuid }; 086 } 087 } else { 088 log.warn("No core session found: cannot compute all info to get complete audit entries"); 089 return params; 090 } 091 } 092 return newParams; 093 } 094 095 @Override 096 public boolean hasChangedParameters(Object[] parameters) { 097 return getParametersChanged(this.parameters, parameters); 098 } 099 100}