Package org.openrdf.http.server.resources

Source Code of org.openrdf.http.server.resources.MetaDataResource

/*
* Copyright Aduna (http://www.aduna-software.com/) (c) 2009.
*
* Licensed under the Aduna BSD-style license.
*/
package org.openrdf.http.server.resources;

import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.net.URL;

import org.restlet.Context;
import org.restlet.data.MediaType;
import org.restlet.Request;
import org.restlet.Response;
import org.restlet.representation.Representation;
import org.restlet.resource.ResourceException;

import org.openrdf.http.protocol.Protocol;
import org.openrdf.http.server.representations.ModelRepresentation;
import org.openrdf.http.server.resources.helpers.StatementResultResource;
import org.openrdf.model.LiteralFactory;
import org.openrdf.model.Model;
import org.openrdf.model.URI;
import org.openrdf.model.URIFactory;
import org.openrdf.model.impl.LinkedHashModel;
import org.openrdf.query.QueryLanguage;
import org.openrdf.repository.Repository;
import org.openrdf.repository.RepositoryMetaData;
import org.openrdf.rio.RDFFormat;
import org.openrdf.rio.RDFWriterFactory;
import org.openrdf.store.Isolation;

/**
* @author Arjohn Kampman
*/
public class MetaDataResource extends StatementResultResource {

  protected final Representation getRepresentation(RDFWriterFactory factory, MediaType mediaType)
    throws ResourceException
  {
    try {
      BeanInfo info = Introspector.getBeanInfo(RepositoryMetaData.class);
      PropertyDescriptor[] properties = info.getPropertyDescriptors();

      Repository repository = getRepository();
      RepositoryMetaData data = repository.getMetaData();
      URIFactory uf = repository.getURIFactory();
      LiteralFactory lf = repository.getLiteralFactory();

      URI subj = uf.createURI(getRequest().getResourceRef().toString(false, false));

      Model model = new LinkedHashModel();
      for (PropertyDescriptor p : properties) {
        Object o = p.getReadMethod().invoke(data);
        if (o instanceof Object[]) {
          for (Object e : (Object[])o) {
            add(model, subj, uf, p.getName(), lf, e);
          }
        }
        else {
          add(model, subj, uf, p.getName(), lf, o);
        }
      }

      for (Isolation isolation : Isolation.values()) {
        if (data.supportsIsolation(isolation)) {
          add(model, subj, uf, "supportsIsolation", lf, isolation);
        }
      }

      return new ModelRepresentation(model, factory, mediaType);
    }
    catch (Exception e) {
      throw new ResourceException(e);
    }
  }

  @Override
  protected String getFilenamePrefix() {
    return "metadata";
  }

  private void add(Model model, URI subj, URIFactory uf, String name, LiteralFactory lf, Object o) {
    if (o == null) {
      return;
    }
    URI pred = uf.createURI(Protocol.METADATA_NAMESPACE, name);
    if (o instanceof String) {
      model.add(subj, pred, lf.createLiteral((String)o));
    }
    else if (o instanceof Boolean) {
      model.add(subj, pred, lf.createLiteral((Boolean)o));
    }
    else if (o instanceof Integer) {
      model.add(subj, pred, lf.createLiteral((Integer)o));
    }
    else if (o instanceof URL) {
      model.add(subj, pred, uf.createURI(((URL)o).toExternalForm()));
    }
    else if (o instanceof QueryLanguage) {
      model.add(subj, pred, uf.createURI(Protocol.METADATA_NAMESPACE, ((QueryLanguage)o).getName()));
    }
    else if (o instanceof RDFFormat) {
      model.add(subj, pred, uf.createURI(Protocol.METADATA_NAMESPACE, ((RDFFormat)o).getName()));
    }
    else if (o instanceof Isolation) {
      model.add(subj, pred, uf.createURI(Protocol.METADATA_NAMESPACE, o.toString()));
    }
    else {
      throw new AssertionError("Unsupported type: " + o.getClass());
    }
  }
}
TOP

Related Classes of org.openrdf.http.server.resources.MetaDataResource

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.