/** * 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; import org.apache.abdera.model.Collection; import org.apache.abdera.protocol.server.CategoriesInfo; import org.apache.abdera.protocol.server.CollectionInfo; import org.apache.abdera.protocol.server.RequestContext; import java.net.URI; import javax.ws.rs.core.UriBuilder; /** * Provides information used to construct an app:collection element. Such * element will be add in Atompub Service Document (section 3.6 of CMIS * specification). * * @author <a href="mailto:andrew00x@gmail.com">Andrey Parfonov</a> * @version $Id$ */ class CmisCollectionInfo implements CollectionInfo { private static final String[] accept = new String[]{AtomCMIS.MEDIATYPE_ATOM_ENTRY}; private static final CategoriesInfo[] noCategories = new CategoriesInfo[0]; private static final String[] noSegments = new String[0]; private final String title; private final String relativeHref; private final String collectionType; CmisCollectionInfo(String title, String relativeHref, String collectionType) { this.title = title; this.relativeHref = relativeHref; this.collectionType = collectionType; } /** * {@inheritDoc} */ public Collection asCollectionElement(RequestContext request) { throw new UnsupportedOperationException(); } /** * Convert this to an instance of the FOM Collection interface. * * @param request request * @param baseUri base URI. It will be used to provider href attribute in * collection element * @param segments additional path segments. It will be used in href * attribute of collection element, e.g. * <code>baseUri + relativeHref + segments</code> * @return collection element */ public Collection asCollectionElement(RequestContext request, String baseUri, String... segments) { Collection collection = request.getAbdera().getFactory().newCollection(); collection.setHref(getHref(request, baseUri, segments)); collection.setTitle(getTitle(request)); collection.addSimpleExtension(AtomCMIS.COLLECTION_TYPE, collectionType); return collection; } /** * {@inheritDoc} */ public String[] getAccepts(RequestContext request) { return accept; } /** * {@inheritDoc} */ public CategoriesInfo[] getCategoriesInfo(RequestContext request) { return noCategories; } /** * CMIS collection type. * * @return collection type */ public String getCollectionType() { return collectionType; } /** * {@inheritDoc} */ public String getHref(RequestContext request) { throw new UnsupportedOperationException(); } /** * Get the value of the app:collection element's href attribute. * * @param request request * @param baseUri base URI. It will be used to provider href attribute in * collection element * @param segments additional path segments. It will be used in href * attribute of collection element, e.g. * <code>baseUri + relativeHref + segments</code> * @return href attribute of collection element */ public String getHref(RequestContext request, String baseUri, String... segments) { URI uri = UriBuilder.fromUri(baseUri).path(relativeHref).segment(segments == null ? noSegments : segments).build(); return uri.toString(); } /** * {@inheritDoc} */ public String getTitle(RequestContext request) { return title; } }