Package org.apache.clerezza.platform.content

Source Code of org.apache.clerezza.platform.content.CollectionTypeHandler

/*
* Copyright (c) 2008-2009 trialox.org (trialox AG, Switzerland).
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.apache.clerezza.platform.content;

import java.net.URL;
import java.util.Map;
import javax.ws.rs.GET;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;

import org.apache.clerezza.platform.content.WebDavUtils.PropertyMap;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.Service;
import org.apache.clerezza.platform.content.webdav.COPY;
import org.apache.clerezza.platform.content.webdav.LOCK;
import org.apache.clerezza.platform.content.webdav.UNLOCK;
import org.apache.clerezza.platform.typehandlerspace.SupportedTypes;
import org.apache.clerezza.platform.typerendering.RenderletManager;
import org.apache.clerezza.platform.typerendering.scalaserverpages.ScalaServerPagesRenderlet;
import org.apache.clerezza.rdf.core.MGraph;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.apache.clerezza.rdf.core.UriRef;
import org.apache.clerezza.rdf.core.impl.SimpleMGraph;
import org.apache.clerezza.rdf.ontologies.HIERARCHY;
import org.apache.clerezza.rdf.ontologies.PLATFORM;
import org.apache.clerezza.rdf.ontologies.RDF;
import org.apache.clerezza.rdf.utils.GraphNode;
import org.apache.clerezza.rdf.utils.UnionMGraph;
import org.apache.felix.scr.annotations.Services;
import org.osgi.service.component.ComponentContext;

/**
* Provides HTTP Methods for WebDav
*
* @author ali
*/

@Component
@Services({
  @Service(Object.class),
  @Service(CollectionTypeHandler.class)
})
@Property(name = "org.apache.clerezza.platform.typehandler", boolValue = true)
@SupportedTypes(types = { "http://clerezza.org/2009/09/hierarchy#Collection" }, prioritize = true)
public class CollectionTypeHandler extends DiscobitsTypeHandler{

  private Logger logger = LoggerFactory.getLogger(CollectionTypeHandler.class);
 
  @Reference
  private RenderletManager renderletManager;

  /**
   * The activate method is called when SCR activates the component configuration.
   * This method gets the system graph or create a new one if it doesn't exist.
   *
   * @param componentContext
   */
  protected void activate(ComponentContext componentContext) {
    URL templateURL = getClass().getResource("collection.ssp");
    renderletManager.registerRenderlet(ScalaServerPagesRenderlet.class.getName(),
        new UriRef(templateURL.toString()), HIERARCHY.Collection,
        "naked", MediaType.APPLICATION_XHTML_XML_TYPE, true);

    logger.info("CollectionTypeHandler activated.");
  }

  /**
   * Returns a GraphNode of the requested collection
   * @return
   */
  @GET
  @Override
  public GraphNode getResource(@Context UriInfo uriInfo) {
    final MGraph contentGraph = cgProvider.getContentGraph();
    final String uriString = uriInfo.getAbsolutePath().toString();
    final UriRef indexUri = new UriRef(uriString+"index");
    if (contentGraph.filter(indexUri, null, null).hasNext()) {
      return new GraphNode(indexUri, contentGraph);
    }
    final UriRef uri = new UriRef(uriString);
    MGraph mGraph = new UnionMGraph(new SimpleMGraph(), contentGraph);
    final GraphNode graphNode = new GraphNode(uri, mGraph);
    graphNode.addProperty(RDF.type, PLATFORM.HeadedPage);

    UriRef collectionUri = new UriRef(uriInfo.getAbsolutePath().toString());
    return graphNode;
  }

  @Override
  Map<UriRef, PropertyMap> getPropNames(GraphNode node, String depthHeader) {
    return WebDavUtils.getCollectionProps(null, null, null, node,
              depthHeader, false /* doesNotIncludeValues */);
  }

  @Override
  Map<UriRef, PropertyMap> getPropsByName(Node requestNode, GraphNode node,
      String depthHeader) {
    Map<UriRef, PropertyMap> result;
    NodeList children = requestNode.getChildNodes();
    result = WebDavUtils.getPropsByName(children, node, depthHeader,
        true /* includeValues */);
    return result;
  }

  @Override
  Map<UriRef, PropertyMap> getAllProps(GraphNode node, String depthHeader) {
    return WebDavUtils.getCollectionProps(null, null, null, node,
              depthHeader, true /* includeValues */);
  }

  /*-----------------------*
   * Not Supported Methods *
   *-----------------------*/
 
  /**
   * Locks a resource
   *
   * @return returns a 501 Not Implemented response
   */
  @LOCK
  public Object lock() {
    return Response.status(501/* Not Implemented */).build();
  }

  /**
   * Unlocks a resource
   *
   * @return returns a 501 Not Implemented response
   */
  @UNLOCK
  public Object unlock() {
    return Response.status(501/* Not Implemented */).build();
  }

  /**
   * Copies a resource
   *
   * @return returns a 501 Not Implemented response
   */
  @COPY
  public Object copy() {
    return Response.status(501/* Not Implemented */).build();
  }
TOP

Related Classes of org.apache.clerezza.platform.content.CollectionTypeHandler

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.