package com.manning.cmis.theblend.servlets; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.chemistry.opencmis.client.api.CmisObject; import org.apache.chemistry.opencmis.client.api.Folder; import org.apache.chemistry.opencmis.client.api.ItemIterable; import org.apache.chemistry.opencmis.client.api.OperationContext; import org.apache.chemistry.opencmis.client.api.Session; import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships; import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException; public class TestServlet extends AbstractTheBlendServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response, Session session) throws ServletException, IOException, TheBlendException { // --- get parameters --- String id = getStringParameter(request, "id"); if (id == null) { id = getApplicationRootFolderId(request); } int skip = getIntParameter(request, "skip", 0); // --- fetch folder object --- OperationContext foc = session.createOperationContext(); foc.setFilterString("cmis:name,cmis:path"); foc.setIncludeAcls(false); foc.setIncludeAllowableActions(false); foc.setIncludePolicies(false); foc.setIncludeRelationships(IncludeRelationships.NONE); foc.setRenditionFilterString("cmis:none"); foc.setIncludePathSegments(true); foc.setOrderBy(null); foc.setCacheEnabled(true); CmisObject object = null; try { object = session.getObject(id, foc); } catch (CmisBaseException cbe) { throw new TheBlendException("Could not retrieve folder!", cbe); } Folder folder = null; if (object instanceof Folder) { folder = (Folder) object; } else { throw new TheBlendException("Object is not a folder!"); } request.setAttribute("folder", folder); // --- fetch children --- OperationContext coc = session.createOperationContext(); coc.setFilterString("cmis:objectId,cmis:baseTypeId," + "cmis:name,cmis:contentStreamLength," + "cmis:contentStreamMimeType"); coc.setIncludeAcls(false); coc.setIncludeAllowableActions(true); coc.setIncludePolicies(false); coc.setIncludeRelationships(IncludeRelationships.NONE); coc.setRenditionFilterString("cmis:none"); coc.setIncludePathSegments(true); coc.setOrderBy("cmis:name"); coc.setCacheEnabled(false); coc.setMaxItemsPerPage(10); ItemIterable<CmisObject> children = folder.getChildren(coc); ItemIterable<CmisObject> page = children.skipTo(skip).getPage(10); List<CmisObject> childrenPage = new ArrayList<CmisObject>(); try { for (CmisObject child : page) { childrenPage.add(child); } } catch (CmisBaseException cbe) { throw new TheBlendException("Could not fetch children!"); } request.setAttribute("page", childrenPage); // --- determine paging links --- request.setAttribute("isFirstPage", skip == 0); request.setAttribute("isLastPage", !page.getHasMoreItems()); // --- fetch parent --- Folder parent = null; if (!folder.isRootFolder()) { parent = folder.getParents(coc).get(0); } request.setAttribute("parent", parent); // --- show browse page --- dispatch("browse.jsp", folder.getName() + ". The Blend.", request, response); } }