/** * Copyright (C) 2010 eXo Platform SAS. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.xcmis.restatom.collections; import org.apache.abdera.i18n.iri.IRI; import org.apache.abdera.model.Element; import org.apache.abdera.model.Entry; import org.apache.abdera.model.Feed; import org.apache.abdera.protocol.server.RequestContext; import org.apache.abdera.protocol.server.context.ResponseContextException; import org.xcmis.restatom.AtomCMIS; import org.xcmis.spi.CmisConstants; import org.xcmis.spi.Connection; import org.xcmis.spi.FilterNotValidException; import org.xcmis.spi.InvalidArgumentException; import org.xcmis.spi.ObjectNotFoundException; import org.xcmis.spi.model.CmisObject; import java.util.List; /** * Collection of all versions of document. * * @author <a href="mailto:alexey.zavizionov@exoplatform.com.ua">Alexey * Zavizionov</a> * @version $Id: AllVersionsCollection.java 216 2010-02-12 17:19:50Z andrew00x $ */ public class AllVersionsCollection extends CmisObjectCollection { public AllVersionsCollection(Connection connection) { super(connection); setHref("/versions"); } /** * {@inheritDoc} */ protected void addFeedDetails(Feed feed, RequestContext request) throws ResponseContextException { try { String objectId = getId(request); String propertyFilter = request.getParameter(AtomCMIS.PARAM_FILTER); boolean includeAllowableActions = getBooleanParameter(request, AtomCMIS.PARAM_INCLUDE_ALLOWABLE_ACTIONS, false); int maxItems = getIntegerParameter(request, AtomCMIS.PARAM_MAX_ITEMS, CmisConstants.MAX_ITEMS); int skipCount = getIntegerParameter(request, AtomCMIS.PARAM_SKIP_COUNT, CmisConstants.SKIP_COUNT); Connection connection = getConnection(request); List<CmisObject> list = connection.getAllVersions(objectId, includeAllowableActions, true, propertyFilter); if (list.size() > 0) { // add cmisra:numItems Element numItems = feed.addExtension(AtomCMIS.NUM_ITEMS); numItems.setText(Integer.toString(list.size())); //Paging inks addPageLinks(objectId, feed, "versions", maxItems, skipCount, list.size(), (skipCount + maxItems) < list .size(), request); for (CmisObject one : list) { Entry entry = feed.addEntry(); IRI feedIri = new IRI(getFeedIriForEntry(one, request)); addEntryDetails(request, entry, feedIri, one); } } } catch (FilterNotValidException fe) { throw new ResponseContextException(createErrorResponse(fe, 400)); } catch (ObjectNotFoundException onfe) { throw new ResponseContextException(createErrorResponse(onfe, 404)); } catch (InvalidArgumentException iae) { throw new ResponseContextException(createErrorResponse(iae, 400)); } catch (Exception t) { throw new ResponseContextException(createErrorResponse(t, 500)); } } /** * {@inheritDoc} */ public Iterable<CmisObject> getEntries(RequestContext request) throws ResponseContextException { // To process hierarchically structure override addFeedDetails(Feed, RequestContext) method. throw new UnsupportedOperationException("versions"); } /** * {@inheritDoc} */ public String getTitle(RequestContext request) { return "All versions."; } /** * Get version series id. * * @param request request context * @return versionSeriesid string */ @Override public String getId(RequestContext request) { return request.getTarget().getParameter("versionSeriesId"); } }