edu.cornell.mannlib.vitro.webapp.controller.edit.PropertyEditController.java Source code

Java tutorial

Introduction

Here is the source code for edu.cornell.mannlib.vitro.webapp.controller.edit.PropertyEditController.java

Source

/* $This file is distributed under the terms of the license in /doc/license.txt$ */

package edu.cornell.mannlib.vitro.webapp.controller.edit;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import javax.servlet.RequestDispatcher;
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.beans.EditProcessObject;
import edu.cornell.mannlib.vedit.beans.FormObject;
import edu.cornell.mannlib.vedit.beans.Option;
import edu.cornell.mannlib.vedit.controller.BaseEditController;
import edu.cornell.mannlib.vitro.webapp.auth.permissions.SimplePermission;
import edu.cornell.mannlib.vitro.webapp.beans.FauxProperty;
import edu.cornell.mannlib.vitro.webapp.beans.ObjectProperty;
import edu.cornell.mannlib.vitro.webapp.beans.Ontology;
import edu.cornell.mannlib.vitro.webapp.beans.PropertyGroup;
import edu.cornell.mannlib.vitro.webapp.beans.VClass;
import edu.cornell.mannlib.vitro.webapp.controller.Controllers;
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
import edu.cornell.mannlib.vitro.webapp.dao.ObjectPropertyDao;
import edu.cornell.mannlib.vitro.webapp.dao.PropertyGroupDao;
import edu.cornell.mannlib.vitro.webapp.dao.VClassDao;

public class PropertyEditController extends BaseEditController {

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

