package org.foo; import java.math.BigInteger; import javax.servlet.http.HttpServletRequest; import org.apache.chemistry.opencmis.commons.data.ExtensionsData; import org.apache.chemistry.opencmis.commons.data.ObjectInFolderList; import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships; import org.apache.chemistry.opencmis.commons.server.CallContext; import org.apache.chemistry.opencmis.commons.server.CmisService; import org.apache.chemistry.opencmis.server.support.wrapper.AbstractCmisServiceWrapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Example of a minimal CMIS Custom Service Wrapper (logging example) * * Add the following ** to the repository.properties to have framework hook into * chain. The number at the key is the position in the wrapper stack. Lower * numbers are outer wrappers, higher numbers are inner wrappers. * * ** add the following line to your repository.properties file in your servers * war: * * <pre> * servicewrapper.1=org.foo.CmisCustomLoggingServiceWrapper * </pre> */ public class CmisCustomLoggingServiceWrapper extends AbstractCmisServiceWrapper { // slf4j example private static final Logger LOG = LoggerFactory.getLogger(CmisCustomLoggingServiceWrapper.class); // provide constructor public CmisCustomLoggingServiceWrapper(CmisService service) { super(service); } /** * slf logging version with dual output to console and slf */ protected void slflog(String operation, String repositoryId) { if (repositoryId == null) { repositoryId = "<none>"; } HttpServletRequest request = (HttpServletRequest) getCallContext().get(CallContext.HTTP_SERVLET_REQUEST); String userAgent = request.getHeader("User-Agent"); if (userAgent == null) { userAgent = "<unknown>"; } String binding = getCallContext().getBinding(); LOG.info("Operation: {}, Repository ID: {}, Binding: {}, User Agent: {}", operation, repositoryId, binding, userAgent); } @Override public ObjectInFolderList getChildren(String repositoryId, String folderId, String filter, String orderBy, Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter, Boolean includePathSegment, BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) { slflog("getChildren ", repositoryId); long startTime = System.currentTimeMillis(); CallContext sharedContext = this.getCallContext(); // Get the native domain object from the call context if one is shared // by the vendor (example only) // Your CMIS vendor's documentation must expose the name of any shared // objects they place here for extensions. // Object objShared = sharedContext.get("shared_key_name_from_vendor"); ObjectInFolderList retVal = getWrappedService().getChildren(repositoryId, folderId, filter, orderBy, includeAllowableActions, includeRelationships, renditionFilter, includePathSegment, maxItems, skipCount, extension); // dual log output in case logger not configured LOG.info("[CmisCustomServiceWrapper] Exiting method getChildren. time (ms):" + (System.currentTimeMillis() - startTime)); // System.out.println("[CmisCustomServiceWrapper] Exiting method getChildren. time (ms):" // + (System.currentTimeMillis() - startTime)); return retVal; } }