edu.cornell.mannlib.vitro.webapp.sparql.GetClazzAllProperties.java Source code

Java tutorial

Introduction

Here is the source code for edu.cornell.mannlib.vitro.webapp.sparql.GetClazzAllProperties.java

Source

/* $This file is distributed under the terms of the license in /doc/license.txt$ */
package edu.cornell.mannlib.vitro.webapp.sparql;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import edu.cornell.mannlib.vedit.controller.BaseEditController;
import edu.cornell.mannlib.vitro.webapp.auth.permissions.SimplePermission;
import edu.cornell.mannlib.vitro.webapp.beans.DataProperty;
import edu.cornell.mannlib.vitro.webapp.beans.ObjectProperty;
import edu.cornell.mannlib.vitro.webapp.beans.PropertyInstance;
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
import edu.cornell.mannlib.vitro.webapp.dao.DataPropertyDao;
import edu.cornell.mannlib.vitro.webapp.dao.ObjectPropertyDao;
import edu.cornell.mannlib.vitro.webapp.dao.PropertyInstanceDao;
import edu.cornell.mannlib.vitro.webapp.dao.VClassDao;

/**
 * This servlet gets all the properties for a given subject.
 * 
 * @param vClassURI
 * @author yuysun
 */

public class GetClazzAllProperties extends BaseEditController {

    private static final Log log = LogFactory.getLog(GetClazzAllProperties.class);

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        if (!isAuthorizedToDisplayPage(request, response, SimplePermission.USE_MISCELLANEOUS_PAGES.ACTION)) {
            return;
        }

        VitroRequest vreq = new VitroRequest(request);

        String vClassURI = vreq.getParameter("vClassURI");
        if (vClassURI == null || vClassURI.trim().equals("")) {
            return;
        }

        Map<String, String> hm = new HashMap();

        // Get Data Properties
        // Add rdfs:label to the list
        hm.put("label", "http://www.w3.org/2000/01/rdf-schema#label0");
        /*
         * respo += "<option>" + "<key>" + "label" + "</key>" + "<value>" +
         * "http://www.w3.org/2000/01/rdf-schema#label" + "</value>" +
         * "<type>0</type>" + "</option>";
         */
        DataPropertyDao ddao = vreq.getUnfilteredWebappDaoFactory().getDataPropertyDao();

        Collection<DataProperty> dataProps = ddao.getDataPropertiesForVClass(vClassURI);
        Iterator<DataProperty> dataPropIt = dataProps.iterator();
        HashSet<String> dpropURIs = new HashSet<String>();
        while (dataPropIt.hasNext()) {
            DataProperty dp = dataPropIt.next();
            if (!(dpropURIs.contains(dp.getURI()))) {
                dpropURIs.add(dp.getURI());
                DataProperty dprop = (DataProperty) ddao.getDataPropertyByURI(dp.getURI());
                if (dprop != null) {
                    if (dprop.getLocalName() != null || !dprop.getLocalName().equals("")) {
                        hm.put(dprop.getLocalName(), dprop.getURI() + "0");
                    }
                    /*
                     * respo += "<option>" + "<key>" + dprop.getLocalName() +
                     * "</key>" + "<value>" + dprop.getURI() + "</value>" +
                     * "<type>0</type>" + "</option>";
                     */
                }
            }
        }

        // Get Object Properties

        ObjectPropertyDao odao = vreq.getUnfilteredWebappDaoFactory().getObjectPropertyDao();
        PropertyInstanceDao piDao = vreq.getUnfilteredWebappDaoFactory().getPropertyInstanceDao();
        VClassDao vcDao = vreq.getUnfilteredWebappDaoFactory().getVClassDao();

        // incomplete list of classes to check, but better than before
        List<String> superclassURIs = vcDao.getAllSuperClassURIs(vClassURI);
        superclassURIs.add(vClassURI);
        superclassURIs.addAll(vcDao.getEquivalentClassURIs(vClassURI));

        Map<String, PropertyInstance> propInstMap = new HashMap<String, PropertyInstance>();
        for (String classURI : superclassURIs) {
            Collection<PropertyInstance> propInsts = piDao.getAllPropInstByVClass(classURI);
            try {
                for (PropertyInstance propInst : propInsts) {
                    propInstMap.put(propInst.getPropertyURI(), propInst);
                }
            } catch (NullPointerException ex) {
                continue;
            }
        }
        List<PropertyInstance> propInsts = new ArrayList<PropertyInstance>();
        propInsts.addAll(propInstMap.values());
        Collections.sort(propInsts);

        Iterator propInstIt = propInsts.iterator();
        HashSet opropURIs = new HashSet();
        while (propInstIt.hasNext()) {
            PropertyInstance pi = (PropertyInstance) propInstIt.next();
            if (!(opropURIs.contains(pi.getPropertyURI()))) {
                opropURIs.add(pi.getPropertyURI());
                ObjectProperty oprop = (ObjectProperty) odao.getObjectPropertyByURI(pi.getPropertyURI());
                if (oprop != null) {
                    /*
                     * respo += "<option>" + "<key>" + oprop.getLocalName() +
                     * "</key>" + "<value>" + oprop.getURI() + "</value>" +
                     * "<type>1</type>" + "</option>";
                     */
                    if (oprop.getLocalName() != null || !oprop.getLocalName().equals("")) {
                        hm.put(oprop.getLocalName(), oprop.getURI() + "1");
                    }

                }
            }
        }
        String respo = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
        respo += "<options>";
        Object[] keys = hm.keySet().toArray();
        Arrays.sort(keys);
        for (int i = 0; i < keys.length; i++) {
            String key = (String) keys[i];
            String value = hm.get(key);

            respo += "<option>" + "<key>" + key + "</key>" + "<value>" + value.substring(0, value.length() - 1)
                    + "</value>" + "<type>" + value.charAt(value.length() - 1) + "</type>" + "</option>";
        }
        respo += "</options>";
        response.setContentType("text/xml");
        response.setCharacterEncoding("UTF-8");
        PrintWriter out = response.getWriter();

        out.println(respo);
        out.flush();
        out.close();
    }

    /**
     * The doPost method of the servlet. <br>
     * 
     * This method is called when a form has its tag value method equals to
     * post.
     * 
     * @param request
     *            the request send by the client to the server
     * @param response
     *            the response send by the server to the client
     * @throws ServletException
     *             if an error occurred
     * @throws IOException
     *             if an error occurred
     */
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        doGet(request, response);
    }
}