    @Override
    public void doPost(HttpServletRequest request, HttpServletResponse response) {
        if (!isAuthorizedToDisplayPage(request, response, SimplePermission.EDIT_ONTOLOGY.ACTION)) {
            return;
        }

        final int NUM_COLS = 26;

        VitroRequest vreq = new VitroRequest(request);

        ObjectPropertyDao propDao = vreq.getUnfilteredWebappDaoFactory().getObjectPropertyDao();
        ObjectPropertyDao propDaoLangNeut = vreq.getLanguageNeutralWebappDaoFactory().getObjectPropertyDao();
        VClassDao vcDao = vreq.getLanguageNeutralWebappDaoFactory().getVClassDao();
        VClassDao vcDaoWLang = vreq.getUnfilteredWebappDaoFactory().getVClassDao();
        PropertyGroupDao pgDao = vreq.getUnfilteredWebappDaoFactory().getPropertyGroupDao();
        ObjectProperty p = propDao.getObjectPropertyByURI(request.getParameter("uri"));
        ObjectProperty pLangNeut = propDaoLangNeut.getObjectPropertyByURI(request.getParameter("uri"));
        request.setAttribute("property", p);

        ArrayList<String> results = new ArrayList<String>();
        results.add("property"); // column 1
        results.add("parent property"); // column 2
        results.add("property group"); // column 3
        results.add("ontology"); // column 4
        results.add("RDF local name"); // column 5
        results.add("public display label"); // column 6
        results.add("domain class"); // column 7
        results.add("range class"); // column 8
        results.add("transitive"); // column 9
        results.add("symmetric"); // column 10
        results.add("functional"); // column 11
        results.add("inverse functional"); // column 12
        results.add("public description"); // column 13
        results.add("example"); // column 14
        results.add("editor description"); // column 15
        results.add("display level"); // column 16
        results.add("update level"); // column 17
        results.add("display tier"); // column 18
        results.add("display limit"); // column 15
        results.add("collate by subclass"); // column 19
        results.add("custom entry form"); // column 20
        results.add("select from existing"); // column 21
        results.add("offer create new"); // column 22
        results.add("sort direction"); // column 23
        results.add("URI"); // column 24
        results.add("publish level"); // column 25

        results.add(p.getPickListName()); // column 1

        String parentPropertyStr = "";
        if (p.getParentURI() != null) {
            ObjectProperty parent = propDao.getObjectPropertyByURI(p.getParentURI());
            if (parent != null && parent.getURI() != null) {
                try {
                    parentPropertyStr = "<a href=\"propertyEdit?uri=" + URLEncoder.encode(parent.getURI(), "UTF-8")
                            + "\">" + parent.getPickListName() + "</a>";
                } catch (UnsupportedEncodingException e) {
                    log.error(e, e);
                }
            }
        }
        results.add(parentPropertyStr); // column 2

        if (p.getGroupURI() != null) {
            PropertyGroup pGroup = pgDao.getGroupByURI(p.getGroupURI());
            if (pGroup != null) {
                results.add(pGroup.getName()); // column 3
            } else {
                results.add("(unnamed group)"); // column 3
            }
        } else {
            results.add("(unspecified)"); // column 3
        }

        String ontologyName = null;
        if (p.getNamespace() != null) {
            Ontology ont = vreq.getUnfilteredWebappDaoFactory().getOntologyDao().getOntologyByURI(p.getNamespace());
            if ((ont != null) && (ont.getName() != null)) {
                ontologyName = ont.getName();
            }
        }
        results.add(ontologyName == null ? "(not identified)" : ontologyName); // column 4

        results.add(p.getLocalName()); // column 5

        results.add(p.getDomainPublic() == null ? "(no public label)" : p.getDomainPublic()); // column 6

        String domainStr = "";
        if (pLangNeut.getDomainVClassURI() != null) {
            VClass domainClass = vcDao.getVClassByURI(pLangNeut.getDomainVClassURI());
            VClass domainWLang = vcDaoWLang.getVClassByURI(pLangNeut.getDomainVClassURI());
            if (domainClass != null && domainClass.getURI() != null && domainClass.getPickListName() != null) {
                try {
                    if (domainClass.isAnonymous()) {
                        domainStr = domainClass.getPickListName();
                    } else {
                        domainStr = "<a href=\"vclassEdit?uri=" + URLEncoder.encode(domainClass.getURI(), "UTF-8")
                                + "\">" + domainWLang.getPickListName() + "</a>";
                    }
                } catch (UnsupportedEncodingException e) {
                    log.error(e, e);
                }
            }
        }
        results.add(domainStr); // column 7

        String rangeStr = "";
        if (pLangNeut.getRangeVClassURI() != null) {
            VClass rangeClass = vcDao.getVClassByURI(pLangNeut.getRangeVClassURI());
            VClass rangeWLang = vcDaoWLang.getVClassByURI(pLangNeut.getRangeVClassURI());
            if (rangeClass != null && rangeClass.getURI() != null && rangeClass.getPickListName() != null) {
                try {
                    if (rangeClass.isAnonymous()) {
                        rangeStr = rangeClass.getPickListName();
                    } else {
                        rangeStr = "<a href=\"vclassEdit?uri=" + URLEncoder.encode(rangeClass.getURI(), "UTF-8")
                                + "\">" + rangeWLang.getPickListName() + "</a>";
                    }
                } catch (UnsupportedEncodingException e) {
                    log.error(e, e);
                }
            }
        }
        results.add(rangeStr); // column 8

        results.add(p.getTransitive() ? "true" : "false"); // column 9
        results.add(p.getSymmetric() ? "true" : "false"); // column 10
        results.add(p.getFunctional() ? "true" : "false"); // column 11
        results.add(p.getInverseFunctional() ? "true" : "false"); // column 12

        String publicDescriptionStr = (p.getPublicDescription() == null) ? "" : p.getPublicDescription();
        results.add(publicDescriptionStr); // column 13
        String exampleStr = (p.getExample() == null) ? "" : p.getExample();
        results.add(exampleStr); // column 14
        String descriptionStr = (p.getDescription() == null) ? "" : p.getDescription();
        results.add(descriptionStr); // column 15

        results.add(p.getHiddenFromDisplayBelowRoleLevel() == null ? "(unspecified)"
                : p.getHiddenFromDisplayBelowRoleLevel().getDisplayLabel()); // column 16
        results.add(p.getProhibitedFromUpdateBelowRoleLevel() == null ? "(unspecified)"
                : p.getProhibitedFromUpdateBelowRoleLevel().getUpdateLabel()); // column 17

        results.add("property: " + p.getDomainDisplayTier() + ", inverse: " + p.getRangeDisplayTier()); // column 18
        results.add("property: " + p.getDomainDisplayLimitInteger() + ", inverse: " + p.getRangeDisplayLimit());
        results.add(p.getCollateBySubclass() ? "true" : "false"); // column 19

        results.add(p.getCustomEntryForm() == null ? "(unspecified)" : p.getCustomEntryForm()); // column 20
        results.add(p.getSelectFromExisting() ? "true" : "false"); // column 21
        results.add(p.getOfferCreateNewOption() ? "true" : "false"); // column 22

        results.add(p.getDomainEntitySortDirection() == null ? "ascending" : p.getDomainEntitySortDirection()); // column 23

        results.add(p.getURI()); // column 24
        results.add(p.getHiddenFromPublishBelowRoleLevel() == null ? "(unspecified)"
                : p.getHiddenFromPublishBelowRoleLevel().getDisplayLabel()); // column 25
        request.setAttribute("results", results);
        request.setAttribute("columncount", NUM_COLS);
        request.setAttribute("suppressquery", "true");

        EditProcessObject epo = super.createEpo(request, FORCE_NEW);
        FormObject foo = new FormObject();
        HashMap<String, List<Option>> OptionMap = new HashMap<>();
        foo.setOptionLists(OptionMap);
        epo.setFormObject(foo);

        // superproperties and subproperties

        ObjectPropertyDao opDao = vreq.getUnfilteredAssertionsWebappDaoFactory().getObjectPropertyDao();
        List<ObjectProperty> superProps = getObjectPropertiesForURIList(
                opDao.getSuperPropertyURIs(p.getURI(), false), opDao);
        sortForPickList(superProps, vreq);
        request.setAttribute("superproperties", superProps);

        List<ObjectProperty> subProps = getObjectPropertiesForURIList(opDao.getSubPropertyURIs(p.getURI()), opDao);
        sortForPickList(subProps, vreq);
        request.setAttribute("subproperties", subProps);

        // equivalent properties and faux properties 

        List<ObjectProperty> eqProps = getObjectPropertiesForURIList(opDao.getEquivalentPropertyURIs(p.getURI()),
                opDao);
        sortForPickList(eqProps, vreq);
        request.setAttribute("equivalentProperties", eqProps);

        List<FauxProperty> fauxProps = vreq.getUnfilteredAssertionsWebappDaoFactory().getFauxPropertyDao()
                .getFauxPropertiesForBaseUri(p.getURI());
        sortForPickList(fauxProps, vreq);
        request.setAttribute("fauxproperties", fauxProps);

        RequestDispatcher rd = request.getRequestDispatcher(Controllers.BASIC_JSP);
        request.setAttribute("epoKey", epo.getKey());
        request.setAttribute("propertyWebapp", p);
        request.setAttribute("bodyJsp", "/templates/edit/specific/props_edit.jsp");
        request.setAttribute("title", "Object Property Control Panel");
        request.setAttribute("css", "<link rel=\"stylesheet\" type=\"text/css\" href=\""
                + vreq.getAppBean().getThemeDir() + "css/edit.css\"/>");

        try {
            rd.forward(request, response);
        } catch (Exception e) {
            log.error("PropertyEditController could not forward to view.");
            log.error(e.getMessage());
            log.error(e.getStackTrace());
        }

    }

    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response) {
        doPost(request, response);
    }

    private List<ObjectProperty> getObjectPropertiesForURIList(List<String> propertyURIs, ObjectPropertyDao opDao) {
        List<ObjectProperty> properties = new ArrayList<ObjectProperty>();
        for (String propertyURI : propertyURIs) {
            ObjectProperty property = opDao.getObjectPropertyByURI(propertyURI);
            if (property != null) {
                properties.add(property);
            }
        }
        return properties;
    }

}